diff --git a/README.md b/README.md
index 8b10e6960..6864725ce 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-# odex25-standard-moduless
+# odex25-standard-modules
This Repo contains general standard modules for all projects.
diff --git a/odex25_purchase/exp_analytic/__init__.py b/odex25_purchase/exp_analytic/__init__.py
new file mode 100644
index 000000000..5305644df
--- /dev/null
+++ b/odex25_purchase/exp_analytic/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/exp_analytic/__manifest__.py b/odex25_purchase/exp_analytic/__manifest__.py
new file mode 100644
index 000000000..501f07525
--- /dev/null
+++ b/odex25_purchase/exp_analytic/__manifest__.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Analytic account in hr department",
+ 'version': '14.0.1',
+ 'category': 'HR-Odex25',
+ 'author': 'Expert Co. Ltd.',
+ 'website': 'http://exp-sa.com',
+ 'depends': ['hr','analytic'],
+
+ # any module necessary for this one to work correctly
+
+ # always loaded
+ 'data': [
+ 'views/views.xml',
+
+ ]
+}
diff --git a/odex25_purchase/exp_analytic/i18n/ar_001.po b/odex25_purchase/exp_analytic/i18n/ar_001.po
new file mode 100644
index 000000000..a40cecf17
--- /dev/null
+++ b/odex25_purchase/exp_analytic/i18n/ar_001.po
@@ -0,0 +1,41 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * exp_analytic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-01-04 08:00+0000\n"
+"PO-Revision-Date: 2023-01-04 08:00+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department__analytic_account_id
+msgid "Analytic Account"
+msgstr "الحساب التحليلي"
+
+#. module: exp_analytic
+#: model:ir.model,name:exp_analytic.model_hr_department
+msgid "Department"
+msgstr "القسم"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
diff --git a/odex25_purchase/exp_analytic/models/__init__.py b/odex25_purchase/exp_analytic/models/__init__.py
new file mode 100644
index 000000000..cde864bae
--- /dev/null
+++ b/odex25_purchase/exp_analytic/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
diff --git a/odex25_purchase/exp_analytic/models/models.py b/odex25_purchase/exp_analytic/models/models.py
new file mode 100644
index 000000000..d6b76851e
--- /dev/null
+++ b/odex25_purchase/exp_analytic/models/models.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields
+class HrDepartment(models.Model):
+ _inherit = 'hr.department'
+
+ analytic_account_id = fields.Many2one('account.analytic.account',
+ 'Analytic Account')
diff --git a/odex25_purchase/exp_analytic/views/views.xml b/odex25_purchase/exp_analytic/views/views.xml
new file mode 100644
index 000000000..85f30f438
--- /dev/null
+++ b/odex25_purchase/exp_analytic/views/views.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ hr.department.analytic.inherit.form
+
+ hr.department
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/exp_dept_analytic_purchase/__init__.py b/odex25_purchase/exp_dept_analytic_purchase/__init__.py
new file mode 100644
index 000000000..5305644df
--- /dev/null
+++ b/odex25_purchase/exp_dept_analytic_purchase/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/exp_dept_analytic_purchase/__manifest__.py b/odex25_purchase/exp_dept_analytic_purchase/__manifest__.py
new file mode 100644
index 000000000..6bb236edc
--- /dev/null
+++ b/odex25_purchase/exp_dept_analytic_purchase/__manifest__.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Analytic account in hr department",
+ 'version': '14.0.1',
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'author': 'Expert Co. Ltd.',
+ 'website': 'http://exp-sa.com',
+ 'depends': ['hr','analytic'],
+
+ # any module necessary for this one to work correctly
+
+ # always loaded
+ 'data': [
+ 'views/views.xml',
+
+ ]
+}
diff --git a/odex25_purchase/exp_dept_analytic_purchase/i18n/ar_001.po b/odex25_purchase/exp_dept_analytic_purchase/i18n/ar_001.po
new file mode 100644
index 000000000..a40cecf17
--- /dev/null
+++ b/odex25_purchase/exp_dept_analytic_purchase/i18n/ar_001.po
@@ -0,0 +1,41 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * exp_analytic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-01-04 08:00+0000\n"
+"PO-Revision-Date: 2023-01-04 08:00+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department__analytic_account_id
+msgid "Analytic Account"
+msgstr "الحساب التحليلي"
+
+#. module: exp_analytic
+#: model:ir.model,name:exp_analytic.model_hr_department
+msgid "Department"
+msgstr "القسم"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: exp_analytic
+#: model:ir.model.fields,field_description:exp_analytic.field_hr_department____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
diff --git a/odex25_purchase/exp_dept_analytic_purchase/models/__init__.py b/odex25_purchase/exp_dept_analytic_purchase/models/__init__.py
new file mode 100644
index 000000000..cde864bae
--- /dev/null
+++ b/odex25_purchase/exp_dept_analytic_purchase/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
diff --git a/odex25_purchase/exp_dept_analytic_purchase/models/models.py b/odex25_purchase/exp_dept_analytic_purchase/models/models.py
new file mode 100644
index 000000000..d6b76851e
--- /dev/null
+++ b/odex25_purchase/exp_dept_analytic_purchase/models/models.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields
+class HrDepartment(models.Model):
+ _inherit = 'hr.department'
+
+ analytic_account_id = fields.Many2one('account.analytic.account',
+ 'Analytic Account')
diff --git a/odex25_purchase/exp_dept_analytic_purchase/views/views.xml b/odex25_purchase/exp_dept_analytic_purchase/views/views.xml
new file mode 100644
index 000000000..85f30f438
--- /dev/null
+++ b/odex25_purchase/exp_dept_analytic_purchase/views/views.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ hr.department.analytic.inherit.form
+
+ hr.department
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/__init__.py b/odex25_purchase/governmental_purchase/__init__.py
new file mode 100644
index 000000000..35e7c9600
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import models
+from . import wizard
diff --git a/odex25_purchase/governmental_purchase/__manifest__.py b/odex25_purchase/governmental_purchase/__manifest__.py
new file mode 100644
index 000000000..580d650e6
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/__manifest__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-# -*- coding: utf-8 -*-
+{
+ 'name': 'Purchase Customizations For Governmental projects',
+ 'version': '1.1',
+ 'summary': 'Customize Purchase ',
+ 'sequence': -1,
+ 'author': "Expert Co Ltd",
+ 'website': "http://www.ex.com",
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'description': """
+ """,
+ 'data': [
+ 'security/security.xml',
+ 'security/ir.model.access.csv',
+ 'data/cron_data.xml',
+ 'views/purchase_request_views.xml',
+ 'views/purchase_order_views.xml',
+ # 'views/res_setting.xml',
+ 'views/budget_confirmation_view.xml',
+ 'wizard/convert_to_contract.xml',
+ ],
+ 'depends': ['purchase_requisition_custom'],
+ 'installable': True,
+ 'application': False,
+}
diff --git a/odex25_purchase/governmental_purchase/data/cron_data.xml b/odex25_purchase/governmental_purchase/data/cron_data.xml
new file mode 100644
index 000000000..48ef99ed8
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/data/cron_data.xml
@@ -0,0 +1,15 @@
+
+
+
+ PO Contract Auto Notification
+
+ code
+ model.cron_po_auto_notify()
+
+ 1
+ days
+ -1
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/data/mail_template.xml b/odex25_purchase/governmental_purchase/data/mail_template.xml
new file mode 100644
index 000000000..2888df4a5
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/data/mail_template.xml
@@ -0,0 +1,18 @@
+
+
+
+ PO Auto Notify
+
+
+ ${object.responsible_id.partner_id.email}
+ Po Auto Notify
+ Dear ${object.responsible_id.name},
+ ${object.contract_name} Will Be Expired
+IN Purchase order: ${object.name}
+Vendor: ${object.partner_id.name}
+End Date: ${object.end_date}
+
+ ]]>
+
+
\ No newline at end of file
diff --git a/odex25_purchase/governmental_purchase/i18n/ar_001.po b/odex25_purchase/governmental_purchase/i18n/ar_001.po
new file mode 100644
index 000000000..74615b97b
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/i18n/ar_001.po
@@ -0,0 +1,816 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * governmental_purchase
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-28 10:14+0000\n"
+"PO-Revision-Date: 2023-09-28 10:14+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__strategic_objective__e_d_p
+msgid "3.1.1 Ease of doing business"
+msgstr "3.1.1 تسهيل ممارسة الأعمال"
+
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__strategic_objective__a_f_d_i
+msgid "3.1.6 Attracting foreign direct investment"
+msgstr "3.1.6 جذب الاستثمارات الأجنبية المباشرة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__strategic_objective__d_r_s
+msgid "3.3.5 Development of the retail sector"
+msgstr "3.3.5 تطوير قطاع التجزئة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__strategic_objective__i_c_e
+msgid "4.3.2 Increasing SMEs contribution to the economy"
+msgstr "4.3.2 زيادة مساهمة الشركات الصغيرة والمتوسطة في الاقتصاد"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_requisition_custom_setting
+msgid "Activate Budget check in purchase"
+msgstr "تفعيل التحقق من الميزانية في الشراء"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__activities
+msgid "Activities"
+msgstr "الأنشطة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__activity_description
+msgid "Activity Description"
+msgstr "وصف النشاط"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__cso_agreed
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__cso_agreed__agreed
+msgid "Agreed"
+msgstr "موافق"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Aligned with the scope of the draft national strategy"
+msgstr "التأكد مع نطاق الاستراتيجية "
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__alternative_offer_allowed
+msgid "Alternative Offer Allowed ?"
+msgstr "يسمح بالعرض البديل؟"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__applying_address
+msgid "Applying Address"
+msgstr "عنوان تقديم الضمان"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Approve"
+msgstr "إعتماد"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_order_governmental_form_view
+msgid "Are you sure you want to process ?"
+msgstr "هل أنت متأكد بهذا الاجراء؟"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__attachment_scope_project
+msgid "Attachment Scope Project"
+msgstr "نطاق عمل المشروع "
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__auto_notification
+msgid "Auto Notification"
+msgstr "اشعار آلي"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_order__billed_amount
+msgid "Billed Amount"
+msgstr "المبلغ المفوتر"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__body_technical
+msgid "Body Technical"
+msgstr "اسم الجهة الفنية"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_requisition_custom_setting
+msgid "Booklet"
+msgstr "الكراسة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__ceo_purchase
+msgid "Manager OF Purchasing And Contract"
+msgstr "المدير التنفيذي للمشتريات والعقود"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Can't Confirm Request With No Item!"
+msgstr ""
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__cancel
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.convert_to_contract_po_wizard
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__classify_des
+msgid "Classify"
+msgstr "توضيح"
+
+#. module: governmental_purchase
+#: model:ir.model,name:governmental_purchase.model_res_company
+msgid "Companies"
+msgstr "المؤسسات"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__company_id
+msgid "Company"
+msgstr "المؤسسة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__cso_compatible
+msgid "Compatible"
+msgstr "موائم للنطاق"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__cso_compatible__compatible
+msgid "Compatible with scope"
+msgstr "غير موائم للنطاق"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__competion_description
+msgid "Competion Description"
+msgstr "وصف المنافسة"
+
+#. module: governmental_purchase
+#: model:ir.model,name:governmental_purchase.model_res_config_settings
+msgid "Config Settings"
+msgstr "ضبط الاعدادات"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_order_governmental_form_view
+msgid "Confirm Order"
+msgstr "تأكيد الأمر"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.convert_to_contract_po_wizard
+msgid "Contract Information"
+msgstr "معلومات العقد"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__contract_name
+msgid "Contract Name"
+msgstr "اسم العقد"
+
+#. module: governmental_purchase
+#: model:ir.model,name:governmental_purchase.model_convert_po_contract_wizard
+msgid "Convert Contract wizard"
+msgstr "معالج تحويل العقد"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.convert_to_contract_po_wizard
+msgid "Convert To Contract"
+msgstr "تحويل إلى عقد"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Create Date: "
+msgstr "تاريخ الإنشاء"
+
+#. module: governmental_purchase
+#: model_terms:ir.actions.act_window,help:governmental_purchase.purchase_type_contract_action
+msgid "Create New a Purchase Contract"
+msgstr "إنشاء عقد مشتريات جديد"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Create Purchase Order"
+msgstr "إنشاء أمر الشراء"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Create Requisition"
+msgstr "انشاء طلب شراء (عروض اسعار)"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__date_time
+msgid "Date and Time"
+msgstr "التاريخ والوقت"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__convert_po_contract_wizard__period_type__day
+msgid "Day(s)"
+msgstr "يوم(أيام)"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Delivery Info"
+msgstr "معلومات التسليم"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__Delivery_place
+msgid "Delivery_place"
+msgstr "مكان التسليم"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Deparments Use"
+msgstr "الإدارة الطالبة"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Deparments Use Base info"
+msgstr "المعلومات الأساسية للطلب"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__display_name
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_order__display_name
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__display_name
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_company__display_name
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_config_settings__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__is_delivered
+msgid "Do samples need to delivered"
+msgstr "هل يتطلب تسليم عينات؟"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__document_cost
+msgid "Document cost"
+msgstr "قيمة الوثائق"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__done
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Done"
+msgstr "تم"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__draft
+msgid "Draft"
+msgstr "مبدئي"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__budget_approve
+msgid "Budget Approved"
+msgstr "إعتماد الإرتباط المبدئي"
+
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__end_date
+msgid "End Date"
+msgstr "تاريخ النهاية"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "First Budget Check"
+msgstr "ارسال للارتباط المبدئي"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__delivery_floor
+msgid "Floor"
+msgstr "الطابق"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "For technical management use"
+msgstr "الادراة الفنية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__id
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_order__id
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__id
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_company__id
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_config_settings__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__waiting
+msgid "Procurement Department"
+msgstr "إدارة المشتريات"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__cso_compatible__incompatible
+msgid "Incompatible with scope "
+msgstr "غير موائم للنطاق"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__initial_guarantee_percentage
+msgid "Initial Guarantee Percentage (%)"
+msgstr "نسبة الضمان الابتدائي (%)"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__initiative_end_date
+msgid "Initiative End Date"
+msgstr "تاريخ انتهاء المبادرة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__initiative_name
+msgid "Initiative Name"
+msgstr "اسم المبادرة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__Delivery_place__inside
+msgid "Inside Saudi Arabia"
+msgstr "داخل المملكة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__is_competition_divisible
+msgid "Is Competition Divisible?"
+msgstr "هل المنافسة قابلة للتجزئة؟"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard____last_update
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_order____last_update
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request____last_update
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_company____last_update
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_config_settings____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__list_documentaries
+msgid "List documentaries"
+msgstr "قائمة الوثائق"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__convert_po_contract_wizard__period_type__month
+msgid "Month(s)"
+msgstr "شهر (شهور) "
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__is_delivered__no
+msgid "NO"
+msgstr "لا"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__alternative_offer_allowed__no
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__is_competition_divisible__no
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__pre_qualification__no
+msgid "No"
+msgstr "لا"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__cso_agreed__not_agreed
+msgid "Not Agreed"
+msgstr "غير موافق"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__notify_before
+msgid "Notify Before"
+msgstr "إشعار قبل"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.convert_to_contract_po_wizard
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_order_governmental_form_view
+msgid "Notify Before End"
+msgstr "إشعار قبل الانتهاء"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/wizard/convert_to_contract.py:0
+#, python-format
+msgid "Notify Before End Should Be Greater Than Zero"
+msgstr ""
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__budget_scope__other
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__strategic_objective__other
+msgid "Other"
+msgstr "اخرى"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__other_strategic_objective
+msgid "Other Strategic objective"
+msgstr "هدف استراتيجي آخر"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__other_details
+msgid "Other details"
+msgstr "تفاصيل أخرى"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__Delivery_place__out
+msgid "Out of Saudi Arabia"
+msgstr "خارج المملكة"
+
+#. module: governmental_purchase
+#: model:ir.actions.server,name:governmental_purchase.purchase_order_auto_notify_cron_job_ir_actions_server
+#: model:ir.cron,cron_name:governmental_purchase.purchase_order_auto_notify_cron_job
+#: model:ir.cron,name:governmental_purchase.purchase_order_auto_notify_cron_job
+msgid "PO Contract Auto Notification"
+msgstr "اشعار آلي للعقد"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_order_governmental_form_view
+msgid "PO To Contract"
+msgstr "تحويل امر الشراء الى عقد"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__period_type
+msgid "Period Type"
+msgstr "نوع الفترة"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Please Select department for employee"
+msgstr "الرجاء إختيار قسم للموظف"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__pre_qualification
+msgid "Pre-Qualification Linked ?"
+msgstr "مربوط بتأهيل مسبق؟"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Procurement use"
+msgstr "استخدام إدارة المشتريات"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__program_action
+msgid "Program of action"
+msgstr "برنامج العمل"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__project_duration
+msgid "Project Duration"
+msgstr "مدة تنفيذ المشروع"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Project Location"
+msgstr "موقع المشروع"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__project_name
+msgid "Project Name"
+msgstr "اسم المشروع"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__purchase_id
+msgid "Purchase"
+msgstr "الشراء"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_requisition_custom_setting
+msgid "Purchase Booklet"
+msgstr "الكراسة الالكترونية"
+
+#. module: governmental_purchase
+#: model:ir.actions.act_window,name:governmental_purchase.purchase_type_contract_action
+#: model:ir.ui.menu,name:governmental_purchase.purchase_type_contract_menu
+msgid "Purchase Contracts"
+msgstr "عقود الشراء"
+
+#. module: governmental_purchase
+#: model:ir.model,name:governmental_purchase.model_purchase_order
+msgid "Purchase Order"
+msgstr "أوامر الشراء المؤكدة"
+
+#. module: governmental_purchase
+#: model:ir.model,name:governmental_purchase.model_purchase_request
+msgid "Purchase Request"
+msgstr "طلبات الشراء"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Purchase Request Approve"
+msgstr "اعتماد طلبات شراء الإدارات"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Purchase Request Confirmation By Direct Managr"
+msgstr "صلاحية طلبات الشراء لمدراء الادارات"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__purpose_of_tender
+msgid "Purpose of Tender"
+msgstr "الغرض من المشروع"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_order_governmental_form_view
+msgid "Recommend"
+msgstr "العرض الموصي به"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__refuse
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Refuse"
+msgstr "رفض"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_order__remaining_amount
+msgid "Remaining Amount"
+msgstr "المتبقي للفوترة"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Requesting ِAdministration"
+msgstr "لإستخدام الإدارة الطالبة"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Reset To Draft"
+msgstr "ارجاع الى مبــدئي"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__responsible_id
+msgid "Responsible"
+msgstr "المسؤول"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__samples_delivery_address
+msgid "Samples Address"
+msgstr "عنوان تسليم العينات"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.convert_to_contract_po_wizard
+msgid "Save"
+msgstr "حفظ"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Send"
+msgstr "إرسال"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__send_budget
+msgid "Send to Budget Confirmation"
+msgstr "إرسال للإرتباط المبدئي"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__is_direct_manager
+msgid "Sent Technical Department"
+msgstr "إرسال للإدارة الفنية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_convert_po_contract_wizard__start_date
+msgid "Start Date"
+msgstr "تاريخ البداية"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/wizard/convert_to_contract.py:0
+#, python-format
+msgid "Start Date Should Be Less Than End Date"
+msgstr ""
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__state
+msgid "State"
+msgstr "الحالة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__strategic_objective
+msgid "Strategic Objective"
+msgstr "الهدف الاستراتيجي"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Strategy Management Use"
+msgstr "لإستخدام الاستراتجية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__sub_project
+msgid "Sub Project"
+msgstr "اسم المشروع الفرعي"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "Submit"
+msgstr "إعتماد"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__direct_manager
+msgid "Technical Department"
+msgstr "الإدارة الفنية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__tender_name
+msgid "Tender Name"
+msgstr "اسم المشروع"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__delivery_unit
+msgid "Unit"
+msgstr "الغرفة/الادارة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__attachment_booklet_uploade
+msgid "Upload Booklet"
+msgstr "رفع ملف الكراسة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,help:governmental_purchase.field_res_company__attachment_booklet_exp
+#: model:ir.model.fields,help:governmental_purchase.field_res_config_settings__attachment_booklet_exp
+msgid "Upload Booklet file"
+msgstr "إرفاق الكراسة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__vision_program_name
+msgid "Vision Program Name"
+msgstr "اسم برنامج الرؤية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__wait_budget
+msgid "Wait Budget"
+msgstr "في انتظار إدارة الميزانية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__convert_po_contract_wizard__period_type__week
+msgid "Week(s)"
+msgstr "أسبوع (أسابيع)"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__work_location_city
+msgid "Work Location City"
+msgstr "المدينة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__work_location_district
+msgid "Work Location District"
+msgstr "الحي"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__work_location_GPS
+msgid "Work Location GPS"
+msgstr "احداثيات"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__work_location_state
+msgid "Work Location State"
+msgstr "المحافظة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__is_delivered__yes
+msgid "YES"
+msgstr "نعم"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__convert_po_contract_wizard__period_type__year
+msgid "Year(s)"
+msgstr "سنة (سنوات)"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__alternative_offer_allowed__yes
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__is_competition_divisible__yes
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__pre_qualification__yes
+msgid "Yes"
+msgstr "نعم"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_purchase_request__delivery_building
+msgid "building"
+msgstr "المبنى"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__dm
+msgid "Management Manager"
+msgstr "مدير الإدارة"
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.purchase_request_form
+msgid "download Booklet"
+msgstr "تنزيل الكراسة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_company__attachment_booklet_exp
+#: model:ir.model.fields,field_description:governmental_purchase.field_res_config_settings__attachment_booklet_exp
+msgid "file"
+msgstr "الملف"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "need your approve."
+msgstr ""
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "need your confirmation."
+msgstr ""
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__budget_scope__initiative
+msgid "Initiative"
+msgstr "المبادرة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__budget_scope__ksagreement_budget
+msgid "Korean Side Agreement Budget"
+msgstr "ميزانية اتفاقية الجانب الكوري"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__budget_scope__strategy
+msgid "National Strategy Budget"
+msgstr "ميزانية الاستراتجية الوطنية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__budget_scope__operational_budget
+msgid "Operational Budget"
+msgstr "الميزانية التشغلية للهيئة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__budget_scope__revenue_budget
+msgid "Revenue Budget"
+msgstr "ميزانية الايرادات"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_budget_confirmation__budget_scope
+msgid "Budget Scope"
+msgstr "نطاق الميزانية"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__permission__allowed
+msgid "Item Allows"
+msgstr "البند يسمح"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__budget_confirmation__permission__not_allowed
+msgid "Item Not Allows"
+msgstr "البند لايسمح"
+
+#. module: governmental_purchase
+#: model:ir.model.fields,field_description:governmental_purchase.field_budget_confirmation__permission
+msgid "Permission"
+msgstr "السماح"
+
+
+#. module: governmental_purchase
+#: model_terms:ir.ui.view,arch_db:governmental_purchase.inherit_view_budget_confirmation_form
+msgid "Budget Management"
+msgstr "انتظار الارسال"
+
+#. module: governmental_purchase
+#: model:res.groups,name:governmental_purchase.executive_director_of_purchase_and_contract
+msgid "Executive Director of Purchase and Contract"
+msgstr "المدير التنفيذي للخدمات المشتركة"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__general_supervisor
+#: model:res.groups,name:governmental_purchase.group_ceo_of_corporate_resources
+msgid "Chief Executive Officer"
+msgstr "الرئيس"
+
+#. module: governmental_purchase
+#: model:ir.model.fields.selection,name:governmental_purchase.selection__purchase_request__state__executive_vice
+#: model:res.groups,name:governmental_purchase.group_executive_vice_approve
+msgid "Executive Vice President"
+msgstr "نائب الرئيس التنفيذي"
+
+#. module: governmental_purchase
+#: model:ir.ui.menu,name:governmental_purchase.purchase_request_root_menu
+msgid "Employee Requests"
+msgstr "طلبات الإدارات"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Total Amount MUST be greater than 0 !!!"
+msgstr "المبلغ الإجمالي يجب أن يكون أكبر من الصفر"
+
+#. module: governmental_purchase
+#: code:addons/governmental_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Please select an analytic account"
+msgstr "الرجاء إختيار حساب تحليلي"
\ No newline at end of file
diff --git a/odex25_purchase/governmental_purchase/models/__init__.py b/odex25_purchase/governmental_purchase/models/__init__.py
new file mode 100644
index 000000000..4c87bb0cc
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+
+from . import purchase_order
+from . import purchase_request
+from . import res_company
+from . import budget_confirmation
+from . import account_budget
diff --git a/odex25_purchase/governmental_purchase/models/account_budget.py b/odex25_purchase/governmental_purchase/models/account_budget.py
new file mode 100644
index 000000000..857ae3a17
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/account_budget.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+from odoo import fields, models
+
+
+class CrossoveredBudgetLines(models.Model):
+ _inherit = "crossovered.budget.lines"
+ # Added new
+ reserve = fields.Float(string='Reserve Amount', tracking=True)
+ initial_reserve = fields.Float(string='Initial Reserve Amount', tracking=True)
+ confirm = fields.Float(string='Confirm Amount')
+ year_end = fields.Boolean(compute="get_year_end")
diff --git a/odex25_purchase/governmental_purchase/models/budget_confirmation.py b/odex25_purchase/governmental_purchase/models/budget_confirmation.py
new file mode 100644
index 000000000..744b6c168
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/budget_confirmation.py
@@ -0,0 +1,39 @@
+from odoo import fields, api ,models, _
+
+
+class BudgetConfirmationCustom(models.Model):
+ _inherit = 'budget.confirmation'
+
+ budget_scope = fields.Selection([
+ ('operational_budget', 'Operational Budget'),
+ ('initiative', 'Initiative'),
+ ('KSAgreement_budget', 'Korean Side Agreement Budget'),
+ ('revenue_budget', 'Revenue Budget'),
+ ('strategy','National Strategy Budget'),
+ ('other','Other')
+ ], string="Budget Scope")
+
+ permission = fields.Selection([
+ ('allowed', 'Item Allows'),
+ ('not_allowed', 'Item Not Allows'),
+ ], string="Permission")
+
+
+
+class BudgetConfirmationLineCustom(models.Model):
+ _inherit = 'budget.confirmation.line'
+ analytic_account_id = fields.Many2one(
+ comodel_name='account.analytic.account',
+ string='Cost Center',
+ required=False
+ )
+
+ @api.onchange('analytic_account_id')
+ def _onchange_analytic_account_id(self):
+ rec_remain = self.analytic_account_id.crossovered_budget_line.\
+ filtered(lambda x : x.date_from <= self.date and x.date_to >= self.date)
+ if rec_remain :
+ self.remain = rec_remain[0].remain
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/governmental_purchase/models/purchase_order.py b/odex25_purchase/governmental_purchase/models/purchase_order.py
new file mode 100644
index 000000000..97b14d1b6
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/purchase_order.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+from odoo.exceptions import ValidationError
+from odoo import api, fields, models, _
+from dateutil.relativedelta import relativedelta
+
+
+class PurchaseOrderCustom(models.Model):
+ _inherit = "purchase.order"
+
+
+ billed_amount = fields.Float(store=True, compute='_compute_amount')
+ remaining_amount = fields.Float(store=True, compute='_compute_amount')
+
+ @api.depends('invoice_ids','invoice_count')
+ def _compute_amount(self):
+ for order in self:
+ billed_amount = 0.0
+ for invoice in order.invoice_ids:
+ billed_amount += invoice.amount_total
+
+ currency = order.currency_id or order.partner_id.property_purchase_currency_id or \
+ self.env.company.currency_id
+ order.update({
+ 'billed_amount': currency.round(billed_amount),
+ 'remaining_amount': order.amount_total - billed_amount,
+ })
+
+
+ def action_recommend(self):
+ for order in self:
+ order.recommendation_order = True
+
+ def button_confirm(self):
+ super(PurchaseOrderCustom, self).button_confirm()
+ for order in self:
+ if order.state not in ['draft', 'sent', 'sign']:
+ continue
+ order._add_supplier_to_product()
+ # Deal with double validation process
+ if order._approval_allowed():
+ order.button_approve()
+ else:
+ order.write({'state': 'to approve'})
+ if order.partner_id not in order.message_partner_ids:
+ order.message_subscribe([order.partner_id.id])
+ return True
diff --git a/odex25_purchase/governmental_purchase/models/purchase_request.py b/odex25_purchase/governmental_purchase/models/purchase_request.py
new file mode 100644
index 000000000..f194aa634
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/purchase_request.py
@@ -0,0 +1,148 @@
+# -*- coding: utf-8 -*-
+from datetime import datetime
+from odoo import models, fields, api, _
+from odoo.exceptions import ValidationError
+from odoo.tools.misc import get_lang
+
+
+class PurchaseRequest(models.Model):
+ _inherit = 'purchase.request'
+
+ state = fields.Selection(
+ [('draft', 'Draft'),
+ ('dm', 'Management Manager'),
+ ('direct_manager', 'Technical Department'),
+ ('send_budget', 'Send to Budget Confirmation'),
+ ('wait_budget', 'Wait Budget'),
+ ('ceo_purchase', 'Manager OF Purchasing And Contract'),
+ ('executive_vice', 'Executive Vice President'),
+ ('general_supervisor', 'Chief Executive Officer'),
+ ('waiting', 'Procurement Department'),
+ ('done', 'Done'),
+ ('refuse', 'Refuse')], default="draft", tracking=True)
+ project_name = fields.Char('Project Name', copy=False)
+ sub_project = fields.Char('Sub Project', copy=False)
+ project_duration = fields.Char('Project Duration', copy=False)
+ strategic_objective = fields.Selection([
+ ('e_d_p', '3.1.1 Ease of doing business'),
+ ('a_f_d_i', '3.1.6 Attracting foreign direct investment'),
+ ('d_r_s', '3.3.5 Development of the retail sector'),
+ ('i_c_e', '4.3.2 Increasing SMEs contribution to the economy'),
+ ('other', 'Other')
+ ], string='Strategic Objective', copy=False)
+
+ other_strategic_objective = fields.Char('Other Strategic objective', copy=False)
+ vision_program_name = fields.Char('Vision Program Name', copy=False)
+ initiative_name = fields.Char('Initiative Name', copy=False)
+ initiative_end_date = fields.Date('Initiative End Date', copy=False)
+ is_direct_manager = fields.Boolean('Sent Technical Department', copy=False)
+ cso_agreed = fields.Selection([
+ ('agreed', 'Agreed'),
+ ('not_agreed', 'Not Agreed'),
+ ], string='Agreed', copy=False)
+ cso_compatible = fields.Selection([
+ ('compatible', 'Compatible with scope '),
+ ('Incompatible', 'Incompatible with scope '),
+ ], string='Compatible', copy=False)
+ company_id = fields.Many2one(string='Company', comodel_name='res.company',
+ default=lambda self: self.env.user.company_id)
+ attachment_booklet_uploade = fields.Binary(string="Upload Booklet", copy=False)
+ document_cost = fields.Char('Document cost', copy=False)
+ body_technical = fields.Char('Body Technical', copy=False)
+ pre_qualification = fields.Selection([
+ ('yes', 'Yes'),
+ ('no', 'No')
+ ], string='Pre-Qualification Linked ?', copy=False)
+ initial_guarantee_percentage = fields.Float(
+ 'Initial Guarantee Percentage (%)', copy=False)
+ applying_address = fields.Char('Applying Address', copy=False)
+ alternative_offer_allowed = fields.Selection([
+ ('yes', 'Yes'),
+ ('no', 'No')
+ ], string='Alternative Offer Allowed ?', copy=False)
+ is_competition_divisible = fields.Selection([
+ ('yes', 'Yes'),
+ ('no', 'No')
+ ], string='Is Competition Divisible?', copy=False)
+ classify_des = fields.Text('Classify', copy=False)
+
+ tender_name = fields.Char('Tender Name', copy=False)
+ purpose_of_tender = fields.Char('Purpose of Tender ', copy=False)
+ is_delivered = fields.Selection([
+ ('no', 'NO'),
+ ('yes', 'YES')
+ ], string='Do samples need to delivered', copy=False)
+
+ samples_delivery_address = fields.Char('Samples Address', copy=False)
+ delivery_building = fields.Char('building', copy=False)
+ delivery_floor = fields.Char('Floor', copy=False)
+ delivery_unit = fields.Char('Unit', copy=False)
+ date_time = fields.Datetime('Date and Time', copy=False)
+ Delivery_place = fields.Selection([
+ ('out', 'Out of Saudi Arabia'),
+ ('inside', 'Inside Saudi Arabia')
+ ], string='Delivery_place', copy=False)
+ other_details = fields.Text('Other details', copy=False)
+ # activities = fields.Many2many('activity.type', string='Activities', copy=False)
+ activity_description = fields.Text('Activity Description', copy=False)
+ competion_description = fields.Text('Competion Description', copy=False)
+ list_documentaries = fields.Text('List documentaries', copy=False)
+ attachment_scope_project = fields.Binary(string="Attachment Scope Project", copy=False)
+ program_action = fields.Char('Program of action', copy=False)
+ work_location_district = fields.Char('Work Location District', copy=False)
+ work_location_city = fields.Char('Work Location City', copy=False)
+ work_location_state = fields.Char('Work Location State', copy=False)
+ work_location_GPS = fields.Char('Work Location GPS', copy=False)
+ cancel_reason = fields.Char(string='Reason')
+ user_id = fields.Many2one(comodel_name='res.users',string='User id')
+
+
+ def action_dm_confirm(self):
+ if len(self.line_ids) == 0:
+ raise ValidationError(_("Can't Confirm Request With No Item!"))
+ if not self.department_id:
+ raise ValidationError(_("Please Select department for employee"))
+ for rec in self.line_ids:
+ if rec.request_id.is_analytic:
+ if not rec.account_id:
+ raise ValidationError(_("Please select an analytic account"))
+ if rec.sum_total <= 0:
+ raise ValidationError(_("Total Amount MUST be greater than 0 !!!"))
+
+ self.write({'state': 'dm'})
+
+
+ def approve_department(self):
+ self.write({'state': 'send_budget'})
+
+ def action_pc_confirm(self):
+ amount = 0
+ for rec in self.line_ids:
+ amount = amount + rec.sum_total
+ if amount >= self.company_id.direct_purchase:
+ self.write({'state': 'executive_vice'})
+ else:
+ self.write({'state': 'waiting'})
+
+ def approve_executive_vice(self):
+ amount = 0
+ for rec in self.line_ids:
+ amount = amount + rec.sum_total
+ if amount >= self.company_id.chief_executive_officer:
+ self.write({'state': 'general_supervisor'})
+ else:
+ self.write({'state': 'waiting'})
+
+ def action_general_supervisor_approve(self):
+ for request in self:
+ request.write({'state': 'waiting'})
+
+ def action_refuse(self):
+ self.write({'state': 'refuse'})
+
+ def download_url(self):
+ return {
+ "type": "ir.actions.act_url",
+ "url": '/web/content/res.company/%s/attachment_booklet_exp/الكراسة الالكترونية الموحدة.docx' % self.company_id.id,
+ "target": "new",
+ }
diff --git a/odex25_purchase/governmental_purchase/models/purchase_requisition.py b/odex25_purchase/governmental_purchase/models/purchase_requisition.py
new file mode 100644
index 000000000..0efbdc770
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/purchase_requisition.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api, _
+
+
+class PurchaseRequisition(models.Model):
+ _inherit = 'purchase.requisition'
+
+ agreement_name = fields.Char()
+ agreement_number = fields.Char()
+ agreement_date = fields.Date()
+ # oveeride purchase_cost field to set default value
+ purchase_cost = fields.Selection([('department', 'Department'), ('default', 'Default Cost Center'),('product_line', 'Product Line'), ('project', 'Project')],default='department',string='Purchase Cost')
+ # end
+ city = fields.Char()
diff --git a/odex25_purchase/governmental_purchase/models/res_company.py b/odex25_purchase/governmental_purchase/models/res_company.py
new file mode 100644
index 000000000..b9bdd6cf4
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/models/res_company.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class ResSetting(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ attachment_booklet_exp = fields.Binary(string='file', readonly=False, related="company_id.attachment_booklet_exp",
+ attachment=True, help='Upload Booklet file')
+
+
+class Company(models.Model):
+ _inherit = 'res.company'
+
+ attachment_booklet_exp = fields.Binary(
+ string='file', readonly=False, attachment=True, help='Upload Booklet file')
diff --git a/odex25_purchase/governmental_purchase/security/ir.model.access.csv b/odex25_purchase/governmental_purchase/security/ir.model.access.csv
new file mode 100644
index 000000000..aaa3083ab
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/security/ir.model.access.csv
@@ -0,0 +1,12 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_crossovered_budget_group_department_approve,crossovered.budget,odex25_account_budget.model_crossovered_budget,purchase_requisition_custom.group_department_approve,1,0,0,0
+access_account_budget_post_group_department_approve,model_account_budget_post,odex25_account_budget.model_account_budget_post,purchase_requisition_custom.group_department_approve,1,0,0,0
+access_budget_confirmation_group_department_approve,budget_confirmation,account_budget_custom.model_budget_confirmation,purchase_requisition_custom.group_department_approve,1,1,1,0
+access_budget_confirmation_line_group_department_approve,budget_confirmation_line,account_budget_custom.model_budget_confirmation_line,purchase_requisition_custom.group_department_approve,1,1,1,0
+
+access_crossovered_budget_group_purchase_user,crossovered.budget.group_purchase_user,odex25_account_budget.model_crossovered_budget,purchase.group_purchase_user,1,0,0,0
+access_account_budget_post_group_purchase_user,model_account_budget_post.group_purchase_user,odex25_account_budget.model_account_budget_post,purchase.group_purchase_user,1,0,0,0
+access_budget_confirmation_group_purchase_user,budget_confirmation.group_purchase_user,account_budget_custom.model_budget_confirmation,purchase.group_purchase_user,1,1,1,0
+access_budget_confirmation_line_group_purchase_user,budget_confirmation_line.group_purchase_user,account_budget_custom.model_budget_confirmation_line,purchase.group_purchase_user,1,1,1,0
+
+group_user_purchase_requisition_type,Requisition Type,purchase_requisition.model_purchase_requisition_type,base.group_user,1,1,0,0
\ No newline at end of file
diff --git a/odex25_purchase/governmental_purchase/security/security.xml b/odex25_purchase/governmental_purchase/security/security.xml
new file mode 100644
index 000000000..d1d476bb8
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/security/security.xml
@@ -0,0 +1,123 @@
+
+
+
+
+ Executive Director of Purchase and Contract
+
+
+
+
+
+ Chief Executive Officer
+
+
+
+
+
+ Executive Vice President
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchasing Specialist
+
+
+
+
+
+
+
+ Executive Director of Purchase and Contract Rule
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+ CEO of Corporate Resources Rule
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+ Executive Vice President of Corporate Resources Rule
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+
+ Budget User Rule
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+ Budget department Rule
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+ Manager Budget Manager
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/views/budget_confirmation_view.xml b/odex25_purchase/governmental_purchase/views/budget_confirmation_view.xml
new file mode 100644
index 000000000..bf855b0ae
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/views/budget_confirmation_view.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ budget.confirmation.form
+ budget.confirmation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/views/purchase_order_views.xml b/odex25_purchase/governmental_purchase/views/purchase_order_views.xml
new file mode 100644
index 000000000..87ae19227
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/views/purchase_order_views.xml
@@ -0,0 +1,109 @@
+
+
+
+ purchase.order.governmental.form.custom
+ purchase.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Contracts List
+ purchase.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Contracts
+ ir.actions.act_window
+ purchase.order
+ tree,kanban,form,pivot,graph,calendar
+ [('type' , '=' , 'contract'), ('state' , '=' , 'purchase')]
+ {
+ 'default_type': 'contract',
+ 'create': False,
+ 'edit': False,
+ 'delete': False,
+ 'duplicate': False,
+ 'tree_view_ref': 'purchase_requisition_custom.purchase_type_contract_tree',
+ }
+
+
+
+
+ Create New a Purchase Contract
+
+
+
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/views/purchase_request_views.xml b/odex25_purchase/governmental_purchase/views/purchase_request_views.xml
new file mode 100644
index 000000000..13dba6c12
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/views/purchase_request_views.xml
@@ -0,0 +1,201 @@
+
+
+
+ purchase.request.view.form
+ purchase.request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/views/purchase_requisition_views.xml b/odex25_purchase/governmental_purchase/views/purchase_requisition_views.xml
new file mode 100644
index 000000000..c2e2b170e
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/views/purchase_requisition_views.xml
@@ -0,0 +1,27 @@
+
+
+
+ purchase.governmental.requisition.form.inherit
+ purchase.requisition
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/governmental_purchase/views/res_setting.xml b/odex25_purchase/governmental_purchase/views/res_setting.xml
new file mode 100644
index 000000000..86f77336f
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/views/res_setting.xml
@@ -0,0 +1,31 @@
+
+
+ model.name.inherit.view.form
+ res.config.settings
+
+
+
+ Booklet
+
+
+
+
+
+
+ Purchase Booklet
+
+
+
+
+
+
+
+
+
+ -->
diff --git a/odex25_purchase/governmental_purchase/wizard/__init__.py b/odex25_purchase/governmental_purchase/wizard/__init__.py
new file mode 100644
index 000000000..9aaa226cd
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/wizard/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import convert_to_contract
diff --git a/odex25_purchase/governmental_purchase/wizard/convert_to_contract.py b/odex25_purchase/governmental_purchase/wizard/convert_to_contract.py
new file mode 100644
index 000000000..60e614583
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/wizard/convert_to_contract.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+
+
+class ConvertPoContract(models.TransientModel):
+ _name = "convert.po.contract.wizard"
+ _description = "Convert Contract wizard"
+
+ purchase_id = fields.Many2one('purchase.order')
+ contract_name = fields.Char()
+ auto_notification = fields.Boolean()
+ responsible_id = fields.Many2one('res.users')
+ notify_before = fields.Integer()
+ start_date = fields.Date()
+ end_date = fields.Date()
+ period_type = fields.Selection(
+ selection=[('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')])
+
+ @api.onchange('auto_notification')
+ def auto_notification_onchange(self):
+ if not self.auto_notification:
+ self.notify_before = 0
+ self.period_type = ''
+ return {}
+
+ @api.constrains('end_date', 'start_date', 'auto_notification')
+ def start_notify_constrain(self):
+ for rec in self:
+ if rec.start_date and rec.end_date:
+ if rec.start_date >= rec.end_date:
+ raise ValidationError(_("Start Date Should Be Less Than End Date"))
+
+ if rec.auto_notification and rec.notify_before < 1:
+ raise ValidationError(_("Notify Before End Should Be Greater Than Zero"))
+
+ def action_create_contract(self):
+ self.ensure_one()
+ self.purchase_id.write({
+ 'type': 'contract',
+ 'contract_name': self.contract_name,
+ 'auto_notification': self.auto_notification,
+ 'responsible_id': self.responsible_id.id,
+ 'notify_before': self.notify_before,
+ 'start_date': self.start_date,
+ 'end_date': self.end_date,
+ 'period_type': self.period_type
+ })
+ return {'type': 'ir.actions.act_window_close'}
diff --git a/odex25_purchase/governmental_purchase/wizard/convert_to_contract.xml b/odex25_purchase/governmental_purchase/wizard/convert_to_contract.xml
new file mode 100644
index 000000000..c317b0108
--- /dev/null
+++ b/odex25_purchase/governmental_purchase/wizard/convert_to_contract.xml
@@ -0,0 +1,31 @@
+
+
+
+ convert.po.contract.wizard.form
+ convert.po.contract.wizard
+
+
+
+
+
+
diff --git a/odex25_purchase/khwalid_vendor/__init__.py b/odex25_purchase/khwalid_vendor/__init__.py
new file mode 100644
index 000000000..9b4296142
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/__init__.py
@@ -0,0 +1,2 @@
+from . import models
+from . import wizard
diff --git a/odex25_purchase/khwalid_vendor/__manifest__.py b/odex25_purchase/khwalid_vendor/__manifest__.py
new file mode 100644
index 000000000..048372ecf
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/__manifest__.py
@@ -0,0 +1,21 @@
+{
+ 'name': "Khwalid Vendor",
+ 'version': '14.0.1.0.0',
+ 'summary': """Khwalid Vendor""",
+ 'category': 'Purchase',
+ 'author': "Expert Co Ltd",
+ 'website': "http://www.ex.com",
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'company': 'Expert Co. Ltd.',
+ 'depends': ['base','mail','contacts'],
+
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'security/secuirty.xml',
+ 'data/res_partner_sequence.xml',
+ 'views/res_partner.xml',
+ 'wizard/messeage_wiz.xml',
+ ],
+ 'installable': True,
+ 'application': False,
+}
diff --git a/odex25_purchase/khwalid_vendor/data/res_partner_sequence.xml b/odex25_purchase/khwalid_vendor/data/res_partner_sequence.xml
new file mode 100644
index 000000000..2f3e0e54c
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/data/res_partner_sequence.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+ Res Partner
+ res.partner
+ V/
+ 5
+
+
+
+
+
diff --git a/odex25_purchase/khwalid_vendor/i18n/ar_SY.po b/odex25_purchase/khwalid_vendor/i18n/ar_SY.po
new file mode 100644
index 000000000..e6291672d
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/i18n/ar_SY.po
@@ -0,0 +1,157 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * khwalid_vendor
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-10 22:28+0000\n"
+"PO-Revision-Date: 2022-01-10 22:28+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__cancel
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_info_wizard
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_res_partner__cancel_reason
+#: model:ir.model.fields,field_description:khwalid_vendor.field_res_users__cancel_reason
+msgid "Cancel Reason"
+msgstr "سبب الإلغاء"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__ceo
+#: model:res.groups,name:khwalid_vendor.group_ceo
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "Chief Executive Officer"
+msgstr "المدير التنفيذي"
+
+#. module: khwalid_vendor
+#: model:ir.model,name:khwalid_vendor.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: khwalid_vendor
+#: model:ir.module.category,name:khwalid_vendor.smart_module_management
+msgid "Contacts WorkFlow"
+msgstr "صلاحيات جهات الإتصال"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__display_name
+#: model:ir.model.fields,field_description:khwalid_vendor.field_res_partner__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__draft
+msgid "Draft"
+msgstr "مسودة"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__financial_manager
+#: model:res.groups,name:khwalid_vendor.group_financial_manager
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "Financial Manager"
+msgstr "المدير المالي"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__general_manager
+#: model:res.groups,name:khwalid_vendor.group_general_manager
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "General Manager"
+msgstr "المدير العام"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__id
+#: model:ir.model.fields,field_description:khwalid_vendor.field_res_partner__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: khwalid_vendor
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_info_wizard
+msgid "Info"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard____last_update
+#: model:ir.model.fields,field_description:khwalid_vendor.field_res_partner____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_info_wizard
+msgid "OK"
+msgstr "تأكيد"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__partner_id
+msgid "Partner"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__project_manager
+#: model:res.groups,name:khwalid_vendor.group_project_manager
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "Project Manager"
+msgstr "مدير المشاريع"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields.selection,name:khwalid_vendor.selection__res_partner__state__purchase_department
+#: model:res.groups,name:khwalid_vendor.group_purchase_department
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "Purchase Department"
+msgstr "مسؤول ادارة المشتريات"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_partner_cancel_wizard__cancel_reason
+msgid "Reason"
+msgstr "السبب"
+
+#. module: khwalid_vendor
+#: model:ir.model,name:khwalid_vendor.model_partner_cancel_wizard
+msgid "Reason Wizard"
+msgstr ""
+
+#. module: khwalid_vendor
+#: model_terms:ir.ui.view,arch_db:khwalid_vendor.view_partner_form_inherited
+msgid "Rest To Draft"
+msgstr "إعادة إلي مسودة"
+
+#. module: khwalid_vendor
+#: model:ir.model.fields,field_description:khwalid_vendor.field_res_partner__state
+msgid "Status"
+msgstr "الحالة"
+
+#. module: khwalid_vendor
+#: model:ir.module.category,description:khwalid_vendor.smart_module_management
+msgid "User access level for this module"
+msgstr ""
diff --git a/odex25_purchase/khwalid_vendor/models/__init__.py b/odex25_purchase/khwalid_vendor/models/__init__.py
new file mode 100644
index 000000000..5a8df9837
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/models/__init__.py
@@ -0,0 +1 @@
+from . import res_parnter
diff --git a/odex25_purchase/khwalid_vendor/models/res_parnter.py b/odex25_purchase/khwalid_vendor/models/res_parnter.py
new file mode 100644
index 000000000..b5ed15363
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/models/res_parnter.py
@@ -0,0 +1,70 @@
+from odoo import fields, models, api, _
+from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DF
+
+
+class Partner(models.Model):
+ _inherit = 'res.partner'
+
+ parnter_referencen = fields.Char('Partner Reference', required=True, index=True, copy=False, default='New')
+ @api.model
+ def create(self, vals):
+ vals['parnter_referencen'] = self.env['ir.sequence'].next_by_code('res.partner') or '/'
+ return super(Partner, self).create(vals)
+
+ cancel_reason = fields.Text(
+ string='Cancel Reason',
+ )
+
+ name = fields.Char(index=True,tracking=True)
+
+ vat = fields.Char(string='Tax ID', index=True, help="The Tax Identification Number. Complete it if the contact is subjected to government taxes. Used in some legal statements.",tracking=True)
+
+ email = fields.Char(tracking=True)
+
+ phone = fields.Char(tracking=True)
+ mobile = fields.Char(tracking=True)
+
+ state = fields.Selection(
+ string='Status', required=True, readonly=True, copy=False,tracking=True,
+ selection=[
+ ('new', 'New'),
+ ('approved', 'Approved'),
+ ('refused', 'Refused')],
+ default='new',
+
+ )
+
+ def action_purchase_vendor_approve(self):
+ self.state = 'approved'
+
+ def action_purchase_vendor_refuse(self):
+ self.state = 'refused'
+
+ # def action_project_manager(self):
+ # self.state = 'project_manager'
+
+ # def action_financial_manager(self):
+ # self.state = 'financial_manager'
+
+ # def action_ceo(self):
+ # self.state = 'ceo'
+
+ # def action_general_manager(self):
+ # self.state = 'general_manager'
+
+ # def action_cancel(self):
+ # return {
+ # 'name': 'Cancel',
+ # 'type': 'ir.actions.act_window',
+ # 'res_model': 'partner.cancel.wizard',
+ # 'view_mode': 'form',
+ # 'view_type': 'form',
+ # 'target': 'new'
+
+ # }
+
+ # def action_rest_to_draft(self):
+ # self.state = 'draft'
+
+
+ #
\ No newline at end of file
diff --git a/odex25_purchase/khwalid_vendor/security/ir.model.access.csv b/odex25_purchase/khwalid_vendor/security/ir.model.access.csv
new file mode 100644
index 000000000..4287df5f5
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_partner_cancel_wizard,access_partner_cancel_wizard,model_partner_cancel_wizard,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/odex25_purchase/khwalid_vendor/security/secuirty.xml b/odex25_purchase/khwalid_vendor/security/secuirty.xml
new file mode 100644
index 000000000..d721a6ca7
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/security/secuirty.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ Contacts WorkFlow
+ User access level for this module
+ 99
+
+
+
+
+ Vendor Approve
+
+
+
+
+ Refuse Vendor
+
+
+
+
+
+
+
diff --git a/odex25_purchase/khwalid_vendor/static/description/icon.png b/odex25_purchase/khwalid_vendor/static/description/icon.png
new file mode 100644
index 000000000..a48b24bdb
Binary files /dev/null and b/odex25_purchase/khwalid_vendor/static/description/icon.png differ
diff --git a/odex25_purchase/khwalid_vendor/static/fonts/ae_AlMohanad.ttf b/odex25_purchase/khwalid_vendor/static/fonts/ae_AlMohanad.ttf
new file mode 100644
index 000000000..bdd7360e1
Binary files /dev/null and b/odex25_purchase/khwalid_vendor/static/fonts/ae_AlMohanad.ttf differ
diff --git a/odex25_purchase/khwalid_vendor/views/res_partner.xml b/odex25_purchase/khwalid_vendor/views/res_partner.xml
new file mode 100644
index 000000000..4f7cb6916
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/views/res_partner.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ view.res.partner.form.inherited
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/khwalid_vendor/wizard/__init__.py b/odex25_purchase/khwalid_vendor/wizard/__init__.py
new file mode 100644
index 000000000..e2bedc55a
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/wizard/__init__.py
@@ -0,0 +1 @@
+from . import messeage_wiz
\ No newline at end of file
diff --git a/odex25_purchase/khwalid_vendor/wizard/messeage_wiz.py b/odex25_purchase/khwalid_vendor/wizard/messeage_wiz.py
new file mode 100644
index 000000000..3acefa6c5
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/wizard/messeage_wiz.py
@@ -0,0 +1,30 @@
+
+from odoo import api, fields, models,_
+from odoo.exceptions import UserError, ValidationError
+
+class InfoWizard(models.TransientModel):
+
+ _name = 'partner.cancel.wizard'
+
+ _description = 'Reason Wizard'
+
+ cancel_reason = fields.Text(string="Reason")
+
+
+ partner_id = fields.Many2one(
+ string='Partner',
+ comodel_name='res.partner',
+ )
+
+ @api.model
+ def default_get(self, fields):
+ res = super(InfoWizard, self).default_get(fields)
+ partner_id = self.env.context['active_id']
+ res['partner_id'] = partner_id
+ return res
+
+ def cancel_partner(self):
+ if self.partner_id:
+ self.partner_id.write({'state':'cancel','cancel_reason':self.cancel_reason})
+
+
\ No newline at end of file
diff --git a/odex25_purchase/khwalid_vendor/wizard/messeage_wiz.xml b/odex25_purchase/khwalid_vendor/wizard/messeage_wiz.xml
new file mode 100644
index 000000000..66ab1845e
--- /dev/null
+++ b/odex25_purchase/khwalid_vendor/wizard/messeage_wiz.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+ info.form
+
+ partner.cancel.wizard
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase/__init__.py b/odex25_purchase/odex25_purchase/__init__.py
new file mode 100644
index 000000000..006edd3fd
--- /dev/null
+++ b/odex25_purchase/odex25_purchase/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import report
diff --git a/odex25_purchase/odex25_purchase/__manifest__.py b/odex25_purchase/odex25_purchase/__manifest__.py
new file mode 100644
index 000000000..c7549ed07
--- /dev/null
+++ b/odex25_purchase/odex25_purchase/__manifest__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+{
+ 'name': "Purchase Dashboard",
+ 'version': "1.0",
+ 'category': 'Odex25 Inventory/Purchase',
+ 'author': 'Expert Co. Ltd.',
+ 'website': 'http://www.exp-sa.com',
+ 'summary': "Advanced Features for Purchase Management",
+ 'description': """
+Contains advanced features for purchase management
+ """,
+ 'depends': ['purchase', 'odex25_web_dashboard'],
+ 'data': [
+ 'report/purchase_report_views.xml',
+ ],
+ 'demo': [
+ 'data/purchase_order_demo.xml',
+ ],
+ 'installable': True,
+ 'application': False,
+ 'auto_install': ['purchase'],
+}
diff --git a/odex25_purchase/odex25_purchase/data/purchase_order_demo.xml b/odex25_purchase/odex25_purchase/data/purchase_order_demo.xml
new file mode 100644
index 000000000..eced88be8
--- /dev/null
+++ b/odex25_purchase/odex25_purchase/data/purchase_order_demo.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+ purchase
+
+
+
+
+
+
+
+
+
+ purchase
+
+
+
+
+
+
+
+
+
+ purchase
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_purchase/i18n/ar.po b/odex25_purchase/odex25_purchase/i18n/ar.po
new file mode 100644
index 000000000..4fb7701a4
--- /dev/null
+++ b/odex25_purchase/odex25_purchase/i18n/ar.po
@@ -0,0 +1,71 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odex25_purchase
+#
+# Translators:
+# Mustafa Rawi , 2020
+# Osoul , 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:39+0000\n"
+"PO-Revision-Date: 2020-09-07 08:22+0000\n"
+"Last-Translator: Osoul , 2020\n"
+"Language-Team: Arabic (https://www.transifex.com/odoo/teams/41243/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "Average Days to Purchase"
+msgstr ""
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "Average Order"
+msgstr "متوسط الأمر"
+
+#. module: odex25_purchase
+#: model_terms:ir.actions.act_window,help:odex25_purchase.purchase_report_action_dashboard
+msgid "Create a new purchase order"
+msgstr ""
+
+#. module: odex25_purchase
+#: model_terms:ir.actions.act_window,help:odex25_purchase.purchase_report_action_dashboard
+msgid "No data yet!"
+msgstr ""
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "Orders"
+msgstr "أوامر"
+
+#. module: odex25_purchase
+#: model:ir.actions.act_window,name:odex25_purchase.purchase_report_action_dashboard
+msgid "Purchase Analysis"
+msgstr "تحليل المشتريات"
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "Total Purchased"
+msgstr ""
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "Total, Tax Included"
+msgstr "المجموع شامل الضريبة"
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "Untaxed Total"
+msgstr "الإجمالي بدون ضرائب"
+
+#. module: odex25_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_purchase.purchase_report_view_dashboard
+msgid "days"
+msgstr "يوم"
diff --git a/odex25_purchase/odex25_purchase/report/purchase_report_views.xml b/odex25_purchase/odex25_purchase/report/purchase_report_views.xml
new file mode 100644
index 000000000..c65e5e5b4
--- /dev/null
+++ b/odex25_purchase/odex25_purchase/report/purchase_report_views.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+ purchase.report.view.dashboard
+ purchase.report
+ primary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Analysis
+ purchase.report
+ dashboard,pivot,graph
+
+
+
+
+ No data yet!
+
+ Create a new purchase order
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_purchase/static/description/icon.png b/odex25_purchase/odex25_purchase/static/description/icon.png
new file mode 100644
index 000000000..4141f52da
Binary files /dev/null and b/odex25_purchase/odex25_purchase/static/description/icon.png differ
diff --git a/odex25_purchase/odex25_purchase_coc/__init__.py b/odex25_purchase/odex25_purchase_coc/__init__.py
new file mode 100644
index 000000000..511a0ca3a
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase_coc/__manifest__.py b/odex25_purchase/odex25_purchase_coc/__manifest__.py
new file mode 100644
index 000000000..e5b8d8db5
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/__manifest__.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Purchase CoC",
+
+ 'summary': """
+ This Module is Designed and Developed to Add CoC process To purchase""",
+
+ 'description': """
+
+ """,
+
+ 'author': "Expert Co Ltd",
+ 'website': "http://www.ex.com",
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'version': '14.0',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['purchase_requisition_custom'],
+
+ # always loaded
+ 'data': [
+ 'security/security.xml',
+ 'security/ir.model.access.csv',
+ 'views/views.xml',
+ 'sequence/seq.xml',
+ ],
+ # only loaded in demonstration mode
+ 'demo': [
+ 'demo/demo.xml',
+ ],
+}
diff --git a/odex25_purchase/odex25_purchase_coc/controllers/__init__.py b/odex25_purchase/odex25_purchase_coc/controllers/__init__.py
new file mode 100644
index 000000000..457bae27e
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/controllers/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase_coc/controllers/controllers.py b/odex25_purchase/odex25_purchase_coc/controllers/controllers.py
new file mode 100644
index 000000000..3098b3f4e
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/controllers/controllers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from odoo import http
+
+# class OdexPurchaseCoc(http.Controller):
+# @http.route('/odex25_purchase_coc/odex25_purchase_coc/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/odex25_purchase_coc/odex25_purchase_coc/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('odex25_purchase_coc.listing', {
+# 'root': '/odex25_purchase_coc/odex25_purchase_coc',
+# 'objects': http.request.env['odex25_purchase_coc.odex25_purchase_coc'].search([]),
+# })
+
+# @http.route('/odex25_purchase_coc/odex25_purchase_coc/objects//', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('odex25_purchase_coc.object', {
+# 'object': obj
+# })
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase_coc/demo/demo.xml b/odex25_purchase/odex25_purchase_coc/demo/demo.xml
new file mode 100644
index 000000000..9fa6c5267
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/demo/demo.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase_coc/i18n/ar_001.po b/odex25_purchase/odex25_purchase_coc/i18n/ar_001.po
new file mode 100644
index 000000000..91ac210fb
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/i18n/ar_001.po
@@ -0,0 +1,319 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odex25_purchase_coc
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-09-15 08:59+0000\n"
+"PO-Revision-Date: 2021-09-15 08:59+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Approve"
+msgstr "موافقة"
+
+#. module: odex25_purchase_coc
+#: model:ir.actions.act_window,help:odex25_purchase_coc.purchase_coc_action
+msgid "Approve and Confirm CoC"
+msgstr "تصديق و تأكيد شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,coc_stage:0
+msgid "Before Bill"
+msgstr "Before Bill"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,coc_stage:0
+msgid "Before Bill Validation"
+msgstr "Before Bill Validation"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,coc_stage:0
+msgid "Before Payment"
+msgstr "Before Payment"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_created
+msgid "COC Created"
+msgstr "تم انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:res.groups,name:odex25_purchase_coc.group_coc_manager
+msgid "COC Manager"
+msgstr "مدير شهادات الإنجاز"
+
+#. module: odex25_purchase_coc
+#: model:res.groups,name:odex25_purchase_coc.group_coc_user
+msgid "COC User"
+msgstr "مستخدم شهادات الإنجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.menu,name:odex25_purchase_coc.coc_menu
+msgid "Certificat of Completion CoC"
+msgstr "شهادات الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.actions.act_window,name:odex25_purchase_coc.purchase_coc_action
+msgid "Certificate of Completion"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.view_id
+msgid "Certificates of Completion"
+msgstr "شهادات الإنجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc
+msgid "CoC Created"
+msgstr "تم انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_id
+msgid "CoC Ref"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_coc_stage
+msgid "CoC Stage"
+msgstr "مرحلة شهادة استلام"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_ids
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.view_id
+msgid "CoCs"
+msgstr "شهادة استلام"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_line_coc_id
+msgid "Coc"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:176
+#, python-format
+msgid "Coc Rejected By %s . With Reject Reason : %s"
+msgstr "Coc Rejected By %s . With Reject Reason : %s"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_count
+msgid "Cocs"
+msgstr "Cocs"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Confirm"
+msgstr "تأكيد"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,state:0
+msgid "Draft"
+msgstr "مبدئي"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_id
+msgid "ID"
+msgstr "ID"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_account_invoice
+msgid "Invoice"
+msgstr "الفاتورة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc___last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_name
+msgid "Name"
+msgstr "الإسم"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_need_coc
+msgid "Need CoC?"
+msgstr "يحتاج الى شهادة انجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_note
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Note"
+msgstr "ملاحظات"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_po_line_ids
+msgid "PO Lines"
+msgstr "الاصناف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_account_payment
+msgid "Payments"
+msgstr "المدفوعات"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_po_id
+msgid "Po Ref."
+msgstr "طلب الشراء."
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Products"
+msgstr "الأصناف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_coc
+msgid "Purchase CoC"
+msgstr "Purchase CoC"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_order
+msgid "Purchase Order"
+msgstr "عرض سعر"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "بند طلب الشراء"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Reject"
+msgstr "رفض"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_reject_reason
+msgid "Reject Reason"
+msgstr "Reject Reason"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Set to Draft"
+msgstr "تعيين كمسودة"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:196
+#, python-format
+msgid "Sorry This object have no field named Selection Reasoon"
+msgstr "Sorry This object have no field named Selection Reasoon"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:74
+#, python-format
+msgid "Sorry You cannot Create Bill untill CoC Created and Approved."
+msgstr "لايمكن إنشاء الفاتورة قبل انشاء وتصديف شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:105
+#, python-format
+msgid "Sorry You cannot Pay For This Vendor untill CoC Created and Approved."
+msgstr "لايمكن الدفع قبل انشاء وتصديق شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:86
+#, python-format
+msgid "Sorry You cannot Validate Bill untill CoC Created and Approved."
+msgstr "لايمكن اعتماد الفاتورة قبل انشاء وتصديق شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_state
+msgid "State"
+msgstr "الحالة"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:33
+#, python-format
+msgid "Submit Your Prices"
+msgstr "تأكيد الأسعار"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_vendor_id
+msgid "Vendor"
+msgstr "الموردون"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:15
+#, python-format
+msgid "delivary date"
+msgstr "تاريخ التسليم"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:16
+#, python-format
+msgid "price"
+msgstr "السعر"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:13
+#, python-format
+msgid "product"
+msgstr "الصنف"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:12
+#, python-format
+msgid "product id"
+msgstr "الصنف"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:14
+#, python-format
+msgid "quantity"
+msgstr "الكمية"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_reject_wizard
+msgid "reject.wizard"
+msgstr "reject.wizard"
+
+#. module: odex25_purchase_coc
+#: model:res.groups,name:odex25_purchase_coc.group_coc_menu
+msgid "COC Menu"
+msgstr "قائمة شهادة استلام"
+
diff --git a/odex25_purchase/odex25_purchase_coc/i18n/ar_SY.po b/odex25_purchase/odex25_purchase_coc/i18n/ar_SY.po
new file mode 100644
index 000000000..91ac210fb
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/i18n/ar_SY.po
@@ -0,0 +1,319 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odex25_purchase_coc
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-09-15 08:59+0000\n"
+"PO-Revision-Date: 2021-09-15 08:59+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Approve"
+msgstr "موافقة"
+
+#. module: odex25_purchase_coc
+#: model:ir.actions.act_window,help:odex25_purchase_coc.purchase_coc_action
+msgid "Approve and Confirm CoC"
+msgstr "تصديق و تأكيد شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,coc_stage:0
+msgid "Before Bill"
+msgstr "Before Bill"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,coc_stage:0
+msgid "Before Bill Validation"
+msgstr "Before Bill Validation"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,coc_stage:0
+msgid "Before Payment"
+msgstr "Before Payment"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_created
+msgid "COC Created"
+msgstr "تم انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:res.groups,name:odex25_purchase_coc.group_coc_manager
+msgid "COC Manager"
+msgstr "مدير شهادات الإنجاز"
+
+#. module: odex25_purchase_coc
+#: model:res.groups,name:odex25_purchase_coc.group_coc_user
+msgid "COC User"
+msgstr "مستخدم شهادات الإنجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.menu,name:odex25_purchase_coc.coc_menu
+msgid "Certificat of Completion CoC"
+msgstr "شهادات الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.actions.act_window,name:odex25_purchase_coc.purchase_coc_action
+msgid "Certificate of Completion"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.view_id
+msgid "Certificates of Completion"
+msgstr "شهادات الإنجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc
+msgid "CoC Created"
+msgstr "تم انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_id
+msgid "CoC Ref"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_coc_stage
+msgid "CoC Stage"
+msgstr "مرحلة شهادة استلام"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_ids
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.view_id
+msgid "CoCs"
+msgstr "شهادة استلام"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_line_coc_id
+msgid "Coc"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:176
+#, python-format
+msgid "Coc Rejected By %s . With Reject Reason : %s"
+msgstr "Coc Rejected By %s . With Reject Reason : %s"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_count
+msgid "Cocs"
+msgstr "Cocs"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Confirm"
+msgstr "تأكيد"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,state:0
+msgid "Draft"
+msgstr "مبدئي"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_id
+msgid "ID"
+msgstr "ID"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_account_invoice
+msgid "Invoice"
+msgstr "الفاتورة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc___last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_name
+msgid "Name"
+msgstr "الإسم"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_need_coc
+msgid "Need CoC?"
+msgstr "يحتاج الى شهادة انجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_note
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Note"
+msgstr "ملاحظات"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_po_line_ids
+msgid "PO Lines"
+msgstr "الاصناف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_account_payment
+msgid "Payments"
+msgstr "المدفوعات"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_po_id
+msgid "Po Ref."
+msgstr "طلب الشراء."
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Products"
+msgstr "الأصناف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_coc
+msgid "Purchase CoC"
+msgstr "Purchase CoC"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_order
+msgid "Purchase Order"
+msgstr "عرض سعر"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "بند طلب الشراء"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Reject"
+msgstr "رفض"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_reject_reason
+msgid "Reject Reason"
+msgstr "Reject Reason"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Set to Draft"
+msgstr "تعيين كمسودة"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:196
+#, python-format
+msgid "Sorry This object have no field named Selection Reasoon"
+msgstr "Sorry This object have no field named Selection Reasoon"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:74
+#, python-format
+msgid "Sorry You cannot Create Bill untill CoC Created and Approved."
+msgstr "لايمكن إنشاء الفاتورة قبل انشاء وتصديف شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:105
+#, python-format
+msgid "Sorry You cannot Pay For This Vendor untill CoC Created and Approved."
+msgstr "لايمكن الدفع قبل انشاء وتصديق شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:86
+#, python-format
+msgid "Sorry You cannot Validate Bill untill CoC Created and Approved."
+msgstr "لايمكن اعتماد الفاتورة قبل انشاء وتصديق شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_state
+msgid "State"
+msgstr "الحالة"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:33
+#, python-format
+msgid "Submit Your Prices"
+msgstr "تأكيد الأسعار"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_vendor_id
+msgid "Vendor"
+msgstr "الموردون"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:15
+#, python-format
+msgid "delivary date"
+msgstr "تاريخ التسليم"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:16
+#, python-format
+msgid "price"
+msgstr "السعر"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:13
+#, python-format
+msgid "product"
+msgstr "الصنف"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:12
+#, python-format
+msgid "product id"
+msgstr "الصنف"
+
+#. module: odex25_purchase_coc
+#. openerp-web
+#: code:addons/odex25_purchase_coc/static/src/xml/tender_templates.xml:14
+#, python-format
+msgid "quantity"
+msgstr "الكمية"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_reject_wizard
+msgid "reject.wizard"
+msgstr "reject.wizard"
+
+#. module: odex25_purchase_coc
+#: model:res.groups,name:odex25_purchase_coc.group_coc_menu
+msgid "COC Menu"
+msgstr "قائمة شهادة استلام"
+
diff --git a/odex25_purchase/odex25_purchase_coc/i18n/ar_SY_old.po b/odex25_purchase/odex25_purchase_coc/i18n/ar_SY_old.po
new file mode 100644
index 000000000..08d032dae
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/i18n/ar_SY_old.po
@@ -0,0 +1,245 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odex25_purchase_coc
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-08-24 08:27+0000\n"
+"PO-Revision-Date: 2020-08-24 08:27+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Approve"
+msgstr "موافقة"
+
+#. module: odex25_purchase_coc
+#: model:ir.actions.act_window,help:odex25_purchase_coc.purchase_coc_action
+msgid "Approve and Confirm CoC"
+msgstr "تصديق و تأكيد شهادة الانجاز"
+
+
+#. module: odex25_purchase_coc
+#: selection:purchase.order,coc_stage:0
+msgid "Before Bill"
+msgstr "قبل انشاء الفاتورة"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.order,coc_stage:0
+msgid "Before Bill Validation"
+msgstr "قبل اعتماد الفاتورة"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.order,coc_stage:0
+msgid "Before Payment"
+msgstr "قبل الدفع"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_created
+msgid "COC Created"
+msgstr "تم انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.menu,name:odex25_purchase_coc.coc_menu
+msgid "Certificat of Completion CoC"
+msgstr "شهادات الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.actions.act_window,name:odex25_purchase_coc.purchase_coc_action
+msgid "Certificate of Completion"
+msgstr "شهادة الانجاز"
+
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc
+msgid "CoC Created"
+msgstr "تم انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_id
+msgid "CoC Ref"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_coc_stage
+msgid "CoC Stage"
+msgstr "مرحلة شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_line_coc_id
+msgid "Coc"
+msgstr "شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+#: selection:purchase.coc,state:0
+msgid "Confirm"
+msgstr "تأكيد"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.view_id
+msgid "Create CoC"
+msgstr "انشاء شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,state:0
+msgid "Draft"
+msgstr "مبدئي"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_id
+msgid "ID"
+msgstr "المعرف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_account_invoice
+msgid "Invoice"
+msgstr "الفاتورة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc___last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_name
+msgid "Name"
+msgstr "الرقم المرجعي"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_order_need_coc
+msgid "Need CoC?"
+msgstr "يحتاج الى شهادة انجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_note
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Note"
+msgstr "ملاحظة"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_po_line_ids
+msgid "PO Lines"
+msgstr "الاصناف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_account_payment
+msgid "Payments"
+msgstr "المدفوعات"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_po_id
+msgid "Po Ref."
+msgstr "طلب الشراء."
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "الاصناف"
+msgstr "الاصناف"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_coc
+msgid "Purchase CoC"
+msgstr "Purchase CoC"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_order
+msgid "Purchase Order"
+msgstr "طلب الشراء"
+
+#. module: odex25_purchase_coc
+#: model:ir.model,name:odex25_purchase_coc.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "بند طلب الشراء"
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Set to Draft"
+msgstr "تعيين كمسودة"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:53
+#, python-format
+msgid "Sorry You cannot Create Bill untill CoC Created and Approved."
+msgstr "لايمكن إنشاء الفاتورة قبل انشاء وتصديف شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:87
+#, python-format
+msgid "Sorry You cannot Pay For This Vendor untill CoC Created and Approved."
+msgstr "لايمكن الدفع قبل انشاء وتصديق شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: code:addons/odex25_purchase_coc/models/models.py:67
+#, python-format
+msgid "Sorry You cannot Validate Bill untill CoC Created and Approved."
+msgstr "لايمكن اعتماد الفاتورة قبل انشاء وتصديق شهادة الانجاز"
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_state
+msgid "State"
+msgstr "الحالة"
+
+
+#. module: odex25_purchase_coc
+#: model:ir.model.fields,field_description:odex25_purchase_coc.field_purchase_coc_vendor_id
+msgid "Vendor"
+msgstr "المورد"
+
+
+
+#. module: odex25_purchase_coc
+#: model:ir.ui.view,arch_db:odex25_purchase_coc.purchase_coc_form
+msgid "Reject"
+msgstr "رفض"
+
+
+
+#. module: odex25_purchase_coc
+#: selection:purchase.coc,state:0
+msgid "Reject"
+msgstr "تم الرفض"
diff --git a/odex25_purchase/odex25_purchase_coc/models/__init__.py b/odex25_purchase/odex25_purchase_coc/models/__init__.py
new file mode 100644
index 000000000..5305644df
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase_coc/models/models.py b/odex25_purchase/odex25_purchase_coc/models/models.py
new file mode 100644
index 000000000..1c093c229
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/models/models.py
@@ -0,0 +1,187 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api, _
+from datetime import datetime
+from odoo.exceptions import ValidationError
+
+
+class POCustom(models.Model):
+ _inherit = 'purchase.order'
+
+ need_coc = fields.Boolean(string='Need CoC?')
+ coc_id = fields.Many2one(comodel_name='purchase.coc', string='CoC Ref')
+ # state = fields.Selection(selection_add=[("coc", "Waiting For CoC")])
+ coc = fields.Boolean(string='CoC Created')
+ coc_created = fields.Boolean('COC Created')
+ coc_ids = fields.One2many(comodel_name='purchase.coc', inverse_name='po_id', string='CoCs')
+ coc_count = fields.Integer(string='Cocs', compute="_compute_coc_count")
+
+ @api.depends('coc_ids')
+ def _compute_coc_count(self):
+ for rec in self:
+ rec.coc_count = len(rec.coc_ids)
+
+ def button_confirm(self):
+ super_action = super(POCustom, self).button_confirm()
+ service_products = self.order_line.filtered(lambda line: line.product_id.type == "service")
+ if service_products:
+ self.action_create_coc()
+ return super_action
+
+ def action_view_coc(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'CertificateOf Completion',
+ 'res_model': 'purchase.coc',
+ 'view_mode': 'tree,form',
+ 'target': 'current',
+ 'domain': [('po_id', '=', self.id)],
+ 'context': {'create': False}
+ }
+
+ def action_create_coc(self):
+ coc = None
+ coc = self.env['purchase.coc'].create({
+ 'vendor_id': self.partner_id.id,
+ 'date': datetime.today(),
+ 'po_id': self.id,
+ 'state': 'draft'
+ })
+ for line in self.order_line.filtered(lambda line: line.product_id.type == 'service' and line.choosen == True):
+ line.coc_id = coc.id
+ self.coc_id = coc.id
+ self.coc_created = True
+
+ def action_create_invoice(self):
+ for rec in self:
+ if rec and rec.coc_ids.filtered(lambda coc: coc.coc_stage == 'before_bill' and coc.state != 'approve'):
+ raise ValidationError(_("Sorry You cannot Create Bill untill CoC Created and Approved."))
+ return super(POCustom, rec).action_create_invoice()
+
+class PurchaseOrderLine(models.Model):
+ _inherit = 'purchase.order.line'
+
+ coc_id = fields.Many2one('purchase.coc')
+
+
+class AccountInvoiceCustom(models.Model):
+ _inherit = 'account.move'
+
+
+ def action_post(self):
+ if self.move_type == 'in_invoice':
+ context = self.env.context
+ print("context",context)
+ po = self.env['purchase.order'].search([('id', '=', context.get('active_id', False))])
+ print(po.coc_ids.filtered(lambda coc: coc.coc_stage == 'befor_bill_valid' and coc.state != 'approve'))
+ if po and po.coc_ids.filtered(lambda coc: coc.coc_stage == 'befor_bill_valid' and coc.state != 'approve'):
+ raise ValidationError(_("Sorry You cannot Validate Bill untill CoC Created and Approved."))
+ else:
+ return super(AccountInvoiceCustom, self).action_post()
+ else:
+ return super(AccountInvoiceCustom, self).action_post()
+
+ def action_confirm(self):
+ if self.move_type == 'in_invoice':
+ context = self.env.context
+ print("context",context)
+ po = self.env['purchase.order'].search([('id', '=', context.get('active_id', False))])
+ print(po.coc_ids.filtered(lambda coc: coc.coc_stage == 'befor_bill_valid' and coc.state != 'approve'))
+ if po and po.coc_ids.filtered(lambda coc: coc.coc_stage == 'befor_bill_valid' and coc.state != 'approve'):
+ raise ValidationError(_("Sorry You cannot Validate Bill untill CoC Created and Approved."))
+ else:
+ return super(AccountInvoiceCustom, self).action_confirm()
+ else:
+ return super(AccountInvoiceCustom, self).action_confirm()
+
+ def action_register_payment(self):
+ if self.move_type == 'in_invoice':
+ context = self.env.context
+ po = self.env['purchase.order'].search([('id', '=', context.get('active_id', False))])
+ if po and po.coc_ids.filtered(lambda coc: coc.coc_stage == 'before_payment' and coc.state != 'approve'):
+ raise ValidationError(_("Sorry You cannot Pay For This Vendor untill CoC Created and Approved."))
+ else:
+ return super(AccountInvoiceCustom, self).action_register_payment()
+ else:
+ return super(AccountInvoiceCustom, self).action_register_payment()
+
+class PurchaseCoC(models.Model):
+ _name = 'purchase.coc'
+ _description = 'Purchase CoC'
+
+ name = fields.Char(string='Name')
+ coc_stage = fields.Selection(string='CoC Stage', selection=[('before_bill', 'Before Bill'),
+ ('befor_bill_valid', 'Before Bill Validation'),
+ ('before_payment', 'Before Payment')]
+ ,default='before_bill')
+ po_id = fields.Many2one(comodel_name='purchase.order', string='Po Ref.')
+ vendor_id = fields.Many2one(comodel_name='res.partner', string='Vendor', related="po_id.partner_id")
+ date = fields.Date(string='Date')
+ note = fields.Text(string='Note')
+ state = fields.Selection(string='', selection=[('draft', 'Draft'), ('confirm', 'Confirm'), ('approve', 'Approve'),
+ ('cancel', 'Reject')])
+ po_line_ids = fields.One2many('purchase.order.line', 'coc_id', string='PO Lines')
+ reject_reason = fields.Char(string='Reject Reason')
+
+ @api.model
+ def create(self, vals):
+ vals['name'] = self.env['ir.sequence'].next_by_code(self._name)
+ return super(PurchaseCoC, self).create(vals)
+
+ def action_confirm(self):
+ self.write({
+ 'state': 'confirm'
+ })
+
+ def action_approve(self):
+ self.write({
+ 'state': 'approve'
+ })
+ # This code is commented because the exchange request module is not needed and
+ # will cause a problem when we uninstall the exchange request module
+ # if self.po_id and self.po_id.requisition_id and self.po_id.requisition_id.exchange_request:
+ # self.po_id.requisition_id.exchange_request.write({
+ # 'state' : 'done'
+ # })
+
+ def action_cancel(self):
+ if self.env.context['lang'] in['ar_SY','ar_001']:
+ action_name = 'حدد سبب الرفض'
+ else:
+ action_name = 'Specify Reject Reason'
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': action_name,
+ 'res_model': 'reject.wizard',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {'default_origin': self.id, 'default_origin_name': self._name}
+ }
+
+ def cancel(self):
+ self.write({
+ 'state': 'cancel',
+ 'reject_reason': self.env.context.get('reject_reason')
+ })
+ self.po_id.message_post(body=_(
+ 'Coc Rejected By %s . With Reject Reason : %s' % (str(self.env.user.name), str(self.reject_reason))))
+
+ def action_draft(self):
+ self.write({
+ 'state': 'draft'
+ })
+
+
+class RejectWizard(models.TransientModel):
+ _name = 'reject.wizard.coc'
+
+ origin = fields.Integer('')
+ reject_reason = fields.Text(string='Reject Reson')
+ origin_name = fields.Char('')
+
+ def action_reject(self):
+ origin_rec = self.env[self.origin_name].sudo().browse(self.origin)
+ if dict(origin_rec._fields).get('reject_reason') == None:
+ raise ValidationError(_('Sorry This object have no field named Selection Reasoon'))
+ else:
+ return origin_rec.with_context({'reject_reason': self.reject_reason}).cancel()
diff --git a/odex25_purchase/odex25_purchase_coc/security/ir.model.access.csv b/odex25_purchase/odex25_purchase_coc/security/ir.model.access.csv
new file mode 100644
index 000000000..9a3b20fbf
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_odex25_purchase_coc_odex25_purchase_coc,odex25_purchase_coc.odex25_purchase_coc,model_purchase_coc,,1,0,0,0
+access_odex25_purchase_coc_odex25_purchase_coc_user,odex25_purchase_coc.odex25_purchase_coc_user,model_purchase_coc,group_coc_user,1,1,1,0
+access_odex25_purchase_coc_odex25_purchase_coc_manager,odex25_purchase_coc.odex25_purchase_coc_manager,model_purchase_coc,group_coc_manager,1,1,1,1
diff --git a/odex25_purchase/odex25_purchase_coc/security/security.xml b/odex25_purchase/odex25_purchase_coc/security/security.xml
new file mode 100644
index 000000000..0ff6f048b
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/security/security.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ COC User
+
+
+
+
+ COC Manager
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_purchase_coc/sequence/seq.xml b/odex25_purchase/odex25_purchase_coc/sequence/seq.xml
new file mode 100644
index 000000000..7937e1b9f
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/sequence/seq.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ CoC Sequence
+ purchase.coc
+ COC-%(year)s/%(month)s/0000
+
+ True
+
+
+
+
diff --git a/odex25_purchase/odex25_purchase_coc/static/description/icon.png b/odex25_purchase/odex25_purchase_coc/static/description/icon.png
new file mode 100644
index 000000000..a48b24bdb
Binary files /dev/null and b/odex25_purchase/odex25_purchase_coc/static/description/icon.png differ
diff --git a/odex25_purchase/odex25_purchase_coc/static/src/css/loginpage.css b/odex25_purchase/odex25_purchase_coc/static/src/css/loginpage.css
new file mode 100644
index 000000000..d24cf4089
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/static/src/css/loginpage.css
@@ -0,0 +1,16 @@
+
+@charset "UTF-8";
+
+main .oe_website_login_container {
+
+ vertical-align: middle;
+ padding: 40px 65px 0px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ float: none;
+ background-color: #FFF;
+ box-shadow: 0.33px 3px 12px rgba(0, 0, 0, 0.3);
+ width: 400px;
+ margin: 40px auto;
+ }
+}
diff --git a/odex25_purchase/odex25_purchase_coc/static/src/js/online_tender.js b/odex25_purchase/odex25_purchase_coc/static/src/js/online_tender.js
new file mode 100644
index 000000000..dc473dd4d
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/static/src/js/online_tender.js
@@ -0,0 +1,31 @@
+odoo.define('online_tendering.online_tender', function (require) {
+ "use strict";
+ require('web.dom_ready');
+ var core = require('web.core');
+ var ajax = require('web.ajax');
+ var QWeb = core.qweb;
+ $('.subtotal').text("0");
+ $('.untax_total').text("0");
+ $('.tax_total').text("0");
+ $('.price').change(function(event){
+ $('.untax_total').text("0");
+ $('.tax_total').text("0");
+ var subtotal = 0;
+ var parent_tr = $(event.currentTarget).parent().parent();
+ var old_subtotal = parseInt(parent_tr.children(".subtotal").text())
+ subtotal = event.currentTarget.value * parseInt(parent_tr.children(".qty").text())
+ var untax_total = Math.abs(parseInt($('.untax_total').text()) - old_subtotal + subtotal)
+ $('.untax_total').text(untax_total)
+ var tax_total = untax_total + (untax_total * parseInt($('#tax').text())/100)
+ parent_tr.children(".subtotal").text(subtotal)
+ $('.tax_total').text(tax_total)
+ });
+
+ $('#tax').change(function(event){
+ var untax_total = parseInt($('.untax_total').text())
+ var tax_total = untax_total + untax_total * parseInt($(event.currentTarget).text())/100
+ $('.tax_total').text(tax_total)
+ })
+
+
+});
\ No newline at end of file
diff --git a/odex25_purchase/odex25_purchase_coc/static/src/xml/tender_templates.xml b/odex25_purchase/odex25_purchase_coc/static/src/xml/tender_templates.xml
new file mode 100644
index 000000000..817dc36dd
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/static/src/xml/tender_templates.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_purchase_coc/views/views.xml b/odex25_purchase/odex25_purchase_coc/views/views.xml
new file mode 100644
index 000000000..797470547
--- /dev/null
+++ b/odex25_purchase/odex25_purchase_coc/views/views.xml
@@ -0,0 +1,91 @@
+
+
+
+
+ purchase.order.inherit.view.form
+ purchase.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ purchase.coc.view.form
+ purchase.coc
+
+
+
+
+
+
+
+ model.name.view.tree
+ purchase.coc
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Certificate of Completion
+ ir.actions.act_window
+ purchase.coc
+ tree,form
+
+
+ Approve and Confirm CoC
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_taqeem_purchase/__init__.py b/odex25_purchase/odex25_taqeem_purchase/__init__.py
new file mode 100644
index 000000000..0650744f6
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/odex25_purchase/odex25_taqeem_purchase/__manifest__.py b/odex25_purchase/odex25_taqeem_purchase/__manifest__.py
new file mode 100644
index 000000000..1dfd8d2e2
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/__manifest__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': 'Taqeem Purchase custom',
+ 'version': '1.1',
+ 'summary': 'Adding new Functionality on the Purchase Requests',
+ 'sequence': -1,
+ 'category':'Odex25-Purchase/Odex25-Purchase',
+ 'description': """
+ Adding new Functionalities in Purchase Requests
+ """,
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'security/security.xml',
+ 'views/purchase_less_thirty_view.xml',
+ 'views/res_partner.xml',
+ 'views/direct_purchase.xml',
+ 'views/res_config_setting.xml',
+ 'views/res_company.xml',
+ 'views/competitive_purchase_attachment.xml',
+ 'views/competitve_purchase.xml',
+ 'views/account_analytic_account_views.xml',
+ ],
+ 'depends': ['purchase', 'governmental_purchase', 'purchase_requisition_custom'],
+ # 'account_budget_custom', exp_budget_check
+ 'installable': True,
+ 'application': True,
+}
diff --git a/odex25_purchase/odex25_taqeem_purchase/i18n/ar_001.po b/odex25_purchase/odex25_taqeem_purchase/i18n/ar_001.po
new file mode 100644
index 000000000..30d05c688
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/i18n/ar_001.po
@@ -0,0 +1,830 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odex25_taqeem_purchase
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-01-24 13:40+0000\n"
+"PO-Revision-Date: 2024-01-24 13:40+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__alternative_offer
+msgid "Allow Alternative Offer"
+msgstr "يسمح بالعرض البديل"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_account_analytic_account
+msgid "Analytic Account"
+msgstr "الحسابات التحليلية"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.actions.act_window,name:odex25_taqeem_purchase.action_competitive_purchase_attachment
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__attachment_scop
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__attach
+#: model:ir.ui.menu,name:odex25_taqeem_purchase.menu_action_competitive_purchase_attachment
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.competitive_purchase_attachment_form_view
+msgid "Application brochure"
+msgstr "كراسة الطلب"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__name
+msgid "Application brochure Name"
+msgstr "اسم الكراسة"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Approve"
+msgstr "إعتماد"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_budget_confirmation
+msgid "Budget Confirmation"
+msgstr "تعميد الموازنة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__send_budget
+msgid "Budget Management"
+msgstr "انتظار الارسال"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_account_analytic_account__item_executive_officer
+msgid "Budget executive Officer"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__business_place
+msgid "Business Place"
+msgstr "مكان تنفيذ اﻷعمال"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Can't Confirm Request With No Item!"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__cancel
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__check_chief_executive
+msgid "Check Chief Executive"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__chief_executive_officer
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__dm
+msgid "Chief Executive Officer"
+msgstr "المدير التنفيذي للبند"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__general_supervisor
+msgid "Chief Procurement Executive"
+msgstr "الرئيس "
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__need_to_reparation__comming
+msgid "Comming"
+msgstr "لاحق"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_res_company
+msgid "Companies"
+msgstr "شركات"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__purchase_type__competitive
+msgid "Competitive"
+msgstr "تنافسي"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.actions.act_window,name:odex25_taqeem_purchase.action_purchase_request_competitive
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__competitive_purchase_id
+msgid "Competitive Purchase"
+msgstr "طلبات شراء المنافسات"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.ui.menu,name:odex25_taqeem_purchase.purchase_request_competitive_menu
+msgid "Competitive Purchase Request"
+msgstr "طلبات شراء المنافسات"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__competitive_type
+msgid "Competitive Type"
+msgstr "نوع المنافسة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_res_config_settings
+msgid "Config Settings"
+msgstr "ضبط الاعدادات"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__create_uid
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__create_date
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__day
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_config_settings__day
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__date_receive_offer__day
+msgid "Day"
+msgstr "يوم"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Days must be equal or greater than %s"
+msgstr "عدد اﻷيام يجب أن تكون اكثر من "
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Delivered sample address"
+msgstr "عنوان تسليم العينات"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Delivery Info"
+msgstr "معلومات التسليم"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__delivery_samples
+msgid "Delivery Samples"
+msgstr "تسليم العينات"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__delivery_type
+msgid "Delivery type"
+msgstr "نوع التسليم"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__department_alter_offer
+msgid "Department Alternative Offer"
+msgstr "هل توصي اﻹدارة بقبول العروض البديلة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__dep_suggestion
+msgid "Department Suggestion"
+msgstr "رأي اﻹدارة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.ui.menu,name:odex25_taqeem_purchase.purchase_request_direct_menu
+msgid "Direct Purchase Request"
+msgstr "طلبات الشراء المباشر"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_account_analytic_account__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_budget_confirmation__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request_line__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_company__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_partner__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__document_list
+msgid "Document List"
+msgstr "قائمة الوثائق"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__done
+msgid "Done"
+msgstr "تم"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+msgid "Download"
+msgstr "تنزيل"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+msgid "Download Application brochure"
+msgstr "تنزيل كراسة الطلب"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__delivery_type__electronic
+msgid "Electronic"
+msgstr "إلكتروني"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__supplier_email
+msgid "Email"
+msgstr "الايميل"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__mech_evaluating_supp
+msgid "Evaluating supplier mechanism"
+msgstr "الية تقييم المورد المقترح"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__budget_approve
+msgid "Executive Vice President of Corporate Resources"
+msgstr "المدير التنفيذي للخدمات المشتركة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_account_analytic_account__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_budget_confirmation__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request_line__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_company__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_config_settings__id
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_partner__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_needaction
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_has_error
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__operational_construction
+msgid "Item Operational Construction"
+msgstr "هل البند ضمن الخطة التشغيلية"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_account_analytic_account____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_budget_confirmation____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request_line____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_company____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_partner____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__write_uid
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__write_date
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__purchase_type__less_twenty
+msgid "Less Than Twenty"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__purchase_type__less_thirty
+msgid "Less than thirty"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__delivery_type__manual
+msgid "Manual"
+msgstr "يدوي"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__material_spec
+msgid "Material Specification"
+msgstr "مواصفات المواد"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__month
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_config_settings__month
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__date_receive_offer__month
+msgid "Month"
+msgstr "شهر"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Months must be equal or greater than %s"
+msgstr "الشهور يجب الا تكن اقل من"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__delivery_samples__no
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__material_spec__no
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__quality_spec__no
+msgid "NO"
+msgstr "لا ينطبق"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__need_to_reparation
+msgid "Need Preparation"
+msgstr "هل يحتاج إلى تأهيل"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__alternative_offer__no
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__department_alter_offer__no
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__operational_construction__no
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__sell_document__no
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__work_service_imp__no
+msgid "No"
+msgstr "لا"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__need_to_reparation__noy_need
+msgid "Not need"
+msgstr "لا يحتاج"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__material_notes
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__quality_notes
+msgid "Note"
+msgstr "توضيح"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__offer_requirements
+msgid "Offer Requirements"
+msgstr "متطلبات تنسيق العروض"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Order Base info"
+msgstr "المعلومات اﻷساسية للطلب"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__wait_budget
+msgid "Pending Budget Approve"
+msgstr "في انتظار إدارة الميزانية"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__supplier_phone
+msgid "Phone"
+msgstr "الهاتف"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Please Select department for employee"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__need_to_reparation__previous
+msgid "Previous"
+msgstr "مسبق"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__waiting
+msgid "Procurement Department"
+msgstr "إدارة المشتريات"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__project_start_date
+msgid "Project start date"
+msgstr "تاريخ بداية المشروع"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__date_receive_offer
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.res_config_settings_view_form_purchase
+msgid "Proposed Period Receiving Offer"
+msgstr "المدة المقترحة ﻹستقبال العروض"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__purchase_ids
+msgid "Purchase"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__purchase_line_ids
+msgid "Purchase Line"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_purchase_request
+msgid "Purchase Request"
+msgstr "طلبات الشراء"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.ui.menu,name:odex25_taqeem_purchase.purchase_request_less_thirty_menu
+msgid "Purchase Request Less Thirty"
+msgstr "طلبات الشراء أقل من ثلاثين ألف"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__purchase_type
+msgid "Purchase Type"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.actions.act_window,name:odex25_taqeem_purchase.action_purchase_request_less_thirty
+msgid "Purchase less than thirty"
+msgstr "طلبات الشراء أقل من ثلاثين ألف"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.actions.act_window,name:odex25_taqeem_purchase.action_purchase_request_direct
+msgid "Purchase less than twenty"
+msgstr "طلبات الشراء المباشر"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__record_licenses
+msgid "Records and licenses"
+msgstr "السجلات والتراخيص النظامية"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__refuse
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Refuse"
+msgstr "رفض"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__remain_budget
+msgid "Remain"
+msgstr "المتبقي من الموازنة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request_line__remain
+msgid "Remain Budget"
+msgstr "المتبقي من الموازنة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__draft
+msgid "Request Producer"
+msgstr "مقدم الطلب"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__attachment_scope_project
+msgid "Scope Project"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__selected_supplier_id
+msgid "Selected Supplier"
+msgstr "المورد المقترح"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__sell_document
+msgid "Sell Documents"
+msgstr "بيع الوثائق"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__special_condition
+msgid "Special Condition"
+msgstr "الشروط الخاصة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__state
+msgid "State"
+msgstr "الحالة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:res.groups,name:odex25_taqeem_purchase.strategy_project_group
+msgid "Strategy And Project Group"
+msgstr "إدارة اﻹستراتيجية والمشاريع"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+msgid "Strategy Project Department"
+msgstr "إدارة اﻹستراتيجية والمشاريع"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__str_pro_department
+msgid "Strategy Projects Departments"
+msgstr "إدارة اﻹستراتيجية والمشاريع"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Submit"
+msgstr "إرسال"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_thirty
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_less_twenty
+msgid "Suggested Supplier"
+msgstr "المورد المقترح"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_requests_line__supplier_id
+msgid "Supplier"
+msgstr "المورد"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__state__direct_manager
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+msgid "Technical Department"
+msgstr "الإدارة الفنية"
+
+#. module: odex25_taqeem_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_taqeem_purchase.purchase_request_competitive
+msgid "Technical Department Use"
+msgstr "استخدام إدارة المشتريات"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid ""
+"There is not enough balance for account %s to sen purchase request,Please "
+"contact to your executive director"
+msgstr "لايوجد رصيد كافي لهذا الحساب التحليلي ﻹرسال طلب الشراء برجاء التواصل مع المدير التنفيذي للبند"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid ""
+"There is not enough balance to sen purchase request,Please contact to your "
+"executive director"
+msgstr "لايوجد رصيد كافي ﻹرسال طلب الشراء برجاء التواصل مع المدير التنفيذي للبند"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Total Amount Must be less than thirty thousand"
+msgstr "يجب أن تكون القيمة اﻹجمالية أقل من ثلاثين ألف ريال"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Total Amount Must be less than two hundred thousand"
+msgstr "يجب أن تكون القيمة اﻹجمالية أقل من مائتي ألف ريال"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__attachment_upload
+msgid "Upload Application brochure"
+msgstr "رفع كراسة الطلب"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_competitive_purchase_attachment__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,help:odex25_taqeem_purchase.field_competitive_purchase_attachment__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__work_service_imp
+msgid "Work service Implementation"
+msgstr "كيفية تنفيذ الخدمات واﻷعمال"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__year
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_res_config_settings__year
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__date_receive_offer__year
+msgid "Year"
+msgstr "سنة"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "Years must be equal or greater than %s"
+msgstr "عدد السنوات يجب الا يكون اقل من"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__alternative_offer__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__delivery_samples__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__department_alter_offer__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__material_spec__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__operational_construction__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__quality_spec__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__sell_document__yes
+#: model:ir.model.fields.selection,name:odex25_taqeem_purchase.selection__purchase_request__work_service_imp__yes
+msgid "Yes"
+msgstr "نعم"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "You have to select at least Five supplier"
+msgstr "يجب أن تختار خمس موردين على اﻷقل"
+
+#. module: odex25_taqeem_purchase
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#: code:addons/odex25_taqeem_purchase/models/purchase_request.py:0
+#, python-format
+msgid "You have to select at least one supplier"
+msgstr "يجب أن تختار مورد واحد على اﻷقل"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_competitive_purchase_attachment
+msgid "competitive.purchase.attachment"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_account_analytic_account__department_id
+msgid "department"
+msgstr "القسم"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_purchase_request_line
+msgid "purchase request line"
+msgstr "بند طلب الشراء"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model,name:odex25_taqeem_purchase.model_purchase_requests_line
+msgid "purchase.requests.line"
+msgstr ""
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__quality_spec
+msgid "quality Specification"
+msgstr "مواصفات الجودة"
+
+#. module: odex25_taqeem_purchase
+#: model:ir.model.fields,field_description:odex25_taqeem_purchase.field_purchase_request__room
+msgid "room/department"
+msgstr "الغرفة/اﻹدارة"
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/__init__.py b/odex25_purchase/odex25_taqeem_purchase/models/__init__.py
new file mode 100644
index 000000000..563706c81
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/__init__.py
@@ -0,0 +1,3 @@
+from . import purchase_request, budget_confirmation, res_partner, account_analytic_account, res_config_setting, \
+ res_company
+from . import competitive_purchase_attachment
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/account_analytic_account.py b/odex25_purchase/odex25_taqeem_purchase/models/account_analytic_account.py
new file mode 100644
index 000000000..d9c2b4d26
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/account_analytic_account.py
@@ -0,0 +1,8 @@
+from odoo import fields, models, _
+
+
+class AccountAnalyticAccount(models.Model):
+ _inherit = "account.analytic.account"
+
+ item_executive_officer = fields.Many2one('hr.employee', string='Budget executive Officer')
+ department_id = fields.Many2one('hr.department', string='department')
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/budget_confirmation.py b/odex25_purchase/odex25_taqeem_purchase/models/budget_confirmation.py
new file mode 100644
index 000000000..856562f98
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/budget_confirmation.py
@@ -0,0 +1,10 @@
+from odoo import fields, models, _
+
+
+class BudgetConfirmationCustom(models.Model):
+ _inherit = 'budget.confirmation'
+
+ def done(self):
+ super(BudgetConfirmationCustom, self).done()
+ if self.request_id and self.type == 'purchase.request':
+ self.request_id.write({'state': 'budget_approve'})
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/competitive_purchase_attachment.py b/odex25_purchase/odex25_taqeem_purchase/models/competitive_purchase_attachment.py
new file mode 100644
index 000000000..38c1e3713
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/competitive_purchase_attachment.py
@@ -0,0 +1,12 @@
+from odoo import fields, models
+
+
+class CompetitivePurchaseAttachment(models.Model):
+ _name = "competitive.purchase.attachment"
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _description = "competitive.purchase.attachment"
+
+ purchase_ids = fields.One2many('purchase.request', 'competitive_purchase_id')
+ name = fields.Char(string='Application brochure Name')
+ attachment_scop = fields.Binary(
+ string='Application brochure', readonly=False, attachment=True, required=True)
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/purchase_request.py b/odex25_purchase/odex25_taqeem_purchase/models/purchase_request.py
new file mode 100644
index 000000000..e24dbcb39
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/purchase_request.py
@@ -0,0 +1,300 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError, ValidationError
+from lxml import etree
+import json
+import base64
+import urllib.parse
+
+
+class PurchaseRequest(models.Model):
+ _inherit = 'purchase.request'
+ project_start_date = fields.Date('Project start date')
+ check_chief_executive = fields.Boolean()
+ chief_executive_officer = fields.Many2one('res.users', compute='get_chief_executive_officer', store=True)
+ selected_supplier_id = fields.One2many('purchase.requests.line', 'purchase_line_ids')
+ material_spec = fields.Selection([('yes', 'Yes'), ('no', 'NO')], string='Material Specification')
+ quality_spec = fields.Selection([('yes', 'Yes'), ('no', 'NO')], string='quality Specification')
+ delivery_samples = fields.Selection([('yes', 'Yes'), ('no', 'NO')], string='Delivery Samples')
+ delivery_type = fields.Selection([('electronic', 'Electronic'), ('manual', 'Manual')], string='Delivery type')
+ # building = fields.Char('Building')
+ # floor = fields.Char('Floor')
+ room = fields.Char('room/department')
+ # date_time = fields.Datetime('Date&Time')
+ material_notes = fields.Char(string='Note')
+ quality_notes = fields.Char(string='Note')
+ business_place = fields.Char(string='Business Place')
+ special_condition = fields.Char(string='Special Condition')
+ attachment_scope_project = fields.Char(string="Scope Project", copy=False)
+ work_service_imp = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Work service Implementation')
+ alternative_offer = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Allow Alternative Offer')
+ # remain_budget = fields.Float(string='Remain', compute='get_remaining_budget', store=True)
+ date_receive_offer = fields.Selection([('day', 'Day'), ('month', 'Month'), ('year', 'Year')],
+ string='Proposed Period Receiving Offer')
+ day = fields.Integer(string='Day')
+ month = fields.Integer(string='Month')
+ year = fields.Integer(string='Year')
+ company_id = fields.Many2one('res.company', default=lambda self: self.env.user.company_id)
+ attachment_scop = fields.Binary(related="company_id.attachment_scop",string='Application brochure',)
+
+ remain_budget = fields.Float(string='Remain', compute='get_remaining_budget', store=True)
+
+ state = fields.Selection(
+ selection_add=[('draft', 'Request Producer'),
+ ('dm', 'Chief Executive Officer'),
+ ('str_pro_department', 'Strategy Projects Departments'),
+ ('direct_manager', 'Technical Department'),
+ ('send_budget', 'Budget Management'),
+ ('wait_budget', 'Pending Budget Approve'),
+ ('budget_approve', 'Executive Vice President of Corporate Resources'),
+ ('general_supervisor', 'Chief Procurement Executive'),
+ ('waiting', 'Procurement Department'),
+ ('done', 'Done'),
+ ('cancel', 'Cancel'),
+ ('refuse', 'Refuse')], default="draft", tracking=True)
+ purchase_type = fields.Selection(
+ [('less_thirty', 'Less than thirty'), ('less_twenty', 'Less Than Twenty'), ('competitive', 'Competitive')])
+ department_alter_offer = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Department Alternative Offer')
+ document_list = fields.Char(string='Document List')
+ record_licenses = fields.Char(string='Records and licenses')
+ mech_evaluating_supp = fields.Char(string='Evaluating supplier mechanism')
+ attachment_upload = fields.Char(string='Upload Application brochure')
+ offer_requirements = fields.Char(string='Offer Requirements')
+ competitive_type = fields.Char(string='Competitive Type')
+ sell_document = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Sell Documents')
+ need_to_reparation = fields.Selection([('previous', 'Previous'), ('comming', 'Comming'), ('noy_need', 'Not need')],
+ string='Need Preparation')
+ operational_construction = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Item Operational Construction')
+ dep_suggestion = fields.Char(string='Department Suggestion')
+
+ competitive_purchase_id = fields.Many2one('competitive.purchase.attachment')
+ attach = fields.Binary(related='competitive_purchase_id.attachment_scop', attachment=True)
+
+ @api.model
+ def create(self, vals):
+ default_purchase_type = self.env.context.get('default_purchase_type')
+ if default_purchase_type == 'less_thirty':
+ vals['name'] =self.env['ir.sequence'].next_by_code('purchase.seq30.sequence') or '/'
+ com_attach = self.env['competitive.purchase.attachment'].search([])
+ res = super(PurchaseRequest, self).create(vals)
+ res['competitive_purchase_id'] = com_attach
+ return res
+ elif default_purchase_type=='competitive':
+ print('com')
+ vals['name'] =self.env['ir.sequence'].next_by_code('purchase.com.sequence') or '/'
+ com_attach = self.env['competitive.purchase.attachment'].search([])
+ res = super(PurchaseRequest, self).create(vals)
+ res['competitive_purchase_id'] = com_attach
+ return res
+ else:
+ res = super(PurchaseRequest, self).create(vals)
+ com_attach = self.env['competitive.purchase.attachment'].search([])
+ res['competitive_purchase_id'] = com_attach
+ return res
+
+ def download_url(self):
+ return {
+ "type": "ir.actions.act_url",
+ "url": '/web/content/competitive.purchase.attachment/%s/attachment_scop/attachment_scop.?download=true'% (self.competitive_purchase_id.id),
+ "target": "new",
+ }
+
+ @api.constrains('date_receive_offer')
+ def check_date_receiving_offer(self):
+ config_settings = self.env['res.config.settings'].create(
+ {}) # Create an empty record print('config_day')
+ config_settings.execute() # Load the current configuration values
+ for rec in self:
+ if rec.date_receive_offer:
+ if rec.day < config_settings.day and rec.day:
+ raise ValidationError(_("Days must be equal or greater than %s" % config_settings.day))
+ if rec.month < config_settings.month and rec.month:
+ raise ValidationError(_("Months must be equal or greater than %s" % config_settings.month))
+ if rec.year < config_settings.year and rec.year:
+ raise ValidationError(_("Years must be equal or greater than %s" % config_settings.year))
+
+ def get_budget_line(self, product_account):
+ budget_account = self.env['account.budget.post'].search([])
+ for budget in budget_account:
+ if budget.account_ids == product_account:
+ return budget
+ def action_confirm_button(self):
+ if len(self.line_ids) == 0:
+ raise ValidationError(_("Can't Confirm Request With No Item!"))
+ if not self.department_id:
+ raise ValidationError(_("Please Select department for employee"))
+ self.write({'state': 'str_pro_department'})
+
+
+ @api.depends('line_ids')
+ def get_remaining_budget(self):
+ for rec in self.line_ids:
+ if len(self) ==1:
+ if self.is_analytic:
+ # fix issue singlton
+ self.ensure_one()
+ purchase_account = rec.account_id
+ product_account = rec.product_id.property_account_expense_id
+ budget_name = self.get_budget_line(product_account)
+ budget_accounts = self.env['crossovered.budget'].search([])
+ for account in budget_accounts.crossovered_budget_line:
+ if account.analytic_account_id == purchase_account and budget_name == account.general_budget_id:
+ rec.remain = account.remain
+ print(account.remain, 'account.remain')
+ elif self.department_id:
+ department_account = self.department_id.analytic_account_id
+ budget_accounts = self.env['crossovered.budget'].search([])
+ for account in budget_accounts.crossovered_budget_line:
+ if account.analytic_account_id == department_account:
+ rec.remain = account.remain
+
+ elif len(self) >1:
+ for y in self:
+ if y.is_analytic:
+ purchase_account = rec.account_id
+ product_account = rec.product_id.property_account_expense_id
+ budget_name = self.get_budget_line(product_account)
+ budget_accounts = self.env['crossovered.budget'].search([])
+ for account in budget_accounts.crossovered_budget_line:
+ if account.analytic_account_id == purchase_account and budget_name == account.general_budget_id:
+ rec.remain = account.remain
+ print(account.remain, 'account.remain')
+ elif self.department_id:
+ department_account = self.department_id.analytic_account_id
+ budget_accounts = self.env['crossovered.budget'].search([])
+ for account in budget_accounts.crossovered_budget_line:
+ if account.analytic_account_id == department_account:
+ rec.remain = account.remain
+
+ @api.depends('line_ids', 'department_id')
+ def get_chief_executive_officer(self):
+ for record in self:
+ if record.is_analytic:
+ item_executive_officer = record.line_ids.account_id.item_executive_officer.user_id
+ record.chief_executive_officer = item_executive_officer
+ return item_executive_officer
+ else:
+ item_executive_officer = record.department_id.analytic_account_id.item_executive_officer.user_id
+ record.chief_executive_officer = item_executive_officer
+ return item_executive_officer
+
+ def read(self, records):
+ res = super(PurchaseRequest, self).read(records)
+ if self.chief_executive_officer == self.env.user:
+ self.check_chief_executive = True
+ else:
+ self.check_chief_executive = False
+ return res
+
+ @api.model
+ def fields_view_get(self, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(PurchaseRequest, self).fields_view_get(view_id, view_type, toolbar=toolbar, submenu=False)
+ doc = etree.XML(res['arch'])
+ for node in doc.xpath("//field[@name='name']"):
+ modifiers = json.loads(node.get("modifiers"))
+ modifiers['readonly'] = True
+ node.set("modifiers", json.dumps(modifiers))
+ for node in doc.xpath("//field[@name='operational_construction']"):
+ modifiers = json.loads(node.get("modifiers"))
+ modifiers['readonly'] = [
+ ('state', 'not in', ['str_pro_department'])]
+ for node in doc.xpath("//field[@name='partner_id']"):
+ modifiers = json.loads(node.get("modifiers"))
+ modifiers['readonly'] = [
+ ('state', 'not in', ['waiting'])]
+ node.set("modifiers", json.dumps(modifiers))
+ for node in doc.xpath("//field[@name='type_id']"):
+ modifiers = json.loads(node.get("modifiers"))
+ modifiers['readonly'] = [
+ ('state', 'not in', ['waiting'])]
+ node.set("modifiers", json.dumps(modifiers))
+ for node in doc.xpath("//field[@name='line_ids']"):
+ modifiers = json.loads(node.get("modifiers"))
+ modifiers['readonly'] = [('state', '!=', 'draft')]
+ node.set("modifiers", json.dumps(modifiers))
+ res['arch'] = etree.tostring(doc, encoding='unicode')
+ return res
+
+ def action_pc_confirm(self):
+ if self.purchase_type != 'less_thirty':
+ self.write({'state': 'general_supervisor'})
+ else:
+ self.write({'state': 'waiting'})
+
+ def is_account_repeated(self, lines):
+ accounts = set()
+ for line in lines:
+ account = line.account_id
+ if account in accounts:
+ print(accounts, 'line')
+ return True
+ accounts.add(account)
+ print(accounts, 'accountsbjh')
+ return False
+
+ def check_budget(self):
+ total = 0
+ for line in self.line_ids:
+ total += line.sum_total
+ if not self.is_analytic:
+ print(total, 'check_budget')
+ print('Department Account')
+ if abs(line.remain) < total:
+ raise ValidationError(
+ _("There is not enough balance to sen purchase request,"
+ "Please contact to your executive director"))
+ else:
+ if self.is_account_repeated(self.line_ids) == True:
+ if abs(line.remain) < total:
+ print('with repeated account')
+ raise ValidationError(
+ _("There is not enough balance to sen purchase request,"
+ "Please contact to your executive director"))
+ else:
+ if abs(line.remain) < line.sum_total:
+ print('no repeated accounts')
+ raise ValidationError(
+ _("There is not enough balance for account %s to sen purchase request,"
+ "Please contact to your executive director") % line.account_id.name)
+
+ def action_dm_confirm(self):
+ res = super(PurchaseRequest, self).action_dm_confirm()
+ self.check_budget()
+ if self.purchase_type == 'less_twenty':
+ if not self.selected_supplier_id:
+ raise ValidationError(_("You have to select at least one supplier"))
+ elif self.purchase_type == 'less_thirty':
+ if not self.selected_supplier_id:
+ raise ValidationError(_("You have to select at least one supplier"))
+ elif self.purchase_type == 'competitive':
+ line_len = 0
+ for line in self.selected_supplier_id:
+ line_len += 1
+ if line_len < 5:
+ raise ValidationError(_("You have to select at least Five supplier"))
+ return res
+
+ def technical_department(self):
+ self.write({'state': 'direct_manager'})
+
+ @api.constrains('line_ids')
+ def check_amount_total(self):
+ for line in self.line_ids:
+ if self.purchase_type == 'less_thirty' and line.sum_total > 30000:
+ raise ValidationError(_("Total Amount Must be less than thirty thousand"))
+ elif self.purchase_type == 'less_twenty' and line.sum_total > 200000:
+ raise ValidationError(_("Total Amount Must be less than two hundred thousand"))
+
+
+class PurchaseRequestLine(models.Model):
+ _inherit = 'purchase.request.line'
+
+ remain = fields.Float(string='Remain Budget')
+
+
+class PurchaseRequestsLine(models.Model):
+ _name = 'purchase.requests.line'
+
+ purchase_line_ids = fields.Many2one('purchase.request')
+ supplier_id = fields.Many2one('res.partner', string='Supplier')
+ supplier_email = fields.Char(string='Email', related='supplier_id.email')
+ supplier_phone = fields.Char(string='Phone', related='supplier_id.phone')
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/res_company.py b/odex25_purchase/odex25_taqeem_purchase/models/res_company.py
new file mode 100644
index 000000000..e825ef314
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/res_company.py
@@ -0,0 +1,15 @@
+from odoo import fields, models, api
+
+
+class Company(models.Model):
+ _inherit = 'res.company'
+
+ attachment_scop = fields.Binary(string='Application brochure',)
+ day = fields.Integer(string='Day')
+ month = fields.Integer(string='Month')
+ year = fields.Integer(string='Year')
+ # @api.onchange('name')
+ # def get_attachment(self):
+ # attach = self.env['competitive.purchase.attachment']
+ # print(attach.attachment_scop, 'attachment_scop')
+ # self.attachment_scop = attach.attachment_scop
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/res_config_setting.py b/odex25_purchase/odex25_taqeem_purchase/models/res_config_setting.py
new file mode 100644
index 000000000..764e37393
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/res_config_setting.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+import base64
+import ast
+
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError, ValidationError
+from ast import literal_eval
+
+
+class ResConfigSettings(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ attachment_scop = fields.Binary(related="company_id.attachment_scop",string='Application brochure',readonly=False)
+ day = fields.Integer(
+ string='Day', related="company_id.day", readonly=False)
+ month = fields.Integer(
+ string='Month', related="company_id.month", readonly=False)
+ year = fields.Integer(
+ string='Year', related="company_id.year", readonly=False)
+
+ # @api.model
+ # def get_values(self):
+ # res = super(ResConfigSettings, self).get_values()
+ # res['day'] = int(
+ # self.env['ir.config_parameter'].sudo().get_param('odex25_taqeem_purchase.day', default=14))
+ # res['month'] = int(
+ # self.env['ir.config_parameter'].sudo().get_param('odex25_taqeem_purchase.month', default=0))
+ # res['year'] = int(
+ # self.env['ir.config_parameter'].sudo().get_param('odex25_taqeem_purchase.year', default=0))
+ # # res['attachment_scop'] = self.env['ir.config_parameter'].sudo().get_param('odex25_taqeem_purchase.attachment_scop', default=0)
+
+ # return res
+
+ # @api.model
+ # def set_values(self):
+ # self.env['ir.config_parameter'].sudo().set_param('odex25_taqeem_purchase.day', self.day)
+ # self.env['ir.config_parameter'].sudo().set_param('odex25_taqeem_purchase.month', self.month)
+ # self.env['ir.config_parameter'].sudo().set_param('odex25_taqeem_purchase.year', self.year)
+ # self.env['ir.config_parameter'].sudo().set_param('odex25_taqeem_purchase.attachment_scop', self.attachment_scop)
+
+ # super(ResConfigSettings, self).set_values()
diff --git a/odex25_purchase/odex25_taqeem_purchase/models/res_partner.py b/odex25_purchase/odex25_taqeem_purchase/models/res_partner.py
new file mode 100644
index 000000000..a92f593b9
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/models/res_partner.py
@@ -0,0 +1,30 @@
+from odoo.exceptions import UserError, ValidationError
+from odoo import api, fields, models, _
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+ # purchase_request_id = fields.Many2one('purchase.request')
+
+ @api.constrains('vat', 'company_type', 'commercial_register')
+ def _check_unique_tax_id_commercial_register(self):
+ for record in self:
+ if record.vat:
+ domain = [('vat', '=', record.vat), ('company_type', '=', 'company'), ]
+ existing_records = self.env['res.partner'].search_count(domain)
+ if existing_records > 1:
+ raise ValidationError("Tax ID must be unique per company")
+ if record.commercial_register:
+ domain = [('commercial_register', '=', record.commercial_register), ('company_type', '=', 'company'), ]
+ existing_records = self.env['res.partner'].search_count(domain)
+ if existing_records > 1:
+ raise ValidationError("Commercial Register must be unique per company")
+
+ @api.constrains('id_number', 'company_type')
+ def _check_unique_id_number(self):
+ for record in self:
+ if record.id_number:
+ domain = [('id_number', '=', record.id_number), ('company_type', '=', 'person')]
+ existing_records = self.env['res.partner'].search_count(domain)
+ if existing_records > 1:
+ raise ValidationError("Identity Number must be unique")
diff --git a/odex25_purchase/odex25_taqeem_purchase/security/ir.model.access.csv b/odex25_purchase/odex25_taqeem_purchase/security/ir.model.access.csv
new file mode 100644
index 000000000..d01a2076e
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/security/ir.model.access.csv
@@ -0,0 +1,9 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+
+access_purchase_requests_line,odex25_taqeem_purchase.purchase_requests_line,model_purchase_requests_line,base.group_user,1,1,1,1
+access_competitive_purchase_attachment,odex25_taqeem_purchase.competitive_purchase_attachment,model_competitive_purchase_attachment,base.group_user,1,1,1,1
+
+
+
+
+
diff --git a/odex25_purchase/odex25_taqeem_purchase/security/security.xml b/odex25_purchase/odex25_taqeem_purchase/security/security.xml
new file mode 100644
index 000000000..e2428622b
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/security/security.xml
@@ -0,0 +1,29 @@
+
+
+ Strategy And Project Group
+
+
+
+
+
+ Budget Executive Officer
+
+
+
+ Executive Vice President of Corporate Resources
+
+
+ Chief Procurement Executive
+
+
+
+ Group Direct Manger Rule
+
+ ['|',('user_id','=',user.id),('chief_executive_officer', '=', user.id)]
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/account_analytic_account_views.xml b/odex25_purchase/odex25_taqeem_purchase/views/account_analytic_account_views.xml
new file mode 100644
index 000000000..73a39a73d
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/account_analytic_account_views.xml
@@ -0,0 +1,14 @@
+
+
+ account.analytic.account.form.view
+ account.analytic.account
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/competitive_purchase_attachment.xml b/odex25_purchase/odex25_taqeem_purchase/views/competitive_purchase_attachment.xml
new file mode 100644
index 000000000..1309be2d3
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/competitive_purchase_attachment.xml
@@ -0,0 +1,39 @@
+
+
+ competitive.purchase.attachment.form.view
+ competitive.purchase.attachment
+
+
+
+
+
+ competitive.purchase.attachment.tree.view
+ competitive.purchase.attachment
+
+
+
+
+
+
+
+
+ Application brochure
+ competitive.purchase.attachment
+ tree,form
+
+
+ />
+
+
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/competitve_purchase.xml b/odex25_purchase/odex25_taqeem_purchase/views/competitve_purchase.xml
new file mode 100644
index 000000000..9784d2c49
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/competitve_purchase.xml
@@ -0,0 +1,187 @@
+
+
+ purchase.request.competitive
+ purchase.request
+
+ primary
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=',('draft','waiting'))]}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Competitive Purchase
+ purchase.request
+ tree,form
+
+ [('purchase_type', '=', 'competitive')]
+ {'default_purchase_type': 'competitive'}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/direct_purchase.xml b/odex25_purchase/odex25_taqeem_purchase/views/direct_purchase.xml
new file mode 100644
index 000000000..6e534bae3
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/direct_purchase.xml
@@ -0,0 +1,155 @@
+
+
+ purchase.request.less.twenty
+ purchase.request
+
+ primary
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase less than twenty
+ purchase.request
+ tree,form
+
+ [('purchase_type', '=', 'less_twenty')]
+ {'default_purchase_type': 'less_twenty'}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/purchase_less_thirty_view.xml b/odex25_purchase/odex25_taqeem_purchase/views/purchase_less_thirty_view.xml
new file mode 100644
index 000000000..e7fe309b1
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/purchase_less_thirty_view.xml
@@ -0,0 +1,169 @@
+
+
+ purchase.request.less.thirty
+ purchase.request
+
+ primary
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+ {'readonly':[('state', '!=','draft')]}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase less than thirty
+ purchase.request
+ tree,form
+
+ [('purchase_type', '=', 'less_thirty')]
+ {'default_purchase_type': 'less_thirty'}
+
+
+
+ purchase request 30 Sequence
+ purchase.seq30.sequence
+ PR30 %(year)s/%(month)s/
+ 5
+
+
+
+
+ purchase com Sequence
+ purchase.com.sequence
+ PRCOMP %(year)s/%(month)s/
+ 5
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/res_company.xml b/odex25_purchase/odex25_taqeem_purchase/views/res_company.xml
new file mode 100644
index 000000000..0df40a19d
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/res_company.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/res_config_setting.xml b/odex25_purchase/odex25_taqeem_purchase/views/res_config_setting.xml
new file mode 100644
index 000000000..59094f563
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/res_config_setting.xml
@@ -0,0 +1,33 @@
+
+
+ res.config.settings.view.form.purchase
+ res.config.settings
+
+
+
+ Proposed Period Receiving Offer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex25_taqeem_purchase/views/res_partner.xml b/odex25_purchase/odex25_taqeem_purchase/views/res_partner.xml
new file mode 100644
index 000000000..029f67496
--- /dev/null
+++ b/odex25_purchase/odex25_taqeem_purchase/views/res_partner.xml
@@ -0,0 +1,21 @@
+
+
+ res.partner.view.inherit
+ res.partner
+
+
+
+ {'required':[('company_type', '=','company')]}
+
+
+
+ {'required':[('company_type', '=','company')]}
+
+
+
+ {'required':[('company_type', '=','person')]}
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/__init__.py b/odex25_purchase/odex_online_tendering/__init__.py
new file mode 100644
index 000000000..511a0ca3a
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/__manifest__.py b/odex25_purchase/odex_online_tendering/__manifest__.py
new file mode 100644
index 000000000..ac2ad886d
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/__manifest__.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Odex Online Tendering",
+
+ 'summary': """
+ Online tendering For odex""",
+
+ 'description': """
+ This Module is Designed to allow online tendering work smothly with other odex purchase modules
+ """,
+
+ 'author': "Expert Company Ltd",
+ 'website': "http://www.exp-sa.com",
+
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['online_tendering' , 'purchase_requisition_custom'],
+
+ 'data': [
+ 'views/views.xml',
+ 'views/templates.xml',
+ ],
+ # # only loaded in demonstration mode
+ # 'demo': [
+ # 'demo/demo.xml',
+ # ],
+}
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/controllers/__init__.py b/odex25_purchase/odex_online_tendering/controllers/__init__.py
new file mode 100644
index 000000000..457bae27e
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/controllers/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/controllers/controllers.py b/odex25_purchase/odex_online_tendering/controllers/controllers.py
new file mode 100644
index 000000000..f9c34ed5b
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/controllers/controllers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from odoo import http
+
+# class OdexOnlineTendering(http.Controller):
+# @http.route('/odex_online_tendering/odex_online_tendering/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/odex_online_tendering/odex_online_tendering/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('odex_online_tendering.listing', {
+# 'root': '/odex_online_tendering/odex_online_tendering',
+# 'objects': http.request.env['odex_online_tendering.odex_online_tendering'].search([]),
+# })
+
+# @http.route('/odex_online_tendering/odex_online_tendering/objects//', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('odex_online_tendering.object', {
+# 'object': obj
+# })
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/demo/demo.xml b/odex25_purchase/odex_online_tendering/demo/demo.xml
new file mode 100644
index 000000000..50f2f9086
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/demo/demo.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/models/__init__.py b/odex25_purchase/odex_online_tendering/models/__init__.py
new file mode 100644
index 000000000..5305644df
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/models/models.py b/odex25_purchase/odex_online_tendering/models/models.py
new file mode 100644
index 000000000..aa0aac223
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/models/models.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models
+from datetime import datetime
+
+
+
+class TenderApplicationUctom(models.Model):
+ _inherit = 'tender.application'
+
+ def action_tender(self):
+ for rec in self:
+ po = super(TenderApplicationUctom, rec).action_tender()
+ if po:
+ po.write({
+ 'state' : 'unsign' ,
+ 'department_id' : rec.tender_id.department_id.id,
+ 'purpose' : rec.tender_id.purpose,
+ 'category_id' : rec.tender_id.category_id.id
+ })
+ return po
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/security/ir.model.access.csv b/odex25_purchase/odex_online_tendering/security/ir.model.access.csv
new file mode 100644
index 000000000..594012936
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_odex_online_tendering_odex_online_tendering,odex_online_tendering.odex_online_tendering,model_odex_online_tendering_odex_online_tendering,,1,0,0,0
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/static/description/icon.png b/odex25_purchase/odex_online_tendering/static/description/icon.png
new file mode 100644
index 000000000..a48b24bdb
Binary files /dev/null and b/odex25_purchase/odex_online_tendering/static/description/icon.png differ
diff --git a/odex25_purchase/odex_online_tendering/views/templates.xml b/odex25_purchase/odex_online_tendering/views/templates.xml
new file mode 100644
index 000000000..ba61acd8c
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/views/templates.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odex_online_tendering/views/views.xml b/odex25_purchase/odex_online_tendering/views/views.xml
new file mode 100644
index 000000000..992e97e2d
--- /dev/null
+++ b/odex25_purchase/odex_online_tendering/views/views.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odoo_multiple_product_images/.editorconfig b/odex25_purchase/odoo_multiple_product_images/.editorconfig
new file mode 100644
index 000000000..820ee653b
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/.editorconfig
@@ -0,0 +1,17 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+indent_style = space
+
+[*.py]
+indent_size = 4
+tab_width = 4
+
+[*.{js,html,css,sass,json,md,yml}]
+indent_size = 2
+tab_width = 2
+
diff --git a/odex25_purchase/odoo_multiple_product_images/.github/workflows/release.yml b/odex25_purchase/odoo_multiple_product_images/.github/workflows/release.yml
new file mode 100644
index 000000000..76c41c4c6
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/.github/workflows/release.yml
@@ -0,0 +1,38 @@
+name: Release
+
+permissions:
+ contents: write
+
+on:
+ push:
+
+jobs:
+ release:
+ name: Create release from manifest version
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - uses: actions/setup-python@v2
+ with:
+ python-version: "3.8"
+
+ - name: Compare current version with latest release
+ id: compare-odoo-version
+ uses: Alliantum/actions/compare-odoo-version@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Create Release
+ id: create_release
+ uses: softprops/action-gh-release@v1
+ if: ${{ steps.compare-odoo-version.outputs.new-version }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ name: ${{ steps.compare-odoo-version.outputs.new-version }}
+ tag_name: ${{ steps.compare-odoo-version.outputs.new-version }}
+ draft: false
+ prerelease: false
+ target_commitish: ${{ github.sha }}
diff --git a/odex25_purchase/odoo_multiple_product_images/.gitignore b/odex25_purchase/odoo_multiple_product_images/.gitignore
new file mode 100644
index 000000000..40eccb798
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/.gitignore
@@ -0,0 +1,9 @@
+*.pyc
+__pycache__
+.DS_Store
+.venv
+.vscode
+.idea
+.mypy_cache
+.pytest_cache
+venv
diff --git a/odex25_purchase/odoo_multiple_product_images/__init__.py b/odex25_purchase/odoo_multiple_product_images/__init__.py
new file mode 100644
index 000000000..5305644df
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import models
\ No newline at end of file
diff --git a/odex25_purchase/odoo_multiple_product_images/__manifest__.py b/odex25_purchase/odoo_multiple_product_images/__manifest__.py
new file mode 100644
index 000000000..11a0e9647
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/__manifest__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Multiple Images",
+ 'summary': """
+ Multiple Images and Categories on Products""",
+ 'description': """
+ Creates an image gallery section available on every product and also on the product templates.
+ """,
+ 'author': "Expert Co Ltd",
+ 'website': "http://www.ex.com",
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'license': 'AGPL-3',
+ 'version': '14.0.1.0.1',
+ 'depends': ['product', 'stock', 'mrp'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'data/clean_orphans_images.xml',
+ 'views/assets.xml',
+ 'views/product_image_backend.xml',
+
+ ]
+}
diff --git a/odex25_purchase/odoo_multiple_product_images/data/clean_orphans_images.xml b/odex25_purchase/odoo_multiple_product_images/data/clean_orphans_images.xml
new file mode 100644
index 000000000..0a52afbad
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/data/clean_orphans_images.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ Clean Orphan Images
+ 7
+ days
+ -1
+
+
+
+ model.clean_orphans_images()
+ code
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/ar.po b/odex25_purchase/odoo_multiple_product_images/i18n/ar.po
new file mode 100644
index 000000000..f007e9b7f
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/ar.po
@@ -0,0 +1,305 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-12-28 09:23+0000\n"
+"PO-Revision-Date: 2022-12-28 11:30+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.2.2\n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr "الصور "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr "القوالب "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr "الأنواع/ "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr "أضافة فئة للصور"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr "الفئات"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr "تنظيف الصور اليتيمة"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr "اللون "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr "تاريخ الإنشاء"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr "الوصف"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr "اسم الملف"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr "الصورة"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr "اسم للصور"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr "الصور"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr "فئات الصور"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr "عدد الصور"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr "الصور بالفئات"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "الاسم"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr "الصنف"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr "صور الصنف"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr "فئات صور الصنف"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr "قالب الصنف"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr "قوالب الصنف"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr "أنواع الصنف"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr "عدد الصنف"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image "
+"is invisible."
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr ""
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/de.po b/odex25_purchase/odoo_multiple_product_images/i18n/de.po
new file mode 100644
index 000000000..d20ff3607
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/de.po
@@ -0,0 +1,311 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-31 16:01+0000\n"
+"PO-Revision-Date: 2022-03-31 17:03+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.0.1\n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr "Bilder "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr "Vorlagen "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr "Variante "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr "Eine Bildkategorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr "Kategorien"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr "Verwaiste Bilder bereinigen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr "Farbe"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr "Erstellt von"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr "Erstellt am"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr "Beschreibung"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr "Dateiname"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr "Bild"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr "Bildname"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr "Bilder"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr "Bildkategorien"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr "Bilder zählen"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr "Bilder nach Kategorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr "Zuletzt geändert am"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert durch"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr "Mittelgroßes Bild"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+"Bild des Produkts in mittlerer Größe. Es wird automatisch auf 128x128px "
+"verkleinert, ohne Änderungen des Seitenverhältnis. Verwenden Sie dieses "
+"Feld in Formular oder Kanban Ansichten."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "Name"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr "Ursprungsland"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr "Produkt"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr "Produktbild Backend"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr "Produktbilder"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr "Produktbilder Kategorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr "Produktvorlage"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr "Produktvorlagen"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr "Produktvarianten"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr "Anzahl der Produkte"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr "Produkte nach Kategorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr "Rohbildgröße"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr "Ähnliches Produkt"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr "Verwandte Vorlage"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr "Als Vorlage festlegen"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr "Als Variante festlegen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr "Miniaturbild"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image "
+"is required."
+msgstr ""
+"Kleines Bild für das Produkt. Es wird automatisch auf 64x64px skaliert. "
+"Das Seitenverhältnis bleibt erhalten. Benutzen Sie dieses Feld überall, wo "
+"Sie es in dieser Größe benötigen können."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr "Vorlage Anzahl"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr "Vorlage Bild Backend"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr "Vorlagenbilder"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr "Dieser Kategoriename wird bereits verwendet."
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr "Gesamtanzahl Bilder"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr "Auslöser"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr "Variable Bilder"
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/en_US.po b/odex25_purchase/odoo_multiple_product_images/i18n/en_US.po
new file mode 100644
index 000000000..fd2eef9c5
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/en_US.po
@@ -0,0 +1,304 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-31 16:00+0000\n"
+"PO-Revision-Date: 2022-03-31 16:00+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "Pruduct name"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr "Country of origin"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image is"
+" required."
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr ""
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/es.po b/odex25_purchase/odoo_multiple_product_images/i18n/es.po
new file mode 100644
index 000000000..af5dcd352
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/es.po
@@ -0,0 +1,312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-31 16:01+0000\n"
+"PO-Revision-Date: 2022-03-31 17:03+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.0.1\n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr "Imágenes "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr "Plantillas "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr "Variantes "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr "Una categoría de imagen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr "Categorías"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr "Limpiar imágenes huérfanas"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr "Color"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr "Descripción"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr "Nombre de archivo"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr "Imagen"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr "Nombre de la imagen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr "Imagenes"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr "Categorías de imágenes"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr "Recuento de imágenes"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr "Imágenes por categoría"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr "Última modificación en"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr "Imagen de tamaño mediano"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+"Imagen mediana del producto. Se redimensionará automáticamente a 128x128p "
+"px, preservando el ratio de aspecto, sólo cuando la imagen exceda uno de "
+"esos tamaños. Este campo se usa en las vistas de formulario y en algunas "
+"vistas kanban."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "Nombre"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr "País de origen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr "Producto"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr "Imagen del producto Backend"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr "Imágenes del producto"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr "Categoría de imágenes de productos"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr "Plantillas de productos"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr "Variantes de producto"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr "Recuento de productos"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr "Productos por categoría"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr "Tamaño de la imagen en bruto"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr "Producto relacionado"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr "Plantilla relacionada"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr "Set para la plantilla"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr "Set para la variante"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr "Imagen de tamaño pequeño"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image "
+"is required."
+msgstr ""
+"Imagen pequeña del producto. Se redimensiona automáticamente a 64x64 px, "
+"preservando el ratio de aspecto. Use este campo siempre que se requiera una "
+"imagen pequeña."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr "Recuento de plantillas"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr "Plantilla de imagen de fondo"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr "Imágenes de plantillas"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr "Este nombre de categoría ya está en uso."
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr "Total de imágenes"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr "Activador"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr "Imágenes variantes"
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/fr.po b/odex25_purchase/odoo_multiple_product_images/i18n/fr.po
new file mode 100644
index 000000000..2c48c3603
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/fr.po
@@ -0,0 +1,312 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-31 16:01+0000\n"
+"PO-Revision-Date: 2022-03-31 17:05+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.0.1\n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr "Images "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr "Modèles "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr "Variantes "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr "Une catégorie d'images"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr "Catégories"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr "Nettoyer les images orphelines"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr "Couleur"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr "Description"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr "Nom du fichier"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr "Image"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr "Nom de l'image"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr "Images"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr "Catégories d'images"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr "Nombre d'images"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr "Images par catégorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr "Image de taille moyenne"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+"Image de taille moyenne de l'article. Elle sera automatiquement "
+"redimensionnée à 128 x 128 px, en préservent le rapport hauteur/largeur, si "
+"l'image dépasse une de ces dimensions. Utilisez ce champ dans les vues "
+"formulaire ou certaines vues kanban."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "Nom"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr "Pays d'origine"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr "Article"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr "Image du produit en arrière-plan"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr "Images du produit"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr "Catégorie d'images de produits"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr "Modèle d'article"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr "Modèles de produits"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr "Variantes d'article"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr "Nombre de produits"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr "Produits par catégorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr "Taille de l'image brute"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr "Produit lié"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr "Modèle connexe"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr "Définissez pour le modèle"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr "Ensemble pour variante"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr "Image de petite taille"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image "
+"is required."
+msgstr ""
+"Vignette de l'article. Elle sera automatiquement redimensionnée à 64 x 64 "
+"px, en préservent le rapport hauteur/largeur. Utilisez ce champ partout où "
+"une petite image est nécessaire."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr "Nombre de modèles"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr "Modèle d'image Backend"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr "Images du modèle"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr "Ce nom de catégorie est déjà utilisé."
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr "Total des images"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr "Déclencheur"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr "Images de variantes"
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/it.po b/odex25_purchase/odoo_multiple_product_images/i18n/it.po
new file mode 100644
index 000000000..cb7e573b8
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/it.po
@@ -0,0 +1,311 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-31 16:01+0000\n"
+"PO-Revision-Date: 2022-03-31 16:01+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr "Immagini "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr "Modelli "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr "Varianti "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr "Una categoria di immagini"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr "Categorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr "Pulire le immagini orfane"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr "Colore"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr "Creato da"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr "Creato il"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr "Descrizione"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr "Nome visualizzato"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr "Nome file"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr "Immagine"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr "Nome immagine"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr "Immagini"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr "Categorie di immagini"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr "Conteggio delle immagini"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr "Immagini per categoria"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr "Ultima modifica il"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr "Ultimo aggiornamento di"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr "Ultimo aggiornamento il"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr "Immagine di media dimensione"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+"Immagine di dimensioni medie del prodotto. Verrà automaticamente "
+"ridimensionata a 128x128px, conservando le proporzioni, solo se l'immagine "
+"eccede queste dimensioni in altezza o larghezza. L'immagina viene utilizzata"
+" in alcune viste, o in alcune visualizzazioni kanban."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "Nome"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr "Paese di origine"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr "Prodotto"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr "Immagine del prodotto Backend"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr "Immagini prodotto"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr "Categoria delle immagini dei prodotti"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr "Modello prodotto"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr "Modelli di prodotto"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr "Varianti prodotto"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr "Conteggio dei prodotti"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr "Prodotti per categoria"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr "Dimensione dell'immagine grezza"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr "Prodotti collegati"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr "Modello correlato"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr "Set per il modello"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr "Set per la variante"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr "Immagine (formato piccolo)"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image is"
+" required."
+msgstr ""
+"Immagine grandezza piccola del prodotto. Automaticamente ridimenzionata a "
+"64x64px, preservando le proporzioni. Usa questo campo ovunque è richiesta "
+"un'immagine piccola."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr "Conteggio dei modelli"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr "Backend immagine modello"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr "Immagini del modello"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr "Questo nome di categoria è già in uso."
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr "Immagini totali"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr "Attivazione"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr "Immagini varianti"
diff --git a/odex25_purchase/odoo_multiple_product_images/i18n/nl.po b/odex25_purchase/odoo_multiple_product_images/i18n/nl.po
new file mode 100644
index 000000000..aa83b7af6
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/i18n/nl.po
@@ -0,0 +1,311 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * odoo_multiple_product_images
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-31 16:00+0000\n"
+"PO-Revision-Date: 2022-03-31 17:06+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.0.1\n"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Images "
+msgstr "Afbeeldingen "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Templates "
+msgstr "Sjablonen "
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Variants "
+msgstr "Varianten "
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_category
+msgid "An image category"
+msgstr "Een beeld categorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__category_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Categories"
+msgstr "Categorieën"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.server,name:odoo_multiple_product_images.clean_orphans_images_cron_ir_actions_server
+#: model:ir.cron,cron_name:odoo_multiple_product_images.clean_orphans_images_cron
+#: model:ir.cron,name:odoo_multiple_product_images.clean_orphans_images_cron
+msgid "Clean Orphan Images"
+msgstr "Verweesde afbeeldingen opschonen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__color
+msgid "Color"
+msgstr "Kleur"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_uid
+msgid "Created by"
+msgstr "Aangemaakt door"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__create_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__create_date
+msgid "Created on"
+msgstr "Aangemaakt op"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__description
+msgid "Description"
+msgstr "Omschrijving"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__display_name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__display_name
+msgid "Display Name"
+msgstr "Weergavenaam"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__filename
+msgid "Filename"
+msgstr "Bestandsnaam"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__id
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image
+msgid "Image"
+msgstr "Afbeelding"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Image Name"
+msgstr "Naam afbeelding"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__product_image_backend_ids
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images_config
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Images"
+msgstr "Afbeeldingen"
+
+#. module: odoo_multiple_product_images
+#: model:ir.actions.act_window,name:odoo_multiple_product_images.product_backend_images_categories
+#: model:ir.ui.menu,name:odoo_multiple_product_images.menu_images
+msgid "Images Categories"
+msgstr "Afbeeldingen Categorieën"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__images_counter
+msgid "Images Count"
+msgstr "Afbeeldingen tellen"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Images by Category"
+msgstr "Afbeeldingen per categorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product____last_update
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template____last_update
+msgid "Last Modified on"
+msgstr "Laatst gewijzigd op"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_uid
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_uid
+msgid "Last Updated by"
+msgstr "Laatst bijgewerkt door"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__write_date
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__write_date
+msgid "Last Updated on"
+msgstr "Laatst bijgewerkt op"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid "Medium-sized image"
+msgstr "Middelgrote afbeelding"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_medium
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+"Middelgrote afbeelding van het product. de afbeelding wordt automatisch "
+"verkleint naar 128x128px, met behoud van de verhoudingen. Gebruik dit veld "
+"in formuleren of kanban weergaven."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__name
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__name
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+msgid "Name"
+msgstr "Naam"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__origin_id
+msgid "Origin"
+msgstr "Bron"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_product
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_kanban_view
+msgid "Product"
+msgstr "Product"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_image_backend
+msgid "Product Image Backend"
+msgstr "Product Afbeelding Achterkant"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_template_image_backend_form_view
+msgid "Product Images"
+msgstr "Afbeeldingen product"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_form
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Images Category"
+msgstr "Product Afbeeldingen Categorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model,name:odoo_multiple_product_images.model_product_template
+msgid "Product Template"
+msgstr "Productsjabloon"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Templates"
+msgstr "Product sjablonen"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Product Variants"
+msgstr "Productvarianten"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_counter
+msgid "Products Count"
+msgstr "Producten Tellen"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "Products by Category"
+msgstr "Producten per categorie"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__raw_image_size
+msgid "Raw Image Size"
+msgstr "Grootte onbewerkt beeld"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__product_id
+msgid "Related Product"
+msgstr "Gekoppeld product"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__template_id
+msgid "Related Template"
+msgstr "Verwante sjablonen"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Template"
+msgstr "Set voor sjabloon"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.full_product_image_backend_form_view
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_image_backend_form_view
+msgid "Set for Variant"
+msgstr "Set voor Variant"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid "Small-sized image"
+msgstr "Kleine afbeelding"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,help:odoo_multiple_product_images.field_product_image_backend__image_small
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image "
+"is required."
+msgstr ""
+"Kleine afbeelding van het product. de afbeelding wordt automatisch "
+"verkleint naar 64x64px, met behoud van de verhoudingen. Gebruik dit veld, "
+"waar een kleine afbeelding benodigd is."
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_category__products_tmpl_counter
+msgid "Template Count"
+msgstr "Sjabloon Telling"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__template_image_backend_ids
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_template__template_image_backend_ids
+msgid "Template Image Backend"
+msgstr "Sjabloon afbeelding Achterkant"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_product__related_template_image_backend_ids
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Template Images"
+msgstr "Sjabloon Afbeeldingen"
+
+#. module: odoo_multiple_product_images
+#: code:addons/odoo_multiple_product_images/models/product_image_backend.py:0
+#, python-format
+msgid "This category name is already in use."
+msgstr "Deze categorienaam is al in gebruik."
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_cat_image_backend_tree
+msgid "Total Images"
+msgstr "Totaal aantal beelden"
+
+#. module: odoo_multiple_product_images
+#: model:ir.model.fields,field_description:odoo_multiple_product_images.field_product_image_backend__trigger
+msgid "Trigger"
+msgstr "Activeer"
+
+#. module: odoo_multiple_product_images
+#: model_terms:ir.ui.view,arch_db:odoo_multiple_product_images.product_product_image_backend_form_view
+msgid "Variant Images"
+msgstr "Variante afbeeldingen"
diff --git a/odex25_purchase/odoo_multiple_product_images/models/__init__.py b/odex25_purchase/odoo_multiple_product_images/models/__init__.py
new file mode 100644
index 000000000..826e90e96
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/models/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import product_image_backend
\ No newline at end of file
diff --git a/odex25_purchase/odoo_multiple_product_images/models/product_image_backend.py b/odex25_purchase/odoo_multiple_product_images/models/product_image_backend.py
new file mode 100644
index 000000000..602447776
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/models/product_image_backend.py
@@ -0,0 +1,174 @@
+# -*- encoding: utf-8 -*-
+
+from odoo import fields, models, api, _
+from odoo.exceptions import ValidationError
+import base64
+
+
+
+# Here we declare de model of a category which will be a field of the image class later
+class ProductImageCategory(models.Model):
+ _name = 'product.image.category'
+ _description = "An image category"
+
+ name = fields.Char('Name', invisible=True)
+ description = fields.Text('Description')
+ images_ids = fields.Many2many('product.image.backend', string="Images")
+ color = fields.Integer('Color')
+ images_counter = fields.Integer('Images Count', compute="_get_counters")
+ products_tmpl_counter = fields.Integer('Template Count', compute="_get_counters")
+ products_counter = fields.Integer('Products Count', compute="_get_counters")
+
+ def _get_counters(self):
+ for categ in self:
+ templates_ids = []
+ product_ids = []
+ for image_id in categ.images_ids:
+ if image_id.template_id:
+ templates_ids.append(image_id.template_id.id)
+ elif image_id.product_id:
+ product_ids.append(image_id.product_id.id)
+ categ.products_tmpl_counter = len(templates_ids)
+ categ.products_counter = len(product_ids)
+ categ.images_counter = len(categ.images_ids)
+
+ @api.constrains('name')
+ def _check_name(self):
+ for category in self:
+ other_id = self.search([('id', '!=', category.id), ('name', '=', category.name)], limit=1)
+ if other_id:
+ raise ValidationError(
+ _("This category name is already in use."))
+
+ def show_images_category(self):
+ if self.images_ids:
+ action = {
+ 'type': 'ir.actions.act_window',
+ 'name': _('Images by Category'),
+ 'view_mode': 'kanban,tree,form',
+ 'res_model': 'product.image.backend',
+ 'domain': [('id', 'in', self.images_ids.ids)]
+ }
+ return action
+ return
+
+ def show_products_category(self):
+ self.ensure_one()
+ if self.images_ids:
+ product_ids = [image_id.product_id.id for image_id in self.images_ids if image_id.product_id]
+ action = {
+ 'type': 'ir.actions.act_window',
+ 'name': _('Products by Category'),
+ 'view_mode': 'kanban,tree,form',
+ 'res_model': 'product.product',
+ 'domain': [('id', 'in', product_ids)]
+ }
+ return action
+ return
+
+ def show_templates_category(self):
+ self.ensure_one()
+ if self.images_ids:
+ template_ids = [image_id.template_id.id for image_id in self.images_ids if image_id.template_id]
+ action = {
+ 'type': 'ir.actions.act_window',
+ 'name': _('Products by Category'),
+ 'view_mode': 'kanban,tree,form',
+ 'res_model': 'product.template',
+ 'domain': [('id', 'in', template_ids)]
+ }
+ return action
+ return
+
+# This will be de model of every image in the database
+class ProductImageBackend(models.Model):
+ _name = 'product.image.backend'
+ _description = 'Product Image Backend'
+
+ name = fields.Char(invisible=True)
+ image = fields.Image(store=True)
+ image_medium = fields.Image(
+ "Medium-sized image",
+ related='image',
+ max_width=386,
+ max_height=386,
+ store=True,
+ help="Medium-sized image of the product. It is automatically "
+ "resized as a 128x128px image, with aspect ratio preserved, "
+ "only when the image exceeds one of those sizes. Use this field in form views or some kanban views.")
+ image_small = fields.Image(
+ "Small-sized image",
+ related='image',
+ max_width=128,
+ max_height=128,
+ store=True,
+ help="Small-sized image of the product. It is automatically "
+ "resized as a 64x64px image, with aspect ratio preserved. "
+ "Use this field anywhere a small image is invisible.")
+ raw_image_size = fields.Integer(compute="_compute_raw_image_size")
+ filename = fields.Char()
+ product_id = fields.Many2one('product.product', 'Related Product', copy=True)
+ template_id = fields.Many2one('product.template', 'Related Template', copy=True)
+ category_ids = fields.Many2many('product.image.category', string="Categories", invisible=True)
+ trigger = fields.Boolean('Trigger', compute="compute_trigger")
+ origin_id = fields.Integer('Origin')
+
+ @api.depends('image')
+ def _compute_raw_image_size(self):
+ for backend_image in self:
+ # In Kb
+ backend_image.raw_image_size = len(base64.b64decode(backend_image.image)) // 1000 if backend_image.image else 0
+
+ # This method pretend to trigger and its just used as a lifecycle method, to get always trigger when the model is loaded.
+ def compute_trigger(self):
+ for image in self:
+ image.trigger = True
+ if self.env.context.get('default_origin') and image.id:
+ self.env.cr.execute("UPDATE product_image_backend SET origin_id = %s WHERE id = %s;", (self.env.context.get('default_origin'), image.id))
+
+ # This method gives the ability to switch an image between the actual product or the template
+ def switch_image(self):
+ self.ensure_one()
+ if self.env.context.get('switch') and self.env.context['switch'] == 'to_template':
+ self.template_id = self.product_id.product_tmpl_id
+ self.product_id = False
+ # return {
+ # 'type': 'ir.actions.client',
+ # 'tag': 'reload'
+ # }
+ elif self.env.context.get('switch') and self.env.context['switch'] == 'to_variant':
+ variant_id = self.env['product.product'].browse(self.origin_id)
+ self.product_id = variant_id
+ self.template_id = False
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'reload'
+ }
+
+
+ # This is just a trash collector, then delete it
+ @api.model
+ def clean_orphans_images(self):
+ all_orphans_images = self.search([('template_id', '=', False), ('product_id', '=', False)])
+ if all_orphans_images:
+ all_orphans_images.unlink()
+
+# And finally we embed our new model onto product and his template classes
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+
+ template_image_backend_ids = fields.One2many('product.image.backend', 'template_id')
+
+
+class ProductProduct(models.Model):
+ _inherit = 'product.product'
+
+ product_image_backend_ids = fields.One2many('product.image.backend', 'product_id', string='Images')
+ related_template_image_backend_ids = fields.One2many('product.image.backend', compute="_get_template_images", inverse="_set_template_image", string="Template Images")
+
+ def _get_template_images(self):
+ for product in self:
+ product.related_template_image_backend_ids = product.product_tmpl_id.template_image_backend_ids
+
+ def _set_template_image(self):
+ self.product_tmpl_id.template_image_backend_ids = self.related_template_image_backend_ids
diff --git a/odex25_purchase/odoo_multiple_product_images/security/ir.model.access.csv b/odex25_purchase/odoo_multiple_product_images/security/ir.model.access.csv
new file mode 100644
index 000000000..a5c471870
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/security/ir.model.access.csv
@@ -0,0 +1,13 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_product_image_backend_mrp_user,product.image.backend user,model_product_image_backend,mrp.group_mrp_user,1,0,0,0
+access_product_image_backend_mrp_manager,product.image.backend mrp_manager,model_product_image_backend,mrp.group_mrp_manager,1,1,1,1
+access_product_image_backend_stock_user,product.image.backend stock_user,model_product_image_backend,stock.group_stock_user,1,0,0,0
+access_product_image_backend_stock_manager,product.image.backend stock_manager,model_product_image_backend,stock.group_stock_manager,1,1,1,1
+access_product_image_backend_employee,product.image.backend employee,model_product_image_backend,base.group_user,1,0,0,0
+access_product_image_backend_manager,product.image.backend manager,model_product_image_backend,base.group_system,1,1,1,1
+access_category_image_backend_mrp_user,product.image.category user,model_product_image_category,mrp.group_mrp_user,1,0,0,0
+access_category_image_backend_mrp_manager,product.image.category mrp_manager,model_product_image_category,mrp.group_mrp_manager,1,1,1,1
+access_category_image_backend_stock_user,product.image.category stock_user,model_product_image_category,stock.group_stock_user,1,0,0,0
+access_category_image_backend_stock_manager,product.image.category stock_manager,model_product_image_category,stock.group_stock_manager,1,1,1,1
+access_category_image_backend_employee,product.image.category employee,model_product_image_category,base.group_user,1,0,0,0
+access_category_image_backend_manager,product.image.category manager,model_product_image_category,base.group_system,1,1,1,1
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/alliantum.png b/odex25_purchase/odoo_multiple_product_images/static/description/alliantum.png
new file mode 100644
index 000000000..143e8cec6
Binary files /dev/null and b/odex25_purchase/odoo_multiple_product_images/static/description/alliantum.png differ
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/icon.png b/odex25_purchase/odoo_multiple_product_images/static/description/icon.png
new file mode 100644
index 000000000..277daab2a
Binary files /dev/null and b/odex25_purchase/odoo_multiple_product_images/static/description/icon.png differ
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/index.html b/odex25_purchase/odoo_multiple_product_images/static/description/index.html
new file mode 100644
index 000000000..f950905ab
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/static/description/index.html
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+README.rst
+
+
+
+
+
+
+
+
+
Multiple Images
+
+
+
With this library you will be able to have a gallery of images of any
+product (Variant and Template). This way you don’t need to use some
+external cloud services provider.
+
Creates an image gallery section available on every product and also on
+the product templates.
+
Table of contents
+
+
+
+
Install this add-on and it will be automatically ready to use.
+
+
+
+
Now if you take a look at any product form you will see a new menu
+Images . Then click it and there you must see something like this:
+
+
Now if you want to add a new image it’s fairly simple even though you
+are in a product variant or in a product template.
+
+
You can also create common categories of images for different products!
+
+
+
+
+
Bugs are tracked on GitHub Issues .
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback .
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
The development of this module has been financially supported by:
+
+
+
+
+
This module is maintained by Alliantum.
+
+
Alliantum, is a company whose
+mission is to support the widespread use of Odoo by others companies, and collaborate in the development of new Odoo features.
+
This module is part of the Alliantum/odoo_public_modules project on GitHub.
+
You are welcome to contribute. To learn how please visit https://github.com/Alliantum/odoo_public_modules .
+
+
+
+
+
+
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/screenshot.png b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot.png
new file mode 100644
index 000000000..2ace0f875
Binary files /dev/null and b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot.png differ
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/screenshot1.png b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot1.png
new file mode 100644
index 000000000..e151796fd
Binary files /dev/null and b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot1.png differ
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/screenshot2.png b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot2.png
new file mode 100644
index 000000000..8f1da1650
Binary files /dev/null and b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot2.png differ
diff --git a/odex25_purchase/odoo_multiple_product_images/static/description/screenshot3.png b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot3.png
new file mode 100644
index 000000000..0a1c0909b
Binary files /dev/null and b/odex25_purchase/odoo_multiple_product_images/static/description/screenshot3.png differ
diff --git a/odex25_purchase/odoo_multiple_product_images/static/src/js/web_ir_actions_act_view_reload.js b/odex25_purchase/odoo_multiple_product_images/static/src/js/web_ir_actions_act_view_reload.js
new file mode 100644
index 000000000..62f2645ca
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/static/src/js/web_ir_actions_act_view_reload.js
@@ -0,0 +1,38 @@
+// Copyright 2017 - 2018 Modoolar
+// Copyright 2018 Modoolar
+// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+odoo.define('web_ir_actions_act_view_reload.ir_actions_act_view_reload', function (require) {
+ "use strict";
+
+ var ActionManager = require('web.ActionManager');
+
+ ActionManager.include({
+
+ /**
+ * Intersept action handling to detect extra action type
+ * @override
+ */
+ _handleAction: function (action, options) {
+ if (action.type === 'ir.actions.act_view_reload') {
+ return this._executeReloadAction(action, options);
+ }
+
+ return this._super.apply(this, arguments);
+ },
+
+ /**
+ * Handle 'ir.actions.act_view_reload' action
+ * @returns {$.Promise}
+ */
+ _executeReloadAction: function () {
+ var controller = this.getCurrentController();
+ if (controller && controller.widget) {
+ controller.widget.reload();
+ }
+
+ return $.when();
+ },
+
+ });
+
+});
diff --git a/odex25_purchase/odoo_multiple_product_images/static/src/scss/multiple_images.scss b/odex25_purchase/odoo_multiple_product_images/static/src/scss/multiple_images.scss
new file mode 100644
index 000000000..4a5aa7f24
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/static/src/scss/multiple_images.scss
@@ -0,0 +1,148 @@
+.o_attachments_previews {
+ > .o_attachment {
+ width: 50%;
+
+ @include media-breakpoint-up(md) {
+ width: percentage(1/3);
+ }
+ @include media-breakpoint-up(lg) {
+ width: percentage(1/4);
+ }
+ @include media-breakpoint-up(xl) {
+ width: percentage(1/6);
+ }
+
+ .o_attachment_wrap {
+ padding: 0;
+ border-radius: 2px;
+ border: 1px solid gray('400');
+ }
+
+ .o_image_box {
+ overflow: hidden;
+ padding-top: 75%;
+
+ .o_attachment_image {
+ @include o-position-absolute(0, 0, 0, 0);
+ background-size: cover;
+ background-position: center;
+ transform: scale(1.05);
+ transition: all 0.3s ease 0s;
+ }
+
+ &:hover .o_attachment_image {
+ transform: scale(1);
+ }
+ }
+
+ .o_image_overlay {
+ @include o-position-absolute($top: 0, $left: 0, $right:0, $bottom:0);
+ @include o-hover-opacity($default-opacity: 0, $hover-opacity: 1);
+ background-image: linear-gradient(180deg, rgba(black, 0.2), rgba(black, 0.9));
+ transition: all 0.3s ease 0s;
+ padding: 10px;
+
+ .o_attachment_title {
+ @include o-position-absolute($bottom: 7px);
+ width: 80%;
+ @include o-text-overflow(inline-block);
+ font-size: $font-size-sm;
+ }
+
+ .o_attachment_delete_cross {
+ color: white;
+ }
+
+ .o_attachment_download {
+ @include o-position-absolute($right: 7px, $bottom:7px);
+ }
+ }
+ }
+}
+
+.o_website_sale_image_list .o_kanban_view.o_kanban_ungrouped.o_attachments_previews {
+ width: auto;
+
+ .o_kanban_record.o_attachment.o_website_sale_image_card {
+ border: none;
+ background: none;
+ margin: 0 0 $grid-gutter-width*0.2;
+ padding: $o-attachment-margin;
+ flex: 0 1 50%;
+
+ @include media-breakpoint-up(md) {
+ flex: 0 0 percentage(1/3);
+ }
+
+ @include media-breakpoint-up(lg) {
+ flex: 0 0 percentage(1/5);
+ }
+
+ @include media-breakpoint-up(xl) {
+ flex: 0 0 percentage(1/6);
+ }
+
+ .o_image_box {
+ padding-top: 50%;
+
+ @include media-breakpoint-up(md) {
+ padding-top: 75%;
+ }
+ }
+
+ .o_image_overlay {
+ bottom: 16%;
+ background: rgba(gray('900'), 0.2);
+ }
+
+ .o_website_sale_image_card_title {
+ @include o-text-overflow(block);
+ padding:6px;
+ position: relative;
+ background: gray('200');
+ color:$headings-color;
+ }
+
+ .o_website_sale_image_card_remove, .o_website_sale_image_card_size {
+ @include o-position-absolute(0, 0);
+ border-radius: 0 2px;
+ }
+
+ .o_website_sale_image_card_size {
+ left: 0;
+ right: auto;
+ border-radius: 0 0 2px;
+ font-weight: normal;
+ font-size: $font-size-sm - 1;
+
+ &.label-normal {
+ background-color: gray('200');
+ color: $body-color;
+ }
+ }
+ }
+}
+
+.o_website_sale_image_modal {
+ .o_website_sale_image_modal_container {
+ border-left: 1px solid gray('400');
+
+ .o_field_image {
+ margin-bottom: 0;
+ box-shadow: 0 2px 10px gray('300');
+
+ > img {
+ border: 1px solid gray('400');
+ min-height: 200px;
+ max-height: 350px; // Fallback for browsers that dosn't support responsive units
+ max-height: 50vh;
+ width: auto;
+ }
+
+ .o_form_image_controls {
+ @include o-hover-opacity(0.7, 1);
+ padding: 2%;
+ }
+ }
+ }
+}
diff --git a/odex25_purchase/odoo_multiple_product_images/views/assets.xml b/odex25_purchase/odoo_multiple_product_images/views/assets.xml
new file mode 100644
index 000000000..c6cd8b5f2
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/views/assets.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/odoo_multiple_product_images/views/product_image_backend.xml b/odex25_purchase/odoo_multiple_product_images/views/product_image_backend.xml
new file mode 100644
index 000000000..8e0e26292
--- /dev/null
+++ b/odex25_purchase/odoo_multiple_product_images/views/product_image_backend.xml
@@ -0,0 +1,308 @@
+
+
+
+
+
+ product.image.backend.form.view
+ product.product
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ product.template.image.backend.form.view
+ product.template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image.backend.kanban.view
+ product.image.backend
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image.backend.form.view
+ product.image.backend
+
+
+
+
+
+
+
+
+ image.backend.form.view
+ product.image.backend
+
+
+
+
+
+
+
+ product.cat.image.backend.form
+ product.image.category
+
+
+
+
+
+
+
+ product.cat.image.backend.tree
+ product.image.category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Images Categories
+ product.image.category
+ ir.actions.act_window
+ tree,form
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/__init__.py b/odex25_purchase/online_tendering/__init__.py
new file mode 100644
index 000000000..a24914bff
--- /dev/null
+++ b/odex25_purchase/online_tendering/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
+from . import models
+from . import wizard
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/__manifest__.py b/odex25_purchase/online_tendering/__manifest__.py
new file mode 100644
index 000000000..fe6ddfba5
--- /dev/null
+++ b/odex25_purchase/online_tendering/__manifest__.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Online Tendering",
+
+ 'summary': """
+ Short (1 phrase/line) summary of the module's purpose, used as
+ subtitle on modules listing or apps.openerp.com""",
+
+ 'description': """
+ Long description of module's purpose
+ """,
+
+ 'author': "My Company",
+ 'website': "http://www.yourcompany.com",
+
+ # Categories can be used to filter modules in modules listing
+ # Check https://github.com/odoo/odoo/blob/11.0/odoo/addons/base/module/module_data.xml
+ # for the full list
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['base', 'purchase_requisition_custom','purchase_requisition','website','auth_signup','contacts'],
+
+ # always loaded
+ 'data': [
+ 'security/groups.xml',
+ 'security/rules.xml',
+ 'security/ir.model.access.csv',
+ 'views/purchase_requsition_veiw.xml',
+ 'views/templates.xml',
+ 'views/tender_application.xml',
+ 'views/online_tender_configuration.xml',
+ 'sequence/seq.xml',
+ 'data/mail_templates.xml',
+ 'wizard/online_tendering_wizard.xml',
+ 'reports/online_tender_report.xml',
+ 'reports/report_actions.xml'
+ ],
+ # only loaded in demonstration mode
+ 'demo': [
+ 'demo/demo.xml',
+ ],
+ 'qweb':[
+ 'static/src/xml/tender_templates.xml',
+ ]
+}
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/controllers/__init__.py b/odex25_purchase/online_tendering/controllers/__init__.py
new file mode 100644
index 000000000..457bae27e
--- /dev/null
+++ b/odex25_purchase/online_tendering/controllers/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/controllers/controllers.py b/odex25_purchase/online_tendering/controllers/controllers.py
new file mode 100644
index 000000000..641ea0f09
--- /dev/null
+++ b/odex25_purchase/online_tendering/controllers/controllers.py
@@ -0,0 +1,297 @@
+# -*- coding: utf-8 -*-
+import logging
+import werkzeug
+import re
+import base64
+from odoo import http, _
+from odoo.addons.http_routing.models.ir_http import slug
+from odoo.http import request
+from datetime import datetime
+from odoo.addons.auth_signup import controllers
+from odoo.addons.web.controllers.main import ensure_db, Home, SIGN_UP_REQUEST_PARAMS
+from odoo.exceptions import UserError
+from odoo.exceptions import ValidationError
+from odoo.addons.auth_signup.models.res_users import SignupError
+
+_logger = logging.getLogger(__name__)
+
+SIGN_UP_REQUEST_PARAMS.update({'company_represent', 'vat', 'phone', 'mobile', 'street',
+ 'commercial_register', 'company_type','city','activity_type','documents_ids'})
+
+
+class main(http.Controller):
+ @http.route(["/tenders"], type="http", auth="public", website=True)
+ def tenders_get(self, request):
+ requisition = request.env["purchase.requisition"]
+ tenders = requisition.sudo().browse(requisition.sudo().search([('published_in_portal' , '=' , True),('available_until' , '>=' , datetime.today()),('state' , '=' , 'in_progress')]).ids)
+
+ return request.render(
+ "online_tendering.index", {"message": "Open Tenders", "tenders": tenders,}
+ )
+
+
+ @http.route(
+ '/tender/details/',
+ type="http",
+ auth="public",
+ website=True,
+ csrf=False
+ )
+ def show_tender_details(self, tender_id):
+ return request.render("online_tendering.tender_details", {"tender": request.env['purchase.requisition'].sudo().search([('id' , '=' , tender_id)])})
+
+
+ @http.route(
+ '/tenders/apply/',
+ type="http",
+ auth="user",
+ website=True,
+ csrf=False
+ )
+ def show_tender_apply(self, tender_id):
+ tax_ids = request.env['account.tax'].sudo().search([('type_tax_use' , '=' , "purchase")])
+ return request.render("online_tendering.tender_apply", {"tender": request.env['purchase.requisition'].sudo().search([('id' , '=' , tender_id)]) , 'taxs' :tax_ids })
+
+ @http.route(
+ ["/Application_result"],
+ type="http",
+ # methods=["POST","GET"],
+ auth="public",
+ website=True,
+ )
+ def portal_chatter_post(self,**kw):
+ #print("KKKKKKKKKKKKKK", kw)
+ error = False
+ _list = {}
+ # tender_id = kw['tender_id']
+ for k, val in kw.items():
+ if k.find("-price") > 0:
+ new_k = k.replace("-price", "")
+ _list[new_k] = _list.get(new_k, {})
+ _list[new_k]["price"] = val
+ if kw:
+ _list['tender_id'] = kw['tender_id']
+ _list['tax'] = kw['tax']
+ _list['vendor_note'] = kw['vendor_note']
+ else:
+ _list['tender_id'] = False
+ _list['vendor_note'] = False
+ # url = request.httprequest.referrer
+ application = self.tender_application_create(_list)
+ if not application:
+ error = 'You have already applied for this tender'
+ else:
+ if kw.get('attachment' , False):
+ Attachments = request.env['ir.attachment']
+ name = kw.get('attachment').filename
+ file = kw.get('attachment')
+ attachment = file.read()
+ attachment_id = Attachments.sudo().create({
+ 'name':name,
+ 'res_name': name,
+ 'type': 'binary',
+ 'res_model': 'tender.application',
+ 'res_id': application.id,
+ 'datas': base64.b64encode(attachment),
+ })
+ application.attachment_id = attachment_id.id
+ return request.render('online_tendering.user_applications' , {
+ 'error' : error,
+ 'applications' : application
+ })
+
+ def tender_application_create(self, dict):
+ print()
+ application_obj = request.env['tender.application']
+ tender = request.env['purchase.requisition'].sudo().search([('id' , '=' , dict['tender_id'])])
+ application = application_obj.sudo().search([('tender_id' , '=' ,tender.id ) , ('user_id' , '=' , request.env.user.id)])
+ if application:
+ return False
+ else:
+ application_lines = []
+ for tender_line in tender.line_ids:
+ application_lines += [(0,6,{
+ 'product_id': tender_line.product_id.id,
+ 'product_uom_id' : tender_line.product_uom_id.id,
+ 'product_qty' : tender_line.product_qty,
+ 'price_unit' : dict[str(tender_line.product_id.id)]['price'],
+ 'schedule_date' : tender_line.schedule_date,
+ 'tax_id': int(dict['tax']),
+ })]
+ application = application_obj.sudo().create({
+ 'date' : datetime.today(),
+ 'vendor_note' : dict['vendor_note'],
+ 'user_id' : request.env.user.id,
+ 'email' : request.env.user.email,
+ 'phone' : request.env.user.phone,
+ 'mobile' : request.env.user.mobile,
+ 'tender_id' : tender.id,
+ 'line_ids' : application_lines
+ })
+ return application
+
+ @http.route(
+ ["/tenders/my_applications"],
+ type="http",
+ methods=["GET"],
+ auth="user",
+ website=True,
+ )
+ def get_user_applications(self):
+ application_obj = request.env['tender.application']
+ applications = application_obj.sudo().search([('user_id' , '=' , request.env.user.id)],order="create_date desc")
+ return request.render("online_tendering.user_applications", {"applications": applications })
+ #attechment
+ @http.route(["/my/account"], methods=['POST'], type='http', auth="public", website=True)
+ def get_my_account(self, **kw):
+ attachment = kw.get('attachment')
+ msg = None
+ suc = False
+ if attachment and request.env.uid and name_of and amount:
+ create_vals = {
+ 'name': request.env['res.users'].sudo().browse(request.env.uid).name,
+ 'document_ids': base64.encodestring(attachment.read()),
+ # 'filename': attachment.filename,
+ }
+ print(create_vals)
+ new_partner_id = request.env['res.partner'].sudo().create(create_vals)
+ msg = new_partner_id.id
+ suc = True
+ return http.request.make_response(new_partner_id)
+
+ else:
+ msg = _('Problem happened while submitting your request.\n Please Try again later')
+ request.session['new_partner_id'] = msg
+ request.session['new_partner_id-status'] = suc
+ return http.request.make_response(msg)
+ # return http.redirect_with_hash('/xxxxxxx')
+
+# from odoo.addons.web.controllers.main import Home
+# class HomeExt(Home):
+# @http.route(csrf=False)
+# def authenticate(self, db, login, password, base_location=None):
+# request.session.authenticate(db, login, password)
+# return request.env['ir.http'].session_info()
+
+class CustomUserSignup(controllers.main.AuthSignupHome):
+ @http.route('/web/signup', type='http', auth='public', website=True, sitemap=False)
+ def do_signup_fill(self, **kw):
+ # , csrf=False
+ activity_types = request.env['activity.type'].sudo().search([])
+ document_types = request.env['document.type'].sudo().search([])
+ return http.request.render('auth_signup.signup', {
+ 'activity_types': activity_types,
+ 'document_types': document_types,
+ 'valid': True,
+
+ })
+
+ @http.route(['/tender_signup'], methods=['POST'], type='http', auth="public", website=True, csrf=False)
+ def do_tender_signup(self, **qcontext):
+ # print("Hiiii.. Tenders")
+ # print('token >>> ',qcontext.get("token"))
+ valid = True
+
+ values = {
+ key: qcontext.get(key)
+ for key in (
+ "login",
+ "name",
+ "password",
+ "street",
+ "city",
+ "activity_type",
+ "phone",
+ "mobile",
+ "company_represent",
+ "vat",
+ "commercial_register",
+ "company_type",
+ # "document",
+ )
+ }
+
+ if not values:
+ qcontext['valid'] = False
+ qcontext['error'] = _("The form was not properly filled in.")
+ return request.render("auth_signup.signup", qcontext)
+
+
+ if values.get("password") != qcontext.get("confirm_password"):
+ qcontext['valid'] = False
+ qcontext['error'] = _("Passwords do not match; please retype them.")
+ return request.render("auth_signup.signup", qcontext)
+ # raise UserError(_("Passwords do not match; please retype them."))
+
+ match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', qcontext.get('login'))
+ if match == None:
+ qcontext['valid'] = False
+ qcontext['error'] = _("Not a valid email address; please correct email.")
+ return request.render("auth_signup.signup", qcontext)
+
+ try:
+ # Prepare Data
+ name = qcontext.get('name')
+ attachment = qcontext.get('document')
+ activity_type = qcontext.get('activity_type')
+ document_type = qcontext.get('document_type')
+ exp_date = qcontext.get('exp_date')
+ mobile = qcontext.get('mobile')
+ phone = qcontext.get('phone')
+ email = qcontext.get('login')
+ password = qcontext.get('password')
+ # Prepare Objects
+ document_file = attachment.read()
+
+ # Set user values
+ partner_values = {
+ key: qcontext.get(key)
+ for key in (
+ "street",
+ "city",
+ "activity_type",
+ "phone",
+ "mobile",
+ "company_represent",
+ "vat",
+ "commercial_register",
+ "company_type",
+ )
+ }
+ partner_values['email'] = email
+
+ supported_langs = [
+ lang["code"]
+ for lang in request.env["res.lang"].sudo().search_read([], ["code"])
+ ]
+ if request.lang in supported_langs:
+ values["lang"] = request.lang
+ values['supplier_rank'] = 1
+ values['groups_id'] = [(6, 0, [request.env.ref('base.group_portal').id])]
+
+ print(values)
+
+ user = request.env['res.users'].sudo().with_context(no_reset_password=True).create(values)
+
+ attached_files = request.httprequest.files.getlist('document')
+ for attachment in attached_files:
+ attached_file = attachment.read()
+ document_id = request.env['partner.document'].sudo().create({
+ 'name': attachment.filename,
+ 'type_id': document_type,
+ 'partner_id': user.partner_id.id,
+ 'exp_date': exp_date,
+ 'attachment': base64.encodebytes( attached_file),
+ })
+
+
+ return http.redirect_with_hash('/my')
+
+ except Exception as e:
+ qcontext['valid'] = False
+ qcontext['error'] = str(e)
+ return request.render("auth_signup.signup", qcontext)
+
+
+
+
diff --git a/odex25_purchase/online_tendering/data/mail_templates.xml b/odex25_purchase/online_tendering/data/mail_templates.xml
new file mode 100644
index 000000000..430fbc566
--- /dev/null
+++ b/odex25_purchase/online_tendering/data/mail_templates.xml
@@ -0,0 +1,49 @@
+
+
+
+
+ Tender Application
+ ${object.tender_id.email}
+ New application NO.${object.name}
+
+ ${object.user_id.partner_id.lang}
+ ${object.user_id.name} has apply for tender No. ${object.name} with total amount = ${object.total}
+
+ ]]>
+
+
+
+
+ Tender Application Shortllist
+ ${object.user_id.email}
+ Application Shortlist.${object.name}
+ ${object.user_id.partner_id.id}
+
+ ${object.user_id.partner_id.lang}
+ Dear ${object.user_id.partner_id.name} Thank you for Apply on our Tender NO ${object.tender_id.name}
+ we are pleased to inform you That your Application has been shortlistedss
+
+ ]]>
+
+
+
+
+ Not Win RFQ
+ ${object.partner_id.email}
+ Not Selected To Purchase.${object.name}
+ ${object.partner_id.id}
+
+ ${object.partner_id.lang}
+ Dear ${object.partner_id.name} Thank you for Apply on our Tender NO ${object.requisition_id.name}
+ we are pleased to inform you That your Application was not win
+
+ ]]>
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/demo/demo.xml b/odex25_purchase/online_tendering/demo/demo.xml
new file mode 100644
index 000000000..d50a8357a
--- /dev/null
+++ b/odex25_purchase/online_tendering/demo/demo.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/i18n/ar_001.po b/odex25_purchase/online_tendering/i18n/ar_001.po
new file mode 100644
index 000000000..e5f83da40
--- /dev/null
+++ b/odex25_purchase/online_tendering/i18n/ar_001.po
@@ -0,0 +1,943 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * online_tendering
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-12-29 12:42+0000\n"
+"PO-Revision-Date: 2022-12-29 14:54+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.2.2\n"
+
+#. module: online_tendering
+#: model:mail.template,body_html:online_tendering.email_template_tender_application
+msgid ""
+"\n"
+" ${object.user_id.name} has apply for tender No. ${object.name} with total amount = ${object.total}\n"
+"
\n"
+" \n"
+" "
+msgstr ""
+"\n"
+" ${object.user_id.name} تقدم بطلب للحصول على العطاء رقم. ${object.name} بالمبلغ الإجمالي = ${object.total}\n"
+"
\n"
+" \n"
+" "
+
+#. module: online_tendering
+#: model:mail.template,body_html:online_tendering.not_win_email_template
+msgid ""
+"\n"
+" Dear ${object.partner_id.name} Thank you for Apply on our Tender NO ${object.requisition_id.name}\n"
+" we are pleased to inform you That your Application was not win\n"
+"
\n"
+" \n"
+" "
+msgstr ""
+"\n"
+" عزيزنا ${object.partner_id.name} شكرا لك على التقديم على عطاءنا رقم ${object.requisition_id.name}\n"
+" يسعدنا إبلاغك أن طلبك لم يفز\n"
+"
\n"
+" \n"
+" "
+
+#. module: online_tendering
+#: model:mail.template,body_html:online_tendering.email_template_application_shortlist
+msgid ""
+"\n"
+" Dear ${object.user_id.partner_id.name} Thank you for Apply on our Tender NO ${object.tender_id.name}\n"
+" we are pleased to inform you That your Application has been shortlistedss\n"
+"
\n"
+" \n"
+" "
+msgstr ""
+"\n"
+" عزيزنا ${object.partner_id.name} شكرا لك على التقديم على عطاءنا رقم ${object.requisition_id.name}\n"
+" يسعدنا إبلاغك أن طلبك لم يكن ضمن القائمة المختصرة\n"
+"
\n"
+" \n"
+" "
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_partner__activity_type
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__activity_type
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Activity Type"
+msgstr "نوع النشاط"
+
+#. module: online_tendering
+#: model:ir.actions.act_window,name:online_tendering.activity_type
+msgid "Activity Types"
+msgstr "انواع الأنشطة"
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.online_tender_config_menu
+msgid "Activity types"
+msgstr "انواع الأنشطة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__address
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Address"
+msgstr "العنوان الكامل "
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__user_id
+msgid "Applicant Name"
+msgstr "إسم الطلب"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__application_id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__application_id
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__type__application
+msgid "Application"
+msgstr "الطلب"
+
+#. module: online_tendering
+#: model:mail.template,subject:online_tendering.email_template_application_shortlist
+msgid "Application Shortlist.${object.name} "
+msgstr "قائمة الطلبات المختصرة. ${object.name} "
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Application Status"
+msgstr "حالة الطلب"
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.menu_tender_application_line
+msgid "Applications Products"
+msgstr "منتجات الطلب"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+msgid "Apply"
+msgstr "قدم"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+msgid "Are you sure you want to shortlisting this Request?"
+msgstr "هل أنت متأكد أنك تريد وضع هذا الطلب في قائمة مختصرة؟"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Attach Your Quotation"
+msgstr "أرفق عرض"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__attachment_id
+msgid "Attachment"
+msgstr "المرفقات"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__availability_period
+msgid "Availability Period (days)"
+msgstr "فترة التوفر (أيام)"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__available_until
+msgid "Availablity date"
+msgstr "تاريخ التوفر"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.application_reject_wizard
+#: model_terms:ir.ui.view,arch_db:online_tendering.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:online_tendering.period_extend
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Choose..."
+msgstr "أختر"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "City"
+msgstr "المدينة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Commercial Registration No."
+msgstr "رقم التسجيل التجارى"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Company"
+msgstr "الشركة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Company Name"
+msgstr "اسم الشركة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_partner__company_represent
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__company_represent
+msgid "Company Representative"
+msgstr "ممثل الشركة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_partner__company_type
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__company_type
+msgid "Company Type"
+msgstr "نوع المؤسسة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Company representative name"
+msgstr "اسم ممثل الشركة"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__contract
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__contract
+msgid "Contract"
+msgstr "العقد"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Corp Note"
+msgstr "ملاحظة شركة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__create_uid
+msgid "Created by"
+msgstr "أنشئت بواسطة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__create_date
+msgid "Created on"
+msgstr "تاريخ الإنشاء"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__date
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__date_from
+msgid "Date From"
+msgstr "من تأريخ"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__date_to
+msgid "Date To"
+msgstr "إلى تاريخ"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__days
+msgid "Days"
+msgstr "الأيام"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__department_ids
+msgid "Deparments"
+msgstr "الإدارات/الأقسام"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Department"
+msgstr "القسم"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__type
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Detailing Level"
+msgstr "مستوى التفصيل"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__line_ids
+msgid "Details"
+msgstr " التفاصيل"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_report_online_tendering_online_tender_report__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_res_partner__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Document Expiration Date"
+msgstr " انتهاء صلاحية وثيقة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Document Type"
+msgstr "نوع مستند المورد"
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__draft
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__draft
+msgid "Draft"
+msgstr "مسودة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__email
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__email
+msgid "Email"
+msgstr "البريد الإلكتروني"
+
+#. module: online_tendering
+#: code:addons/online_tendering/models/res_models.py:0
+#: model:ir.model.fields.selection,name:online_tendering.selection__res_partner__company_type__establish
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+#, python-format
+msgid "Establish"
+msgstr "مؤسسة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.period_extend
+msgid "Extend"
+msgstr "التمديد"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Extend Availability"
+msgstr "تمديد التوفر"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "From"
+msgstr "مِن"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Group By"
+msgstr "تجميع حسب.."
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__id
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__id
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__id
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__id
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order__id
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__id
+#: model:ir.model.fields,field_description:online_tendering.field_report_online_tendering_online_tender_report__id
+#: model:ir.model.fields,field_description:online_tendering.field_res_partner__id
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_report_online_tendering_online_tender_report____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_res_partner____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_res_users____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__mobile
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__mobile
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Mobile"
+msgstr "الهاتف المحمول"
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.my_application_page
+msgid "My Application"
+msgstr "طلبي"
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.my_applications
+#: model:website.menu,name:online_tendering.website_menu_my_applications
+msgid "My Applications"
+msgstr "طلباتي"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "My Note"
+msgstr "ملاحظاتي"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: online_tendering
+#: model:mail.template,subject:online_tendering.email_template_tender_application
+msgid "New application NO.${object.name} "
+msgstr "طلب جديد بالرقم.${object.name} "
+
+#. module: online_tendering
+#: model:mail.template,subject:online_tendering.not_win_email_template
+msgid "Not Selected To Purchase.${object.name} "
+msgstr "لم تختار للشراء.${object.name} "
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "Not a valid email address; please correct email."
+msgstr "البريد الإلكتروني غير صحيح؛ الرجاء تصحيح البريد الإلكتروني."
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Note"
+msgstr "ملاحظات"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Notification & Availabilty"
+msgstr "الإشعارات والتوافر"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tendering_form_view
+msgid "Online Tender Configuration"
+msgstr "أعدادات العطاء عبر الإنترنت"
+
+#. module: online_tendering
+#: model:ir.actions.act_window,name:online_tendering.action_online_tender_wizard
+#: model:ir.actions.report,name:online_tendering.action_online_tendering_report
+#: model:ir.model,name:online_tendering.model_online_tender_report
+#: model:ir.ui.menu,name:online_tendering.online_tender_report_menu
+msgid "Online Tender Report"
+msgstr "تقرير المناقصات عبر الإنترنت"
+
+#. module: online_tendering
+#: model:res.groups,name:online_tendering.group_online_tender_user
+msgid "Online Tender User"
+msgstr "مستخدم العطاء عبر الإنترنت"
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.menu_online_tender_root
+msgid "Online Tendering"
+msgstr "العطاء عبر الإنترنت"
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.open_tenders
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "Open Tenders"
+msgstr "فتح العطاء"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+msgid "Ordered Products"
+msgstr "الصنفات المطلوبة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__po_notification
+msgid "PO Notification"
+msgstr "أشعار طلب شراء"
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "كلمة المرور غير مطابقة؛ الرجاء إعادة كتابتها."
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Period"
+msgstr "الفترة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__phone
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__phone
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Phone"
+msgstr "رقم الهاتف"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__num_applications
+msgid "Portal Application"
+msgstr "تقديم عبر بوابة الموقع"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Price Total"
+msgstr "أجمالي السعر"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Price/Unit"
+msgstr "سعر الوحدة"
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__type__price
+msgid "Prices"
+msgstr "الأسعار"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Prices Comparison"
+msgstr "مقارنة الأسعار"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.employee_purchase_report_wizard_form
+msgid "Print"
+msgstr "طباعة"
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid ""
+"Problem happened while submitting your request.\n"
+" Please Try again later"
+msgstr ""
+"حدثت مشكلة أثناء تقديم طلبك.\n"
+" الرجاء معاودة المحاولة في وقت لاحق"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__product_id
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Product"
+msgstr "الصنف"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__product_uom_id
+msgid "Product Unit of Measure"
+msgstr "وحدة قياس الصنف"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+msgid "Products"
+msgstr "الصنفات"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__publish_in_portal
+msgid "Publish in Portal"
+msgstr "نشر عبر بوابة الموقع"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Published Tenders"
+msgstr "العطاءات المنشورة"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_purchase_order
+msgid "Purchase Order"
+msgstr "أمر شراء"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_purchase_requisition
+msgid "Purchase Requisition"
+msgstr "طلب الشراء"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__product_qty
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Quantity"
+msgstr "الكمية"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__email_notify
+msgid "Receive Notification"
+msgstr "أشعار أستلام"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Ref"
+msgstr "المرجع"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order__application_id
+msgid "Referance Application"
+msgstr "مرجع الطلب"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.application_reject_wizard
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+msgid "Reject"
+msgstr "رفض"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__reject_reason
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__reject_reason
+msgid "Reject Reson"
+msgstr "سبب الرفض"
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__reject
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__reject
+msgid "Rejected"
+msgstr "مرفوض"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Request Number"
+msgstr "رقم الطلب"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__requisition_id
+msgid "Requisition"
+msgstr "طلب الشراء"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__schedule_date
+msgid "Scheduled Date"
+msgstr "تاريخ الجدولة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Search Tender Application"
+msgstr "بحث طلب مناقصة"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__published_in_portal
+msgid "Show"
+msgstr "إظهار"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "Show Details"
+msgstr "إظهار التفاصيل"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Show in Portal"
+msgstr "أظهار في بوابة الموقع"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__state
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__state
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__state
+msgid "State"
+msgstr "الحالة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Status"
+msgstr "الحالة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Street"
+msgstr "الشارع"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Submit"
+msgstr "إرسال"
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#, python-format
+msgid "Submit Your Prices"
+msgstr "إرسال أسعارك"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Subtotal"
+msgstr "المجموع الفرعي"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Supplier Document"
+msgstr "مستند المورد"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Supplier Type"
+msgstr "نوع المورد"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__tax
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Tax"
+msgstr "الضريبة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Tax Registration No."
+msgstr "رقم التسجيل الضريبي"
+
+#. module: online_tendering
+#: model:ir.actions.act_window,name:online_tendering.action_tender_application
+#: model:ir.actions.act_window,name:online_tendering.action_tender_application_line
+msgid "Teander Application"
+msgstr "طلب العطاء"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__tender_id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__tender_id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__tender_id
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__tender
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__type__tender
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__tender
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Tender"
+msgstr "العطاء"
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.menu_tender_application
+msgid "Tender Applications"
+msgstr "طلبات العطاءات"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__tender_date
+msgid "Tender Date"
+msgstr "تاريخ العطاء"
+
+#. module: online_tendering
+#: model:res.groups,name:online_tendering.group_online_tender_portal_user
+msgid "Tender Portal User"
+msgstr "مستخدم العطاء عبر الإنترنت"
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.tender_page
+#: model:website.menu,name:online_tendering.website_menu_tenders
+msgid "Tenders"
+msgstr "العطاءات"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+msgid "Terms and Conditions"
+msgstr "الأحكام والشروط"
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "The form was not properly filled in."
+msgstr "لم يتم ملء النموذج بشكل صحيح."
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "There is No Application"
+msgstr "لايوجد طلب"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "There is No available Tenders"
+msgstr "لايوجد عطاءات متاحة"
+
+#. module: online_tendering
+#: code:addons/online_tendering/wizard/online_tendering_wizard.py:0
+#, python-format
+msgid "There is no Data"
+msgstr "لايوجد بيانات"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "To"
+msgstr "إلي"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__total
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__total
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.tree_tender_application_line
+msgid "Total"
+msgstr "الأجمالي"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Total Price"
+msgstr "أجمالي السعر"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Total without tax"
+msgstr "المجموع بدون ضريبة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Totoal Amount"
+msgstr "المبلغ الإجمالي"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__price_unit
+msgid "Unit Price"
+msgstr "سعر الوحدة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Unit price"
+msgstr "سعر الوحدة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Unpublish"
+msgstr "غير منشور"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_res_users
+msgid "Users"
+msgstr "المستخدمون"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__vendor_id
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Vendor"
+msgstr "المورد"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__vendor_note
+msgid "Vendor Note"
+msgstr "ملاحظات المورد"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_activity_type
+msgid "activity.type"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_application_reject_wizard
+msgid "application.reject.wizard"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_availability_period_extend
+msgid "availability.period.extend"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "available Until"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+#, python-format
+msgid "delivary date"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "e.g. Company representatve name"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "e.g. Zuhair Company"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.application_reject_wizard
+#: model_terms:ir.ui.view,arch_db:online_tendering.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:online_tendering.period_extend
+msgid "or"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#, python-format
+msgid "price"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+#, python-format
+msgid "product"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#, python-format
+msgid "product id"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+#, python-format
+msgid "quantity"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_report_online_tendering_online_tender_report
+msgid "report.online_tendering.online_tender_report"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "state"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_tender_application
+msgid "tender.application"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_tender_application_line
+msgid "tender.application.line"
+msgstr ""
diff --git a/odex25_purchase/online_tendering/i18n/ar_SY.po b/odex25_purchase/online_tendering/i18n/ar_SY.po
new file mode 100644
index 000000000..b3f656c32
--- /dev/null
+++ b/odex25_purchase/online_tendering/i18n/ar_SY.po
@@ -0,0 +1,810 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * online_tendering
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-15 11:05+0000\n"
+"PO-Revision-Date: 2022-01-15 11:05+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: online_tendering
+#: model:mail.template,body_html:online_tendering.email_template_tender_application
+msgid ""
+"\n"
+" ${object.user_id.name} has apply for tender No. ${object.name} with total amount = ${object.total}\n"
+"
\n"
+" \n"
+" "
+msgstr ""
+
+#. module: online_tendering
+#: model:mail.template,body_html:online_tendering.not_win_email_template
+msgid ""
+"\n"
+" Dear ${object.partner_id.name} Thank you for Apply on our Tender NO ${object.requisition_id.name}\n"
+" we are pleased to inform you That your Application was not win\n"
+"
\n"
+" \n"
+" "
+msgstr ""
+
+#. module: online_tendering
+#: model:mail.template,body_html:online_tendering.email_template_application_shortlist
+msgid ""
+"\n"
+" Dear ${object.user_id.partner_id.name} Thank you for Apply on our Tender NO ${object.tender_id.name}\n"
+" we are pleased to inform you That your Application has been shortlistedss\n"
+"
\n"
+" \n"
+" "
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__activity_type
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Activity Type"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.actions.act_window,name:online_tendering.activity_type
+msgid "Activity Types"
+msgstr "أنواع النشاطات"
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.online_tender_config_menu
+msgid "Activity types"
+msgstr "أنواع النشاطات"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__address
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Address"
+msgstr ""
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "Another user is already registered using this email address."
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__user_id
+msgid "Applicant Name"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__application_id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__application_id
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__type__application
+msgid "Application"
+msgstr ""
+
+#. module: online_tendering
+#: model:mail.template,subject:online_tendering.email_template_application_shortlist
+msgid "Application Shortlist.${object.name} "
+msgstr "تم قبول طلب المقدم للمناقصة.${object.name} "
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Application Status"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.menu_tender_application_line
+msgid "Applications Products"
+msgstr "الاسعار"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+msgid "Apply"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+msgid "Are you sure you want to shortlisting this Request?"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Attach Your Quotation"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__attachment_id
+msgid "Attachment"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__availability_period
+msgid "Availability Period (days)"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__available_until
+msgid "Availablity date"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.application_reject_wizard
+#: model_terms:ir.ui.view,arch_db:online_tendering.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:online_tendering.period_extend
+msgid "Cancel"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__contract
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__contract
+msgid "Contract"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Corp Note"
+msgstr ""
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "Could not create a new account."
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__create_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__create_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__date
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Date"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__date_from
+msgid "Date From"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__date_to
+msgid "Date To"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__days
+msgid "Days"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__department_ids
+msgid "Deparments"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Department"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__type
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Detailing Level"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__line_ids
+msgid "Details"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_report_online_tendering_online_tender_report__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__display_name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__draft
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__draft
+msgid "Draft"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__email
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__email
+msgid "Email"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.period_extend
+msgid "Extend"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Extend Availability"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "From"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Group By"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__id
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__id
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__id
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__id
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order__id
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__id
+#: model:ir.model.fields,field_description:online_tendering.field_report_online_tendering_online_tender_report__id
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_report_online_tendering_online_tender_report____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_res_users____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application____last_update
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__write_uid
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__write_date
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__mobile
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__mobile
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Mobile"
+msgstr "الهاتف المحمول"
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.my_applications
+msgid "My Applications"
+msgstr "طلباتي"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "My Note"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_activity_type__name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__name
+msgid "Name"
+msgstr ""
+
+#. module: online_tendering
+#: model:mail.template,subject:online_tendering.email_template_tender_application
+msgid "New application NO.${object.name} "
+msgstr "طلب وارد جديد رقم.${object.name} "
+
+#. module: online_tendering
+#: model:mail.template,subject:online_tendering.not_win_email_template
+msgid "Not Selected To Purchase.${object.name} "
+msgstr "لم يتم الاختيار للشراء.${object.name} "
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Note"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Notification & Availabilty"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tendering_form_view
+msgid "Online Tender Configuration"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.actions.act_window,name:online_tendering.action_online_tender_wizard
+#: model:ir.actions.report,name:online_tendering.action_online_tendering_report
+#: model:ir.model,name:online_tendering.model_online_tender_report
+#: model:ir.ui.menu,name:online_tendering.online_tender_report_menu
+msgid "Online Tender Report"
+msgstr "تقرير العطاءات علي البوابة"
+
+#. module: online_tendering
+#: model:res.groups,name:online_tendering.group_online_tender_user
+msgid "Online Tender User"
+msgstr "مستخدم المناقصة على البوابة"
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.menu_online_tender_root
+msgid "Online Tendering"
+msgstr "العطاءات/المناقصات بالبوابة"
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.open_tenders
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "Open Tenders"
+msgstr "العطاءات/المناقصات المفتوحة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+msgid "Ordered Products"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__po_notification
+msgid "PO Notification"
+msgstr ""
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Period"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_res_users__phone
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__phone
+#: model_terms:ir.ui.view,arch_db:online_tendering.custom_signup
+msgid "Phone"
+msgstr "رقم الهاتف"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__num_applications
+msgid "Portal Application"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Price Total"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Price/Unit"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__type__price
+msgid "Prices"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Prices Comparison"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.employee_purchase_report_wizard_form
+msgid "Print"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__name
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__product_id
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Product"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__product_uom_id
+msgid "Product Unit of Measure"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+msgid "Products"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__publish_in_portal
+msgid "Publish in Portal"
+msgstr "نشر على البوابة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Published Tenders"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_purchase_order
+msgid "Purchase Order"
+msgstr "أمر شراء"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_purchase_requisition
+msgid "Purchase Requisition"
+msgstr "طلب الشراء"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__product_qty
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Quantity"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__email_notify
+msgid "Receive Notification"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Ref"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_order__application_id
+msgid "Referance Application"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.application_reject_wizard
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+msgid "Reject"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_application_reject_wizard__reject_reason
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__reject_reason
+msgid "Reject Reson"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__reject
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__reject
+msgid "Rejected"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Request Number"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_availability_period_extend__requisition_id
+msgid "Requisition"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__schedule_date
+msgid "Scheduled Date"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Search Tender Application"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_purchase_requisition__published_in_portal
+msgid "Show"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "Show Details"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Show in Portal"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__state
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__state
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__state
+msgid "State"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Status"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Submit"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#, python-format
+msgid "Submit Your Prices"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Subtotal"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__tax
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Tax"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.actions.act_window,name:online_tendering.action_tender_application
+#: model:ir.actions.act_window,name:online_tendering.action_tender_application_line
+msgid "Teander Application"
+msgstr " طلبات المناقصات"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_online_tender_report__tender_id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__tender_id
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__tender_id
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__state__tender
+#: model:ir.model.fields.selection,name:online_tendering.selection__online_tender_report__type__tender
+#: model:ir.model.fields.selection,name:online_tendering.selection__tender_application__state__tender
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Tender"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.ui.menu,name:online_tendering.menu_tender_application
+msgid "Tender Applications"
+msgstr " طلبات المناقصات"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__tender_date
+msgid "Tender Date"
+msgstr ""
+
+#. module: online_tendering
+#: model:res.groups,name:online_tendering.group_online_tender_portal_user
+msgid "Tender Portal User"
+msgstr ""
+
+#. module: online_tendering
+#: model:website.menu,name:online_tendering.tender_page
+msgid "Tenders"
+msgstr "المناقصات / العطاءات"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+msgid "Terms and Conditions"
+msgstr ""
+
+#. module: online_tendering
+#: code:addons/online_tendering/controllers/controllers.py:0
+#, python-format
+msgid "The form was not properly filled in."
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "There is No Application"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "There is No available Tenders"
+msgstr ""
+
+#. module: online_tendering
+#: code:addons/online_tendering/wizard/online_tendering_wizard.py:0
+#, python-format
+msgid "There is no Data"
+msgstr "لاتوجد بيانات"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "To"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__total
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__total
+#: model_terms:ir.ui.view,arch_db:online_tendering.form_tender_application
+#: model_terms:ir.ui.view,arch_db:online_tendering.tree_tender_application_line
+msgid "Total"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "Total Price"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+msgid "Total without tax"
+msgstr "الإجمالي بدون ضريبة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.user_applications
+msgid "Totoal Amount"
+msgstr "الاجمالي"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__price_unit
+msgid "Unit Price"
+msgstr "سعر الوحدة"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_purchase_requisition
+msgid "Unpublish"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_res_users
+msgid "Users"
+msgstr "المستخدمون"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application_line__vendor_id
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_line_search
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_application_search
+msgid "Vendor"
+msgstr "المورد"
+
+#. module: online_tendering
+#: model:ir.model.fields,field_description:online_tendering.field_tender_application__vendor_note
+msgid "Vendor Note"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_activity_type
+msgid "activity.type"
+msgstr "النشاطات التجارية"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_application_reject_wizard
+msgid "application.reject.wizard"
+msgstr "سبب الرفض"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_availability_period_extend
+msgid "availability.period.extend"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.index
+msgid "available Until"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+#, python-format
+msgid "delivary date"
+msgstr "تاريح التسليم"
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.application_reject_wizard
+#: model_terms:ir.ui.view,arch_db:online_tendering.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:online_tendering.period_extend
+msgid "or"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#, python-format
+msgid "price"
+msgstr "السعر"
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+#, python-format
+msgid "product"
+msgstr "الصنف"
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#, python-format
+msgid "product id"
+msgstr ""
+
+#. module: online_tendering
+#. openerp-web
+#: code:addons/online_tendering/static/src/xml/tender_templates.xml:0
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_apply
+#: model_terms:ir.ui.view,arch_db:online_tendering.tender_details
+#, python-format
+msgid "quantity"
+msgstr "الكمية"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_report_online_tendering_online_tender_report
+msgid "report.online_tendering.online_tender_report"
+msgstr ""
+
+#. module: online_tendering
+#: model_terms:ir.ui.view,arch_db:online_tendering.online_tender_report
+msgid "state"
+msgstr "الحالة"
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_tender_application
+msgid "tender.application"
+msgstr ""
+
+#. module: online_tendering
+#: model:ir.model,name:online_tendering.model_tender_application_line
+msgid "tender.application.line"
+msgstr ""
diff --git a/odex25_purchase/online_tendering/models/__init__.py b/odex25_purchase/online_tendering/models/__init__.py
new file mode 100644
index 000000000..aaa1806b4
--- /dev/null
+++ b/odex25_purchase/online_tendering/models/__init__.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+
+from . import res_models
+from . import purchase_requsition
+from . import onlline_tender_conf
+from . import tender_application
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/models/models.py b/odex25_purchase/online_tendering/models/models.py
new file mode 100644
index 000000000..1914d42b2
--- /dev/null
+++ b/odex25_purchase/online_tendering/models/models.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api
+
+# class online_tendering(models.Model):
+# _name = 'online_tendering.online_tendering'
+
+# name = fields.Char()
+# value = fields.Integer()
+# value2 = fields.Float(compute="_value_pc", store=True)
+# description = fields.Text()
+#
+# @api.depends('value')
+# def _value_pc(self):
+# self.value2 = float(self.value) / 100
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/models/onlline_tender_conf.py b/odex25_purchase/online_tendering/models/onlline_tender_conf.py
new file mode 100644
index 000000000..113a46fed
--- /dev/null
+++ b/odex25_purchase/online_tendering/models/onlline_tender_conf.py
@@ -0,0 +1,7 @@
+from odoo import api, fields, models
+
+class ActivityTypes(models.Model):
+ _name = 'activity.type'
+
+ name = fields.Char('Name')
+
diff --git a/odex25_purchase/online_tendering/models/purchase_requsition.py b/odex25_purchase/online_tendering/models/purchase_requsition.py
new file mode 100644
index 000000000..358611826
--- /dev/null
+++ b/odex25_purchase/online_tendering/models/purchase_requsition.py
@@ -0,0 +1,98 @@
+from odoo import api, fields, models
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
+
+
+
+class OnlinePurchaseRequisition(models.Model):
+ _inherit = 'purchase.requisition'
+
+ published_in_portal = fields.Boolean('Show',default=False)
+ publish_in_portal = fields.Boolean(string="Publish in Portal")
+ availability_period = fields.Integer('Availability Period (days)')
+ email = fields.Char('Email')
+ email_notify = fields.Boolean('Receive Notification')
+ po_notification = fields.Boolean('PO Notification')
+ num_applications = fields.Integer('Portal Application', compute="_compute_num_applications")
+ available_until = fields.Date('Availablity date')
+
+
+
+ def extend_availability(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Reject Reason',
+ 'res_model': 'availability.period.extend',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context' : {'default_requisition_id' : self.id}
+ }
+
+ @api.depends('name')
+ def _compute_num_applications(self):
+ for rec in self:
+ rec.num_applications = self.env['tender.application'].sudo().search_count([('tender_id' , '=' , rec.id)])
+
+
+ def application(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Applications',
+ 'res_model': 'tender.application',
+ 'view_mode': 'tree,form',
+ 'target': 'current',
+ 'domain' : [('tender_id' , '=' , self.id)]
+ }
+
+ def action_show_portal(self):
+ self.write({
+ 'published_in_portal' : True,
+ 'available_until' : datetime.today() + relativedelta(days=self.availability_period)
+ })
+
+
+
+ def Unpublish(self):
+ self.write({
+ 'published_in_portal' : False,
+ })
+
+
+ def action_done(self):
+ sup = super(OnlinePurchaseRequisition,self).action_done()
+ self.Unpublish()
+ template = self.env.ref('online_tendering.not_win_email_template')
+ for po in self.purchase_ids:
+ if po.state != "purchase":
+ email = template.send_mail(po.id,force_send=True,)
+ return sup
+
+
+
+class POCustom(models.Model):
+ _inherit = 'purchase.order'
+
+ application_id = fields.Many2one('tender.application' , 'Referance Application')
+
+
+ def button_confirm(self):
+ res = None
+ for rec in self:
+ res = super(POCustom,self).button_confirm()
+ if rec.application_id:
+ rec.application_id.state = 'contract'
+ return res
+
+
+class PeriodExtend(models.TransientModel):
+ _name = 'availability.period.extend'
+
+ requisition_id = fields.Many2one('purchase.requisition')
+ days = fields.Integer("Days")
+
+
+ def action_extend(self):
+ if datetime.strptime(self.requisition_id.available_until,'%Y-%m-%d') >= datetime.today():
+ self.requisition_id.available_until = datetime.strptime(self.requisition_id.available_until,'%Y-%m-%d') + relativedelta(days=self.days)
+ else:
+ self.requisition_id.available_until = datetime.today() + relativedelta(days=self.days)
diff --git a/odex25_purchase/online_tendering/models/res_models.py b/odex25_purchase/online_tendering/models/res_models.py
new file mode 100644
index 000000000..a4abfef4e
--- /dev/null
+++ b/odex25_purchase/online_tendering/models/res_models.py
@@ -0,0 +1,24 @@
+from odoo import api, fields, models ,_
+from odoo.exceptions import ValidationError
+
+class online_tendering(models.Model):
+ _inherit = "res.partner"
+
+ company_type = fields.Selection(
+ selection_add=[('establish', _('Establish'))])
+ company_represent = fields.Char('Company Representative')
+ activity_type = fields.Many2one('activity.type' , 'Activity Type')
+
+
+class PortalResUser(models.Model):
+ _inherit = 'res.users'
+
+ address = fields.Char('Address')
+ activity_type = fields.Many2one('activity.type' , 'Activity Type')
+ phone = fields.Char('Phone')
+ mobile = fields.Char('Mobile')
+ # tax_no = fields.Char('Tax No.')
+ # commercial_no = fields.Char('Commercial No.')
+ # supplier_type = fields.Selection([('company','Company'),('individual','Individual')],string="Supplier Type")
+ # supplier_doc = fields.Binary(string='Supplier Doc.')
+
diff --git a/odex25_purchase/online_tendering/models/tender_application.py b/odex25_purchase/online_tendering/models/tender_application.py
new file mode 100644
index 000000000..04f67087b
--- /dev/null
+++ b/odex25_purchase/online_tendering/models/tender_application.py
@@ -0,0 +1,152 @@
+from odoo import api, fields, models
+from odoo.addons import decimal_precision as dp
+from datetime import datetime
+
+
+class TederApplication(models.Model):
+ _name = 'tender.application'
+ _order = "id desc"
+
+ date = fields.Date(string='Date')
+ user_id = fields.Many2one('res.users' , 'Applicant Name')
+ name = fields.Char('Name' , default=lambda self: self.env['ir.sequence'].next_by_code(self._name))
+ email = fields.Char('Email')
+ phone = fields.Char('Phone')
+ mobile = fields.Char('Mobile')
+ tender_id = fields.Many2one('purchase.requisition')
+ tender_date = fields.Datetime('Tender Date' , related="tender_id.date_end")
+ total = fields.Float(string='Total', digits=dp.get_precision('Product Price'),compute="_totol_compute")
+ line_ids = fields.One2many("tender.application.line" , "application_id" , "Details")
+ state = fields.Selection([('draft' , 'Draft') , ('tender' , 'Tender') , ('contract' , 'Contract'),('reject' , 'Rejected')],string="State" ,default="draft")
+ reject_reason = fields.Text(string='Reject Reson')
+ attachment_id = fields.Many2one('ir.attachment', string="Attachment")
+ vendor_note = fields.Text('Vendor Note', default="/")
+
+ @api.model
+ def create(self,vals):
+ application = super(TederApplication , self).create(vals)
+ if application.tender_id.email_notify:
+ template = self.env.ref('online_tendering.email_template_tender_application')
+ template.send_mail(application.id,force_send=True,)
+ return application
+
+
+ @api.depends('line_ids')
+ def _totol_compute(self):
+ for rec in self:
+ sum = 0
+ for line in rec.line_ids:
+ sum += line.total
+ rec.total = sum
+
+
+ def action_tender(self):
+ user = self.user_id
+ order_lines = []
+ for line in self.line_ids:
+ order_lines += [(0,6,{
+ 'name' : line.product_id.name,
+ 'product_id': line.product_id.id,
+ 'product_uom' : line.product_uom_id.id,
+ 'product_qty' : line.product_qty,
+ 'price_unit' : line.price_unit,
+ 'date_planned' : (line.schedule_date and line.schedule_date) or line.application_id.tender_id.ordering_date,
+ })]
+ po = self.env['purchase.order'].create({
+ 'application_id' : self.id,
+ 'partner_id' : user.partner_id.id,
+ 'date_order' : datetime.today(),
+ 'origin' : self.tender_id.name,
+ 'requisition_id' : self.tender_id.id,
+ 'order_line' : order_lines
+ })
+ Attachments = self.env['ir.attachment']
+ attachment = self.attachment_id
+ if attachment:
+ Attachments.sudo().create({
+ 'name':self.attachment_id.name,
+ #'datas_fname': self.attachment_id.name,
+ 'res_name': self.attachment_id.name,
+ 'type': 'binary',
+ 'res_model': 'purchase.order',
+ 'res_id': po.id,
+ 'datas': attachment.datas,
+ })
+ template = self.env.ref('online_tendering.email_template_application_shortlist')
+ email = template.send_mail(self.id,force_send=True,)
+ self.write({
+ 'state' : 'tender'
+ })
+ if po:
+ return po
+
+
+
+ def action_reject(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Reject Reason',
+ 'res_model': 'application.reject.wizard',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context' : {'default_application_id' : self.id}
+ }
+
+
+
+class TederApplicationLine(models.Model):
+ _name = "tender.application.line"
+
+ name = fields.Char("Product" , related="product_id.name")
+ vendor_id = fields.Many2one('res.partner')
+ application_id = fields.Many2one('tender.application', string='Application', ondelete='cascade')
+ product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], required=True)
+ product_uom_id = fields.Many2one('uom.uom', string='Product Unit of Measure')
+ product_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'))
+ price_unit = fields.Float(string='Unit Price', digits=dp.get_precision('Product Price'))
+ schedule_date = fields.Date(string='Scheduled Date')
+ tax_id = fields.Many2one(comodel_name='account.tax', string='Tax')
+ tax = fields.Float(string='Tax Amount', digits=dp.get_precision('Product Price'))
+ tender_id = fields.Many2one('purchase.requisition' , related="application_id.tender_id")
+ state = fields.Selection(related="application_id.state")
+ #TODO add vat field
+ total = fields.Float(string='Total', digits=dp.get_precision('Product Price'),compute="_totol_compute")
+
+ @api.model
+ def create(self,vals):
+ line = super(TederApplicationLine,self).create(vals)
+ return line
+ # line.write({
+ # 'tender_id' : line.application_id.tender_id.id,
+ # 'vendor_id' : line.application_id.user_id.partner_id.id,
+ # })
+ @api.depends('product_qty','price_unit','tax_id')
+ def _totol_compute(self):
+ for rec in self:
+ total = rec.product_qty * rec.price_unit
+ tax = 0
+ if rec.tax_id:
+ print('tax_id OOOOOOOOOOOOO', rec.tax_id.amount)
+ tax = ((total * rec.tax_id.amount) / 100)
+ rec.total = total + tax
+ else:
+ rec.total = total
+
+ rec.tax = tax
+
+
+class RejectWizard(models.TransientModel):
+ _name = 'application.reject.wizard'
+
+ application_id = fields.Many2one('tender.application')
+ reject_reason = fields.Text(string='Reject Reson')
+
+
+ def action_reject(self):
+ self.application_id.reject_reason = self.reject_reason
+ self.application_id.state = "reject"
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/reports/online_tender_report.xml b/odex25_purchase/online_tendering/reports/online_tender_report.xml
new file mode 100644
index 000000000..e8e7ba9cd
--- /dev/null
+++ b/odex25_purchase/online_tendering/reports/online_tender_report.xml
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+ Published Tenders
+
+
+
+ Group By
+ Detailing Level
+ Period
+
+
+ From
+ To
+
+
+ Department
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Ref
+ Date
+ state
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Published Tenders
+
+
+
+ Group By
+ Detailing Level
+ Period
+
+
+ From
+ To
+
+
+ Tender
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Ref
+ Vendor
+ Date
+ Total Price
+ state
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prices Comparison
+
+
+
+ Group By
+ Detailing Level
+ Tender
+ Period
+
+
+ From
+ To
+
+
+ Product
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Vendor
+ Date
+ Quantity
+ Price/Unit
+ Price Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/reports/report_actions.xml b/odex25_purchase/online_tendering/reports/report_actions.xml
new file mode 100644
index 000000000..c557844ea
--- /dev/null
+++ b/odex25_purchase/online_tendering/reports/report_actions.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/security/.~lock.ir.model.access.csv# b/odex25_purchase/online_tendering/security/.~lock.ir.model.access.csv#
new file mode 100644
index 000000000..b172f2825
--- /dev/null
+++ b/odex25_purchase/online_tendering/security/.~lock.ir.model.access.csv#
@@ -0,0 +1 @@
+,ali,ali-ThinkPad-T440s,14.05.2020 11:56,file:///home/ali/.config/libreoffice/4;
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/security/groups.xml b/odex25_purchase/online_tendering/security/groups.xml
new file mode 100644
index 000000000..8e5048744
--- /dev/null
+++ b/odex25_purchase/online_tendering/security/groups.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Tender Portal User
+
+
+
+
+ Online Tender User
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/security/ir.model.access.csv b/odex25_purchase/online_tendering/security/ir.model.access.csv
new file mode 100644
index 000000000..ed3218170
--- /dev/null
+++ b/odex25_purchase/online_tendering/security/ir.model.access.csv
@@ -0,0 +1,11 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+tender_application,tender_application,model_tender_application,,1,1,1,1
+tender_application_line,tender_application,model_tender_application_line,,1,1,1,1
+Purchase_requisition,Purchase_requisition,model_purchase_requisition,online_tendering.group_online_tender_portal_user,1,0,0,0
+purchase_requisition_line,purchase_requisition_line,purchase_requisition.model_purchase_requisition_line,online_tendering.group_online_tender_portal_user,1,0,0,0
+product_product,product_product,product.model_product_product,online_tendering.group_online_tender_portal_user,1,0,0,0
+product_template,product_template,product.model_product_template,online_tendering.group_online_tender_portal_user,1,0,0,0
+access_availability_period_extend,access_availability_period_extend,model_availability_period_extend,,1,1,1,1
+access_activity_type,access_activity_type,model_activity_type,,1,1,1,1
+access_application_reject_wizard,access_application_reject_wizard,model_application_reject_wizard,,1,1,1,1
+access_online_tender_report,access_online_tender_report,model_online_tender_report,,1,1,1,1
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/security/rules.xml b/odex25_purchase/online_tendering/security/rules.xml
new file mode 100644
index 000000000..c8b384f86
--- /dev/null
+++ b/odex25_purchase/online_tendering/security/rules.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ Products tender online
+
+ []
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/sequence/seq.xml b/odex25_purchase/online_tendering/sequence/seq.xml
new file mode 100644
index 000000000..892710ef7
--- /dev/null
+++ b/odex25_purchase/online_tendering/sequence/seq.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Tender Application sequence
+ tender.application
+ TA-%(year)s/%(month)s/0000
+
+ True
+
+
+
+
diff --git a/odex25_purchase/online_tendering/static/description/icon.png b/odex25_purchase/online_tendering/static/description/icon.png
new file mode 100644
index 000000000..4218e4e68
Binary files /dev/null and b/odex25_purchase/online_tendering/static/description/icon.png differ
diff --git a/odex25_purchase/online_tendering/static/src/css/loginpage.css b/odex25_purchase/online_tendering/static/src/css/loginpage.css
new file mode 100644
index 000000000..d24cf4089
--- /dev/null
+++ b/odex25_purchase/online_tendering/static/src/css/loginpage.css
@@ -0,0 +1,16 @@
+
+@charset "UTF-8";
+
+main .oe_website_login_container {
+
+ vertical-align: middle;
+ padding: 40px 65px 0px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ float: none;
+ background-color: #FFF;
+ box-shadow: 0.33px 3px 12px rgba(0, 0, 0, 0.3);
+ width: 400px;
+ margin: 40px auto;
+ }
+}
diff --git a/odex25_purchase/online_tendering/static/src/js/online_tender.js b/odex25_purchase/online_tendering/static/src/js/online_tender.js
new file mode 100644
index 000000000..633daa747
--- /dev/null
+++ b/odex25_purchase/online_tendering/static/src/js/online_tender.js
@@ -0,0 +1,29 @@
+odoo.define('online_tendering.online_tender', function (require) {
+ "use strict";
+ require('web.dom_ready');
+ var core = require('web.core');
+ var ajax = require('web.ajax');
+ var QWeb = core.qweb;
+ $('.subtotal').text("0");
+ $('.untax_total').text("0");
+ $('.tax_total').text("0");
+ $('.price').change(function(event){
+ var subtotal = 0;
+ var parent_tr = $(event.currentTarget).parent().parent();
+ var old_subtotal = parseInt(parent_tr.children(".subtotal").text())
+ subtotal = event.currentTarget.value * parseInt(parent_tr.children(".qty").text())
+ var untax_total = Math.abs((parseInt($('.untax_total').text()) - old_subtotal) + subtotal)
+ $('.untax_total').text(untax_total)
+ var tax_total = untax_total + (untax_total * parseInt($('#tax').text())/100)
+ parent_tr.children(".subtotal").text(subtotal)
+ $('.tax_total').text(tax_total)
+ });
+
+ $('#tax').change(function(event){
+ var untax_total = parseInt($('.untax_total').text())
+ var tax_total = untax_total + untax_total * parseInt($(event.currentTarget).text())/100
+ $('.tax_total').text(tax_total)
+ })
+
+
+});
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/static/src/xml/tender_templates.xml b/odex25_purchase/online_tendering/static/src/xml/tender_templates.xml
new file mode 100644
index 000000000..817dc36dd
--- /dev/null
+++ b/odex25_purchase/online_tendering/static/src/xml/tender_templates.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/views/online_tender_configuration.xml b/odex25_purchase/online_tendering/views/online_tender_configuration.xml
new file mode 100644
index 000000000..cd0ed9574
--- /dev/null
+++ b/odex25_purchase/online_tendering/views/online_tender_configuration.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ activity.type
+ activity.type
+
+
+
+
+
+
+
+ Activity Types
+ ir.actions.act_window
+ activity.type
+ tree,form
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/views/purchase_requsition_veiw.xml b/odex25_purchase/online_tendering/views/purchase_requsition_veiw.xml
new file mode 100644
index 000000000..4283f5cb4
--- /dev/null
+++ b/odex25_purchase/online_tendering/views/purchase_requsition_veiw.xml
@@ -0,0 +1,75 @@
+
+
+
+
+ purchase.requisition.online
+ purchase.requisition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.form.custom
+ res.partner
+
+
+
+
+
+
+
+
+
+
+ Extend Period
+ availability.period.extend
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/views/templates.xml b/odex25_purchase/online_tendering/views/templates.xml
new file mode 100644
index 000000000..339da2de3
--- /dev/null
+++ b/odex25_purchase/online_tendering/views/templates.xml
@@ -0,0 +1,382 @@
+
+
+
+ Tenders
+
+ 15
+
+
+
+
+ Open Tenders
+ /tenders
+
+ 1
+
+
+
+
+
+
+ My Application
+
+ 15
+
+
+
+
+ My Applications
+ /tenders/my_applications
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ There is No available Tenders
+
+
+
+
Open Tenders
+
+
+
+
+
+
+
available Until
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Terms and Conditions
+
+
Ordered Products
+
+
+
+ product
+ delivary date
+ quantity
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Request Number
+ Tender
+ Date
+ Totoal Amount
+ Application Status
+ My Note
+ Corp Note
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ There is No Application
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /tender_signup
+
+
+ multipart/form-data
+
+
+
+
+
+
+ Company Name
+
+
+
+
+
+
+
+ Company representative name
+
+
+
+ Address
+
+ City
+
+
+
+ Activity Type
+
+ Choose...
+
+
+
+
+
+
+
+
+
+ Phone
+
+
+
+ Mobile
+
+
+
+ Tax Registration No.
+
+
+
+ Commercial Registration No.
+
+
+
+ Supplier Type
+
+ Company
+ Establish
+
+
+
+ Supplier Document
+
+
+
+ Document Type
+
+ Choose...
+
+
+
+
+
+
+
+
+
+ Document Expiration Date
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/online_tendering/views/tender_application.xml b/odex25_purchase/online_tendering/views/tender_application.xml
new file mode 100644
index 000000000..aaf2e91e3
--- /dev/null
+++ b/odex25_purchase/online_tendering/views/tender_application.xml
@@ -0,0 +1,208 @@
+
+
+
+
+ tender.application
+ tender.application
+
+
+
+
+
+
+ Reject Reason
+ application.reject.wizard
+
+
+
+
+
+
+
+ tender.application
+ tender.application
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tender>application.search
+ tender.application
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tender.application.line
+ tender.application.line
+
+
+
+
+
+
+ tender.application.line
+ tender.application.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tender>application.search
+ tender.application.line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Teander Application
+ ir.actions.act_window
+ tender.application
+ search,tree,form
+
+
+
+
+
+
+
+
+
+ Teander Application
+ ir.actions.act_window
+ tender.application.line
+ search,tree,form
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/wizard/__init__.py b/odex25_purchase/online_tendering/wizard/__init__.py
new file mode 100644
index 000000000..e4ffd9a34
--- /dev/null
+++ b/odex25_purchase/online_tendering/wizard/__init__.py
@@ -0,0 +1 @@
+from . import online_tendering_wizard
diff --git a/odex25_purchase/online_tendering/wizard/online_tendering_wizard.py b/odex25_purchase/online_tendering/wizard/online_tendering_wizard.py
new file mode 100644
index 000000000..8a9155cfb
--- /dev/null
+++ b/odex25_purchase/online_tendering/wizard/online_tendering_wizard.py
@@ -0,0 +1,98 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+from datetime import datetime
+
+
+class OnlineTenderWizard(models.TransientModel):
+ _name = 'online.tender.report'
+ _description = 'Online Tender Report'
+
+ type = fields.Selection([('tender' , 'Tender') , ('application' , 'Application'),('price' , 'Prices')],string="Detailing Level")
+ department_ids = fields.Many2many(comodel_name='hr.department', string='Deparments')
+ date_from = fields.Date(string='Date From')
+ date_to = fields.Date(string='Date To')
+ # product_ids = fields.Many2many(comodel_name='product.product', string='Products')
+ tender_id = fields.Many2one(comodel_name='purchase.requisition', string='Tender')
+ state = fields.Selection([('draft' , 'Draft') , ('tender' , 'Tender') , ('contract' , 'Contract'),('reject' , 'Rejected')],string="State")
+
+
+
+
+ def action_print(self):
+ department_ids = (self.department_ids and self.department_ids.ids) or self.env['hr.department'].search([]).ids
+ data = {
+ 'tender_id' : self.tender_id.id,
+ 'type' : self.type , 'department_ids' : department_ids ,
+ 'date_from' : self.date_from ,
+ 'date_to' : self.date_to ,
+ 'state' : self.state,
+ 'printed_type' : dict(self._fields['type']._description_selection(self.env)).get(self.type) }
+
+ return self.env.ref('online_tendering.action_online_tendering_report').report_action([] , data = data)
+
+
+
+
+class PurchaseGeneralReportParser(models.AbstractModel):
+ _name = "report.online_tendering.online_tender_report"
+
+
+ def get_report_values(self, docids, data=None):
+ report_values = []
+ product_prices = []
+ applications = []
+ tender_id = None
+ deparments = self.env['hr.department'].browse(data['department_ids'])
+ tender_ids = self.env['purchase.requisition'].search([('published_in_portal' , '=' , True),('ordering_date' , '>=' ,data['date_from'] ),('ordering_date' , '<=' ,data['date_to'])])
+ if data['type'] == 'tender':
+ for dep in deparments:
+ tender_ids = self.env['purchase.requisition'].search([('department_id' , '=' , dep.id),
+ ('ordering_date' , '>=' ,data['date_from']),
+ ('published_in_portal' , '=' , True),
+ ('ordering_date' , '<=' ,data['date_to'])])
+ if tender_ids:
+ report_values.append({
+ 'lable' : dep.name,
+ 'data' : tender_ids
+ })
+ elif data['type'] == 'application':
+ for tender in tender_ids:
+ applications = self.env['tender.application'].search([('tender_id' , '=' , tender.id),('state' , '=' , data['state'])])
+ if applications:
+ report_values.append({
+ 'lable' : tender.name,
+ 'data' : applications,
+ })
+ elif data['type'] == 'price':
+ tender_id = self.env['purchase.requisition'].search([('id' , '=' , data['tender_id'])])
+ for line in tender_id.line_ids:
+ application_lines = self.env['tender.application.line'].search([
+ ('tender_id' ,'=' , tender_id.id),
+ ('product_id' , '=' , line.product_id.id),
+ ('state' , '=' , data['state'])
+ ])
+ if application_lines:
+ report_values.append({
+ 'lable' : line,
+ 'data' : application_lines
+ })
+ if len(report_values) == 0:
+ raise ValidationError(_("There is no Data"))
+
+ return {
+ 'report_values' : report_values,
+ 'date_from' : data['date_from'],
+ 'date_to' : data['date_to'],
+ 'type' : data['type'],
+ 'printed_type' : data['printed_type'],
+ 'doc' : self,
+ 'tender_id' : tender_id
+ }
+
+ def date_format(self,date):
+ return datetime.strptime(date, "%Y-%m-%d %H:%M:%S").date()
+
+
+
+
+
diff --git a/odex25_purchase/online_tendering/wizard/online_tendering_wizard.xml b/odex25_purchase/online_tendering/wizard/online_tendering_wizard.xml
new file mode 100644
index 000000000..114257278
--- /dev/null
+++ b/odex25_purchase/online_tendering/wizard/online_tendering_wizard.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+ ُOnline Tender Report
+ online.tender.report
+
+
+
+
+
+
+
+ Online Tender Report
+ ir.actions.act_window
+ online.tender.report
+ form
+ new
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/__init__.py b/odex25_purchase/purchase_custom_report/__init__.py
new file mode 100644
index 000000000..546367021
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import reports
+from . import wizard
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/__manifest__.py b/odex25_purchase/purchase_custom_report/__manifest__.py
new file mode 100644
index 000000000..a4f8e57a8
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/__manifest__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+{
+ 'name' : 'Purchases Reports Customization',
+ 'version' : '1.1',
+ 'summary': 'Adding reports on the purchase requisition',
+ 'sequence': -1,
+ 'description': """
+ this module will add some report at the purchase customization
+ """,
+ 'data':[
+ 'security/ir.model.access.csv',
+ 'reports/report_template.xml',
+ 'wizard/purchase_general_report_wizard.xml',
+ 'reports/report_actions.xml',
+ 'reports/purchase_general_report.xml',
+ 'wizard/purchase_total_report_wizard.xml',
+ 'reports/purchase_total_report.xml',
+ 'wizard/employee_purchase_report_wizard.xml',
+ 'reports/employee_purchase_report.xml',
+ 'views/asset_custom.xml',
+ 'wizard/purchase_committee_report.xml',
+ 'reports/purchase_committe_report.xml',
+ 'views/backend_assets.xml', ],
+ 'depends' : ['purchase_requisition_custom','hr'],
+ 'installable': True,
+ 'application': True,
+}
diff --git a/odex25_purchase/purchase_custom_report/i18n/ar_001.po b/odex25_purchase/purchase_custom_report/i18n/ar_001.po
new file mode 100644
index 000000000..d42b84be6
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/i18n/ar_001.po
@@ -0,0 +1,1123 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_custom_report
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-24 05:37+0000\n"
+"PO-Revision-Date: 2023-10-24 05:37+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__accept
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__accept
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__accept
+#, python-format
+msgid "Accepted"
+msgstr "مقبول"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#, python-format
+msgid "All"
+msgstr "الكل"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Amount"
+msgstr "الاجمالي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Amount:"
+msgstr "الاجمالي:"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__approve
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__approve
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__approve
+#, python-format
+msgid "Approved"
+msgstr "معتمد"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__open
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__open
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__open
+#, python-format
+msgid "Bid Selection"
+msgstr "اختيار المنح"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__budget_approve
+msgid "Budget Approved"
+msgstr "اعتماد الموازنة"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__checked
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__checked
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__checked
+#, python-format
+msgid "Budget Checked"
+msgstr "مراجعة الميزانية"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report_wizard_form5
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.model_name_view_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_committe_report_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.wizard_purchase_order_report_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.wizard_purchase_requisition_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.wizard_vendor_report_form
+msgid "Cancel"
+msgstr "الغاء"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__cancel
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__cancel
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__cancel
+#, python-format
+msgid "Cancelled"
+msgstr "ملغي"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__category_id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__category_id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__category_id
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Category"
+msgstr "تصنيف"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__general_supervisor
+msgid "Chief Executive Officer"
+msgstr "الرئيس التنفيذي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Comittee Members:"
+msgstr "أعضاء اللجنة:"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+msgid "Committe Header"
+msgstr "عنوان اللجنة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+msgid "Committe Members"
+msgstr "أعضاء اللجنة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__committee
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__committee
+msgid "Committee"
+msgstr "لجنة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Committee Head:"
+msgstr "رئيس اللجنة:"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Committee Members"
+msgstr "أعضاء اللجنة"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__in_progress
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__in_progress
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__in_progress
+#, python-format
+msgid "Confirmed"
+msgstr "مؤكد"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__create_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__create_uid
+msgid "Created by"
+msgstr "انشيء بواسطة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__create_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__create_date
+msgid "Created on"
+msgstr "انشيء في"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Date"
+msgstr "تاريخ"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__date_from
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__date_from
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__date_from
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__date_from
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__date_from
+msgid "Date From"
+msgstr "بداية من"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#, python-format
+msgid "Date From Must Be Greater Than Date To"
+msgstr "تاريخ البداية يجب ان يكون قبل تاريخ النهاية"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__date_to
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__date_to
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__date_to
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__date_to
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__date_to
+msgid "Date To"
+msgstr "نهاية الي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Date:"
+msgstr "تاريخ"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__department_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__department_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__department_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__department_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__department_ids
+msgid "Deparments"
+msgstr "اقسام"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__department_id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__department_id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__department_id
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__type__department
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__type__department
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_total_report__group_by__department
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Department"
+msgstr "قسم"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Department:"
+msgstr "قسم"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__type__detailed
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__type__detailed
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_total_report__type__detailed
+msgid "Detailed"
+msgstr "مفصلة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_employee_purchase_report2__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_employee_purchase_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_comittee_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_comittee_report_details__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_general_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_order_report_template__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_requisition_template__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_total_report__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_vendors_report_template__display_name
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__done
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__done
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__done
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__done
+#, python-format
+msgid "Done"
+msgstr "تم"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__draft
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__draft
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__draft
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__draft
+#, python-format
+msgid "Draft"
+msgstr "مسودة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "Duration"
+msgstr "الفترة الزمنية"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__employee_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__employee_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__employee_ids
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__type__employee
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Employee"
+msgstr "الموظف"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+msgid "Employee Products Purchase Detailed Report"
+msgstr "تقرير مشتريات الموظف المفصل"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+msgid "Employee Products Purchase Total"
+msgstr "اجمالي مشتريات الموظف"
+
+#. module: purchase_custom_report
+#: model:ir.actions.report,name:purchase_custom_report.action_employee_purchase_report
+#: model:ir.ui.menu,name:purchase_custom_report.empployee_purchase_report_menu
+msgid "Employee Purchase Report"
+msgstr "تقرير مشتريات الموظف"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.action_employee_purchase_report_wizard1
+msgid "Employee Purchase Reports"
+msgstr "تقرير أوامر شراء الموظفين "
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Employee:"
+msgstr "الموظف"
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_employee_purchase_report
+msgid "Empolyee Purchase Report"
+msgstr "تقرير مشتريات الموظف"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__executive_vice
+msgid "Executive Vice President"
+msgstr "نائب الرئيس التنفيذي"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__date_from
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__date_from
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__date_from
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "From"
+msgstr "من"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__group_by
+msgid "Grop By"
+msgstr "مجمع بواسطة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__type
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Group By"
+msgstr "مجمع بواسطة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_employee_purchase_report2__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_employee_purchase_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_comittee_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_comittee_report_details__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_general_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_order_report_template__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_requisition_template__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_total_report__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_vendors_report_template__id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__id
+msgid "ID"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_employee_purchase_report2____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_employee_purchase_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_comittee_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_comittee_report_details____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_general_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_order_report_template____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_requisition_template____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_purchase_total_report____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_report_purchase_custom_report_vendors_report_template____last_update
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__write_uid
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__write_date
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__done
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__done
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__done
+#, python-format
+msgid "Locked"
+msgstr "مقفل"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__ceo_purchase
+msgid "Manager OF Purchasing And Contract"
+msgstr "المدير التنفيذي للمشتريات والعقود"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__dm
+msgid "Managment manager"
+msgstr "مدير الادارة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Member"
+msgstr "عضو"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_committee_report.py:0
+#, python-format
+msgid "No tender need Committee"
+msgstr "لا توجد منافسة تحتاج الى لجنة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__type__none
+msgid "None"
+msgstr "لايوجد"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "Number of Orders"
+msgstr "عدد الطلبات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Number of Vots"
+msgstr "عدد الاصوات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Offer Ref"
+msgstr "مرجع العرض"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Offer Ref:"
+msgstr "مرجع العرض"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__type__operational
+#, python-format
+msgid "Operational"
+msgstr "التشغيل"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Order Date"
+msgstr "تاريخ الطلب"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Order Sequence"
+msgstr "تسلسل الطلب"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+msgid "PO No."
+msgstr "رقم امر الشراء"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+msgid "PR NO."
+msgstr "رقم طلب الشراء"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Period"
+msgstr "الفترة الزمنية"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report_wizard_form5
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.model_name_view_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_committe_report_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.wizard_purchase_order_report_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.wizard_purchase_requisition_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.wizard_vendor_report_form
+msgid "Print"
+msgstr "اطبع"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__waiting
+msgid "Procurement Department"
+msgstr "إدارة المشتريات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Product"
+msgstr "المنتج"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Product Category"
+msgstr "تصنيف المنتجات"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__product_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__product_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__product_ids
+msgid "Products"
+msgstr "المنتجات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Products Purchase Detailed Report"
+msgstr "تقرير منتجات المشتريات التفصيلي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Products Purchase Total Report"
+msgstr "تقرير منتجات المشتريات التفصيلي اجمالي "
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__type__project
+#, python-format
+msgid "Project"
+msgstr "المشروع"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Purchase Agreement:"
+msgstr "موافقة"
+
+#. module: purchase_custom_report
+#: model:ir.actions.report,name:purchase_custom_report.action_report_purchase_committee
+msgid "Purchase Comittee Report"
+msgstr "تقرير لجنة المشتريات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Purchase Committee Details"
+msgstr "تفاصيل لجنة المشتريات"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.action_purchase_committee_report
+#: model:ir.actions.report,name:purchase_custom_report.action_report_purchase_committee_details
+#: model:ir.model,name:purchase_custom_report.model_purchase_committee_report
+msgid "Purchase Committee Report"
+msgstr "تقرير لجنة المشتريات"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.action_purchase_general_report_wizard
+#: model:ir.actions.report,name:purchase_custom_report.action_purchase_general_report
+#: model:ir.model,name:purchase_custom_report.model_purchase_general_report
+#: model:ir.model,name:purchase_custom_report.model_purchase_total_report
+#: model:ir.ui.menu,name:purchase_custom_report.purchase_general_report_menu
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Purchase General Report"
+msgstr "تقرير المشتريات العام"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__purchase
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__purchase
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__purchase
+#, python-format
+msgid "Purchase Order"
+msgstr "طلب شراء"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.wizard_purchase_order_report_action
+#: model:ir.actions.report,name:purchase_custom_report.action_report_purchase_order
+msgid "Purchase Orders"
+msgstr "أوامر الشراء"
+
+#. module: purchase_custom_report
+#: model:ir.ui.menu,name:purchase_custom_report.report_purchase_order_menu
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+msgid "Purchase Orders Report"
+msgstr "تقرير أوامر الشراء"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+msgid "Purchase Request That Need Purchase Committee"
+msgstr "طلب الشراء يحتاج الي لجنة الشراء"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.wizard_purchase_requisition_action
+#: model:ir.actions.report,name:purchase_custom_report.action_report_purchase_requisition
+msgid "Purchase Requisitions"
+msgstr "طلبات الشراء"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Purchase Requisitions Report"
+msgstr "تقرير طلبات الشراء"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.action_employee_purchase_report_wizard2
+#: model:ir.actions.report,name:purchase_custom_report.action_employee_purchase_report2
+#: model:ir.model,name:purchase_custom_report.model_employee_purchase_requistion
+#: model:ir.ui.menu,name:purchase_custom_report.empployee_purchase_report_menu2
+msgid "Purchase Requistion Report"
+msgstr "تقرير طلبات الشراء"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+msgid "Purchase Reuistion Total"
+msgstr "إجمالي الطلبات "
+
+#. module: purchase_custom_report
+#: model:ir.actions.report,name:purchase_custom_report.action_total_purchase
+msgid "Purchase Total Report"
+msgstr "تقرير اجمالي المشتريات"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__purchase_manager
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__purchase_manager
+#, python-format
+msgid "Purchase manager"
+msgstr "مدير المشتريات"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.purchase_total_report_wizard
+#: model:ir.ui.menu,name:purchase_custom_report.purchase_total_report_menu
+msgid "Purchase total Report"
+msgstr "تقرير اجمالي المشتريات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Purpose"
+msgstr "الغرض"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+msgid "QTY"
+msgstr "الكمية"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Qty"
+msgstr "الكمية"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Quantity"
+msgstr "الكمية"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__draft
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__draft
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__draft
+#, python-format
+msgid "RFQ"
+msgstr "طلب عرض سعر"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__sent
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__sent
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__sent
+#, python-format
+msgid "RFQ Sent"
+msgstr "ارسال عرض السعر"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Ref"
+msgstr "مرجع"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__refuse
+msgid "Refuse"
+msgstr "رفض"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__budget_rejected
+#, python-format
+msgid "Rejected By Budget"
+msgstr "الرفض من الموازنة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__second_approve
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__second_approve
+msgid "Second Approval"
+msgstr "اعتماد"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__send_budget
+msgid "Send to Budget Confirmation"
+msgstr "في انتظار إدارة الميزانية"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__show_committee_members
+msgid "Show Committee Members"
+msgstr "مشاهدة أعضاء اللجنة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__show_emp_details
+msgid "Show Employees"
+msgstr "مشاهدة الموظفين"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__sign
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__sign
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__sign
+#, python-format
+msgid "Sign"
+msgstr "توقيع"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__state
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__state
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__state
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__state
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__state
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "State"
+msgstr "حالة"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_committee_report__state
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__state
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Status"
+msgstr "حالة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Status:"
+msgstr "حالة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Subtotal"
+msgstr "الاجمالي"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__supplier_id
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__supplier_id
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "Supplier"
+msgstr "المورد"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__direct_manager
+msgid "Technical Department"
+msgstr "الإدارة الفنية"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/employee_purchase_report_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/employee_purchase_requistion_report_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_committee_report.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_general_report_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_total_report_wizard.py:0
+#, python-format
+msgid "There is no Data"
+msgstr "عفوا لايوجد بيانات"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#, python-format
+msgid "There is no data"
+msgstr "لا توجد بيانات"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__third_approve
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__third_approve
+msgid "Third Approval"
+msgstr "اعماد"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_order_report_wizard__date_to
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__date_to
+#: model:ir.model.fields,field_description:purchase_custom_report.field_vendor_report_wizard__date_to
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "To"
+msgstr "الي"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__to_approve
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__to_approve
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__to_approve
+#, python-format
+msgid "To Approve"
+msgstr "اعتماد لدي"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__type__total
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__type__total
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_total_report__type__total
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report2
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Total"
+msgstr "الاجمالي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "Total Amount"
+msgstr "المبلغ الاجمالي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_order_report_template
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid ""
+"Total Number Of\n"
+" Purchase Orders"
+msgstr "اجمالي الطلبات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid ""
+"Total Number Of\n"
+" Requisitions"
+msgstr "اجمالي الطلبات"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Totoal"
+msgstr "الاجمالي"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "Totoal Amount"
+msgstr "المبلغ الاجمالي"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__type
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__type
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__type
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_requisition_wizard__type
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__type
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_requisition_template
+msgid "Type"
+msgstr "النوع"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__unsign
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__unsign
+#, python-format
+msgid "UnSign"
+msgstr "غير موقع"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_total_report
+msgid "Unit Of measure"
+msgstr "وحدة القياس"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Unit of Measure"
+msgstr "وحدة القياس"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__unsign
+msgid "Unsign"
+msgstr "غير موقع"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_report__vendor_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_employee_purchase_requistion__vendor_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_general_report__vendor_ids
+#: model:ir.model.fields,field_description:purchase_custom_report.field_purchase_total_report__vendor_ids
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_total_report__group_by__vendor
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report
+msgid "Vendor"
+msgstr "المورد"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Vendor Offers"
+msgstr "عروض الموردين"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Vendor:"
+msgstr "المورد"
+
+#. module: purchase_custom_report
+#: model:ir.actions.act_window,name:purchase_custom_report.wizard_vendro_report_action
+#: model:ir.actions.report,name:purchase_custom_report.action_report_vendor
+msgid "Vendors"
+msgstr "الموردين"
+
+#. module: purchase_custom_report
+#: model:ir.ui.menu,name:purchase_custom_report.report_vendor_menu
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.vendors_report_template
+msgid "Vendors Report"
+msgstr "تقرير الموردين"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Voting Reason"
+msgstr "سبب التصويت"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_requistion__state__wait_budget
+msgid "Wait Budget"
+msgstr "في انتظار إدارة الميزانية"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__waiting
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__waiting
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__waiting
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__waiting
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__waiting
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__waiting
+#, python-format
+msgid "Waiting For Budget Confirmation"
+msgstr "الانتظار لاجل تأكيد الميزانية"
+
+#. module: purchase_custom_report
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__employee_purchase_report__state__waite_for_send
+msgid "Waiting For Send To Budget"
+msgstr "انتظار الارسال للموازنة"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#, python-format
+msgid "Waiting For Send to Budget"
+msgstr " انتظار ارسال الي الموازنة"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_order_report_wizard__state__wait
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__vendor_report_wizard__state__wait
+#, python-format
+msgid "Waiting To Be Signed"
+msgstr "انتظار التوقيع"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "Win Offer"
+msgstr "عرض الفوز"
+
+#. module: purchase_custom_report
+#: code:addons/purchase_custom_report/wizard/purchase_wizard.py:0
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_committee_report__state__cancel
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_general_report__state__cancel
+#: model:ir.model.fields.selection,name:purchase_custom_report.selection__purchase_requisition_wizard__state__cancel
+#, python-format
+msgid "cancelled"
+msgstr "ملغى"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report_wizard_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.employee_purchase_report_wizard_form5
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.model_name_view_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_committe_report_form
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_general_report_wizard_form
+msgid "or"
+msgstr "او"
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_purchase_order_report_wizard
+msgid "purchase.order.report.wizard"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_purchase_requisition_wizard
+msgid "purchase.requisition.wizard"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_employee_purchase_report
+msgid "report.purchase_custom_report.employee_purchase_report"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_employee_purchase_report2
+msgid "report.purchase_custom_report.employee_purchase_report2"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_purchase_comittee_report
+msgid "report.purchase_custom_report.purchase_comittee_report"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_purchase_comittee_report_details
+msgid "report.purchase_custom_report.purchase_comittee_report_details"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_purchase_general_report
+msgid "report.purchase_custom_report.purchase_general_report"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_purchase_order_report_template
+msgid "report.purchase_custom_report.purchase_order_report_template"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_purchase_requisition_template
+msgid "report.purchase_custom_report.purchase_requisition_template"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_purchase_total_report
+msgid "report.purchase_custom_report.purchase_total_report"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_report_purchase_custom_report_vendors_report_template
+msgid "report.purchase_custom_report.vendors_report_template"
+msgstr ""
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report
+msgid "state"
+msgstr "الحالة"
+
+#. module: purchase_custom_report
+#: model_terms:ir.ui.view,arch_db:purchase_custom_report.purchase_comittee_report_details
+msgid "unit price"
+msgstr "سعر الوحدة"
+
+#. module: purchase_custom_report
+#: model:ir.model,name:purchase_custom_report.model_vendor_report_wizard
+msgid "vendor.report.wizard"
+msgstr ""
diff --git a/odex25_purchase/purchase_custom_report/models/__init__.py b/odex25_purchase/purchase_custom_report/models/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/odex25_purchase/purchase_custom_report/models/category_custom.py b/odex25_purchase/purchase_custom_report/models/category_custom.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/odex25_purchase/purchase_custom_report/reports/employee_purchase_report.xml b/odex25_purchase/purchase_custom_report/reports/employee_purchase_report.xml
new file mode 100644
index 000000000..766447f08
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/employee_purchase_report.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+ Employee Products Purchase Total
+
+
+ Group By
+ Period
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Product
+ Quantity
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Employee Products Purchase Detailed Report
+
+
+
+ Group By
+ Period
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Date
+ Product
+ Unit of Measure
+ Quantity
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/reports/employee_purchase_requistion_report.xml b/odex25_purchase/purchase_custom_report/reports/employee_purchase_requistion_report.xml
new file mode 100644
index 000000000..1830f84e4
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/employee_purchase_requistion_report.xml
@@ -0,0 +1,341 @@
+
+
+
+
+
+
+
+
+
+
+ Purchase Reuistion Total
+
+
+ Group By
+ Period
+
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Date
+ PR NO.
+ Department
+ Employee
+ State
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Reuistion Total
+
+
+ Group By
+ Period
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Date
+ PR NO.
+ Department
+ Employee
+ State
+ Product
+ QTY
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/reports/purchase_committe_report.xml b/odex25_purchase/purchase_custom_report/reports/purchase_committe_report.xml
new file mode 100644
index 000000000..8bfbbb416
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/purchase_committe_report.xml
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+ Purchase Request That Need Purchase Committee
+
+
+
+ Group By
+ Period
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Ref
+ Date
+ state
+
+
+ Committe Header
+
+
+ Committe Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Committee Details
+
+
Purchase Agreement:
+
+
+ Purchase Agreement:
+
+ Date:
+
+
+
+ Department:
+
+ Status:
+
+
+
+ Comittee Members:
+
+
+
+
+
+ Committee Head:
+
+
+
+
+
Vendor Offers
+
+
+
+ #
+ Offer Ref
+ Date
+ Vendor
+ Number of Vots
+ Committee Members
+ Amount
+
+
+ Member
+ Voting Reason
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Win Offer
+
+
+
+ Offer Ref:
+
+ Date:
+
+
+
+ Amount:
+
+ Vendor:
+
+
+
+
+
+ #
+ Product
+ Qty
+ Unit of Measure
+ unit price
+ Subtotal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/reports/purchase_general_report.xml b/odex25_purchase/purchase_custom_report/reports/purchase_general_report.xml
new file mode 100644
index 000000000..ab555dbab
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/purchase_general_report.xml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+ Purchase General Report
+
+
+
+
+ Department:
+
+
+
+ #
+ Order Sequence
+
+ Employee
+
+ Vendor
+ Date
+ Status
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+ Employee:
+
+
+
+ #
+ Order Sequence
+ Vendor
+ Date
+ Status
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/reports/purchase_total_report.xml b/odex25_purchase/purchase_custom_report/reports/purchase_total_report.xml
new file mode 100644
index 000000000..ee5bda9ad
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/purchase_total_report.xml
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+ Products Purchase Total Report
+
+
+ Group By
+ Period
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Product
+ Quantity
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Products Purchase Detailed Report
+
+
+ Group By
+ Period
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ Date
+ Product
+ Unit Of measure
+ Quantity
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Totoal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/reports/report_actions.xml b/odex25_purchase/purchase_custom_report/reports/report_actions.xml
new file mode 100644
index 000000000..7b759fe9c
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/report_actions.xml
@@ -0,0 +1,72 @@
+
+
+
+
+ Purchase General Report
+ purchase.general.report
+ qweb-pdf
+ purchase_custom_report.purchase_general_report
+ purchase_custom_report.purchase_general_report
+
+
+
+
+
+ Purchase Total Report
+ purchase.general.report
+ qweb-pdf
+ purchase_custom_report.purchase_total_report
+ purchase_custom_report.purchase_total_report
+
+
+
+
+ Employee Purchase Report
+ employee.purchase.report
+ qweb-pdf
+ purchase_custom_report.employee_purchase_report
+ purchase_custom_report.employee_purchase_report
+
+
+
+
+ Vendors
+ res.partner
+ qweb-pdf
+ purchase_custom_report.vendors_report_template
+ purchase_custom_report.vendors_report_template
+
+
+
+ Purchase Requisitions
+ purchase.requisition
+ qweb-pdf
+ purchase_custom_report.purchase_requisition_template
+ purchase_custom_report.purchase_requisition_template
+
+
+
+ Purchase Orders
+ purchase.order
+ qweb-pdf
+ purchase_custom_report.purchase_order_report_template
+ purchase_custom_report.purchase_order_report_template
+
+
+
+ Purchase Comittee Report
+ purchase.committee.report
+ qweb-pdf
+ purchase_custom_report.purchase_comittee_report
+ purchase_custom_report.purchase_comittee_report
+
+
+
+ Purchase Committee Report
+ purchase.requisition
+ qweb-pdf
+ purchase_custom_report.purchase_comittee_report_details
+ purchase_custom_report.purchase_comittee_report_details
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/reports/report_template.xml b/odex25_purchase/purchase_custom_report/reports/report_template.xml
new file mode 100644
index 000000000..4dd718b67
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/reports/report_template.xml
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+
+
+
+ Purchase Requisitions Report
+
+
+
+
+
+ Duration
+
+
+ Category
+
+
+ Department
+
+
+ Type
+
+
+ State
+
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+
+
+ Ref
+
+
+ Order Date
+
+
+ Department
+
+
+ Product Category
+
+
+ Purpose
+
+
+ Type
+
+
+ State
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Number Of
+ Requisitions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Vendors Report
+
+
+
+
+
+ Duration
+
+
+ Supplier
+
+
+ Department
+
+
+ State
+
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+
+
+ Supplier
+
+
+ Number of Orders
+
+
+ Totoal Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Number Of
+ Purchase Orders
+
+
+
+
+
+
+ Total Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Orders Report
+
+
+
+
+
+ Duration
+
+
+ Supplier
+
+
+ Category
+
+
+ Department
+
+
+ State
+
+
+
+ From
+ To
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+
+
+ Ref
+
+
+ Order Date
+
+
+ Department
+
+
+ Category
+
+
+ Supplier
+
+
+ Amount
+
+
+ State
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total Number Of
+ Purchase Orders
+
+
+
+
+
+
+ Total Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/security/ir.model.access.csv b/odex25_purchase/purchase_custom_report/security/ir.model.access.csv
new file mode 100644
index 000000000..cd554c0ac
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/security/ir.model.access.csv
@@ -0,0 +1,8 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_purchase_general_report,access_purchase_general_report,model_purchase_general_report,,1,1,1,1
+access_purchase_total_report,access_purchase_total_report,model_purchase_total_report,,1,1,1,1
+access_employee_purchase_report,access_employee_purchase_report,model_employee_purchase_report,,1,1,1,1
+access_purchase_requisition_wizard,access_purchase_requisition_wizard,model_purchase_requisition_wizard,,1,1,1,1
+access_purchase_committee_report,access_purchase_committee_report,model_purchase_committee_report,,1,1,1,1
+access_purchase_order_report_wizard,access_purchase_order_report_wizard,model_purchase_order_report_wizard,,1,1,1,1
+access_vendor_report_wizard,access_vendor_report_wizard,model_vendor_report_wizard,,1,1,1,1
diff --git a/odex25_purchase/purchase_custom_report/static/description/icon.png b/odex25_purchase/purchase_custom_report/static/description/icon.png
new file mode 100644
index 000000000..4141f52da
Binary files /dev/null and b/odex25_purchase/purchase_custom_report/static/description/icon.png differ
diff --git a/odex25_purchase/purchase_custom_report/static/fonts/ae_AlMohanad.ttf b/odex25_purchase/purchase_custom_report/static/fonts/ae_AlMohanad.ttf
new file mode 100644
index 000000000..bdd7360e1
Binary files /dev/null and b/odex25_purchase/purchase_custom_report/static/fonts/ae_AlMohanad.ttf differ
diff --git a/odex25_purchase/purchase_custom_report/static/src/css/reports_style_sheet.css b/odex25_purchase/purchase_custom_report/static/src/css/reports_style_sheet.css
new file mode 100644
index 000000000..cfe1bb97c
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/static/src/css/reports_style_sheet.css
@@ -0,0 +1,3 @@
+.modal-dialog{
+ width : 50%;
+}
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/static/src/css/website_rtl.css b/odex25_purchase/purchase_custom_report/static/src/css/website_rtl.css
new file mode 100644
index 000000000..85347c670
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/static/src/css/website_rtl.css
@@ -0,0 +1,22 @@
+@media (min-width: 768px){
+ .rtl .navbar-right{
+ float: left !important;
+ }
+ .rtl .navbar-right .dropdown .dropdown-menu{
+ right: auto !important;
+ left: 0 !important;
+ }
+ .rtl .navbar-left{
+ float: right !important;
+ }
+ .rtl .navbar-left .dropdown .dropdown-menu{
+ left: auto !important;
+ right: 0 !important;
+ }
+ .navbar-nav.navbar-right:last-child{
+ margin-left: auto;
+ }
+ .rtl .pull-left{
+ float: right !important;
+ }
+}
diff --git a/odex25_purchase/purchase_custom_report/views/asset_custom.xml b/odex25_purchase/purchase_custom_report/views/asset_custom.xml
new file mode 100644
index 000000000..11f6132ff
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/views/asset_custom.xml
@@ -0,0 +1,136 @@
+
+
+
+
+
+ Purchase Reqisition
+ purchase.requisition.wizard
+ form
+
+
+
+
+
+
+ Purchase Requisitions
+ purchase.requisition.wizard
+ form
+ new
+
+
+
+
+
+
+
+ Vendors
+ vendor.report.wizard
+ form
+
+
+
+
+
+
+ Vendors
+ vendor.report.wizard
+ form
+ new
+
+
+
+
+
+
+
+
+ Vendors
+ purchase.order.report.wizard
+ form
+
+
+
+
+
+
+ Purchase Orders
+ purchase.order.report.wizard
+ form
+ new
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/views/backend_assets.xml b/odex25_purchase/purchase_custom_report/views/backend_assets.xml
new file mode 100644
index 000000000..838d31a0e
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/views/backend_assets.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/__init__.py b/odex25_purchase/purchase_custom_report/wizard/__init__.py
new file mode 100644
index 000000000..8653299c8
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/__init__.py
@@ -0,0 +1,5 @@
+from . import purchase_general_report_wizard
+from . import purchase_total_report_wizard
+from . import employee_purchase_report_wizard
+from . import purchase_wizard
+from . import purchase_committee_report
diff --git a/odex25_purchase/purchase_custom_report/wizard/employee_purchase_report_wizard.py b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_report_wizard.py
new file mode 100644
index 000000000..1b885b918
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_report_wizard.py
@@ -0,0 +1,105 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+from datetime import datetime
+
+
+class EmployeePurchaseReportWizard(models.TransientModel):
+ _name = 'employee.purchase.report'
+ _description = 'Empolyee Purchase Report'
+
+ type = fields.Selection([('total' , 'Total') , ('detailed' , 'Detailed')])
+ vendor_ids = fields.Many2many(comodel_name='res.partner', string='Vendor')
+ employee_ids = fields.Many2many(comodel_name='hr.employee', string='Employee')
+ department_ids = fields.Many2many(comodel_name='hr.department', string='Deparments')
+ date_from = fields.Date(string='Date From')
+ date_to = fields.Date(string='Date To')
+ product_ids = fields.Many2many(comodel_name='product.product', string='Products')
+
+
+
+ def action_print(self):
+ vendor_ids = (self.vendor_ids and self.vendor_ids.ids) or self.env['res.partner'].search([('supplier_rank' , '>' ,0)]).ids
+ department_ids = (self.department_ids and self.department_ids.ids) or self.env['hr.department'].search([]).ids
+ employee_ids = (self.employee_ids and self.employee_ids.ids) or self.env['hr.employee'].search([]).ids
+ product_ids = (self.product_ids and self.product_ids.ids) or self.env['product.product'].search([]).ids
+ data = {'type' : self.type ,'department_ids' : department_ids , 'employee_ids' : employee_ids , 'vendor_ids' : vendor_ids ,
+ 'type' : self.type , 'date_from' : self.date_from ,
+ 'date_to' : self.date_to , 'product_ids' : product_ids }
+
+ return self.env.ref('purchase_custom_report.action_employee_purchase_report').report_action([] , data = data)
+
+
+
+
+class PurchaseGeneralReportParser(models.AbstractModel):
+ _name = "report.purchase_custom_report.employee_purchase_report"
+
+
+ def _get_report_values(self, docids, data=None):
+ report_values = []
+ deparments = []
+ employees = self.env['hr.employee'].browse(data['employee_ids'])
+ product_ids = data['product_ids']
+ for employee in employees:
+ po_ids = self.env['purchase.order'].search([('employee_id' , '=' , employee.id),
+ ('date_order' , '>=' ,data['date_from'] ),('date_order' , '<=' ,data['date_to']),('partner_id' , 'in' , data['vendor_ids'])]).ids
+ if po_ids:
+ if data['type'] == 'total':
+ products = self._get_total_products(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : employee.name,
+ 'products' : products
+ })
+ else:
+ lines = self._get_po_lines(po_ids,product_ids)
+ if len(lines) > 0:
+ report_values.append({
+ 'lable' : employee.name,
+ 'lines' : lines
+ })
+ if len(report_values) == 0:
+ raise ValidationError(_("There is no Data"))
+
+ return {
+ 'report_values' : report_values,
+ 'date_from' : data['date_from'],
+ 'date_to' : data['date_to'],
+ 'type' : data['type'],
+ 'doc' : self
+ }
+
+ def date_format(self,date):
+ return datetime.strptime(date, "%Y-%m-%d %H:%M:%S").date()
+
+ def _get_total_products(self,po_ids,product_ids):
+ po_ids = str(po_ids).replace('[' , '(')
+ po_ids = str(po_ids).replace(']' , ')')
+ product_ids = str(product_ids).replace('[' , '(')
+ product_ids = str(product_ids).replace(']' , ')')
+
+ self.env.cr.execute("""
+ SELECT
+ sum(line.product_qty) qty,
+ product_templ.name product_name,
+ sum(line.price_subtotal) product_price
+ FROM
+ purchase_order_line line
+ left join
+ product_product product on (line.product_id = product.id)
+ left join
+ product_template product_templ on (product.product_tmpl_id = product_templ.id)
+ where line.order_id in """ + po_ids +""" and
+ line.product_id in """+ product_ids+"""
+ group by product_templ.name;
+ """)
+ products = self.env.cr.dictfetchall()
+ return products
+
+ def _get_po_lines(self,po_ids,product_ids):
+ lines = self.env['purchase.order.line'].search([('order_id' , 'in' , po_ids),('product_id' , 'in' , product_ids)])
+ return lines
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/employee_purchase_report_wizard.xml b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_report_wizard.xml
new file mode 100644
index 000000000..b6c02cab5
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_report_wizard.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+ ُEmpoyee Purchase Report
+ employee.purchase.report
+
+
+
+
+
+
+
+ Employee Purchase Report
+ ir.actions.act_window
+ employee.purchase.report
+ form
+ new
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/wizard/employee_purchase_requistion_report_wizard.py b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_requistion_report_wizard.py
new file mode 100644
index 000000000..f5327cfb4
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_requistion_report_wizard.py
@@ -0,0 +1,144 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+from datetime import datetime
+
+
+class EmployeePurchaseReportRequistionWizard(models.TransientModel):
+ _name = 'employee.purchase.requistion'
+ _description = 'Purchase Requistion Report'
+
+ type = fields.Selection([('total' , 'Total') , ('detailed' , 'Detailed')])
+ vendor_ids = fields.Many2many(comodel_name='res.partner', string='Vendor')
+ employee_ids = fields.Many2many(comodel_name='hr.employee', string='Employee')
+ department_ids = fields.Many2many(comodel_name='hr.department', string='Deparments')
+ date_from = fields.Date(string='Date From')
+ date_to = fields.Date(string='Date To')
+ product_ids = fields.Many2many(comodel_name='product.product', string='Products')
+ state = fields.Selection(
+ [('draft', 'Draft'), ('direct_manager', 'Technical Department'),('dm', 'Managment manager'),('ceo_purchase','Manager OF Purchasing And Contract'),
+ ('general_supervisor', 'Chief Executive Officer'), ('executive_vice', 'Executive Vice President'),('send_budget', 'Send to Budget Confirmation'), ('wait_budget', 'Wait Budget'),
+ ('budget_approve', 'Budget Approved'), ('waiting', 'Procurement Department'),
+ ('done', 'Done'),('refuse', 'Refuse')],tracking=True, )
+ # def state_value(self):
+ # value=''
+ # if self.state=='draft':
+ # value='Draft'
+ # elif self.state=='in_progress':
+ # value = 'Confirmed'
+ #
+ # elif self.state=='committee':
+ # value = 'Committee'
+ # elif self.state=='purchase_manager':
+ # value = 'Purchase Manager'
+ # elif self.state=='second_approve':
+ # value = 'Second Approval'
+ # elif self.state=='third_approve':
+ # value = 'Third Approval'
+ # elif self.state=='accept':
+ # value = 'Accepted'
+ # elif self.state=='open':
+ # value = 'Bid Selection'
+ # elif self.state=='waiting':
+ # value = 'Waiting For Budget Confirmation'
+ # elif self.state=='checked':
+ # value = 'Budget Checked'
+ # elif self.state=='done':
+ # value = 'Done'
+ # elif self.state=='approve':
+ # value = 'Approved'
+ # elif self.state=='cancel':
+ # value = 'Cancelled'
+ # return v
+
+ def action_print(self):
+ data = {'date_from': self.date_from,'state': self.state, 'date_to': self.date_to, 'department_ids': self.department_ids.ids, 'employee_ids': self.employee_ids.ids,'type' : self.type }
+ print('print action in ....')
+ return self.env.ref('purchase_custom_report.action_employee_purchase_report2').report_action([] , data = data)
+
+class PurchaseRequReportParser(models.AbstractModel):
+ _name = "report.purchase_custom_report.employee_purchase_report2"
+
+
+
+ def _get_report_values(self, docids, data=None):
+
+ domain = []
+ if data.get('date_from'):
+ domain.append(('date', '>=', data.get('date_from')))
+ po_ids = self.env['purchase.request'].search(domain)
+ print('p from= ,',po_ids)
+
+ if data.get('date_to'):
+ domain.append(('date', '<=', data.get('date_to')))
+ po_ids = self.env['purchase.request'].search(domain)
+ print('p to= ,',po_ids)
+ if data.get('department_ids'):
+ print('drt')
+ domain.append(('id', 'in', data.get('department_ids')))
+ po_ids = self.env['purchase.request'].search(domain)
+ print('pdpt = ,',po_ids)
+ if data.get('employee_ids'):
+ print('emp =')
+ domain.append(('id', 'in', data.get('employee_ids')))
+ po_ids = self.env['purchase.request'].search(domain)
+ print('pemp = ,',po_ids)
+ if data.get('state') and data.get('type') == 'detailed':
+ print('st',data.get('state'))
+ domain.append(('state', '=', data.get('state')))
+ po_ids = self.env['purchase.request'].search(domain)
+ print('ps = ,',po_ids)
+ po_ids = self.env['purchase.request'].search(domain)
+ department_ids = self.env['hr.department'].browse(data.get('department_ids'))
+ employee_ids = self.env['hr.employee'].browse(data.get('employee_ids'))
+ data.update({'employees': ",".join([employee.name for employee in employee_ids])})
+ data.update({'departments': ",".join([department.name for department in department_ids])})
+ print('po = ',po_ids)
+ report_values = []
+ deparments = []
+ product_ids = data.get('product_ids')
+ if len(po_ids) == 0:
+ raise ValidationError(_("There is no Data"))
+
+ return {
+ 'doc_ids': po_ids.ids,
+ 'doc_model': 'purchase.request',
+ 'docs': po_ids,
+ 'datas': data,
+ }
+
+ def date_format(self,date):
+ strdate = str(date)
+ if type(strdate) == str:
+ return datetime.strptime(strdate, "%Y-%m-%d %H:%M:%S").date()
+
+ def _get_total_products(self,po_ids,product_ids):
+ po_ids = str(po_ids).replace('[' , '(')
+ po_ids = str(po_ids).replace(']' , ')')
+ product_ids = str(product_ids).replace('[' , '(')
+ product_ids = str(product_ids).replace(']' , ')')
+
+ self.env.cr.execute("""
+ SELECT
+ sum(line.qty) qty,
+ product_templ.name product_name,
+ sum(line.sum_total) product_price
+ FROM
+ purchase_request_line line
+ left join
+ product_product product on (line.product_id = product.id)
+ left join
+ product_template product_templ on (product.product_tmpl_id = product_templ.id)
+ where line.request_id in """ + po_ids +""" and
+ line.product_id in """+ product_ids+"""
+ group by product_templ.name;
+ """)
+ products = self.env.cr.dictfetchall()
+ return products
+
+ def _get_po_lines(self,po_ids,product_ids):
+ lines = self.env['purchase.request.line'].search([('request_id' , 'in' , po_ids),('product_id' , 'in' , product_ids)])
+ return lines
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/employee_purchase_requitsion_report_wizard.xml b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_requitsion_report_wizard.xml
new file mode 100644
index 000000000..a1df29029
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/employee_purchase_requitsion_report_wizard.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+ Purchase Requistion Report
+ employee.purchase.requistion
+
+
+
+
+
+
+
+ Purchase Requistion Report
+ ir.actions.act_window
+ employee.purchase.requistion
+ form
+ new
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchas_wizard_view.xml b/odex25_purchase/purchase_custom_report/wizard/purchas_wizard_view.xml
new file mode 100644
index 000000000..e69de29bb
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_committee_report.py b/odex25_purchase/purchase_custom_report/wizard/purchase_committee_report.py
new file mode 100644
index 000000000..6dbd40f7a
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_committee_report.py
@@ -0,0 +1,114 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+
+class ModuleName(models.TransientModel):
+ _name = 'purchase.committee.report'
+ _description = 'Purchase Committee Report'
+
+ type = fields.Selection([('None' , 'None') , ('department' , 'Department')],string="Group By")
+ department_ids = fields.Many2many(comodel_name='hr.department', string='Deparments')
+ date_from = fields.Date(string='Date From')
+ date_to = fields.Date(string='Date To')
+ state = fields.Selection([
+ ('draft','Draft'),
+ ('in_progress','Confirmed'),
+ ('committee' , 'Committee'),
+ ('purchase_manager' , 'Purchase manager'),
+ ('second_approve' , 'Second Approval'),
+ ('third_approve' , 'Third Approval'),
+ ('accept','Accepted'),
+ ('open','Bid Selection'),
+ ('waiting','Waiting For Budget Confirmation'),
+ ('checked','Budget Checked'),
+ ('done','Done'),
+ ('approve','Approved'),
+ ('cancel','cancelled'),
+ ],string="Status")
+ show_committee_members = fields.Boolean(string='Show Committee Members')
+
+
+
+
+
+ def action_print(self):
+ department_ids = (self.department_ids and self.department_ids.ids) or self.env['hr.department'].search([]).ids
+ data = {'department_ids' : department_ids , 'show_committee_members' : self.show_committee_members,
+ 'group_by' : self.type , 'date_from' : self.date_from ,
+ 'date_to' : self.date_to, 'state' : self.state }
+
+ return self.env.ref('purchase_custom_report.action_report_purchase_committee').report_action([] , data = data)
+
+class PurchaseGeneralReportParser(models.AbstractModel):
+ _name = "report.purchase_custom_report.purchase_comittee_report"
+
+
+ def _get_report_values(self, docids, data=None):
+ report_values = []
+ deparments = []
+ if data['group_by'] == 'department':
+ deparments = self.env['hr.department'].browse(data['department_ids'])
+ for dep in deparments:
+ requisitions = self.env['purchase.requisition'].search([('department_id' , '=' , dep.id),
+ ('ordering_date' , '>=' ,data['date_from'] ),('ordering_date' , '<=' ,data['date_to'] ),
+ ('purchase_commitee' , '=' , True),
+ ('state' , '=' , data['state'])])
+ if requisitions:
+ report_values.append({
+ 'lable' : dep.name,
+ 'data' : requisitions
+ })
+ else:
+ requisitions = self.env['purchase.requisition'].search([('department_id' , 'in' , data['department_ids']),
+ ('ordering_date' , '>=' ,data['date_from'] ),('ordering_date' , '<=' ,data['date_to'] ),
+ ('purchase_commitee' , '=' , True),
+ ('state' , '=' , data['state'])])
+ if requisitions:
+ report_values.append({
+ 'lable' : "",
+ 'data' : requisitions
+ })
+
+
+
+ if len(report_values) == 0:
+ raise ValidationError(_("There is no Data"))
+
+ return {
+ 'report_values' : report_values,
+ 'date_from' : data['date_from'],
+ 'date_to' : data['date_to'],
+ 'show_committee_members' : data['show_committee_members'],
+ 'group_by' : data['group_by']
+ }
+
+
+
+class PurchaseGeneralReportDetails(models.AbstractModel):
+ _name = "report.purchase_custom_report.purchase_comittee_report_details"
+
+
+ def _get_report_values(self, docids, data=None):
+ committee_requisitions = []
+ requisitions = self.env['purchase.requisition'].browse(docids)
+ for requisition in requisitions:
+ if requisition.purchase_commitee:
+ committee_requisitions.append(requisition)
+ if len(committee_requisitions) == 0:
+ raise ValidationError(_('No tender need Committee'))
+ else:
+ return {
+ 'docs' : committee_requisitions,
+ 'self' : self
+ }
+
+ def get_orders(self,requisition_id):
+ return self.env['purchase.order'].search([('requisition_id' , '=' , requisition_id )])
+ def get_win(self,requisition_id):
+ return self.env['purchase.order'].search([('requisition_id' , '=' , requisition_id ),
+ ('state' , 'in' , ('sign' , 'purchase' , 'done'))
+ ])
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_committee_report.xml b/odex25_purchase/purchase_custom_report/wizard/purchase_committee_report.xml
new file mode 100644
index 000000000..0cfea4602
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_committee_report.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+ purchase.committee.report
+ purchase.committee.report
+
+
+
+
+
+
+
+ Purchase Committee Report
+ ir.actions.act_window
+ purchase.committee.report
+ form
+ new
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_general_report_wizard.py b/odex25_purchase/purchase_custom_report/wizard/purchase_general_report_wizard.py
new file mode 100644
index 000000000..5078277e4
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_general_report_wizard.py
@@ -0,0 +1,93 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+
+class ModuleName(models.TransientModel):
+ _name = 'purchase.general.report'
+ _description = 'Purchase General Report'
+
+ type = fields.Selection([('employee' , 'Employee') , ('department' , 'Department')])
+ vendor_ids = fields.Many2many(comodel_name='res.partner', string='Vendor')
+ employee_ids = fields.Many2many(comodel_name='hr.employee', string='Employee')
+ department_ids = fields.Many2many(comodel_name='hr.department', string='Deparments')
+ date_from = fields.Date(string='Date From')
+ date_to = fields.Date(string='Date To')
+ show_emp_details = fields.Boolean('Show Employees')
+ state = fields.Selection([
+ ('draft','Draft'),
+ ('in_progress','Confirmed'),
+ ('committee' , 'Committee'),
+ ('purchase_manager' , 'Purchase manager'),
+ ('second_approve' , 'Second Approval'),
+ ('third_approve' , 'Third Approval'),
+ ('accept','Accepted'),
+ ('open','Bid Selection'),
+ ('waiting','Waiting For Budget Confirmation'),
+ ('checked','Budget Checked'),
+ ('done','Done'),
+ ('approve','Approved'),
+ ('cancel','cancelled'),
+ ],string="Status")
+
+
+
+
+ def action_print(self):
+ department_ids = None
+ employee_ids = None
+ vendor_ids = (self.vendor_ids and self.vendor_ids.ids) or self.env['res.partner'].search([('supplier_rank' , '>' ,0)]).ids
+ department_ids = (self.department_ids and self.department_ids.ids) or self.env['hr.department'].search([]).ids
+ employee_ids = (self.employee_ids and self.employee_ids.ids) or self.env['hr.employee'].search([]).ids
+ data = {'show_emp_details' : self.show_emp_details ,'department_ids' : department_ids , 'employee_ids' : employee_ids , 'vendor_ids' : vendor_ids ,
+ 'type' : self.type , 'date_from' : self.date_from ,
+ 'date_to' : self.date_to, 'state' : self.state }
+
+ return self.env.ref('purchase_custom_report.action_purchase_general_report').report_action([] , data = data)
+
+
+
+
+class PurchaseGeneralReportParser(models.AbstractModel):
+ _name = "report.purchase_custom_report.purchase_general_report"
+
+
+ def _get_report_values(self, docids, data=None):
+ report_values = []
+ deparments = []
+ employees = []
+ if data['type'] == 'department':
+ deparments = self.env['hr.department'].browse(data['department_ids'])
+ for dep in deparments:
+ po_ids = self.env['purchase.order'].search([('department_id' , '=' , dep.id),
+ ('date_order' , '>=' ,data['date_from'] ),('date_order' , '<=' ,data['date_to'] ),
+ ('partner_id' , 'in' , data['vendor_ids'])])
+ if po_ids:
+ report_values.append({
+ 'department' : dep,
+ 'pos' : po_ids
+ })
+ else:
+ employees = self.env['hr.employee'].browse(data['employee_ids'])
+ for employee in employees:
+ po_ids = self.env['purchase.order'].search([('department_id' , 'in' , data['department_ids']),
+ ('date_order' , '>=' ,data['date_from'] ),('date_order' , '<=' ,data['date_to'] ),
+ ('partner_id' , 'in' , data['vendor_ids']),('employee_id' , '=' , employee.id)])
+ if po_ids:
+ report_values.append({
+ 'employee' : employee,
+ 'requests' : po_ids
+ })
+
+
+ if len(report_values) == 0:
+ raise ValidationError(_("There is no Data"))
+
+ return {
+ 'report_values' : report_values,
+ 'type' : data['type'],
+ 'show_emp_details' : data['show_emp_details']
+
+ }
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_general_report_wizard.xml b/odex25_purchase/purchase_custom_report/wizard/purchase_general_report_wizard.xml
new file mode 100644
index 000000000..79b79c35b
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_general_report_wizard.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ Purchase General Report
+ purchase.general.report
+
+
+
+
+
+
+
+ Purchase General Report
+ ir.actions.act_window
+ purchase.general.report
+ form
+ new
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_total_report_wizard.py b/odex25_purchase/purchase_custom_report/wizard/purchase_total_report_wizard.py
new file mode 100644
index 000000000..9661094b3
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_total_report_wizard.py
@@ -0,0 +1,153 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+from datetime import datetime
+
+class ModuleName(models.TransientModel):
+ _name = 'purchase.total.report'
+ _description = 'Purchase General Report'
+
+ vendor_ids = fields.Many2many(comodel_name='res.partner', string='Vendor')
+ department_ids = fields.Many2many(comodel_name='hr.department', string='Deparments')
+ date_from = fields.Date(string='Date From')
+ date_to = fields.Date(string='Date To')
+ product_ids = fields.Many2many(comodel_name='product.product', string='Products')
+ group_by = fields.Selection(string='Grop By', selection=[('department', 'Department'), ('vendor', 'Vendor'),])
+ type = fields.Selection([('detailed' , 'Detailed') , ('total' , 'Total')])
+
+ def action_print(self):
+ department_ids = None
+ employee_ids = None
+ vendor_ids = (self.vendor_ids and self.vendor_ids.ids) or self.env['res.partner'].search([('supplier_rank' , '>' ,0)]).ids
+ department_ids = (self.department_ids and self.department_ids.ids) or self.env['hr.department'].search([]).ids
+ product_ids = (self.product_ids and self.product_ids.ids) or self.env['product.product'].search([]).ids
+ data = {'type' : self.type,'department_ids' : department_ids , 'product_ids' : product_ids , 'vendor_ids' : vendor_ids ,
+ 'date_from' : self.date_from ,
+ 'date_to' : self.date_to, 'group_by' : self.group_by }
+
+ return self.env.ref('purchase_custom_report.action_total_purchase').report_action([] , data = data)
+
+
+
+
+
+
+
+class PurchaseTotalReportParser(models.AbstractModel):
+ _name = "report.purchase_custom_report.purchase_total_report"
+
+
+ def _get_report_values(self, docids, data=None):
+ report_values = []
+ deparments = []
+ employees = []
+ product_ids = data['product_ids']
+ if data['group_by'] == 'department':
+ deparments = self.env['hr.department'].browse(data['department_ids'])
+ for dep in deparments:
+ po_ids = self.env['purchase.order'].search([('department_id' , '=' , dep.id),
+ ('date_order' , '>=' ,data['date_from'] ),('date_order' , '<=' ,data['date_to'] ),
+ ('partner_id' , 'in' , data['vendor_ids'])]).ids
+ if po_ids:
+ if data['type'] == 'total':
+ products = self._get_total_products(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : dep.name,
+ 'products' : products
+ })
+ else:
+ products = self._get_po_lines(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : dep.name,
+ 'lines' : products
+ })
+ elif data['group_by'] == 'vendor' :
+ vendors = self.env['res.partner'].search([('id' , 'in' , data['vendor_ids'])])
+ if vendors:
+ for vendor in vendors:
+ po_ids = self.env['purchase.order'].search([('partner_id' , '=' , vendor.id),
+ ('date_order' , '>=' ,data['date_from'] ),('date_order' , '<=' ,data['date_to'] ),
+ ('department_id' , 'in' , data['department_ids'])]).ids
+ if po_ids:
+ if data['type'] == 'total':
+ products = self._get_total_products(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : vendor.name,
+ 'products' : products
+ })
+ else:
+ products = self._get_po_lines(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : vendor.name,
+ 'lines' : products
+ })
+ else:
+ po_ids = self.env['purchase.order'].search([('partner_id' , 'in' , data['vendor_ids']),
+ ('date_order' , '>=' ,data['date_from'] ),('date_order' , '<=' ,data['date_to'] ),
+ ('department_id' , 'in' , data['department_ids'])]).ids
+ if po_ids:
+ if data['type'] == 'total':
+ products = self._get_total_products(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : "",
+ 'products' : products
+ })
+ else:
+ products = self._get_po_lines(po_ids,product_ids)
+ if len(products) > 0:
+ report_values.append({
+ 'lable' : "",
+ 'lines' : products
+ })
+ if len(report_values) == 0:
+ raise ValidationError(_("There is no Data"))
+
+ return {
+ 'report_values' : report_values,
+ 'group_by' : data['group_by'],
+ 'date_from' : data['date_from'],
+ 'date_to' : data['date_to'],
+ 'type' : data['type'],
+ 'doc' : self
+ }
+
+ def date_format(self,date):
+ return datetime.strptime(date, "%Y-%m-%d %H:%M:%S").date()
+
+ def _get_total_products(self,po_ids,product_ids):
+ po_ids = str(po_ids).replace('[' , '(')
+ po_ids = str(po_ids).replace(']' , ')')
+ product_ids = str(product_ids).replace('[' , '(')
+ product_ids = str(product_ids).replace(']' , ')')
+
+ self.env.cr.execute("""
+ SELECT
+ sum(line.product_qty) qty,
+ product_templ.name product_name,
+ sum(line.price_subtotal) product_price
+ FROM
+ purchase_order_line line
+ left join
+ product_product product on (line.product_id = product.id)
+ left join
+ product_template product_templ on (product.product_tmpl_id = product_templ.id)
+ where line.order_id in """ + po_ids +""" and
+ line.product_id in """+ product_ids+"""
+ group by product_templ.name;
+ """)
+ products = self.env.cr.dictfetchall()
+ return products
+
+ def _get_po_lines(self,po_ids,product_ids):
+ lines = self.env['purchase.order.line'].search([('order_id' , 'in' , po_ids),('product_id' , 'in' , product_ids)])
+ return lines
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_total_report_wizard.xml b/odex25_purchase/purchase_custom_report/wizard/purchase_total_report_wizard.xml
new file mode 100644
index 000000000..cbb0ae49e
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_total_report_wizard.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ Purchase total Report
+ purchase.total.report
+
+
+
+
+
+
+
+ Purchase total Report
+ ir.actions.act_window
+ purchase.total.report
+ form
+ new
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_custom_report/wizard/purchase_wizard.py b/odex25_purchase/purchase_custom_report/wizard/purchase_wizard.py
new file mode 100644
index 000000000..65d1401a0
--- /dev/null
+++ b/odex25_purchase/purchase_custom_report/wizard/purchase_wizard.py
@@ -0,0 +1,394 @@
+# -*- coding: utf-8 -*-
+
+from datetime import datetime, timedelta, date
+from dateutil import relativedelta
+from odoo import models, fields, api, exceptions, _
+from odoo.exceptions import ValidationError, AccessError, UserError
+
+# purchase requisition wizard
+class TransportMethodWizard(models.TransientModel):
+ _name = 'purchase.requisition.wizard'
+
+ date_from = fields.Date(string='From')
+ date_to = fields.Date(string='To')
+ department_id = fields.Many2many('hr.department')
+ state = fields.Selection([
+ ('draft','Draft'),
+ ('in_progress','Confirmed'),
+ ('accept','Accepted'),
+ ('open','Bid Selection'),
+ ('waiting','Waiting For Budget Confirmation'),
+ ('checked','Budget Checked'),
+ ('done','Done'),
+ ('approve','Approved'),
+ ('cancel','cancelled'),
+ ])
+ type = fields.Selection([
+ ('project','Project'),
+ ('operational','Operational')
+ ])
+ category_id = fields.Many2many('product.category')
+
+
+ def print_report(self):
+ [form_values] = self.read()
+ if self.date_to <= self.date_from :
+ raise exceptions.ValidationError(_("Date From Must Be Greater Than Date To"))
+ data = []
+ data.append(('ordering_date','>=',form_values['date_from']))
+ data.append(('ordering_date','<=',form_values['date_to']))
+ if len(form_values['department_id']) != 0:
+ departments = []
+ for rec in form_values['department_id']:
+ departments.append(rec)
+ data.append(('department_id','in',departments))
+ if len(form_values['category_id']) != 0:
+ categories = []
+ for rec in form_values['category_id']:
+ categories.append(rec)
+ data.append(('category_id','in',categories))
+ if form_values['state'] != False:
+ data.append(('state','=',form_values['state']))
+ if form_values['type'] != False:
+ data.append(('type','=',form_values['type']))
+ datas = {
+ 'ids': [],
+ 'model': 'purchase.requisition',
+ 'department':form_values['department_id'],
+ 'category':form_values['category_id'],
+ 'state':form_values['state'],
+ 'type':form_values['type'],
+ 'form_values':data
+ }
+ return self.env.ref('purchase_custom_report.action_report_purchase_requisition').report_action(self, data=datas)
+
+class TransportMethodAbstract(models.AbstractModel):
+ _name="report.purchase_custom_report.purchase_requisition_template"
+
+ @api.model
+ def _get_report_values(self,docids, data):
+ search = []
+ status = {
+ 'draft':_('Draft'),
+ 'in_progress':_('Confirmed'),
+ 'accept':_('Accepted'),
+ 'open':_('Bid Selection'),
+ 'waiting':_('Waiting For Budget Confirmation'),
+ 'checked':_('Budget Checked'),
+ 'done':_('Done'),
+ 'approve':_('Approved'),
+ 'cancel':_('cancelled'),
+ }
+ types = {
+ 'project':_('Project'),
+ 'operational':_('Operational')
+ }
+ for rec in data['form_values']:
+ search.append(tuple(rec))
+ dataa = []
+ purchase_requisitions = self.env['purchase.requisition'].search(search)
+ for rec in purchase_requisitions:
+ dataa.append({'order':rec,'type':types[rec.type],'state':status[rec.state]})
+ if len(purchase_requisitions) == 0:
+ raise ValidationError(_("There is no data"))
+ categories=""
+ if len(data['category']) != 0:
+ partners = self.env['product.category'].search([('id','in',data['category'])])
+ for rec in partners:
+ categories = categories + rec.name +" "
+ categories = self.checkLength(categories)
+ departments=""
+ if len(data['department']) != 0:
+ partners = self.env['hr.department'].search([('id','in',data['department'])])
+ for rec in partners:
+ departments = departments + rec.name +" "
+ departments = self.checkLength(departments)
+ state = ""
+ if data['state']:
+ state = status[data['state']]
+ state = self.checkLength(state)
+ type = ""
+ if data['type']:
+ type = types[data['type']]
+ type = self.checkLength(type)
+ docargs={
+ 'doc_ids':[],
+ 'doc_model':['purchase.requisition'],
+ 'docs':dataa,
+ 'date_from':data['form_values'][0][2],
+ 'date_to':data['form_values'][1][2],
+ 'categories':categories,
+ 'departments':departments,
+ 'state':state,
+ 'type':type,
+ 'company':self.env.user.company_id,
+ }
+ return docargs
+
+ def checkLength(self,string):
+ if len(string)==0:
+ return _("All")
+ else:
+ return string
+
+# vendors wizard
+class TransportMethodWizard(models.TransientModel):
+ _name = 'vendor.report.wizard'
+
+ date_from =fields.Date(string='From')
+ date_to=fields.Date(string='To')
+ supplier_id = fields.Many2many('res.partner')
+ department_id = fields.Many2many('hr.department')
+ category_id = fields.Many2many('product.category')
+ state = fields.Selection([
+ ('wait','Waiting To Be Signed'),
+ ('unsign','UnSign'),
+ ('sign','Sign'),
+ ('waiting','Waiting For Budget Confirmation'),
+ ('draft','RFQ'),
+ ('sent','RFQ Sent'),
+ ('to approve','To Approve'),
+ ('purchase','Purchase Order'),
+ ('done','Locked'),
+ ('cancel','Cancelled'),
+ ])
+
+
+ def print_report(self):
+ [form_values] = self.read()
+ if self.date_to <= self.date_from :
+ raise exceptions.ValidationError(_("Date From Must Be Greater Than Date To"))
+ data = []
+ if len(form_values['department_id']) != 0:
+ departments = []
+ for rec in form_values['department_id']:
+ departments.append(rec)
+ data.append(('department_id','in',departments))
+ if len(form_values['category_id']) != 0:
+ categories = []
+ for rec in form_values['category_id']:
+ categories.append(rec)
+ data.append(('category_id','in',categories))
+ if form_values['state'] != False:
+ data.append(('state','=',form_values['state']))
+ data.append(('date_order','>=',form_values['date_from']))
+ data.append(('date_order','<=',form_values['date_to']))
+ datas = {
+ 'ids': [],
+ 'model': 'purchase.requisition',
+ 'form_values':data,
+ 'suppliers':form_values['supplier_id'],
+ 'supplier':form_values['supplier_id'],
+ 'category':form_values['category_id'],
+ 'department':form_values['department_id'],
+ 'state':form_values['state']
+ }
+ return self.env.ref('purchase_custom_report.action_report_vendor').report_action(self, data=datas)
+
+class TransportMethodAbstract(models.AbstractModel):
+ _name="report.purchase_custom_report.vendors_report_template"
+
+ @api.model
+ def _get_report_values(self,docids, data):
+ search = []
+ status = {
+ 'wait':_('Waiting To Be Signed'),
+ 'unsign':_('UnSign'),
+ 'sign':_('Sign'),
+ 'waiting':_('Waiting For Budget Confirmation'),
+ 'draft':_('RFQ'),
+ 'sent':_('RFQ Sent'),
+ 'to approve':_('To Approve'),
+ 'purchase':_('Purchase Order'),
+ 'done':_('Locked'),
+ 'cancel':_('Cancelled'),
+ }
+ for rec in data['form_values']:
+ search.append(tuple(rec))
+ purchase_orders = []
+ suppliersss = None
+ if len(data['suppliers']) ==0 :
+ suppliersss = idss = self.env['res.partner'].search([('supplier_rank','>',0)]).ids
+ else:
+ suppliersss= data['suppliers']
+ for rec in suppliersss:
+ sss = search
+ sss.append(('partner_id','=',rec))
+ po = self.env['purchase.order'].search(sss)
+ if len(po) != 0:
+ supplier = po[0].partner_id.name
+ if len(po) == 0:
+ supplier = self.env['res.partner'].search([('id','=',rec)]).name
+ purchase_orders.append(
+ {
+ 'len':len(po),
+ 'total_amount': sum(rec.amount_total for rec in po),
+ 'supplier':supplier,
+ })
+ sss.pop(len(sss)-1)
+ if len(purchase_orders) == 0:
+ raise ValidationError(_("There is no data"))
+ total_amount = sum(rec['total_amount'] for rec in purchase_orders)
+ lenn = sum(rec['len'] for rec in purchase_orders)
+ suppliers=""
+ if len(data['supplier']) != 0:
+ partners = self.env['res.partner'].search([('id','in',data['supplier'])])
+ for rec in partners:
+ suppliers = suppliers + rec.name +" "
+ departments=""
+ if len(data['department']) != 0:
+ partners = self.env['hr.department'].search([('id','in',data['department'])])
+ for rec in partners:
+ departments = departments + rec.name +" "
+ departments = self.checkLength(departments)
+ suppliers = self.checkLength(suppliers)
+ state=""
+ if data['state']:
+ state = status[data['state']]
+ state = self.checkLength(state)
+ docargs={
+ 'doc_ids':[],
+ 'doc_model':['purchase.order'],
+ 'date_from':data['form_values'][0][2],
+ 'date_to':data['form_values'][1][2],
+ 'suppliers':suppliers,
+ 'state':state,
+ 'departments':departments,
+ 'docs':purchase_orders,
+ 'total_amount':total_amount,
+ 'lenn':lenn
+ }
+ return docargs
+
+ def checkLength(self,string):
+ if len(string)==0:
+ return _("All")
+ else:
+ return string
+
+# purchase orders
+class TransportMethodWizard(models.TransientModel):
+ _name = 'purchase.order.report.wizard'
+
+ date_from =fields.Date(string='From')
+ date_to=fields.Date(string='To')
+ supplier_id = fields.Many2many('res.partner')
+ category_id = fields.Many2many('product.category')
+ department_id = fields.Many2many('hr.department')
+ state = fields.Selection([
+ ('wait','Waiting To Be Signed'),
+ ('unsign','UnSign'),
+ ('sign','Sign'),
+ ('waiting','Waiting For Budget Confirmation'),
+ ('draft','RFQ'),
+ ('sent','RFQ Sent'),
+ ('to approve','To Approve'),
+ ('purchase','Purchase Order'),
+ ('done','Locked'),
+ ('cancel','Cancelled'),
+ ])
+
+
+ def print_report(self):
+ [form_values] = self.read()
+ data = []
+ if self.date_to <= self.date_from :
+ raise exceptions.ValidationError(_("Date From Must Be Greater Than Date To"))
+ if len(form_values['department_id']) != 0:
+ departments = []
+ for rec in form_values['department_id']:
+ departments.append(rec)
+ data.append(('department_id','in',departments))
+ if len(form_values['category_id']) != 0:
+ categories = []
+ for rec in form_values['category_id']:
+ categories.append(rec)
+ data.append(('category_id','in',categories))
+ if len(form_values['supplier_id']) != 0:
+ supplier = []
+ for rec in form_values['supplier_id']:
+ supplier.append(rec)
+ data.append(('partner_id','in',supplier))
+ if form_values['state'] != False:
+ data.append(('state','=',form_values['state']))
+ data.append(('date_order','>=',form_values['date_from']))
+ data.append(('date_order','<=',form_values['date_to']))
+ datas = {
+ 'ids': [],
+ 'model': 'purchase.requisition',
+ 'form_values':data,
+ 'supplier':form_values['supplier_id'],
+ 'category':form_values['category_id'],
+ 'department':form_values['department_id'],
+ 'state':form_values['state']
+ }
+ return self.env.ref('purchase_custom_report.action_report_purchase_order').report_action(self, data=datas)
+
+class TransportMethodAbstract(models.AbstractModel):
+ _name="report.purchase_custom_report.purchase_order_report_template"
+
+ @api.model
+ def _get_report_values(self,docids, data):
+ search = []
+ status = {
+ 'wait':_('Waiting To Be Signed'),
+ 'unsign':_('UnSign'),
+ 'sign':_('Sign'),
+ 'waiting':_('Waiting For Budget Confirmation'),
+ 'draft':_('RFQ'),
+ 'sent':_('RFQ Sent'),
+ 'to approve':_('To Approve'),
+ 'purchase':_('Purchase Order'),
+ 'done':_('Locked'),
+ 'cancel':_('Cancelled'),
+ }
+ for rec in data['form_values']:
+ search.append(tuple(rec))
+ purchase_orders = self.env['purchase.order'].search(search)
+ po = []
+ if len(purchase_orders) == 0:
+ raise ValidationError(_("There is no data"))
+ total_amount = sum(rec.amount_total for rec in purchase_orders)
+ for rec in purchase_orders:
+ po.append({'order':rec,'date':rec.date_order[:10],'state':status[rec.state]})
+ suppliers=""
+ if len(data['supplier']) != 0:
+ partners = self.env['res.partner'].search([('id','in',data['supplier'])])
+ for rec in partners:
+ suppliers = suppliers + rec.name +" "
+ suppliers = self.checkLength(suppliers)
+ state = ""
+ if data['state']:
+ state = status[data['state']]
+ state = self.checkLength(state)
+ categories=""
+ if len(data['category']) != 0:
+ partners = self.env['product.category'].search([('id','in',data['category'])])
+ for rec in partners:
+ categories = categories + rec.name +" "
+ categories = self.checkLength(categories)
+ departments=""
+ if len(data['department']) != 0:
+ partners = self.env['hr.department'].search([('id','in',data['department'])])
+ for rec in partners:
+ departments = departments + rec.name +" "
+ departments = self.checkLength(departments)
+ docargs={
+ 'doc_ids':[],
+ 'doc_model':['purchase.order'],
+ 'date_from':data['form_values'][0][2],
+ 'date_to':data['form_values'][1][2],
+ 'suppliers':suppliers,
+ 'categories':categories,
+ 'state':state,
+ 'departments':departments,
+ 'docs':po,
+ 'total_amount':total_amount,
+ }
+ return docargs
+
+ def checkLength(self,string):
+ if len(string)==0:
+ return _("All")
+ else:
+ return string
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/__init__.py b/odex25_purchase/purchase_requisition_custom/__init__.py
new file mode 100644
index 000000000..731138af8
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import models
+from . import wizards
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/__manifest__.py b/odex25_purchase/purchase_requisition_custom/__manifest__.py
new file mode 100644
index 000000000..344d86f18
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/__manifest__.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': 'Purchase Requisition Custom',
+ 'version': '1.1',
+ 'summary': 'Adding new Functionality on the Purchase Agreements',
+ 'sequence': -1,
+ 'description': """
+ Adding new Functionalities in Purchase Agreements
+ """,
+ 'data': [
+ 'security/category_groups.xml',
+ 'security/ir.model.access.csv',
+ 'security/rules.xml',
+ 'data/purchase_sequence.xml',
+ 'data/purchase_request_seq.xml',
+ 'data/cron_data.xml',
+ 'views/purchase_requisition_custom.xml',
+ 'views/purchase_request.xml',
+ 'views/res_setting.xml',
+ 'views/vendor_type.xml',
+ 'wizards/cancel_purchase_request.xml',
+ 'wizards/convert_to_contract.xml',
+ 'reports/external_layout.xml',
+ 'reports/committee_meeting_minutes_report.xml',
+ 'views/budget_confirmation.xml',
+ ],
+ 'depends': ['stock', 'purchase_requisition', 'exp_analytic', 'project','account_budget_custom'],
+ 'installable': True,
+ 'application': True,
+}
diff --git a/odex25_purchase/purchase_requisition_custom/data/cron_data.xml b/odex25_purchase/purchase_requisition_custom/data/cron_data.xml
new file mode 100644
index 000000000..d9084dd02
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/data/cron_data.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ Daily Partner Document Expiration
+
+ code
+ model.cron_document_experation()
+
+ 1
+ days
+ -1
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/data/mail_template.xml b/odex25_purchase/purchase_requisition_custom/data/mail_template.xml
new file mode 100644
index 000000000..7c83ebb0d
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/data/mail_template.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ PO Auto Notify
+
+
+ ${object.responsible_id.partner_id.email}
+ Po Auto Notify
+ Dear ${object.responsible_id.name},
+ ${object.contract_name} Will Be Expired
+IN Purchase order: ${object.name}
+Vendor: ${object.partner_id.name}
+End Date: ${object.end_date}
+
+ ]]>
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/data/purchase_request_seq.xml b/odex25_purchase/purchase_requisition_custom/data/purchase_request_seq.xml
new file mode 100644
index 000000000..4ab5f716e
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/data/purchase_request_seq.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Stock Request Order
+ stock.request.order
+ PR %(year)s/%(month)s/
+ 5
+ 1
+ 1
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/data/purchase_sequence.xml b/odex25_purchase/purchase_requisition_custom/data/purchase_sequence.xml
new file mode 100644
index 000000000..7970aa4f1
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/data/purchase_sequence.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+ Purchase Requisition
+ purchase.requisition.purchase.seq
+ TE%(year)s/%(month)s/
+ 5
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/i18n/ar_001.po b/odex25_purchase/purchase_requisition_custom/i18n/ar_001.po
new file mode 100644
index 000000000..b5b565741
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/i18n/ar_001.po
@@ -0,0 +1,2267 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_requisition_custom
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-06-05 18:48+0000\n"
+"PO-Revision-Date: 2024-06-05 18:48+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid " No budget for this service "
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.report,print_report_name:purchase_requisition_custom.action_report_committee_meeting_minutes
+msgid "'Committee Meeting Minutes - %s' % (object.name)"
+msgstr "'محضر اجتماع اللجنة - %s' % (object.name)"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Accept"
+msgstr "قبول"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_accept_purchase_requisition
+msgid "Accept Purchase Requisition"
+msgstr "صلاحية القبول في اتفاقيات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__accept
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__accept
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__accept
+msgid "Accepted"
+msgstr "تمت الموافقة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__account_analytic_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__account_analytic_id
+msgid "Account Analytic"
+msgstr "الحساب التحليلي (بند الموازنة)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_needaction
+msgid "Action Needed"
+msgstr "الإجراء مطلوب"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Activate Budget check in purchase"
+msgstr "تفعيل التحقق من الميزانية في الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_ids
+msgid "Activities"
+msgstr "النشاطات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr "زخرفة استثناء النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_state
+msgid "Activity State"
+msgstr "نوع النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_type_icon
+msgid "Activity Type Icon"
+msgstr "أيقونة نوع النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__date_end
+msgid "Agreement Deadline"
+msgstr "الموعد النهائي لاستقبال عروض الاسعار"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__name
+msgid "Agreement Reference"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__type_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__type_id_test
+msgid "Agreement Type"
+msgstr "إجراء الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__agreement_data
+msgid "Agreement data"
+msgstr "تاريخ توقيع الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__account_id
+msgid "Analytic Account"
+msgstr "الحساب التحليلي (بند الموازنة)"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Analytic account not set"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Approve"
+msgstr "إعتماد"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_approve_purchase_requisition
+msgid "Approve Purchase Requisition"
+msgstr "الموافقة على اتفاقيات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__approve
+msgid "Approved"
+msgstr "معتمدة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__budget_amount
+msgid "Approved Budget"
+msgstr "تم اعتماد الموازنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_ir_attachment
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__attachment
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__attachment_ids
+msgid "Attachment"
+msgstr "المرفق"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_attachment_count
+msgid "Attachment Count"
+msgstr "عدد المرفقات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__auto_notification
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__auto_notification
+msgid "Auto Notification"
+msgstr "اشعار آلي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_account_bank_statement_line__purchase_id
+#: model:ir.model.fields,help:purchase_requisition_custom.field_account_move__purchase_id
+#: model:ir.model.fields,help:purchase_requisition_custom.field_account_payment__purchase_id
+msgid "Auto-complete from a past purchase order."
+msgstr "الإكمال التلقائي من أمر شراء سابق."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__available
+msgid "Available"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__open
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__open
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__open
+msgid "Bid Selection"
+msgstr "طريقة الاختيار"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__budget_id
+msgid "Budget"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_budget_confirmation
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Budget Confirmation"
+msgstr "تعميد الموازنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_crossovered_budget_lines
+msgid "Budget Line"
+msgstr "بند الموازنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Budgeting"
+msgstr "الموازنات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Can't Confirm Request With No Item!"
+msgstr "لا يمكن تأكيد الطلب مع عدم وجود صنف/خدمة!"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__cancel
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.convert_to_contract_po_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.order_select_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_cancel_wizard_view_form
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.reject_wizard_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.select_wizard_view
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_cancel_purchase_requisition
+msgid "Cancel Purchase Requisition"
+msgstr "صلاحية إلغاء الاتفاقية/المنافسة"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.purchase_request_cancel_wizard_action
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__reason
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_cancel_wizard_view_form
+msgid "Cancel Request Reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__cancel
+msgid "Cancelled"
+msgstr "ملغي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__category_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__category_ids
+msgid "Categories"
+msgstr "تصنيف الأصناف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__Chair_number
+msgid "Chair number"
+msgstr "اسم الاتفاقية/المنافسة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__change_state_line
+msgid "Change State Line"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__chief_executive_officer
+msgid "Chief Executive Officer"
+msgstr "الرئيس التنفيذي للإدارة (اكبر من او يساوي)"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Choose A Department For this Employee!"
+msgstr "اختر إدارة لهذا الموظف!"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Choose All"
+msgstr "أختيار الكل"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Choose At Least on product to purchase"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__city_name
+msgid "City"
+msgstr "المدينة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__committe_head
+msgid "Committe Head"
+msgstr "رئيس اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__committe_members
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Committe Members"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__committee
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__committee
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__committee
+msgid "Committee"
+msgstr "اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__committe_head
+msgid "Committee Head"
+msgstr "رئيس اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.report,name:purchase_requisition_custom.action_report_committee_meeting_minutes
+msgid "Committee Meeting Report"
+msgstr "تقرير اجتماع اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__committe_members
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_committe_type_form
+msgid "Committee Members"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__committee_type_id
+msgid "Committee Type"
+msgstr "نوع اللجنة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Committee members does not match in numbers"
+msgstr "أعضاء اللجنة غير متطابقين من حيث العدد الموجود"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__cs_approve
+msgid "Common Services Approval"
+msgstr "موافقة الخدمات المشتركة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_res_company
+msgid "Companies"
+msgstr "شركات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__company_id
+msgid "Company"
+msgstr "المؤسسة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_res_config_settings
+msgid "Config Settings"
+msgstr "ضبط الاعدادات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.order_select_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.reject_wizard_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.select_wizard_view
+msgid "Confirm"
+msgstr "تأكيد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__confirm_invoice
+msgid "Confirm Invoice"
+msgstr "تأكيد الفاتورة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__confirm_po
+msgid "Confirm Po"
+msgstr "تأكيد امر الشراء"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_confirm_purchase_requisition
+msgid "Confirm Purchase Requisition"
+msgstr "تاكيد اتفاقيات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_crossovered_budget_lines__budget_confirm_line_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__confirmation_ids
+msgid "Confirmation"
+msgstr "التأكيد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__in_progress
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__in_progress
+msgid "Confirmed"
+msgstr "مؤكد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__type__contract
+msgid "Contract"
+msgstr "العقد"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.convert_to_contract_po_wizard
+msgid "Contract Information"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__contract_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__contract_name
+msgid "Contract Name"
+msgstr "اسم العقد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_convert_po_contract_wizard
+msgid "Convert Contract wizard"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.convert_to_contract_po_wizard
+msgid "Convert To Contract"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.purchase_request_action
+msgid "Create New Employee purchase request"
+msgstr "إنشاء طلب شراء موظف جديد"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.purchase_type_contract_action
+msgid "Create New a Purchase Contract"
+msgstr "إنشاء عقد مشتريات جديد"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.committe_type_action
+msgid "Create Purchase Committee Type"
+msgstr "إنشاء نوع لجنة الشراء"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Create Purchase Order"
+msgstr "إنشاء طلب شراء"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Create Requisition"
+msgstr "إنشاء إتفاقية شراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Created By: "
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__create_uid
+msgid "Created by"
+msgstr "أنشئت بواسطة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__create_date
+msgid "Created on"
+msgstr "أنشئت على"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__cron_end_date
+msgid "Cron End Date"
+msgstr "تاريخ انتهاء Cron"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.server,name:purchase_requisition_custom.partner_document_cron_for_expires_ir_actions_server
+#: model:ir.cron,cron_name:purchase_requisition_custom.partner_document_cron_for_expires
+#: model:ir.cron,name:purchase_requisition_custom.partner_document_cron_for_expires
+msgid "Daily Partner Document Expiration"
+msgstr "مؤقت يومي لأختبار انتهاء صلاحية وثيقة المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__date_end
+msgid "Date End"
+msgstr "تاريخ النهاية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__convert_po_contract_wizard__period_type__day
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__day
+msgid "Day(s)"
+msgstr "يوم(أيام)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__default
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__default
+msgid "Default Cost Center"
+msgstr "مركز التكلفة الافتراضي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request_line__uom_id
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_requisition_line__product_uom_id
+msgid "Default unit of measure used for all stock operations."
+msgstr "وحدة القياس الافتراضية المستخدمة لجميع عمليات المخزون."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__picking_type_id
+msgid "Deliver To"
+msgstr "التسليم الى"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__state_of_delivery
+msgid "Delivery State"
+msgstr "حالة الاستلام"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__department_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__department_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__department_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__department_id
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__department
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__department
+msgid "Department"
+msgstr "الإدارة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__department_name
+msgid "Department Name"
+msgstr "اسم الادارة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__description
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__name
+msgid "Description"
+msgstr "الوصف/توضيح"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Description: "
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__direct_manager
+#: model:res.groups,name:purchase_requisition_custom.group_direct_manger
+msgid "Direct Manager"
+msgstr "المدير المباشر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__direct_purchase
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__direct_purchase
+msgid "Direct Purchase Amount"
+msgstr "موافقة نائب الرئيس التنفيذي لقطاع الموارد المؤسسية (اكبر من او يساوي)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Document Expiration"
+msgstr "انتهاء صلاحية المستند"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.res_partner_documents
+msgid "Documents"
+msgstr "المستندات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__done
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__done
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__done
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__done
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Done"
+msgstr "تم"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_done_purchase_requisition
+msgid "Done Purchase Requisition"
+msgstr "صلاحية اكتمال اتفاقية الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__draft
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__draft
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__draft
+msgid "Draft"
+msgstr "مبدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__edit_partner_id
+msgid "Edit Partner"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__email_to_vendor
+msgid "Email Sent to Vendor?"
+msgstr "تم ارسال طلب عرض السعر؟"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__emergency
+msgid "Emergency"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_hr_employee
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__employee_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__employee_id
+msgid "Employee"
+msgstr "الموظف"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.purchase_request_menu
+#: model:res.groups,name:purchase_requisition_custom.create_purchase_request
+msgid "Employee Purchase Request"
+msgstr "طلبات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.purchase_request_action
+msgid "Employee Request"
+msgstr "طلبات شراء الادارات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__end_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__end_date
+msgid "End Date"
+msgstr "تاريخ النهاية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Enter Quotations First!"
+msgstr "أدخل العروض أولاً!"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__chief_executive_officer
+msgid "Exceptional Amount"
+msgstr "موافقة الإدارة الاستراتيجية (اكبر من او يساوي)"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_department_approve
+msgid "Executive Director"
+msgstr "المدير التنفيذي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__exp_date
+msgid "Expiration Date"
+msgstr "تاريخ انتهاء الصلاحية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Expiration Date: "
+msgstr "تاريخ انتهاء الصلاحية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__finance_approve
+msgid "Financial Approval"
+msgstr "الادارة المالية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_follower_ids
+msgid "Followers"
+msgstr "المتابعين"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "متابعين (قنوات)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "المتابعون (الشركاء)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__general_supervisor_id
+msgid "General Supervisor"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__general_supervisor
+msgid "General Supervisor Approval"
+msgstr "موافقة المشرف العام"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Hello, This is a notice about the end date of the document."
+msgstr "مرحبًا ، هذا إشعار حول تاريخ انتهاء المستند."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_exception_icon
+msgid "Icon"
+msgstr "الأيقونة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr "الأيقونة للإشارة إلى استثناء النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_needaction
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_unread
+msgid "If checked, new messages require your attention."
+msgstr "إذا كان محددًا، فهناك رسائل جديدة تحتاج لرؤيتها."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_has_error
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr "إذا كان محددًا، فقد حدث خطأ في تسليم بعض الرسائل."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__waiting
+msgid "In Purchase"
+msgstr "ادارة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_is_follower
+msgid "Is Follower"
+msgstr "متابع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__is_purchase_budget
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__is_purchase_budget
+msgid "Is Purchase Budget"
+msgstr "بحاجة لميزانية الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__is_requisition
+msgid "Is Requisition"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__sent_to_commitee
+msgid "Is Sent to Commitee?"
+msgstr "هل أرسلت إلي لجنة؟"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__is_signed
+msgid "Is Signed"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__product_id
+msgid "Item"
+msgstr "المنتج"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Item Quantity MUST be at Least ONE!"
+msgstr "يجب أن تكون كمية الصنف واحدة على الأقل!"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Items"
+msgstr "الأصناف/الخدمات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__product_category_ids
+msgid "Items Categories"
+msgstr "تصنيف الاصناف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_account_move
+msgid "Journal Entry"
+msgstr "قيد اليومية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__write_uid
+msgid "Last Updated by"
+msgstr "اخر تحديث بواسطة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__write_date
+msgid "Last Updated on"
+msgstr "اخر تحديث في"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__legal_counsel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__legal_counsel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__legal_counsel
+msgid "Legal Counsel"
+msgstr "المستشار القانوني"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__line_ids
+msgid "Line"
+msgstr "بند"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__done
+msgid "Locked"
+msgstr "مغلق"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "المرفق الرئيسي"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.purchase_requisition_third_approve
+msgid "Maximum Amount Approval"
+msgstr "موافقة أعلى مبلغ لطلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__user_id
+msgid "Member Name"
+msgstr "اسم العضو"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_has_error
+msgid "Message Delivery error"
+msgstr "رسالة خطأ الاستلام"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_ids
+msgid "Messages"
+msgstr "الرسائل"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.purchase_requisition_second_approve
+msgid "Minimum Amount Approval"
+msgstr "موافقة أقل مبلغ لطلب الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Minimum approves cannot be greater than members count = "
+msgstr "لا يمكن أن يكون الحد الأدنى للموافقات أكبر من عدد الأعضاء ="
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Minimum votes cannot be greater than members count = "
+msgstr "لا يمكن أن يكون الحد الأدنى من الأصوات أكبر من عدد الأعضاء ="
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__convert_po_contract_wizard__period_type__month
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__month
+msgid "Month(s)"
+msgstr "شهر (شهور) "
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr "الموعد النهائي لنشاطي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Name of document: "
+msgstr "اسم المستند:"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "New"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid ""
+"New Budget Confirmation Has Been Created for Purchase Order %s to "
+"Beneficiary %s in total %s"
+msgstr "تم تعميد جديد للميزانية لأمر الشراء %s للمستفيد %s إجمالاً %s"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "New Product"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "New Purchase Order"
+msgstr "أمر شراء جديد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "New product was added. Product Name:"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "الموعد النهائي للنشاط التالي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_summary
+msgid "Next Activity Summary"
+msgstr "ملخص النشاط التالي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_type_id
+msgid "Next Activity Type"
+msgstr "نوع النشاط التالي"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "No analytic account for the project"
+msgstr "لا يوجد حساب تحليلي للمشروع"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "No budget for this service"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "No confirmation lines"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "No purchase cost for this agreement"
+msgstr "لا توجد تكلفة شراء لهذا الاجراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__min_approve
+msgid "No. of Selections"
+msgstr "عدد الاختيارات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "No. of Selections cannot be Zero"
+msgstr "عدد الاختيارات لابد أن يكون أكبر من صفر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__no_of_approve
+msgid "No. of Votes"
+msgstr "عدد الاختيارات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__actual_vote
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__min_vote
+msgid "No. of Vots"
+msgstr "عدد الاختيارات/التصويت"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__note
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Note"
+msgstr "الملاحظة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__notify_before
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__notify_before
+msgid "Notify Before"
+msgstr "إشعار قبل"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.convert_to_contract_po_wizard
+msgid "Notify Before End"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#: code:addons/purchase_requisition_custom/wizards/convert_to_contract.py:0
+#, python-format
+msgid "Notify Before End Should Be Greater Than Zero"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_needaction_counter
+msgid "Number of Actions"
+msgstr "عدد الأجراءات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_has_error_counter
+msgid "Number of errors"
+msgstr "عدد الاخطاء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "عدد الرسائل التي تتطلب إجراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "عدد الرسائل الحادث بها خطأ في التسليم"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_unread_counter
+msgid "Number of unread messages"
+msgstr "عدد الرسائل غير المقروءة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "On Date: "
+msgstr "بتأريخ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__type__operational
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__type__operational
+msgid "Operational"
+msgstr "تشغيلى"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__ordering_date
+msgid "Ordering Date"
+msgstr "تاريخ الطلب"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__type__ordinary
+msgid "Ordinary"
+msgstr "عادي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__origin
+msgid "Origin"
+msgstr "المصدر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__origin_name
+msgid "Origin Name"
+msgstr "الإسم المصدر"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "PO To Contract"
+msgstr "تحويل امر الشراء الى عقد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__parent_state
+msgid "Parent State"
+msgstr "الحالة الام"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__partner_id
+msgid "Partner"
+msgstr "المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_partner_document
+msgid "Partner Document"
+msgstr "مستند المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_document_type
+msgid "Partner Document Type"
+msgstr "نوع مستند المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_benefits_representative__documents_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_external_benefits__documents_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_grant_benefit__documents_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_partner__documents_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_users__documents_ids
+msgid "Partner Documents"
+msgstr "مستندات المورد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Partner Name: "
+msgstr "اسم المورد/مقدم الخدمة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "Payment Amount: "
+msgstr "مبلغ السداد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "Payment Notification"
+msgstr "أشعار سداد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_account_payment
+msgid "Payments"
+msgstr "الدفعات"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.purchase_pdf_reports
+msgid "Pdf Reports"
+msgstr "التقارير"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__period_type
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__period_type
+msgid "Period Type"
+msgstr "نوع الفترة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__planned_for
+msgid "Planned For"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Please Select department for employee"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Please Sign your RFQs first"
+msgstr "الرجاء قم بتوقيع الطلب اولا\""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Please add Committe Members"
+msgstr "الرجاء إضافة أعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Please create RFQ first"
+msgstr "الرجاء إنشاء طلب عرض أسعار أولاً"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Please put cost center to the product line"
+msgstr "الرجاء وضع حساب تحليلي في سطر الصنف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__po_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__po_id
+msgid "Po"
+msgstr "امر شراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_product_product
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__product_id
+msgid "Product"
+msgstr "المنتج"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__type_cat
+msgid "Product Category"
+msgstr "تصنيف الاصناف"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_category_product_manager
+msgid "Product Category Manager"
+msgstr "مدير فئات الأصناف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__product_line
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__product_line
+msgid "Product Line"
+msgstr "سجل الصنف/الخدمة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Product Quantity Can't Be Zero or less"
+msgstr "لا يمكن أن تكون كمية المنتج صفرًا أو أقل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__product_uom_id
+msgid "Product Unit of Measure"
+msgstr "وحدة قياس المنتج"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__project_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__project_id
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__project
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__type__project
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__project
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__type__project
+msgid "Project"
+msgstr "مشروع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__Project_name
+msgid "Project name"
+msgstr "اسم الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__purchase_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__choosen
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__purchase_ids
+msgid "Purchase"
+msgstr "المشتريات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+#, python-format
+msgid "Purchase Agreement"
+msgstr "إتفاقية الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__purchase_analytic_account
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__purchase_analytic_account
+msgid "Purchase Analytic Account"
+msgstr "الحساب التحليلي (البند) للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Purchase Budget"
+msgstr "ميزانية المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.purchase_committe_type_menu
+msgid "Purchase Comittee Types"
+msgstr "انواع لجان المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__purchase_commitee
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__purchase_commitee
+msgid "Purchase Commitee?"
+msgstr "يحتاج لجنة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.committe_member
+msgid "Purchase Committe Member"
+msgstr "عضو لجنة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Purchase Committe Members"
+msgstr "اعضاء لجنة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.action_purchase_committe
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__committe_members
+msgid "Purchase Committee"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.menu_purchase_committe
+#: model:ir.ui.menu,name:purchase_requisition_custom.menu_purchase_committe_main
+msgid "Purchase Committes"
+msgstr "لجان المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.purchase_type_contract_action
+msgid "Purchase Contracts"
+msgstr "عقود الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__purchase_cost
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__purchase_cost
+msgid "Purchase Cost"
+msgstr "تكلفة الشراء"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Purchase Costing"
+msgstr "تكاليف الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__purchase_create
+msgid "Purchase Create"
+msgstr "إنشاء الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_order
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_bank_statement_line__purchase_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_move__purchase_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_payment__purchase_id
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__purchase
+msgid "Purchase Order"
+msgstr "أوامر الشراء المؤكدة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/budget_confirmation.py:0
+#, python-format
+msgid "Purchase Order %s is Rejected By : %s With Reject Reason : %s"
+msgstr "طلب الشراء %s مرفوض من قبل: %s سبب الرفض: %s"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Purchase Orders"
+msgstr "اوامر الشراء"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_purchase_requsition_reports
+msgid "Purchase Reports Menu"
+msgstr "قائمة تقارير المشتريات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_request
+#, python-format
+msgid "Purchase Request"
+msgstr "طلبات الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/budget_confirmation.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Purchase Request %s is Rejected By : %s With Reject Reason : %s"
+msgstr "تم رفض طلب الشراء رقم بواسطة للأسباب اﻷتية"
+
+#. module: purchase_requisition_custom
+#: model:ir.module.category,name:purchase_requisition_custom.module_category_purchase_request
+msgid "Purchase Request Permission Group"
+msgstr "صلاحيات طلبات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_requisition
+#: model:ir.module.category,name:purchase_requisition_custom.module_category_purchase_requisition_custom
+msgid "Purchase Requisition"
+msgstr "طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_requisition_line
+msgid "Purchase Requisition Line"
+msgstr "بند طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Purchase To Contract"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Purchase agreement not approved"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__purchase_budget
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__purchase_budget
+msgid "Purchase budget"
+msgstr "ميزاينة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__purchase_manager
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__purchase_manager
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__purchase_manager
+msgid "Purchase manager"
+msgstr "مدير المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__purpose
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__purchase_purpose
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__purpose
+msgid "Purpose"
+msgstr "مبررات طلب الشراء (الغرض)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__qty
+msgid "Qty"
+msgstr "الكمية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__quality
+msgid "Quality"
+msgstr "الجودة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Quotation"
+msgstr "إدخال عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_quotation_purchase_requisition
+msgid "Quotation Purchase Requisition"
+msgstr "صلاحية ادخال عروض الاسعار في الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__draft
+msgid "RFQ"
+msgstr "امر شراء مبدئي/عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__sent
+msgid "RFQ Sent"
+msgstr "تم إرسال طلب الشراء المدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__reason
+msgid "Reason/Justification"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__recommendation_order
+msgid "Recommend"
+msgstr " الموصي به"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "Ref: "
+msgstr "مرجع الفاتورة: "
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__refuse
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Refuse"
+msgstr "رفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__refuse
+msgid "Refused"
+msgstr "مرفوض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__refusing_reason
+msgid "Refusing Reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/budget_confirmation.py:0
+#, python-format
+msgid "Reject Purchase Order"
+msgstr "رفض أمر شراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/budget_confirmation.py:0
+#, python-format
+msgid "Reject Purchase Request Budget Confirmation"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__reject_reason
+msgid "Reject Reson"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__budget_rejected
+msgid "Rejected By Budget"
+msgstr "مرفوضة حسب الميزاينة"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.reports
+msgid "Reports"
+msgstr "التقارير"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__request_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__request_id
+msgid "Request"
+msgstr "طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__request_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__request_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__request_id
+msgid "Request Ref."
+msgstr "مرجع الطلب"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.action_purchase_requisition_to_so_custom
+msgid "Request for Quotation"
+msgstr "أوامر الشراء المبدئية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__by_purchase
+msgid "Requested by Purchase"
+msgstr "الطلب لموظف اخر؟"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__requisition_id
+msgid "Requisition"
+msgstr "طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__requisition_id_ids
+msgid "Requisition Id"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Resend To Budget Check"
+msgstr "إعادة الإرسال إلى فحص الميزانية"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Reset To Draft"
+msgstr "إرجاع إلى مبدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__responsible_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__responsible_id
+msgid "Responsible"
+msgstr "المسؤول"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_user_id
+msgid "Responsible User"
+msgstr "المستخدم المسؤول"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr "خطأ في تسليم الرسائل القصيرة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Sale Price: "
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.convert_to_contract_po_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_cancel_wizard_view_form
+msgid "Save"
+msgstr "حفظ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__user_id
+msgid "Scheduler User"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__second_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__second_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__second_approve
+msgid "Second Approval"
+msgstr "الموافقة الثانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__select
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__select
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Select"
+msgstr "إختيار"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_order__project_id
+msgid "Select a project for tasks related to this purchase order."
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__selected_purchase_id
+msgid "Selected Purchase"
+msgstr "الشراء المحدد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__selection_reason
+msgid "Selection Reason"
+msgstr "معيار الاختيار"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Send To Budget"
+msgstr "إرسال إلى الموازنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Send To Budget Check"
+msgstr "إرسال فحص الميزانية"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Send To Committee"
+msgstr "إرسال إلى اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.purchase_rfq_send_to_committee
+msgid "Send to the Committee"
+msgstr "إرسال إلى اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__send_to_budget
+msgid "Sent to Budget?"
+msgstr "أرسلت للموازنة؟"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Set Default Analytic account For Purchase"
+msgstr "حدد مركز تكلفة افتراضي للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Set to Draft"
+msgstr "تعيين كمسودة"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.server,name:purchase_requisition_custom.action_sign_purchase_orders_menu
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__sign
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Sign"
+msgstr "تنفيذ عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_sign_purchase_order
+msgid "Sign Purchase Order"
+msgstr "صلاحية تنفيذ (توقيع) عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Skip Budget"
+msgstr "تخطي الميزانية"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_skip_purchase_budget
+msgid "Skip Purchase Budget"
+msgstr "تخطي ميزانية الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Sorry The minimum number of committee member is not satsfied"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Sorry This object have no field named Selection Reasoon"
+msgstr "عذرا هذا الكائن ليس لديه حقل يسمى سبب الاختيار"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid ""
+"Sorry You cannot sign this quotation ,YOU NEED MORE COMMITTE MEMBERS TO "
+"choose it"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid ""
+"Sorry you cannot sin this RFQ The requisition already has been approved"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Sorry! You Cannot Delete not Draft Document ."
+msgstr "عذرا! لا يمكنك حذف المستند كمسودة."
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Sorry, No Committee members"
+msgstr "عذرا، لم تختر أعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_tree
+msgid "Source Document"
+msgstr "المستند المصدر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_convert_po_contract_wizard__start_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__start_date
+msgid "Start Date"
+msgstr "تاريخ البداية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#: code:addons/purchase_requisition_custom/wizards/convert_to_contract.py:0
+#, python-format
+msgid "Start Date Should Be Less Than End Date"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__state
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__state
+msgid "State"
+msgstr "الحالة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__state_blanket_order
+msgid "State Blanket Order"
+msgstr "حالة العقد الشامل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_order__parent_state
+msgid "State of the parent purchase.requisition"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__state
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__state
+msgid "Status"
+msgstr "الحالة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+"الوضع على أساس الأنشطة\n"
+"متأخر: تاريخ الاستحقاق فات بالفعل\n"
+"اليوم: تاريخ النشاط هو اليوم\n"
+"مخطط له: الأنشطة المستقبلية."
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Submit"
+msgstr "إرسال"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__specifications_conform
+msgid "Technical specifications conform"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__specifications_not_conform
+msgid "Technical specifications do not match"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.module.category,description:purchase_requisition_custom.module_category_purchase_request
+msgid "The Purchaser Request Application"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__third_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__third_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__third_approve
+msgid "Third Approval"
+msgstr "الموافقة الثالثة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "This Vendor have order before"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "This is Purchase Agreements, see here"
+msgstr "البحث في منافسات الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "This member is not belong to this committee:"
+msgstr "هذا العضو ليس عضوا في هذه اللجنة:"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "This product has no expense account"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__picking_type_id
+msgid "This will determine operation type of incoming shipment"
+msgstr "سيحدد هذا نوع العملية للشحنة التالية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__to_approve
+msgid "To Approve"
+msgstr "للموافقة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Total Amount Can't be Zero"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Total Amount MUST be greater than 0 !!!"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_stock_picking
+msgid "Transfer"
+msgstr "الشحنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__type_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__type
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__type
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__type
+msgid "Type"
+msgstr "النوع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr "نوع نشاط الاستثناء المسجل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__unsign
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "UnSign"
+msgstr "إلغاء التوقيع"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_unsign_purchase_order
+msgid "UnSign Purchase Order"
+msgstr "صلاحية إلغاء التوقيع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__unavailable
+msgid "Unavailable"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "Unit Price can't be Zero Or less"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__uom_id
+msgid "Unit of Measure"
+msgstr "وحدة القياس"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Unknown"
+msgstr "غير معروف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_unread
+msgid "Unread Messages"
+msgstr "الرسائل غير المقروءة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "عدد الرسائل غير المقروءة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__use_analytic
+msgid "Use Analytic"
+msgstr "استخدام حساب تحليلى (بند موازنة) اخر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__is_analytic
+msgid "Use Analytic Account"
+msgstr "إستخدم حساب تحليلي (بند موازنة) آخر!"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__user_approve
+msgid "User Approve"
+msgstr "موافقة المستخدم"
+
+#. module: purchase_requisition_custom
+#: model:ir.module.category,description:purchase_requisition_custom.module_category_purchase_requisition_custom
+msgid "User access level for this module"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__partner_id
+msgid "Vendor"
+msgstr "المورد/مقدم الخدمة (المقترح)"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.vendor_types_action
+msgid "Vendor Type"
+msgstr "نوع المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.vendor_type_menu
+msgid "Vendor Types"
+msgstr "انواع المورد"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.view_purchase_request
+msgid "View Purchase Request"
+msgstr "عرض طلبات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__checked
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__checked
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__checked
+msgid "Waiting Approval"
+msgstr "في إنتظار الموافقة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__waiting
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__waiting
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__waiting
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__waiting
+msgid "Waiting For Budget Confirmation"
+msgstr "في إنتظار تصديق الموازنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__wait_for_send
+msgid "Waiting For Send to Budget"
+msgstr "في انتظار تأكيد الميزاينة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__wait
+msgid "Waiting To Be Signed"
+msgstr "مسودة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__website_message_ids
+msgid "Website Messages"
+msgstr "رسائل الوقع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__website_message_ids
+msgid "Website communication history"
+msgstr "سجل اتصال الموقع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__convert_po_contract_wizard__period_type__week
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__week
+msgid "Week(s)"
+msgstr "أسبوع (أسابيع)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__convert_po_contract_wizard__period_type__year
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__year
+msgid "Year(s)"
+msgstr "سنة (سنوات)"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "You cant delete record not in draft state!"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "You have already refused this Quotation"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "You have already select this Quotation"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "You must set a Vendor Location for this partner %s"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "You must set a Vendor this PO"
+msgstr "برجاء إختيار مورد حتى تتمكن من إنشاء طلب شراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__cancel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__cancel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__cancel
+msgid "cancelled"
+msgstr "ملغي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_change_purchase_user_state
+msgid "change.purchase.user.state"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_committe_type_form
+msgid "committe type"
+msgstr "نوع اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_committe_member
+msgid "committe.member"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.vendor_types_action
+msgid "create new type"
+msgstr "إنشاء نوع جديد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__days_count
+msgid "days_count"
+msgstr "عدد الايام"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "is successfully paid."
+msgstr "قد سدد بنجاح"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__order_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__order_id
+msgid "order id"
+msgstr "رقم الطلب"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.committe_type_action
+msgid "purchase committee type"
+msgstr "نوع لجنة الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_request_cancel_wizard
+msgid "purchase refuse Reason wizard"
+msgstr "معالج سبب رفض طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_request_line
+msgid "purchase request line"
+msgstr "بند طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_committee_type
+msgid "purchase.committee.type"
+msgstr "نوع طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__refuse_reason
+msgid "refuse reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_refuse_reason
+msgid "refuse.reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_reject_wizard
+msgid "reject.wizard"
+msgstr "رفض المعالج"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__second_approve
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__second_approve
+msgid "second approve"
+msgstr "الموافقة الثانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__select_reason
+msgid "select reason"
+msgstr "اختار السبب"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_select_reason
+msgid "select.reason"
+msgstr "اختيار السبب"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_order.py:0
+#, python-format
+msgid "sorry choose one recommended order"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "this user has no related employee!"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_vendor_type
+msgid "vendor.type"
+msgstr "نوع المورد/مقدم الخدمة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "أوافق"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_layout
+msgid "الإدارة المالية"
+msgstr "مدير الإدارة المالية للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "الإسم"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "التكلفة المعتمدة"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "التوصيات"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "التوقيع"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "الجهة الطالبة"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "المسمي الوظيفي"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "الملاحظات"
+msgstr "الملاحــــــظات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "المورد الموصي به"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "تاريخ الإجتماع"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "رقم المحضر"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "صاحب الطلب"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "قرار اللجنة"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "قرار المشرف العام"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "لا أوافق"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "لا إوافق"
+msgstr "لا أوافق"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "محضر لجنة المشتريات"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "مدة التنفيذ"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "نطاق العمل"
+msgstr ""
diff --git a/odex25_purchase/purchase_requisition_custom/i18n/ar_SY.po b/odex25_purchase/purchase_requisition_custom/i18n/ar_SY.po
new file mode 100644
index 000000000..2d8f28773
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/i18n/ar_SY.po
@@ -0,0 +1,2464 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_requisition_custom
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-08-13 12:56+0000\n"
+"PO-Revision-Date: 2023-08-13 16:10+0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
+"X-Generator: Poedit 3.3.2\n"
+
+
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_direct_manger
+msgid " Approve direct_manager "
+msgstr "إعتماد الإدارة الفنية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid " No budget for this service "
+msgstr "لا توجد ميزانية لهذا البند"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.report,print_report_name:purchase_requisition_custom.action_report_committee_meeting_minutes
+msgid "'Committee Meeting Minutes - %s' % (object.name)"
+msgstr "'محضر اجتماع اللجنة - %s' % (object.name)"
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, fuzzy, python-format
+msgid "Please Selecte Agreement type To Can Create Vendor Quotation Order"
+msgstr "برجاء اختيار اجراء الشراء حتى تتمكن من انشاء عروض الأسعار"
+
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Accept"
+msgstr "قبول"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_accept_purchase_requisition
+msgid "Accept Purchase Requisition"
+msgstr "صلاحية القبول في اتفاقيات الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__accept
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__accept
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__accept
+#, python-format
+msgid "Accepted"
+msgstr "تمت الموافقة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__account_analytic_id
+msgid "Account Analytic"
+msgstr "الحساب التحليلي (بند الموازنة)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_needaction
+msgid "Action Needed"
+msgstr "الإجراء مطلوب"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Activate Budget check in purchase"
+msgstr "تفعيل التحقق من الميزانية في الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_ids
+msgid "Activities"
+msgstr "النشاطات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr "زخرفة استثناء النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_state
+msgid "Activity State"
+msgstr "نوع النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_type_icon
+msgid "Activity Type Icon"
+msgstr "أيقونة نوع النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__name
+msgid "Agreement Reference"
+msgstr "مرجع الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__type_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__type_id_test
+msgid "Agreement Type"
+msgstr "إجراء الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__agreement_data
+msgid "Agreement data"
+msgstr "تاريخ توقيع الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__amount_total
+msgid "Amount Total"
+msgstr "المبلغ الإجمالي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__account_id
+msgid "Analytic Account"
+msgstr "الحساب التحليلي (بند الموازنة)"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Approve"
+msgstr "إعتماد"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.approve_purchase_request
+msgid "Approve Purchase Request"
+msgstr "اعتماد طلبات شراء الإدارات"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_approve_purchase_requisition
+msgid "Approve Purchase Requisition"
+msgstr "الموافقة على اتفاقيات الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__approve
+#, python-format
+msgid "Approved"
+msgstr "معتمدة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__budget_amount
+msgid "Approved Budget"
+msgstr "تم اعتماد الموازنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_ir_attachment
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__attachment
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__attachment_ids
+msgid "Attachment"
+msgstr "المرفق"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_attachment_count
+msgid "Attachment Count"
+msgstr "عدد المرفقات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__auto_notification
+msgid "Auto Notification"
+msgstr "اشعار آلي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_account_bank_statement_line__purchase_id
+#: model:ir.model.fields,help:purchase_requisition_custom.field_account_move__purchase_id
+#: model:ir.model.fields,help:purchase_requisition_custom.field_account_payment__purchase_id
+msgid "Auto-complete from a past purchase order."
+msgstr "الإكمال التلقائي من أمر شراء سابق."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__available
+msgid "Available"
+msgstr "متوفر"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__open
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__open
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__open
+#, python-format
+msgid "Bid Selection"
+msgstr "طريقة الاختيار"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_budget_confirmation
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Budget Confirmation"
+msgstr "تعميد الموازنة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Budget Confirmation is Canceled"
+msgstr "تم ألغاء التحقق من الميزانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_crossovered_budget_lines
+msgid "Budget Line"
+msgstr "عناصر بنود الموازنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__send_budget
+msgid "Budget Management"
+msgstr "في انتظار الارسال"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Budgeting"
+msgstr "الموازنات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Can't Confirm Request With No Item!"
+msgstr "لا يمكن تأكيد الطلب مع عدم وجود صنف/خدمة!"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__cancel
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.order_select_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_cancel_wizard_view_form
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.reject_wizard_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.select_wizard_view
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_cancel_purchase_requisition
+msgid "Cancel Purchase Requisition"
+msgstr "صلاحية إلغاء الاتفاقية/المنافسة"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.purchase_request_cancel_wizard_action
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__reason
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_cancel_wizard_view_form
+msgid "Cancel Request Reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__cancel
+msgid "Cancelled"
+msgstr "ملغي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__category_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__category_ids
+msgid "Categories"
+msgstr "تصنيف الأصناف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__name_text
+msgid "Category"
+msgstr "التصنيف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__Chair_number
+msgid "Chair number"
+msgstr "اسم الاتفاقية/الكراسة/المشروع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__change_state_line
+msgid "Change State Line"
+msgstr "Change State Line"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__chief_executive_officer
+msgid "Chief Executive Officer"
+msgstr "الرئيس التنفيذي"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Choose A Department For this Employee!"
+msgstr "اختر إدارة لهذا الموظف!"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Choose All"
+msgstr "أختيار الكل"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Choose At Least on product to purchase"
+msgstr "يجب تحديد صنف واحد على الاقل للشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__city_name
+msgid "City"
+msgstr "المدينة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__committe_head
+msgid "Committe Head"
+msgstr "رئيس اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__committe_members
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Committe Members"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__committee
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__committee
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__committee
+#, python-format
+msgid "Committee"
+msgstr "اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__committe_head
+msgid "Committee Head"
+msgstr "رئيس اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.report,name:purchase_requisition_custom.action_report_committee_meeting_minutes
+msgid "Committee Meeting Report"
+msgstr "تقرير اجتماع اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__committe_members
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_committe_type_form
+msgid "Committee Members"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__committee_type_id
+msgid "Committee Type"
+msgstr "نوع اللجنة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Committee members does not match in numbers"
+msgstr "أعضاء اللجنة غير متطابقين من حيث العدد الموجود"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__cs_approve
+msgid "Common Services Approval"
+msgstr "موافقة الخدمات المشتركة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__company_id
+msgid "Company"
+msgstr "المؤسسة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_res_config_settings
+msgid "Config Settings"
+msgstr "ضبط الاعدادات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.order_select_wizard
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.reject_wizard_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.select_wizard_view
+msgid "Confirm"
+msgstr "تأكيد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__confirm_invoice
+msgid "Confirm Invoice"
+msgstr "تأكيد الفاتورة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__confirm_po
+msgid "Confirm Po"
+msgstr "تأكيد امر الشراء"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_confirm_purchase_requisition
+msgid "Confirm Purchase Requisition"
+msgstr "تاكيد اتفاقيات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_crossovered_budget_lines__budget_confirm_line_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__confirmation_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__confirmation_ids
+msgid "Confirmation"
+msgstr "التأكيد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__in_progress
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__in_progress
+#, python-format
+msgid "Confirmed"
+msgstr "مؤكد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__type__contract
+msgid "Contract"
+msgstr "العقد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__contract_name
+msgid "Contract Name"
+msgstr "اسم العقد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Create Date: "
+msgstr "تاريخ الإنشاء:"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.purchase_request_action
+msgid "Create New Employee purchase request"
+msgstr "إنشاء طلب شراء موظف جديد"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.purchase_type_contract_action
+msgid "Create New a Purchase Contract"
+msgstr "إنشاء عقد مشتريات جديد"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.committe_type_action
+msgid "Create Purchase Committee Type"
+msgstr "إنشاء نوع لجنة الشراء"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Create Purchase Order"
+msgstr "إنشاء طلب شراء"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Create Requisition"
+msgstr "إنشاء طلب"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Created By: "
+msgstr "أنشئ بواسطة:"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__create_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__create_uid
+msgid "Created by"
+msgstr "أنشئت بواسطة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__create_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__create_date
+msgid "Created on"
+msgstr "أنشئت على"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__cron_end_date
+msgid "Cron End Date"
+msgstr "تاريخ انتهاء Cron"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.server,name:purchase_requisition_custom.partner_document_cron_for_expires_ir_actions_server
+#: model:ir.cron,cron_name:purchase_requisition_custom.partner_document_cron_for_expires
+#: model:ir.cron,name:purchase_requisition_custom.partner_document_cron_for_expires
+msgid "Daily Partner Document Expiration"
+msgstr "مؤقت يومي لأختبار انتهاء صلاحية وثيقة المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__date_end
+msgid "Date End"
+msgstr "تاريخ النهاية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__day
+msgid "Day(s)"
+msgstr "يوم(أيام)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__default
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__default
+msgid "Default Cost Center"
+msgstr "مركز التكلفة الافتراضي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request_line__uom_id
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_requisition_line__product_uom_id
+msgid "Default unit of measure used for all stock operations."
+msgstr "وحدة القياس الافتراضية المستخدمة لجميع عمليات المخزون."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__picking_type_id
+msgid "Deliver To"
+msgstr "التسليم الى"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__state_of_delivery
+msgid "Delivery State"
+msgstr "حالة الاستلام"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Deparments Use"
+msgstr "الإدارة الطالبة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__department_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__department_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__department_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__department_id
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__department
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__department
+msgid "Department"
+msgstr "الإدارة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_department_approve
+msgid "Department Approve"
+msgstr "أعتماد القسم"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__department_name
+msgid "Department Name"
+msgstr "اسم الادارة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__name
+msgid "Description"
+msgstr "الوصف/توضيح"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Description: "
+msgstr "الوصف:"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__name
+msgid "Descrption"
+msgstr "الوصف/توضيح"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__direct_purchase
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__direct_purchase
+msgid "Direct Purchase Amount"
+msgstr "المبالغ التي تحتاج الى موافقة المدير التنفيذي للمشتريات فقط (اقل من!)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_move__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_payment__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_crossovered_budget_lines__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_hr_employee__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_ir_attachment__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_product_product__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_partner__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_stock_picking__display_name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Document Expiration"
+msgstr "انتهاء صلاحية المستند"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.res_partner_documents
+msgid "Documents"
+msgstr "المستندات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__done
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__done
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__done
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__done
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+#, python-format
+msgid "Done"
+msgstr "تم"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_done_purchase_requisition
+msgid "Done Purchase Requisition"
+msgstr "صلاحية اكتمال اتفاقية الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__draft
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__draft
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__draft
+#, python-format
+msgid "Draft"
+msgstr "مبدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__email_to_vendor
+msgid "Email Sent to Vendor?"
+msgstr "تم ارسال طلب عرض السعر؟"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__emergency
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__requesting_administration__emergency
+msgid "Emergency"
+msgstr "طارئ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_hr_employee
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__employee_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__employee_id
+msgid "Employee"
+msgstr "الموظف"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.purchase_request_action
+msgid "Employee Request"
+msgstr "طلبات شراء الادارات"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.create_purchase_request
+msgid "Employees Requests"
+msgstr "طلبات الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__end_date
+msgid "End Date"
+msgstr "تاريخ النهاية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Enter Quotations First!"
+msgstr "أدخل العروض أولاً!"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__chief_executive_officer
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__exceptional_amount
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__exceptional_amount
+msgid "Exceptional Amount"
+msgstr "موافقة نائب الرئيس التنفيذي للموارد المؤسسية (ابتدأ من! واكثر)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__budget_approve
+msgid "Executive Vice President of Corporate Resources"
+msgstr "نائب الرئيس التنفيذي لقطاع الموارد المؤسسية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__exp_date
+msgid "Expiration Date"
+msgstr "تاريخ انتهاء الصلاحية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Expiration Date: "
+msgstr "تاريخ انتهاء الصلاحية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__finance_approve
+msgid "Financial Approval"
+msgstr "الادارة المالية"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "First Budget Check"
+msgstr "أمر الإرتباط المبدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_follower_ids
+msgid "Followers"
+msgstr "المتابعين"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_channel_ids
+msgid "Followers (Channels)"
+msgstr "متابعين (قنوات)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_partner_ids
+msgid "Followers (Partners)"
+msgstr "المتابعون (الشركاء)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_For_technical_management_use
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "For technical management use"
+msgstr "لإستخدام الإدارة الفنية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__general_supervisor
+msgid "General Supervisor Approval"
+msgstr "موافقة المشرف العام"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Hello, This is a notice about the end date of the document."
+msgstr "مرحبًا ، هذا إشعار حول تاريخ انتهاء المستند."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_move__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_payment__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_crossovered_budget_lines__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_hr_employee__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_ir_attachment__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_product_product__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_partner__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_stock_picking__id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_exception_icon
+msgid "Icon"
+msgstr "الأيقونة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr "الأيقونة للإشارة إلى استثناء النشاط"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_needaction
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_unread
+msgid "If checked, new messages require your attention."
+msgstr "إذا كان محددًا، فهناك رسائل جديدة تحتاج لرؤيتها."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_has_error
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr "إذا كان محددًا، فقد حدث خطأ في تسليم بعض الرسائل."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__initial_amount
+msgid "Initial amount"
+msgstr "المبلغ المبدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_is_follower
+msgid "Is Follower"
+msgstr "متابع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__is_purchase_budget
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__is_purchase_budget
+msgid "Is Purchase Budget"
+msgstr "بحاجة لميزانية الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__sent_to_commitee
+msgid "Is Sent to Commitee?"
+msgstr "هل أرسلت إلي لجنة؟"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__it_categ
+msgid "It Categ"
+msgstr "صنف تقني"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__product_id
+msgid "Item"
+msgstr "الصنف/الخدمة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Item Quantity MUST be at Least ONE!"
+msgstr "يجب أن تكون كمية الصنف واحدة على الأقل!"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Items"
+msgstr "الأصناف/الخدمات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__product_category_ids
+msgid "Items Categories"
+msgstr "تصنيف الاصناف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_account_move
+msgid "Journal Entry"
+msgstr "قيد اليومية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_move____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_payment____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_crossovered_budget_lines____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_hr_employee____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_ir_attachment____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_product_product____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_partner____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_stock_picking____last_update
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__write_uid
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__write_uid
+msgid "Last Updated by"
+msgstr "اخر تحديث بواسطة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__write_date
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__write_date
+msgid "Last Updated on"
+msgstr "اخر تحديث في"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__legal_counsel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__legal_counsel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__legal_counsel
+#, python-format
+msgid "Legal Counsel"
+msgstr "المستشار القانوني"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__line_ids
+msgid "Line"
+msgstr "بند"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__done
+msgid "Locked"
+msgstr "مغلق"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_main_attachment_id
+msgid "Main Attachment"
+msgstr "المرفق الرئيسي"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.purchase_requisition_third_approve
+msgid "Maximum Amount Approval"
+msgstr "موافقة أعلى مبلغ لطلب الشراء"
+
+
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_has_error
+msgid "Message Delivery error"
+msgstr "رسالة خطأ الاستلام"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_ids
+msgid "Messages"
+msgstr "الرسائل"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.purchase_requisition_second_approve
+msgid "Minimum Amount Approval"
+msgstr "موافقة أقل مبلغ لطلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__min_price
+msgid "Minimum Price"
+msgstr "اقل سعر"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Minimum approves cannot be greater than members count = "
+msgstr "لا يمكن أن يكون الحد الأدنى للموافقات أكبر من عدد الأعضاء ="
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Minimum votes cannot be greater than members count = "
+msgstr "لا يمكن أن يكون الحد الأدنى من الأصوات أكبر من عدد الأعضاء ="
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__month
+msgid "Month(s)"
+msgstr "شهر (شهور) "
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr "الموعد النهائي لنشاطي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_document_type__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__name
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_vendor_type__name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Name of document: "
+msgstr "اسم المستند:"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "New"
+msgstr "جديد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid ""
+"New Budget Confirmation Has Been Created for Purchase Order %s to "
+"Beneficiary %s in total %s"
+msgstr "تم تعميد جديد للميزانية لأمر الشراء %s للمستفيد %s إجمالاً %s"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid ""
+"New Budget Confirmation Has Been Created for Purchase Request %s to "
+"Beneficiary %s in total %s"
+msgstr "تم تعميد جديد للميزانية لأمر الشراء %s للمستفيد %s إجمالاً %s"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "New Product"
+msgstr "صنف جديد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "New Purchase Order"
+msgstr "أمر شراء جديد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "New Purchase Request"
+msgstr "طلب شراء جديد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "New product was added. Product Name:"
+msgstr "تم إضافة منتج جديد. اسم المنتج:"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr "الموعد النهائي للنشاط التالي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_summary
+msgid "Next Activity Summary"
+msgstr "ملخص النشاط التالي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_type_id
+msgid "Next Activity Type"
+msgstr "نوع النشاط التالي"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "No analytic account for the project"
+msgstr "لا يوجد حساب تحليلي للمشروع"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "No confirmaytion lines"
+msgstr "لا يوجد تأكيد لسطور الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "No purchase cost for this agreement"
+msgstr "لا توجد تكلفة شراء لهذا الاجراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__min_approve
+msgid "No. of Selections"
+msgstr "عدد الاختيارات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "No. of Selections cannot be Zero"
+msgstr "عدد الاختيارات لابد أن يكون أكبر من صفر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__no_of_approve
+msgid "No. of Votes"
+msgstr "عدد الاختيارات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__actual_vote
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__min_vote
+msgid "No. of Vots"
+msgstr "عدد الاختيارات/التصويت"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__note
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Note"
+msgstr "الملاحظة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__notify_before
+msgid "Notify Before"
+msgstr "إشعار قبل"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/wizards/convert_to_contract.py:0
+#, python-format
+msgid "Notify Before End Should Be Greater Than Zero"
+msgstr "الاشعار قبل الانتهاء يجب ان يكون اكبر من صفر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_needaction_counter
+msgid "Number of Actions"
+msgstr "عدد الأجراءات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_has_error_counter
+msgid "Number of errors"
+msgstr "عدد الاخطاء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "عدد الرسائل التي تتطلب إجراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr "عدد الرسائل الحادث بها خطأ في التسليم"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__message_unread_counter
+msgid "Number of unread messages"
+msgstr "عدد الرسائل غير المقروءة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "On Date: "
+msgstr "بتأريخ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__type__operational
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__type__operational
+msgid "Operational"
+msgstr "تشغيلى"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__ordering_date
+msgid "Ordering Date"
+msgstr "تاريخ الطلب"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__type__ordinary
+msgid "Ordinary"
+msgstr "عادي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__origin
+msgid "Origin"
+msgstr "المصدر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__origin_name
+msgid "Origin Name"
+msgstr "الإسم المصدر"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "PO To Contract"
+msgstr "تحويل امر الشراء الى عقد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__parent_state
+msgid "Parent State"
+msgstr "الحالة الام"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__partner_id
+msgid "Partner"
+msgstr "المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_partner_document
+msgid "Partner Document"
+msgstr "مستند المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_document_type
+msgid "Partner Document Type"
+msgstr "نوع مستند المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_partner__documents_ids
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_users__documents_ids
+msgid "Partner Documents"
+msgstr "مستندات المورد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/res_partner.py:0
+#, python-format
+msgid "Partner Name: "
+msgstr "اسم المورد/مقدم الخدمة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "Payment Amount: "
+msgstr "مبلغ السداد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "Payment Notification"
+msgstr "أشعار سداد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_account_payment
+msgid "Payments"
+msgstr "الدفعات"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.purchase_pdf_reports
+msgid "Pdf Reports"
+msgstr "التقارير"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__wait_budget
+msgid "Pending Budget Approve"
+msgstr "في انتظار إدارة الميزانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__period_type
+msgid "Period Type"
+msgstr "نوع الفترة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__planned_for
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__requesting_administration__planned_for
+msgid "Planned For"
+msgstr "مخطط لة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Please Choose Analytic account for This Department"
+msgstr "عذرا! قم بضبط الحساب التحليلي لهذه الإدارة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Please Select A Vendor."
+msgstr "يجب اختيار مورد مقترح"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Please Select department for employee"
+msgstr "الرجاء اختيار إدارة لهذا الموظف!"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Please Selecte Vendor To Can Create Vendor Purchase Order"
+msgstr "برجاء اختيار المورد حتى تتمكن من انشاء طلب شراء للمورد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Please Set An Expense Account For Product %s"
+msgstr "الرجاء وضع بند (حساب) للصنف %s"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Please Sign your RFQ first"
+msgstr "الرجاء التوقيع على عرض السعر اولا"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Please Sign your RFQs first"
+msgstr "الرجاء قم بتوقيع الطلب اولا\""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Please add Committe Members"
+msgstr "الرجاء إضافة أعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Please create RFQ first"
+msgstr "الرجاء إنشاء طلب عرض أسعار أولاً"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Please put cost center to the department"
+msgstr "يرجى وضع حساب تحليلي (بند الموازنة) في الادارة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Please put cost center to the product line"
+msgstr "الرجاء وضع حساب تحليلي في سطر الصنف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__po_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__po_id
+msgid "Po"
+msgstr "امر شراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__waiting
+msgid "Procurement Department"
+msgstr "إدارة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_product_product
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__product_id
+msgid "Product"
+msgstr "الصنف/الخدمة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_committee_type__type_cat
+msgid "Product Category"
+msgstr "تصنيف الاصناف"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_category_product_manager
+msgid "Product Category Manager"
+msgstr "مدير فئات الأصناف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__product_line
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__product_line
+msgid "Product Line"
+msgstr "سجل الصنف/الخدمة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Product Quantity Can't Be Zero or less"
+msgstr "لا يمكن أن تكون كمية المنتج صفرًا أو أقل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition_line__product_uom_id
+msgid "Product Unit of Measure"
+msgstr "الوحدة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__project_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__project_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__project_id
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__purchase_cost__project
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__type__project
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__purchase_cost__project
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__type__project
+msgid "Project"
+msgstr "مشروع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__Project_name
+msgid "Project name"
+msgstr "اسم الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order_line__choosen
+msgid "Purchase"
+msgstr "المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__purchase_analytic_account
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__purchase_analytic_account
+msgid "Purchase Analytic Account"
+msgstr "الحساب التحليلي (البند) للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Purchase Budget"
+msgstr "ميزانية المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.purchase_committe_type_menu
+msgid "Purchase Comittee Types"
+msgstr "انواع لجان المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__purchase_commitee
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__purchase_commitee
+msgid "Purchase Commitee?"
+msgstr "يحتاج لجنة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.committe_member
+msgid "Purchase Committe Member"
+msgstr "عضو لجنة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Purchase Committe Members"
+msgstr "اعضاء لجنة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.action_purchase_committe
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__committe_members
+msgid "Purchase Committee"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.menu_purchase_committe
+#: model:ir.ui.menu,name:purchase_requisition_custom.menu_purchase_committe_main
+msgid "Purchase Committes"
+msgstr "لجان المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.purchase_type_contract_action
+msgid "Purchase Contracts"
+msgstr "عقود الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__purchase_cost
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__purchase_cost
+msgid "Purchase Cost"
+msgstr "تكلفة الشراء"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Purchase Costing"
+msgstr "تكاليف الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__purchase_create
+msgid "Purchase Create"
+msgstr "إنشاء الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_order
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_bank_statement_line__purchase_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_move__purchase_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_account_payment__purchase_id
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__purchase
+msgid "Purchase Order"
+msgstr "أوامر الشراء المؤكدة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/budget_confirmation.py:0
+#, python-format
+msgid "Purchase Order %s is Rejected By : %s With Reject Reason : %s"
+msgstr "طلب الشراء %s مرفوض من قبل: %s سبب الرفض: %s"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_order_line
+msgid "Purchase Order Line"
+msgstr "بند أمر الشراء"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_purchase_requsition_reports
+msgid "Purchase Reports Menu"
+msgstr "قائمة تقارير المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_request
+#: model:ir.ui.menu,name:purchase_requisition_custom.purchase_request_menu
+msgid "Purchase Request"
+msgstr "طلبات الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Purchase Request Confirmation"
+msgstr "تأكيد طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_requisition
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__budget_confirmation__type__purchase_order
+#: model:ir.module.category,name:purchase_requisition_custom.purchase_requisition_custom
+msgid "Purchase Requisition"
+msgstr "طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_requisition_line
+msgid "Purchase Requisition Line"
+msgstr "بند طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "Purchase Requset Approve"
+msgstr "الموافقة على طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Purchase To Contract"
+msgstr "تحويل الى عقد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Purchase agreement not approved"
+msgstr "لم يتم الموافقة على اجراء الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__purchase_budget
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__purchase_budget
+msgid "Purchase budget"
+msgstr "ميزاينة المشتريات"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__purchase_manager
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__purchase_manager
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__purchase_manager
+#, python-format
+msgid "Purchase manager"
+msgstr "مدير المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__purpose
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__purchase_purpose
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__purpose
+msgid "Purpose"
+msgstr "مبررات طلب الشراء (الغرض)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__qty
+msgid "Qty"
+msgstr "الكمية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__quality
+msgid "Quality"
+msgstr "الجودة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Quotation"
+msgstr "إدخال عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_quotation_purchase_requisition
+msgid "Quotation Purchase Requisition"
+msgstr "صلاحية ادخال عروض الاسعار في الاتفاقية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__draft
+msgid "RFQ"
+msgstr "امر شراء مبدئي/عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__sent
+msgid "RFQ Sent"
+msgstr "تم إرسال طلب الشراء المدئي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__recommendation_order
+msgid "Recommend"
+msgstr " الموصي به"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_tree
+msgid "Recommend Order"
+msgstr "العرض الموصي به"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "Ref: "
+msgstr "مرجع الفاتورة: "
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__refuse
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Refuse"
+msgstr "رفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__refuse
+msgid "Refused"
+msgstr "مرفوض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__refusing_reason
+msgid "Refusing Reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/budget_confirmation.py:0
+#, python-format
+msgid "Reject Purchase Order"
+msgstr "رفض أمر شراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_reject_wizard__reject_reason
+msgid "Reject Reson"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__budget_rejected
+msgid "Rejected By Budget"
+msgstr "مرفوضة حسب الميزاينة"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.reports
+msgid "Reports"
+msgstr "التقارير"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__request_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__request_id
+msgid "Request"
+msgstr "طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__request_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__request_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__request_id
+msgid "Request Ref."
+msgstr "مرجع الطلب"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.action_purchase_requisition_to_so_custom
+msgid "Request for Quotation"
+msgstr "أوامر الشراء المبدئية"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Request managers to Assigen Direct Purchase Amount"
+msgstr "موافقة المدير التنفيذي للمشتريات والعقود"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Request managers to Chief Executive Officer"
+msgstr "موافقة الرئيس التنفيذي (ابتدأ من! واكثر)"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Request managers to Setting Purchase Exceptional Amount"
+msgstr "موافقة نائب الرئيس التنفيذي للموارد المؤسسية (اكثر من!)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__by_purchase
+msgid "Requested by Purchase"
+msgstr "الطلب لموظف اخر؟"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__requesting_administration
+msgid "Requesting Administration(hghh)"
+msgstr "لاستخدام الإدارة الطالبة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_requesting_ِadministration
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Requesting ِAdministration"
+msgstr "لإستخدام الإدارة الطالبة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__requisition_id
+msgid "Requisition"
+msgstr "طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_res_company
+msgid "Res Company SMS Configuration"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Resend To Budget Check"
+msgstr "إعادة الإرسال إلى فحص الميزانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__responsible_id
+msgid "Responsible"
+msgstr "المسؤول"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__activity_user_id
+msgid "Responsible User"
+msgstr "المستخدم المسؤول"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr "خطأ في تسليم الرسائل القصيرة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Sale Price: "
+msgstr "اسعر البيع"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_cancel_wizard_view_form
+msgid "Save"
+msgstr "حفظ"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_cancel_wizard__user_id
+msgid "Scheduler User"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__second_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__second_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__second_approve
+#, python-format
+msgid "Second Approval"
+msgstr "الموافقة الثانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__select
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__select
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Select"
+msgstr "إختيار"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__selected_purchase_id
+msgid "Selected Purchase"
+msgstr "الشراء المحدد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_committe_member__selection_reason
+msgid "Selection Reason"
+msgstr "معيار الاختيار"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Send To Budget"
+msgstr "إرسال إلى الموازنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Send To Budget Check"
+msgstr "إرسال فحص الميزانية"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Send To Committee"
+msgstr "إرسال إلى اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.purchase_rfq_send_to_committee
+msgid "Send to the Committee"
+msgstr "إرسال إلى اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__send_to_budget
+msgid "Sent to Budget?"
+msgstr "أرسلت للموازنة؟"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_setting
+msgid "Set Default Analytic account For Purchase"
+msgstr "حدد مركز تكلفة افتراضي للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Set to Draft"
+msgstr "تعيين كمسودة"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.server,name:purchase_requisition_custom.action_sign_purchase_orders_menu
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__sign
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "Sign"
+msgstr "تنفيذ عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_sign_purchase_order
+msgid "Sign Purchase Order"
+msgstr "صلاحية تنفيذ (توقيع) عرض سعر"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_requisition_custom_form_view
+msgid "Skip Budget"
+msgstr "تخطي الميزانية"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_skip_purchase_budget
+msgid "Skip Purchase Budget"
+msgstr "تخطي ميزانية الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Sorry The minimum number of committee member is not satsfied"
+msgstr "عذرًا ، الحد الأدنى لعدد أعضاء اللجنة غير مقبول"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Sorry This object have no field named Selection Reasoon"
+msgstr "عذرا هذا الكائن ليس لديه حقل يسمى سبب الاختيار"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid ""
+"Sorry You cannot sign this quotation ,YOU NEED MORE COMMITTE MEMBERS TO "
+"choose it"
+msgstr ""
+"عذرًا ، لا يمكنك التوقيع على هذا العرض ، فأنت بحاجة إلى المزيد من أعضاء "
+"اللجنة لاختياره"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Sorry! You Cannot Delete not Draft Document ."
+msgstr "عذرا! لا يمكنك حذف المستند كمسودة."
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Sorry, No Committee members"
+msgstr "عذرا، لم تختر أعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_tree
+msgid "Source Document"
+msgstr "المستند المصدر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__name_text1
+msgid "Specifications"
+msgstr "المـــــــواصفات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__start_date
+msgid "Start Date"
+msgstr "تاريخ البداية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/wizards/convert_to_contract.py:0
+#, python-format
+msgid "Start Date Should Be Less Than End Date"
+msgstr "تاريخ البداية يجب ان يكون قبل تاريخ النهاية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_change_purchase_user_state__state
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__state
+msgid "State"
+msgstr "الحالة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__state_blanket_order
+msgid "State Blanket Order"
+msgstr "حالة العقد الشامل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_order__parent_state
+msgid "State of the parent purchase.requisition"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__state
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__state
+msgid "Status"
+msgstr "الحالة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+"الوضع على أساس الأنشطة\n"
+"متأخر: تاريخ الاستحقاق فات بالفعل\n"
+"اليوم: تاريخ النشاط هو اليوم\n"
+"مخطط له: الأنشطة المستقبلية."
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Submit"
+msgstr "إعتماد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_request__state__direct_manager
+msgid "Technical Department"
+msgstr "الإدارة الفنية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__specifications_conform
+msgid "Technical specifications conform"
+msgstr "المواصفات الفنية مطابقة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__specifications_not_conform
+msgid "Technical specifications do not match"
+msgstr "المواصفات الفنية غير مطابقة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "The product have no expense account "
+msgstr "عفوا لايوجد حساب مصروف لهذا الصنف او الخدمة."
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "There is no analytic account for this purchase request"
+msgstr "لا يوجد حساب تحليلي (بند موازنة) لهذا الطلب"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__third_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__third_approve
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__third_approve
+#, python-format
+msgid "Third Approval"
+msgstr "الموافقة الثالثة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "This Vendor have order before"
+msgstr "هذا المورد لديه طلب من قبل"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "This is Purchase Agreements, see here"
+msgstr "البحث في منافسات الشراء"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "This member is not belong to this committee:"
+msgstr "هذا العضو ليس عضوا في هذه اللجنة:"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "This product has no expense account"
+msgstr "لا يوجد حساب/بند مصروف لهذا الصنف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__picking_type_id
+msgid "This will determine operation type of incoming shipment"
+msgstr "سيحدد هذا نوع العملية للشحنة التالية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__to_approve
+msgid "To Approve"
+msgstr "للموافقة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Total Amount Can't be Zero"
+msgstr "لا يمكن أن يكون المبلغ الإجمالي صفراً"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Total amount"
+msgstr "إجمالي القيمة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_stock_picking
+msgid "Transfer"
+msgstr "الشحنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_partner_document__type_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_order__type
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__type
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__type
+msgid "Type"
+msgstr "النوع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr "نوع نشاط الاستثناء المسجل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__unsign
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_order_custom_form_view
+msgid "UnSign"
+msgstr "إلغاء التوقيع"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_unsign_purchase_order
+msgid "UnSign Purchase Order"
+msgstr "صلاحية إلغاء التوقيع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__unavailable
+msgid "Unavailable"
+msgstr "غير متوفر"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__price_unit
+msgid "Unit Price"
+msgstr "السعر (تقديري) شامل الضريبة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Unit Price can't be Zero Or less"
+msgstr "لا يمكن أن تكون كمية المنتج صفرًا أو أقل"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__uom_id
+msgid "Unit of Measure"
+msgstr "وحدة القياس"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "Unknown"
+msgstr "غير معروف"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "Unkown"
+msgstr "غير معروف"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_unread
+msgid "Unread Messages"
+msgstr "الرسائل غير المقروءة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "عدد الرسائل غير المقروءة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__is_analytic
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__is_analytic
+msgid "Use Analytic Account"
+msgstr "إستخدم حساب تحليلي (بند موازنة) آخر!"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "Use Purchases"
+msgstr "لاستخدام إدارة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__user_approve
+msgid "User Approve"
+msgstr "موافقة المستخدم"
+
+#. module: purchase_requisition_custom
+#: model:ir.module.category,description:purchase_requisition_custom.purchase_requisition_custom
+msgid "User access level for this module"
+msgstr "مستوى وصول المستخدم لهذه الوحدة"
+
+#. module: purchase_requisition_custom
+#: model:res.groups,name:purchase_requisition_custom.group_base_vro_functional_user
+msgid "User job role"
+msgstr "صلاحية الوظائف الادارية للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__partner_id
+msgid "Vendor"
+msgstr "المورد/مقدم الخدمة (المقترح)"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.vendor_types_action
+msgid "Vendor Type"
+msgstr "نوع المورد"
+
+#. module: purchase_requisition_custom
+#: model:ir.ui.menu,name:purchase_requisition_custom.vendor_type_menu
+msgid "Vendor Types"
+msgstr "انواع المورد"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__checked
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__checked
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__checked
+#, python-format
+msgid "Waiting Approval"
+msgstr "في إنتظار الموافقة"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__waiting
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__waiting
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__waiting
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__waiting
+#, python-format
+msgid "Waiting For Budget Confirmation"
+msgstr "في إنتظار تصديق الموازنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__wait_for_send
+msgid "Waiting For Send to Budget"
+msgstr "في انتظار تأكيد الميزاينة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__state__wait
+msgid "Waiting To Be Signed"
+msgstr "مسودة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request__website_message_ids
+msgid "Website Messages"
+msgstr "رسائل الوقع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,help:purchase_requisition_custom.field_purchase_request__website_message_ids
+msgid "Website communication history"
+msgstr "سجل اتصال الموقع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__week
+msgid "Week(s)"
+msgstr "أسبوع (أسابيع)"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_order__period_type__year
+msgid "Year(s)"
+msgstr "سنة (سنوات)"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "You cant delete record not in darft state!"
+msgstr "لا يمكنك حذف السجل ليس في حالة مسودة!"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "You have already refused this Quotation"
+msgstr "لقد تم رفض هذا العرض"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "You have already select this Quotation"
+msgstr "لقد قمت بالفعل بتحديد هذا العرض"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#, python-format
+msgid "You must set a Vendor Location for this partner %s"
+msgstr "يجب أن تحدد مكان مورد لهذا الشريك %s"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom_bak.py:0
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__change_purchase_user_state__state__cancel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state__cancel
+#: model:ir.model.fields.selection,name:purchase_requisition_custom.selection__purchase_requisition__state_blanket_order__cancel
+#, python-format
+msgid "cancelled"
+msgstr "ملغي"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_change_purchase_user_state
+msgid "change.purchase.user.state"
+msgstr ""
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_committe_type_form
+msgid "committe type"
+msgstr "نوع اللجنة"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_committe_member
+msgid "committe.member"
+msgstr "اعضاء اللجنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.actions.act_window,help:purchase_requisition_custom.vendor_types_action
+msgid "create new type"
+msgstr "إنشاء نوع جديد"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_requisition__days_count
+msgid "days_count"
+msgstr "عدد الايام"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_request_form
+msgid "direct_manager Approve"
+msgstr "أعتماد الإدارة الفنية"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/account_payment.py:0
+#: code:addons/purchase_requisition_custom/models/account_res.py:0
+#, python-format
+msgid "is successfully paid."
+msgstr "قد سدد بنجاح"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "need your approve."
+msgstr "بحاجة إلى الموافقة."
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "need your confirmation."
+msgstr "بحاجة إلى التأكيد."
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__order_id
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__order_id
+msgid "order id"
+msgstr "رقم الطلب"
+
+#. module: purchase_requisition_custom
+#: model:ir.actions.act_window,name:purchase_requisition_custom.committe_type_action
+msgid "purchase committee type"
+msgstr "نوع لجنة الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_request_cancel_wizard
+msgid "purchase refuse Reason wizard"
+msgstr "معالج سبب رفض طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_request_line
+msgid "purchase request line"
+msgstr "بند طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_purchase_committee_type
+msgid "purchase.committee.type"
+msgstr "نوع طلب الشراء"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_refuse_reason__refuse_reason
+msgid "refuse reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_refuse_reason
+msgid "refuse.reason"
+msgstr "سبب الرفض"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_reject_wizard
+msgid "reject.wizard"
+msgstr "رفض المعالج"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_company__second_approve
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_res_config_settings__second_approve
+msgid "second approve"
+msgstr "الموافقة الثانية"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_select_reason__select_reason
+msgid "select reason"
+msgstr "اختار السبب"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_select_reason
+msgid "select.reason"
+msgstr "اختيار السبب"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_requisition_custom.py:0
+#, python-format
+msgid "sorry choose one recommended order"
+msgstr "عذرا! يجب اختيار عرض واحد على الأقل كعرض موصى به"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_purchase_request_line__sum_total
+msgid "sum_total"
+msgstr "الإجمالي الفرعي"
+
+#. module: purchase_requisition_custom
+#: code:addons/purchase_requisition_custom/models/purchase_request.py:0
+#, python-format
+msgid "this user has no related emplyee!"
+msgstr "هذا المستخدم ليس له أي موظف مرتبط به!"
+
+#. module: purchase_requisition_custom
+#: model:ir.model.fields,field_description:purchase_requisition_custom.field_budget_confirmation__type
+msgid "type"
+msgstr "النوع"
+
+#. module: purchase_requisition_custom
+#: model:ir.model,name:purchase_requisition_custom.model_vendor_type
+msgid "vendor.type"
+msgstr "نوع المورد/مقدم الخدمة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "أوافق"
+msgstr "أوافق"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "إسم المشروع"
+msgstr "إسم المشروع"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.purchase_layout
+msgid "الإدارة المالية"
+msgstr "مدير الإدارة المالية للمشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "الإسم"
+msgstr "الإسم"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "التكلفة المعتمدة"
+msgstr "التكلفة المعتمدة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "التوصيات"
+msgstr "التوصيات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "التوقيع"
+msgstr "التوقيع"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "الجهة الطالبة"
+msgstr "الجهة الطالبة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "المسمي الوظيفي"
+msgstr "المسمي الوظيفي"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "الملاحظات"
+msgstr "الملاحــــــظات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "المورد الموصي به"
+msgstr "المورد الموصي به"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "تاريخ الإجتماع"
+msgstr "تاريخ الإجتماع"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "رقم المحضر"
+msgstr "رقم المحضر"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "صاحب الطلب"
+msgstr "صاحب الطلب"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "قرار اللجنة"
+msgstr "قرار اللجنة"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid ""
+"قرار المشرف العام\n"
+" علي مكتب تحقيق الرؤية"
+msgstr ""
+"قرار المشرف العام\n"
+" الهيئة السعودية للملكية الفكرية"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "لا أوافق"
+msgstr "لا أوافق"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "لا إوافق"
+msgstr "لا أوافق"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "محضر لجنة المشتريات"
+msgstr "محضر لجنة المشتريات"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "مدة التنفيذ"
+msgstr "مدة التنفيذ"
+
+#. module: purchase_requisition_custom
+#: model_terms:ir.ui.view,arch_db:purchase_requisition_custom.committee_meeting_minutes_report_document
+msgid "نطاق العمل"
+msgstr "نطاق العمل"
diff --git a/odex25_purchase/purchase_requisition_custom/models/__init__.py b/odex25_purchase/purchase_requisition_custom/models/__init__.py
new file mode 100644
index 000000000..bde2f64cf
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/__init__.py
@@ -0,0 +1,9 @@
+
+from . import account_payment
+from . import account_invoice
+from . import purchase_request
+from . import budget_confirmation
+from . import purchase_requisition_custom
+from . import purchase_order
+from . import res_partner
+from . import res_settings
diff --git a/odex25_purchase/purchase_requisition_custom/models/account_invoice.py b/odex25_purchase/purchase_requisition_custom/models/account_invoice.py
new file mode 100644
index 000000000..662247d5e
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/account_invoice.py
@@ -0,0 +1,66 @@
+from odoo import models, fields, api, _
+
+
+class AccountMove(models.Model):
+ _inherit = 'account.move'
+
+
+
+ def button_cancel(self):
+ res = super(AccountMove, self).button_cancel()
+ date = fields.Date.from_string(self.invoice_date)
+ if self.purchase_id:
+ confirm_budget = self.env['budget.confirmation'].search([('po_id', '=', self.purchase_id.id)])
+
+ if confirm_budget:
+ for line in self.invoice_line_ids:
+ analytic_account_id = line.analytic_account_id
+ budget_post = self.env['account.budget.post'].search([]).filtered(
+ lambda x: line.account_id in x.account_ids)
+ budget_lines = analytic_account_id.crossovered_budget_line.filtered(
+ lambda x: x.general_budget_id in budget_post and
+ x.crossovered_budget_id.state == 'done' and
+ fields.Date.from_string(x.date_from) <= date <= fields.Date.from_string(x.date_to))
+ budget_lines.write({'purchase_remain': abs(budget_lines.purchase_remain + line.price_subtotal)})
+
+
+ return res
+
+ def action_post(self):
+ res = super(AccountMove, self).action_post()
+ if self.purchase_id:
+ confirm_budget = self.env['budget.confirmation'].search([('po_id', '=', self.purchase_id.id)])
+ if confirm_budget:
+ for line in self.invoice_line_ids:
+ analytic_account_id = line.analytic_account_id
+ budget_post = self.env['account.budget.post'].search([]).filtered(
+ lambda x: line.account_id in x.account_ids)
+ budget_lines = analytic_account_id.crossovered_budget_line.filtered(
+ lambda x: x.general_budget_id in budget_post and
+ x.crossovered_budget_id.state == 'done' and
+ x.date_from <= self.invoice_date <= x.date_to)
+ budget_lines.write({'purchase_remain': abs(budget_lines.purchase_remain - line.price_subtotal)})
+
+
+
+ return res
+
+ def button_draft(self):
+ res = super(AccountMove, self).button_draft()
+ if self.purchase_id:
+ confirm_budget = self.env['budget.confirmation'].search([('po_id', '=', self.purchase_id.id)])
+ if confirm_budget:
+ date = fields.Date.from_string(self.date)
+ for line in self.invoice_line_ids:
+ analytic_account_id = line.analytic_account_id
+ budget_post = self.env['account.budget.post'].search([]).filtered(
+ lambda x: line.account_id in x.account_ids)
+ budget_lines = analytic_account_id.crossovered_budget_line.filtered(
+ lambda x: x.general_budget_id in budget_post and
+ x.crossovered_budget_id.state == 'done' and
+ fields.Date.from_string(x.date_from) <= date <= fields.Date.from_string(x.date_to))
+ budget_lines.write({'purchase_remain': abs(budget_lines.purchase_remain + line.price_subtotal)})
+
+
+
+ return res
diff --git a/odex25_purchase/purchase_requisition_custom/models/account_payment.py b/odex25_purchase/purchase_requisition_custom/models/account_payment.py
new file mode 100644
index 000000000..a01adb48d
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/account_payment.py
@@ -0,0 +1,25 @@
+from odoo import models, api, _
+
+
+class AccountPayment(models.Model):
+ _inherit = 'account.payment'
+
+ def action_notify_payment(self, payment):
+ # Send Notifications
+ subject = _('Payment Notification') + ' - {}'.format(payment.partner_id.name)
+ message = '{} '.format(payment.partner_id.name) + _('is successfully paid.') + '\n' + _(
+ 'Payment Amount: ') + '{}'.format(payment.amount) + '\n' + _('Ref: ') + '{}'.format(payment.ref) + '\n' + _(
+ 'On Date: ') + '{}'.format(payment.date)
+ group = 'purchase.group_purchase_manager'
+ # author_id = payment.create_uid.partner_id.id or None
+ author_id = self.env.user.partner_id.id or None
+ self.env.user.partner_id.send_notification_message(subject=subject, body=message, author_id=author_id,
+ group=group)
+
+ @api.model
+ def create(self, vals):
+ res = super(AccountPayment, self).create(vals)
+ # print("Hi payment!", res.amount)
+ self.action_notify_payment(res)
+
+ return res
diff --git a/odex25_purchase/purchase_requisition_custom/models/account_res.py b/odex25_purchase/purchase_requisition_custom/models/account_res.py
new file mode 100644
index 000000000..776d2a61d
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/account_res.py
@@ -0,0 +1,25 @@
+
+from odoo import models, fields, api, _
+from odoo.exceptions import UserError, ValidationError
+
+
+class AccountPayment(models.Model):
+
+ _inherit = 'account.payment'
+
+ def action_notify_payment(self, payment):
+ # Send Notifications
+ subject = _('Payment Notification') + ' - {}'.format(payment.partner_id.name)
+ message = '{} '.format(payment.partner_id.name) + _('is successfully paid.') + '\n' + _('Payment Amount: ') + '{}'.format(payment.amount) + '\n' + _('Ref: ') + '{}'.format(payment.ref) + '\n' + _('On Date: ') + '{}'.format(payment.date)
+ group = 'purchase.group_purchase_manager'
+ # author_id = payment.create_uid.partner_id.id or None
+ author_id = self.env.user.partner_id.id or None
+ self.env.user.partner_id.send_notification_message(subject=subject, body=message, author_id=author_id, group=group)
+
+ @api.model
+ def create(self, vals):
+ res = super(AccountPayment, self).create(vals)
+ # print("Hi payment!", res.amount)
+ self.action_notify_payment(res)
+
+ return res
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/models/budget_confirmation.py b/odex25_purchase/purchase_requisition_custom/models/budget_confirmation.py
new file mode 100644
index 000000000..7c74cf0ea
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/budget_confirmation.py
@@ -0,0 +1,70 @@
+from odoo import fields, models, _
+
+
+class BudgetConfirmationCustom(models.Model):
+ _inherit = 'budget.confirmation'
+
+ po_id = fields.Many2one('purchase.order')
+ request_id = fields.Many2one('purchase.request')
+ confirm_po = fields.Boolean()
+ confirm_invoice = fields.Boolean()
+ planned_for = fields.Boolean(string="Planned For")
+ emergency = fields.Boolean(string="Emergency")
+ available = fields.Boolean(string="Available")
+ unavailable = fields.Boolean(string="Unavailable")
+ specifications_conform = fields.Boolean(string="Technical specifications conform")
+ specifications_not_conform = fields.Boolean(string="Technical specifications do not match")
+
+ def cancel(self):
+ super(BudgetConfirmationCustom, self).cancel()
+ for rec in self:
+ if rec.po_id and rec.type == 'purchase.order':
+ rec.po_id.write({'state': 'budget_rejected'})
+ body = _(
+ "Purchase Order %s is Rejected By : %s With Reject Reason : %s" % (
+ str(rec.name), str(rec.env.user.name), str(rec.reject_reason)))
+ # Send Notifications
+ subject = _('Reject Purchase Order')
+ author_id = rec.env.user.partner_id.id or None
+ rec.create_uid.partner_id.send_notification_message(subject=subject, body=body, author_id=author_id)
+ rec.po_id.message_post(body=body)
+ if rec.request_id and rec.type == 'purchase.request':
+ rec.request_id.write({'state': 'send_budget'})
+ body = _(
+ "Purchase Request %s is Rejected By : %s With Reject Reason : %s" % (
+ str(rec.name), str(rec.env.user.name), str(rec.reject_reason)))
+ # Send Notifications
+ subject = _('Reject Purchase Request Budget Confirmation')
+ author_id = rec.env.user.partner_id.id or None
+ rec.create_uid.partner_id.send_notification_message(subject=subject, body=body, author_id=author_id)
+ rec.request_id.message_post(body=body)
+
+ def done(self):
+ super(BudgetConfirmationCustom, self).done()
+ for line in self.lines_ids:
+ budget_post = self.env['account.budget.post'].search([]).filtered(
+ lambda x: line.account_id in x.account_ids)
+ analytic_account_id = line.analytic_account_id
+ budget_lines = analytic_account_id.crossovered_budget_line.filtered(
+ lambda x: x.general_budget_id in budget_post and
+ x.crossovered_budget_id.state == 'done' and
+ x.date_from <= self.date <= x.date_to)
+ for rec in budget_lines:
+ if self.po_id and self.type == 'purchase.order':
+ # Update reserve of budget_lines
+ amount = rec.reserve
+ amount += line.amount
+ budget_lines.write({'reserve': amount})
+ if self.po_id and self.po_id.requisition_id:
+ self.po_id.write({'state': 'to approve'}) # draft
+ self.po_id.requisition_id.write({'state': 'checked'})
+ elif self.po_id:
+ if self.po_id.email_to_vendor:
+ self.po_id.write({'state': 'sent'})
+ else:
+ self.po_id.write({'state': 'draft'})
+
+class CrossoveredBudgetLines(models.Model):
+ _inherit = "crossovered.budget.lines"
+
+ budget_confirm_line_ids = fields.One2many('budget.confirmation.line', 'budget_line_id', 'Confirmation')
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/models/committe.py b/odex25_purchase/purchase_requisition_custom/models/committe.py
new file mode 100644
index 000000000..f2a7438b8
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/committe.py
@@ -0,0 +1,8 @@
+from odoo import fields, models
+
+class CommitteOfPurchase(models.Model):
+ _name = 'purchase.committee'
+
+ head_of_committe = fields.Many2one('res.users', 'Committe Head')
+ minimum_approve = fields.Integer('Number of Selections')
+ minimum_vote = fields.Integer('Number of Vots')
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/models/evaluation_criteria.py b/odex25_purchase/purchase_requisition_custom/models/evaluation_criteria.py
new file mode 100644
index 000000000..48462f0d2
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/evaluation_criteria.py
@@ -0,0 +1,26 @@
+# # -*- coding: utf-8 -*-
+
+# from odoo import models, fields, api
+
+# class EvaluationCriteria(models.Model):
+# _name = 'evaluation.criteria'
+# _description = 'Rvaluatioin Creiteria'
+
+# active = fields.Boolean(string='active',default=True)
+# # vendor_type = fields.Many2one(comodel_name='vendor.type', string='Vendor Type')
+# name = fields.Char(string='Name')
+# # calculation_method = fields.Selection([
+# # ('per', 'Percentage'),
+# # ('points' , 'Points')
+# # ], string='calculation Method')
+# owner = fields.Selection([
+# ('account', 'Finance'),
+# ('purchase' , 'Purchase'),
+# ('stock' , 'Stock'),
+# ], string='Owner')
+# # value = fields.Float(string='Value')
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/models/purchase_order.py b/odex25_purchase/purchase_requisition_custom/models/purchase_order.py
new file mode 100644
index 000000000..a6ce91f78
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/purchase_order.py
@@ -0,0 +1,694 @@
+from lxml import etree
+from odoo.exceptions import UserError, ValidationError
+from odoo import api, fields, models, _
+from odoo.tools.float_utils import float_is_zero
+from dateutil.relativedelta import relativedelta
+
+
+class PurchaseOrderCustom(models.Model):
+ _inherit = "purchase.order"
+
+ def copy(self, default=None):
+ data = super(PurchaseOrderCustom, self).copy(default)
+ data.email_to_vendor = False
+ purchase_budget = self.env.company.purchase_budget
+ if purchase_budget:
+ data.state = 'wait_for_send'
+ else:
+ data.state = 'draft'
+
+ return data
+
+ state = fields.Selection([
+ ('wait', 'Waiting To Be Signed'),
+ ('unsign', 'UnSign'),
+ ('sign', 'Sign'),
+ ('waiting', 'Waiting For Budget Confirmation'),
+ ('draft', 'RFQ'),
+ ('sent', 'RFQ Sent'),
+ ('to approve', 'To Approve'),
+ ('purchase', 'Purchase Order'),
+ ('done', 'Locked'),
+ ('cancel', 'Cancelled'),
+ ('budget_rejected', 'Rejected By Budget'),
+ ('wait_for_send', 'Waiting For Send to Budget')])
+ department_id = fields.Many2one('hr.department')
+ purpose = fields.Char()
+ category_ids = fields.Many2many('product.category', string='Categories')
+ committe_members = fields.One2many('committe.member', inverse_name='po_id')
+ no_of_approve = fields.Integer("No. of Votes", compute="_compute_no_approve")
+ request_id = fields.Many2one('purchase.request', 'Request Ref.')
+ employee_id = fields.Many2one('hr.employee', related="request_id.employee_id")
+ purchase_cost = fields.Selection(
+ [('department', 'Department'), ('default', 'Default Cost Center'), ('product_line', 'Product Line'),
+ ('project', 'Project')],
+ string='Purchase Cost')
+ state_of_delivery = fields.Char(string='Delivery State', compute="_compute_delviery_order")
+ select = fields.Boolean(string="Select")
+ auto_notification = fields.Boolean()
+ responsible_id = fields.Many2one('res.users')
+ notify_before = fields.Integer()
+ start_date = fields.Date()
+ end_date = fields.Date()
+ cron_end_date = fields.Date(compute="get_cron_end_date", store=True)
+ contract_name = fields.Char(string='Contract Name')
+ period_type = fields.Selection(
+ selection=[('day', 'Day(s)'), ('week', 'Week(s)'), ('month', 'Month(s)'), ('year', 'Year(s)')])
+ type = fields.Selection(selection=[('ordinary', 'Ordinary'), ('contract', 'Contract'), ], default='ordinary',
+ string='Type')
+ email_to_vendor = fields.Boolean('Email Sent to Vendor?', default=False)
+ send_to_budget = fields.Boolean('Sent to Budget?', default=False)
+ project_id = fields.Many2one('project.project', string='Project', compute="_get_project_data", store=True)
+ is_purchase_budget = fields.Boolean(string="Is Purchase Budget", compute='_compute_budget')
+ confirmation_ids = fields.One2many('budget.confirmation', 'po_id')
+ recommendation_order = fields.Boolean(string='Recommend')
+ parent_state = fields.Char(compute="_compute_parent_state", help="State of the parent purchase.requisition",
+ compute_sudo=True)
+ purchase_commitee = fields.Boolean('Purchase Commitee?', compute="_compute_parent_state", compute_sudo=True)
+ budget_amount = fields.Float(string="Approved Budget")
+ is_signed = fields.Boolean()
+ budget_id = fields.Many2one('crossovered.budget')
+
+ def _prepare_invoice(self):
+ res = super(PurchaseOrderCustom, self)._prepare_invoice()
+ res.update({'purchase_id': self.id})
+ return res
+
+ @api.onchange('type')
+ def auto_type_change(self):
+ if self.type != 'contract':
+ self.auto_notification = False
+ self.responsible_id = False
+ self.notify_before = 0
+ self.start_date = None
+ self.end_date = None
+ self.contract_name = ''
+ self.period_type = ''
+
+ return {}
+
+ @api.constrains('end_date', 'start_date', 'auto_notification')
+ def start_notify_constrain(self):
+ for rec in self:
+ if rec.start_date and rec.end_date:
+ if rec.start_date >= rec.end_date:
+ raise ValidationError(_("Start Date Should Be Less Than End Date"))
+
+ if rec.auto_notification and rec.notify_before < 1:
+ raise ValidationError(_("Notify Before End Should Be Greater Than Zero"))
+
+ @api.depends('end_date', 'notify_before', 'period_type')
+ def get_cron_end_date(self):
+ for rec in self:
+ if rec.end_date and rec.period_type:
+ end = fields.Datetime.from_string(rec.end_date)
+ type = self.period_type
+ date_to = False
+ if rec.period_type == 'day':
+ date_to = (end + relativedelta(days=-rec.notify_before))
+ elif rec.period_type == 'month':
+ date_to = (end + relativedelta(months=-rec.notify_before))
+ elif rec.period_type == 'week':
+ date_to = (end + relativedelta(weeks=-rec.notify_before))
+ elif rec.period_type == 'year':
+ date_to = (end + relativedelta(years=-rec.notify_before))
+ rec.cron_end_date = date_to
+
+ @api.model
+ def cron_po_auto_notify(self):
+ date = fields.Date.today()
+ records = self.env['purchase.order'].sudo().search(
+ [('state', 'not in', ['cancel', 'done']), ('cron_end_date', '<=', str(date)),
+ ('auto_notification', '=', True)])
+ for rec in records:
+ template = self.env.ref('purchase_requisition_custom.auto_po_notify')
+ template.send_mail(rec.id, force_send=True)
+
+ def open_convert_po_contract(self):
+ context = dict(self.env.context or {})
+ context['default_purchase_id'] = self.id
+ context['default_contract_name'] = self.contract_name
+ context['default_responsible_id'] = self.responsible_id.id
+ context['default_start_date'] = self.start_date
+ context['default_end_date'] = self.end_date
+ context['default_auto_notification'] = self.auto_notification
+ context['purchase_id'] = self.id
+
+ view = self.env.ref('purchase_requisition_custom.convert_to_contract_po_wizard')
+ wiz = self.env['convert.po.contract.wizard']
+ return {
+ 'name': _('Purchase To Contract'),
+ 'type': 'ir.actions.act_window',
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'convert.po.contract.wizard',
+ 'views': [(view.id, 'form')],
+ 'view_id': view.id,
+ 'target': 'new',
+ 'res_id': wiz.id,
+ 'context': context,
+ }
+
+ # End features on PO (related the cotract features)
+
+ @api.depends('requisition_id')
+ def _compute_parent_state(self):
+ """ I use this function to compute state of requisition_id ,
+ cuse we need it in domain to make some buttons visible or not, also purchase_commitee"""
+ self.parent_state = False
+ self.purchase_commitee = False
+ for record in self.filtered('requisition_id'):
+ record.parent_state = record.requisition_id.state
+ record.purchase_commitee = record.requisition_id.purchase_commitee
+
+ @api.constrains('recommendation_order')
+ def check_recommendation_order(self):
+ recommended_po = self.env['purchase.order'].search([
+ ('requisition_id', '=', self.requisition_id.id), ('id', '!=', self.id), ('state', '!=', 'cancel'),
+ ('recommendation_order', '=', True)])
+ if recommended_po and self.recommendation_order:
+ raise ValidationError(_("sorry choose one recommended order"))
+
+ def open_confirmation(self):
+ formview_ref = self.env.ref('account_budget_custom.view_budget_confirmation_form', False)
+ treeview_ref = self.env.ref('account_budget_custom.view_budget_confirmation_tree', False)
+ return {
+ 'name': ("Budget Confirmation"),
+ 'view_mode': 'tree, form',
+ 'view_id': False,
+ 'view_type': 'form',
+ 'res_model': 'budget.confirmation',
+ 'type': 'ir.actions.act_window',
+ 'target': 'current',
+ 'domain': "[('id', 'in', %s)]" % self.confirmation_ids.ids,
+ 'views': [(treeview_ref and treeview_ref.id or False, 'tree'),
+ (formview_ref and formview_ref.id or False, 'form')],
+ 'context': {'create': False}
+ }
+
+ # get account_analytic related to department in order line
+ @api.onchange('order_line')
+ def on_type_cost_product(self):
+ for line in self.order_line:
+ if not line.account_analytic_id and line.department_name:
+ line.account_analytic_id = line.department_name.analytic_account_id
+
+ def button_draft(self):
+ self.write({'state': 'draft'})
+
+ def button_cancel(self):
+ budgets = self.env['budget.confirmation'].search([
+ ('po_id', '=', self.id),
+ ('state', '=', 'done'),
+ ])
+
+ for rec in budgets:
+ for line in rec.lines_ids:
+ budget_post = self.env['account.budget.post'].search([]).filtered(
+ lambda x: line.account_id in x.account_ids)
+ analytic_account_id = line.analytic_account_id
+
+ budget_lines = analytic_account_id.crossovered_budget_line.filtered(
+ lambda x: x.general_budget_id in budget_post and
+ x.crossovered_budget_id.state == 'done' and
+ x.date_from <= rec.date <= x.date_to)
+
+ # Revert reserve of budget_lines
+ amount = budget_lines.reserve
+ amount -= line.amount
+ budget_lines.write({'reserve': amount})
+
+ self.budget_amount = 0
+ super(PurchaseOrderCustom, self).button_cancel()
+
+ def action_sign_purchase_orders(self):
+ for rec in self:
+ if rec.state not in ['sign', 'purchase', 'to approve', 'sent', 'done', 'cancel', 'budget_rejected',
+ 'wait_for_send', 'waiting']:
+ rec.action_sign()
+
+ @api.model
+ def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
+ res = super(PurchaseOrderCustom, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar,
+ submenu=submenu)
+ if (view_type == 'form' or view_type == 'tree') and self.env.user.has_group(
+ 'purchase_requisition_custom.committe_member') and not (
+ self.env.user.has_group('purchase.group_purchase_manager') or self.env.user.has_group(
+ 'purchase.group_purchase_user')):
+ root = etree.fromstring(res['arch'])
+ root.set('edit', 'false')
+ root.set('create', 'false')
+ root.set('duplicate', 'false')
+ root.set('delete', 'false')
+ res['arch'] = etree.tostring(root)
+ else:
+ pass
+
+ return res
+
+ def _compute_budget(self):
+ purchase_budget = self.env.company.purchase_budget
+ for rec in self:
+ if purchase_budget:
+ rec.is_purchase_budget = True
+ else:
+ rec.is_purchase_budget = False
+
+ @api.model
+ def create(self, vals):
+ requisition_id = vals.get('requisition_id', False)
+ purchase_cost = vals.get('purchase_cost', False)
+ if not purchase_cost:
+ vals['purchase_cost'] = 'product_line'
+
+ if requisition_id:
+ vals['send_to_budget'] = True
+ else:
+ if self.env.company.purchase_budget:
+ vals['state'] = 'wait_for_send'
+
+ return super(PurchaseOrderCustom, self).create(vals)
+
+ def button_approve(self):
+ for rec in self:
+ if rec.requisition_id and rec.requisition_id.state != 'approve':
+ raise ValidationError(_("Purchase agreement not approved"))
+ else:
+ # You can Approve
+ for line in self.order_line:
+ analytic_account_id = line.account_analytic_id
+ budget_post = self.env['account.budget.post'].search([]).filtered(
+ lambda
+ x: line.product_id.property_account_expense_id.id and line.product_id.property_account_expense_id.id or line.product_id.categ_id.property_account_expense_categ_id.id in x.account_ids)
+ budget_lines = analytic_account_id.crossovered_budget_line.filtered(
+ lambda x: x.general_budget_id in budget_post and
+ x.crossovered_budget_id.state == 'done' and
+ fields.Date.from_string(x.date_from) <= fields.Date.from_string(
+ rec.date_order) <= fields.Date.from_string(x.date_to))
+ super(PurchaseOrderCustom, rec).button_approve()
+
+ @api.constrains('state')
+ def _state_on_change(self):
+ for obj in self:
+ if obj.state == 'sent':
+ obj.email_to_vendor = True
+
+ @api.depends('requisition_id.project_id')
+ def _get_project_data(self):
+ for rec in self:
+ if rec.requisition_id.project_id:
+ rec.project_id = rec.requisition_id.project_id.id
+
+ def action_skip_budget(self):
+ """ Skip purchase budget"""
+ for po_id in self:
+ if po_id.state == 'wait_for_send':
+ # Deal with double validation process
+ valid_amount = self.env.user.company_id.currency_id.compute(
+ po_id.company_id.po_double_validation_amount, po_id.currency_id)
+ # second_amount = self.env.user.company_id.currency_id.compute(po_id.company_id.second_approve, po_id.currency_id)
+ if po_id.company_id.po_double_validation == 'one_step' \
+ or (po_id.company_id.po_double_validation == 'two_step' \
+ and po_id.amount_total > valid_amount):
+ po_id.write({'state': 'to approve'})
+ else:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+
+ po_id.write({'send_to_budget': False})
+
+ # @api.depends('name')
+ def _compute_delviery_order(self):
+ precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
+ for order in self:
+ if order.state not in ('purchase', 'done'):
+ order.state_of_delivery = 'No'
+ continue
+
+ if any(
+ not float_is_zero(line.product_qty - line.qty_received, precision_digits=precision)
+ for line in order.order_line.filtered(lambda l: not l.display_type)
+ ):
+ order.state_of_delivery = 'Partially Received'
+ elif (
+ all(
+ float_is_zero(line.product_qty - line.qty_received, precision_digits=precision)
+ for line in order.order_line.filtered(lambda l: not l.display_type)
+ )
+ and order.picking_ids
+ ):
+ order.state_of_delivery = ' Fully Received '
+ else:
+ order.state_of_delivery = 'Not Received'
+
+ @api.depends('committe_members')
+ def _compute_no_approve(self):
+ for rec in self:
+ rec.no_of_approve = len(rec.committe_members)
+
+ def action_select_all(self):
+ for line in self.order_line:
+ line.choosen = True
+ self._amount_all()
+
+ @api.constrains('requisition_id', 'partner_id')
+ def PreventSameVendor(self):
+ """
+ Constrain to prevent the same vendor in the order for the same requisition
+ """
+ orders = self.env['purchase.order'].search([
+ ('id', '!=', self.id),
+ ('requisition_id', '=', self.requisition_id.id),
+ ('requisition_id', '!=', False),
+ ('partner_id', '=', self.partner_id.id)
+ ])
+ if len(orders) != 0:
+ raise ValidationError(_("This Vendor have order before"))
+
+ # test
+
+ @api.model
+ def _prepare_picking(self):
+ if not self.group_id:
+ self.group_id = self.group_id.create({
+ 'name': self.name,
+ 'partner_id': self.partner_id.id
+ })
+ if not self.partner_id.property_stock_supplier.id:
+ raise UserError(_("You must set a Vendor Location for this partner %s") % self.partner_id.name)
+ return {
+ 'picking_type_id': self.picking_type_id.id,
+ 'partner_id': self.partner_id.id,
+ 'date': self.date_order,
+ 'origin': self.name,
+ 'location_dest_id': self._get_destination_location(),
+ 'location_id': self.partner_id.property_stock_supplier.id,
+ 'company_id': self.company_id.id,
+ }
+
+ '''
+ override the method that calculate total amount without taxes to calculate only choosen line
+ '''
+
+ def _amount_all(self):
+ for order in self:
+ amount_untaxed = amount_tax = 0.0
+ for line in order.order_line:
+ if line.choosen:
+ amount_untaxed += line.price_subtotal
+ amount_tax += line.price_tax
+ order.update({
+ 'amount_untaxed': order.currency_id.round(amount_untaxed),
+ 'amount_tax': order.currency_id.round(amount_tax),
+ 'amount_total': amount_untaxed + amount_tax,
+ })
+
+ def action_sign(self):
+ if self.requisition_id.state == 'approve':
+ raise ValidationError(_("Sorry you cannot sin this RFQ The requisition already has been approved"))
+ if self.requisition_id.purchase_commitee and self.requisition_id.actual_vote < self.requisition_id.min_vote:
+ raise ValidationError(_("Sorry The minimum number of committee member is not satsfied"))
+ if self.requisition_id.purchase_commitee and self.no_of_approve < self.requisition_id.min_approve:
+ raise ValidationError(
+ _("Sorry You cannot sign this quotation ,YOU NEED MORE COMMITTE MEMBERS TO choose it"))
+ if len(self.order_line.filtered(lambda line: line.choosen == True)) <= 0:
+ raise ValidationError(_('Choose At Least on product to purchase'))
+ if self.requisition_id.type_id.exclusive == 'exclusive':
+ orders = self.env['purchase.order'].search([
+ ('requisition_id', '=', self.requisition_id.id),
+ ('id', '!=', self.id)
+ ])
+ if len(orders) != 0:
+ for order in orders:
+ order.action_unsign()
+ for rec in self.order_line:
+ if rec.price_unit <= 0 and rec.choosen:
+ raise ValidationError(_("Unit Price can't be Zero Or less"))
+ if self.amount_total == 0:
+ raise ValidationError(_("Total Amount Can't be Zero"))
+ self.write({'state': 'sign', 'is_signed': True})
+ self.requisition_id.state = 'purchase_manager'
+
+ def button_confirm(self):
+ res = super(PurchaseOrderCustom, self).button_confirm()
+ for line in self.order_line:
+ analytic_account = line.account_analytic_id
+ budget_lines = analytic_account.crossovered_budget_line.filtered(
+ lambda x:
+ x.crossovered_budget_id.state == 'done' and
+ fields.Date.from_string(x.date_from) <= fields.Date.from_string(
+ self.date_order) <= fields.Date.from_string(x.date_to))
+ amount = budget_lines.purchase_remain
+ amount += line.price_subtotal
+ budget_lines.write({'purchase_remain': amount})
+ budget_lines.write({'reserve': abs(line.price_subtotal - budget_lines.reserve)})
+
+ if self.requisition_id.id:
+ self.requisition_id.state = 'done'
+ if self.request_id:
+ self.request_id.write({'state': 'done'})
+ return res
+
+ def action_unsign(self):
+ """
+ Move document to unsign state
+ """
+ self.write({'state': 'unsign', 'is_signed': False})
+
+ def action_select(self):
+ for member in self.committe_members:
+ if member.user_id.id == self.env.user.id and member.select == True:
+ raise ValidationError(_('You have already select this Quotation'))
+ self.requisition_id.actual_vote += 1
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Select Reason',
+ 'res_model': 'select.reason',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {'default_order_id': self.id}
+ }
+
+ def action_refuse(self):
+ for member in self.committe_members:
+ if member.user_id.id == self.env.user.id and member.select == True:
+ raise ValidationError(_('You have already refused this Quotation'))
+ self.requisition_id.actual_vote += 1
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Refuse Reason',
+ 'res_model': 'refuse.reason',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {'default_order_id': self.id}
+ }
+
+ def action_budget(self):
+ confirmation_lines = []
+ amount = 0
+
+ if self.amount_total <= 0:
+ raise ValidationError(_("Total Amount MUST be greater than 0 !!!"))
+
+ analytic_account = False
+ if self.purchase_cost == 'default':
+ analytic_account = self.env.user.company_id.purchase_analytic_account
+ elif self.purchase_cost == 'department':
+ analytic_account = self.department_id.analytic_account_id
+ elif self.purchase_cost == 'project':
+ analytic_account = self.project_id.analytic_account_id
+ if not analytic_account:
+ raise ValidationError(_("No analytic account for the project"))
+ elif self.purchase_cost == 'product_line':
+ pass # No analytic account assigned yet, it will be assigned later
+
+ for order in self:
+ for rec in order.order_line:
+ if rec.choosen:
+ if self.purchase_cost == 'product_line':
+ analytic_account = rec.account_analytic_id
+ if not analytic_account:
+ raise ValidationError(
+ _("Please put cost center to the product line") + ': {}'.format(rec.product_id.name))
+
+ if not (
+ rec.product_id.property_account_expense_id.id and rec.product_id.property_account_expense_id.id
+ or rec.product_id.categ_id.property_account_expense_categ_id.id):
+ raise ValidationError(
+ _("This product has no expense account") + ': {}'.format(rec.product_id.name))
+
+ if analytic_account:
+ budget_lines = analytic_account.crossovered_budget_line.filtered(
+ lambda x:
+ x.crossovered_budget_id.state == 'done' and
+ fields.Date.from_string(x.date_from) <= fields.Date.from_string(self.date_order) and
+ fields.Date.from_string(x.date_to) >= fields.Date.from_string(self.date_order))
+ self.budget_id = budget_lines.mapped('crossovered_budget_id').id
+ if budget_lines:
+ remain = abs(budget_lines[0].remain)
+ amount += rec.price_subtotal
+ new_balance = remain - amount
+ confirmation_lines.append((0, 0, {
+ 'amount': rec.price_subtotal,
+ 'analytic_account_id': analytic_account.id,
+ 'description': rec.product_id.name,
+ 'budget_line_id': budget_lines[0].id,
+ 'remain': remain,
+ 'new_balance': new_balance,
+ 'account_id': rec.product_id.property_account_expense_id.id
+ or rec.product_id.categ_id.property_account_expense_categ_id.id
+ }))
+ else:
+ raise ValidationError(
+ _('No budget for this service') + ': {} - {}'.format(rec.product_id.name,
+ analytic_account.name))
+ else:
+ raise ValidationError(_("Analytic account not set"))
+
+ if confirmation_lines:
+ data = {
+ 'name': self.name,
+ 'date': self.date_order,
+ 'beneficiary_id': self.partner_id.id,
+ 'department_id': self.department_id.id,
+ 'type': 'purchase.order',
+ 'ref': self.name,
+ 'description': self.purpose,
+ 'total_amount': self.amount_untaxed,
+ 'lines_ids': confirmation_lines,
+ 'po_id': self.id
+ }
+ budget_id = self.env['budget.confirmation'].create(data)
+ self.write({'state': 'waiting'})
+ else:
+ raise ValidationError(_("No confirmation lines"))
+ def budget_resend(self):
+ self.action_budget()
+ self.write({'state': 'waiting'})
+
+
+class PurchaseOrderLineCustom(models.Model):
+ _inherit = 'purchase.order.line'
+
+ attachment_ids = fields.Many2many('ir.attachment')
+ choosen = fields.Boolean(string='Purchase', default=True)
+ department_name = fields.Many2one("hr.department", string="Department Name")
+ date_end = fields.Date(string="Date End")
+
+ def _create_stock_moves(self, picking):
+ '''
+ override _create_stock_moves method to create move for only choosen lines
+ '''
+ moves = self.env['stock.move']
+ done = self.env['stock.move'].browse()
+ with self.env.norecompute():
+ for line in self:
+ if line.choosen:
+ for val in line._prepare_stock_moves(picking):
+ done += moves.create(val)
+ self.recompute()
+ return done
+
+
+class Attachment(models.Model):
+ _inherit = "ir.attachment"
+
+ def unlink(self):
+ for record in self:
+ if record.res_model == 'purchase.order':
+ purchase_order = record.env['purchase.order'].search([
+ ('id', '=', record.res_id)
+ ])
+ for rec in purchase_order.order_line:
+ if record.id in rec.attachment_ids.ids:
+ rec.write({'attachment_ids': (2, record.id)})
+ return super(Attachment, self).unlink()
+
+ def getLine(self, order):
+ """
+ this function return the line with the least amount of attachment in it
+ """
+ line = None
+ for rec in order.order_line:
+ if rec == order.order_line[0]:
+ holder = len(rec.attachment_ids.ids)
+ if len(rec.attachment_ids.ids) == 0:
+ return rec
+ elif len(rec.attachment_ids.ids) <= holder:
+ line = rec
+ holder = len(rec.attachment_ids.ids)
+ else:
+ continue
+ return line
+
+
+class ProductCustom(models.Model):
+ _inherit = 'product.product'
+
+ @api.model
+ def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
+ product_ids = []
+ res = super(ProductCustom, self)._name_search(name, args=args, operator=operator, limit=limit,
+ name_get_uid=name_get_uid)
+ if name:
+ product_ids = list(self._search([('description', 'ilike', name)] + args, limit=limit))
+ if product_ids:
+ res += product_ids
+ return res
+
+ def action_notify_new_product(self, product):
+ # Send Notifications
+ subject = _('New Product') + ' - {}'.format(product.name)
+ message = _('New product was added. Product Name:') + ' {} '.format(product.name) + '\n' + _(
+ 'Sale Price: ') + '{}'.format(product.list_price) + '\n' + _('Description: ') + '{}'.format(
+ product.description) + '\n' + _('On Date: ') + '{}'.format(fields.Date.today()) + '\n' + _(
+ 'Created By: ') + '{}'.format(self.env.user.name)
+ group = 'purchase.group_purchase_manager'
+ author_id = self.env.user.partner_id.id or None
+ self.env.user.partner_id.send_notification_message(subject=subject, body=message, author_id=author_id,
+ group=group)
+
+ @api.model
+ def create(self, vals):
+ res = super(ProductCustom, self).create(vals)
+ self.action_notify_new_product(res)
+
+ return res
+
+
+class AccountInvoice(models.Model):
+ _inherit = "account.move"
+
+ purchase_id = fields.Many2one('purchase.order', readonly=False, store=True)
+
+ @api.onchange('purchase_id')
+ def purchase_order_change(self):
+ modules = self.env['ir.module.module'].sudo().search([('state', '=', 'installed'),
+ ('name', '=', 'contract')])
+ if modules:
+ self.contract_id = self.purchase_id.contract_id.id
+ if not self.purchase_id:
+ return {}
+ if not self.partner_id:
+ self.partner_id = self.purchase_id.partner_id.id
+
+ vendor_ref = self.purchase_id.partner_ref
+ if vendor_ref and (not self.reference or (
+ vendor_ref + ", " not in self.reference and not self.reference.endswith(vendor_ref))):
+ self.reference = ", ".join([self.reference, vendor_ref]) if self.reference else vendor_ref
+
+ new_lines = self.env['account.move.line']
+ for line in self.purchase_id.order_line - self.invoice_line_ids.mapped('purchase_line_id'):
+ if line.choosen:
+ data = self._prepare_invoice_line_from_po_line(line)
+ new_line = new_lines.new(data)
+ new_line._set_additional_fields(self)
+ new_lines += new_line
+
+ self.invoice_line_ids += new_lines
+ self.payment_term_id = self.purchase_id.payment_term_id
+ self.env.context = dict(self.env.context, from_purchase_order_change=True)
+ self.purchase_id = False
+ return {}
diff --git a/odex25_purchase/purchase_requisition_custom/models/purchase_request.py b/odex25_purchase/purchase_requisition_custom/models/purchase_request.py
new file mode 100644
index 000000000..63860be28
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/purchase_request.py
@@ -0,0 +1,332 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError, ValidationError
+from datetime import datetime, timedelta, date
+from odoo.tools.misc import get_lang
+from odoo.addons.purchase.models.purchase import PurchaseOrder as Purchase
+
+
+class PurchaseRequest(models.Model):
+ _name = 'purchase.request'
+ _description = 'Purchase Request'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _order = 'id desc'
+
+ @api.model
+ def _default_emp(self):
+ emp = self.env['hr.employee'].search([('user_id', '=', self.env.uid)])
+ if emp:
+ return emp
+ else:
+ raise ValidationError(_("this user has no related employee!"))
+
+ def copy(self, default=None):
+ data = super(PurchaseRequest, self).copy(default)
+ data.state = 'draft'
+ data.purchase_create = False
+ return data
+
+ @api.model
+ def _get_picking_type(self, company_id):
+ picking_type = self.env['stock.picking.type'].search(
+ [('code', '=', 'incoming'), ('warehouse_id.company_id', '=', company_id)])
+ if not picking_type:
+ picking_type = self.env['stock.picking.type'].search(
+ [('code', '=', 'incoming'), ('warehouse_id', '=', False)])
+ return picking_type[:1]
+
+ @api.model
+ def _default_picking_type(self):
+ return self._get_picking_type(self.env.context.get('company_id') or self.env.company.id)
+
+ @api.onchange('company_id')
+ def _onchange_company_id(self):
+ p_type = self.picking_type_id
+ if not (p_type and p_type.code == 'incoming' and (
+ p_type.warehouse_id.company_id == self.company_id or not p_type.warehouse_id)):
+ self.picking_type_id = self._get_picking_type(self.company_id.id)
+
+ name = fields.Char(string='Name', copy=False, default=lambda self: '/')
+ employee_id = fields.Many2one(comodel_name='hr.employee', string='Employee', default=lambda s: s._default_emp().id)
+ department_id = fields.Many2one('hr.department', 'Department')
+ line_ids = fields.One2many(comodel_name='purchase.request.line', inverse_name='request_id', copy=True)
+ date = fields.Date(string='Date', default=fields.Date.context_today, copy=False)
+ state = fields.Selection(
+ [('draft', 'Draft'), ('direct_manager', 'Direct Manager'),
+ ('waiting', 'In Purchase'), ('done', 'Done'), ('cancel', 'Cancel'), ('refuse', 'Refuse')], default="draft",
+ tracking=True, )
+ product_category_ids = fields.Many2many('product.category', string='Items Categories')
+ purchase_purpose = fields.Char("Purpose", default="/")
+ note = fields.Text(string='Note', copy=False)
+ partner_id = fields.Many2one(string='Vendor', comodel_name='res.partner', copy=False)
+ type_id = fields.Many2one('purchase.requisition.type', string="Agreement Type", copy=False)
+ requisition_id_ids = fields.One2many("purchase.requisition", "request_id")
+ purchase_ids = fields.One2many("purchase.order", "request_id")
+
+ is_requisition = fields.Boolean(default=False)
+
+ company_id = fields.Many2one('res.company', 'Company', required=True, index=True,
+ default=lambda self: self.env.company)
+ picking_type_id = fields.Many2one('stock.picking.type', 'Deliver To', states=Purchase.READONLY_STATES,
+ required=True, default=_default_picking_type,
+ domain="['|', ('warehouse_id', '=', False), ('warehouse_id.company_id', '=', company_id)]",
+ help="This will determine operation type of incoming shipment")
+
+ purchase_create = fields.Boolean(string='Purchase Create')
+ by_purchase = fields.Boolean('Requested by Purchase')
+ type = fields.Selection([('project', 'Project'), ('operational', 'Operational')], default='operational')
+ edit_partner_id = fields.Boolean(compute="compute_edit_partner_id")
+ use_analytic = fields.Boolean("Use Analytic")
+ account_analytic_id = fields.Many2one("account.analytic.account", )
+ # committe_members = fields.One2many('committe.member', inverse_name='po_id')
+ is_creator = fields.Boolean(string='Is Creator', compute='_compute_is_creator')
+ select = fields.Boolean(string="Select")
+ reject_reason = fields.Text(string='Reject Reson')
+
+ @api.depends('create_uid')
+ def _compute_is_creator(self):
+ for record in self:
+ record.is_creator = (record.create_uid == self.env.user)
+
+ # def read(self, records):
+ # res = super(PurchaseRequest, self).read(records)
+ # if self.create_uid == self.env.user:
+ # self.is_creator = True
+ # else:
+ # self.is_creator = False
+ # return res
+
+ def open_purchase(self):
+ formview_ref = self.env.ref('purchase.purchase_order_form', False)
+ treeview_ref = self.env.ref('purchase.purchase.purchase_order_tree', False)
+ return {
+ 'name': _("Purchase Request"),
+ 'view_mode': 'tree, form',
+ 'view_type': 'form',
+ 'view_id': False,
+ 'res_model': 'purchase.order',
+ 'type': 'ir.actions.act_window',
+ 'target': 'current',
+ 'domain': "[('id', 'in', %s)]" % self.purchase_ids.ids,
+ 'views': [(treeview_ref and treeview_ref.id or False, 'tree'),
+ (formview_ref and formview_ref.id or False, 'form')],
+
+ 'context': {'create': False}
+ }
+
+ def compute_edit_partner_id(self):
+ """Compute For Group Edit Partner Id"""
+ for rec in self:
+ if self.env.user.has_group("purchase_requisition_custom.create_purchase_request"):
+ rec.edit_partner_id = True
+ else:
+ rec.edit_partner_id = False
+
+ @api.model
+ def create(self, vals):
+ if vals.get('name', _('New')) == _('New'):
+ vals['name'] = self.env['ir.sequence'].next_by_code(
+ 'stock.request.order') or _('New')
+ res = super(PurchaseRequest, self).create(vals)
+ return res
+
+ def open_requisition(self):
+ formview_ref = self.env.ref('purchase_requisition.view_purchase_requisition_form', False)
+ treeview_ref = self.env.ref('purchase_requisition.view_purchase_requisition_tree', False)
+ return {
+ 'name': _("Purchase Agreement"),
+ 'view_mode': 'tree, form',
+ 'view_id': False,
+ 'view_type': 'form',
+ 'res_model': 'purchase.requisition',
+ 'type': 'ir.actions.act_window',
+ 'target': 'current',
+ 'domain': "[('id', 'in', %s)]" % self.requisition_id_ids.ids,
+ 'views': [(treeview_ref and treeview_ref.id or False, 'tree'),
+ (formview_ref and formview_ref.id or False, 'form')],
+ 'context': {'create': False}
+ }
+
+
+
+
+ # test empty department
+ @api.onchange('employee_id', 'department_id', 'line_ids')
+ def onchange_emp_depart(self):
+ for line in self.line_ids:
+ if self.employee_id and not self.department_id:
+ raise ValidationError(_("Please Select department for employee"))
+
+ @api.onchange('employee_id', 'by_purchase')
+ def change_employee_id(self):
+ if self.employee_id and self.by_purchase:
+ self.department_id = self.employee_id.department_id.id
+ else:
+ self.employee_id = self._default_emp().id
+ self.department_id = self._default_emp().department_id.id
+
+ def action_submit(self):
+ self.write({'state': 'direct_manager'})
+
+ def action_confirm(self):
+ if len(self.line_ids) == 0:
+ raise ValidationError(_("Can't Confirm Request With No Item!"))
+ if not self.department_id:
+ raise ValidationError(_("Please Select department for employee"))
+
+ self.write({'state': 'waiting'})
+
+ # def action_select(self):
+ # for member in self.committe_members:
+ # if member.user_id.id == self.env.user.id and member.select == True:
+ # raise ValidationError(_('You have already select this Quotation'))
+ # self.requisition_id.actual_vote += 1
+ # return {
+ # 'type': 'ir.actions.act_window',
+ # 'name': 'Select Reason',
+ # 'res_model': 'select.reason',
+ # 'view_mode': 'form',
+ # 'target': 'new',
+ # 'context': {'default_request_id': self.id}
+ # }
+ def action_refuse(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Refuse Reason',
+ 'res_model': 'refuse.reason',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {'default_request_id': self.id}
+ }
+
+ def action_done(self):
+ self.write({'state': 'done'})
+
+ def action_draft(self):
+ self.write({'state': 'draft'})
+
+ def unlink(self):
+ for rec in self:
+ if rec.state != 'draft':
+ raise UserError(_("You cant delete record not in draft state!"))
+ res = super().unlink()
+ return res
+
+ def create_requisition(self):
+ self.is_requisition = True
+ if not self.employee_id.department_id:
+ raise ValidationError(_("Choose A Department For this Employee!"))
+ line_ids = []
+ for line in self.line_ids:
+ line_ids.append((0, 6, {
+ 'product_id': line.product_id.id,
+ 'department_id': line.request_id.department_id.id or False,
+ 'product_qty': line.qty,
+ 'name': line.product_id.name,
+ 'account_analytic_id': line.account_id.id,
+ }))
+ requisition_id = self.env['purchase.requisition'].sudo().create({
+ 'category_ids': self.product_category_ids.ids,
+ 'type_id_test': self.type_id.id,
+ 'department_id': self.employee_id.department_id.id,
+ 'type': self.type,
+ 'purpose': self.purchase_purpose,
+ 'request_id': self.id,
+ 'user_id': self.employee_id.user_id.id,
+ 'line_ids': line_ids
+ })
+ self.write({'purchase_create': True})
+
+ return {
+ 'name': "Request for Quotation",
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'purchase.requisition',
+ 'view_mode': 'form',
+ 'res_id': requisition_id.id,
+ }
+
+ def create_purchase_order2(self):
+ if not self.partner_id:
+ raise UserError(_("You must set a Vendor this PO"))
+ # if not self.partner_id :
+ # raise ValidationError("Please Insert ")
+ if self.use_analytic:
+ analytic_account = self.account_analytic_id.id
+ else:
+ analytic_account = self.department_id.analytic_account_id.id
+ line_ids = []
+ for line in self.line_ids:
+ line_ids.append((0, 6, {
+ 'product_id': line.product_id.id,
+ 'product_qty': line.qty,
+ 'name':line.description or line.product_id.name,
+ 'department_name': self.employee_id.department_id.id,
+ 'account_analytic_id': analytic_account,
+ 'date_planned': datetime.today(),
+ 'price_unit': 0,
+ }))
+
+ purchase_order = self.env['purchase.order'].sudo().create({
+ 'category_ids': self.product_category_ids.ids,
+ 'origin': self.name,
+ 'request_id': self.id,
+ 'partner_id': self.partner_id.id,
+ 'department_id': self.department_id.id,
+ 'purpose': self.purchase_purpose,
+ 'purchase_cost': 'product_line',
+ 'order_line': line_ids,
+
+ })
+ self.write({'purchase_create': True})
+
+ return {
+ 'name': "Purchase orders from employee",
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'purchase.order',
+ 'view_mode': 'form',
+ 'res_id': purchase_order.id}
+
+
+class PurchaseRequestLine(models.Model):
+ _name = 'purchase.request.line'
+ _description = 'purchase request line'
+
+ account_id = fields.Many2one(related='request_id.department_id.analytic_account_id', copy=False)
+ request_id = fields.Many2one(comodel_name='purchase.request', string='Request Ref.')
+ product_id = fields.Many2one(comodel_name='product.product', string='Item')
+ description=fields.Char("Description")
+ qty = fields.Integer(string='Qty')
+ uom_id = fields.Many2one(related='product_id.uom_id')
+
+
+ def _product_id_change(self):
+ if not self.product_id:
+ return
+
+ product_lang = self.product_id.with_context(
+ lang=get_lang(self.env, self.partner_id.lang).code,
+ partner_id=self.partner_id.id,
+ company_id=self.company_id.id)
+ self.name = self._get_product_purchase_description(product_lang)
+
+ @api.constrains('qty')
+ def qty_validation(self):
+ for rec in self:
+ if rec.qty <= 0:
+ raise ValidationError(_("Item Quantity MUST be at Least ONE!"))
+
+
+class Employee(models.Model):
+ _inherit = 'hr.employee'
+
+ def name_get(self):
+ get_all = self.env.context.get('get_all', False)
+ department = self.env.context.get('department', False)
+ domain = []
+ if department:
+ domain += [('department_id', '=', department)]
+ if get_all:
+ employees = self.env['hr.employee'].sudo().search(domain)
+ result = [(employee.id, employee.name) for employee in employees]
+ return result
+ else:
+ return super(Employee, self).name_get()
diff --git a/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py b/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py
new file mode 100644
index 000000000..9f75bd515
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/purchase_requisition_custom.py
@@ -0,0 +1,603 @@
+# -*- coding: utf-8 -*-
+from odoo.exceptions import UserError, ValidationError
+from odoo import api, fields, models, _
+
+
+class PurchaseRequisitionLineCustom(models.Model):
+ _inherit = 'purchase.requisition.line'
+
+ product_id = fields.Many2one('product.product', string='Product', domain=lambda self: [('purchase_ok', '=', True)],
+ required=True)
+ product_uom_id = fields.Many2one(related="product_id.uom_id")
+ name = fields.Char(string="Description")
+ department_id = fields.Many2one("hr.department")
+
+ @api.model
+ def create(self, vals):
+ new_id = super(PurchaseRequisitionLineCustom, self).create(vals)
+ return new_id
+
+
+class PurchaseRequisitionCustom(models.Model):
+ _inherit = 'purchase.requisition'
+
+ # committee type
+ committee_type_id = fields.Many2one('purchase.committee.type', string='Committee Type')
+ state_blanket_order = fields.Selection(
+ selection_add=[('purchase_manager', 'Purchase manager'), ('checked', 'Waiting Approval'),
+ ('committee', 'Committee'),
+ ('purchase_manager', 'Purchase manager'),
+ ('second_approve', 'Second Approval'),
+ ('legal_counsel', 'Legal Counsel'),
+ ('third_approve', 'Third Approval'),
+ ('accept', 'Accepted'),
+ ('open', 'Bid Selection'),
+ ('waiting', 'Waiting For Budget Confirmation'),
+ ('checked', 'Waiting Approval'),
+ ('done', 'Done'),
+ ('checked', 'Waiting Approval'),
+ ('approve', 'Approved'),
+ ('cancel', 'cancelled'),
+ ])
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('in_progress', 'Confirmed'),
+ ('committee', 'Committee'),
+ ('purchase_manager', 'Purchase manager'),
+ ('second_approve', 'Second Approval'),
+ ('legal_counsel', 'Legal Counsel'),
+ ('third_approve', 'Third Approval'),
+ ('accept', 'Accepted'),
+ ('open', 'Bid Selection'),
+ ('waiting', 'Waiting For Budget Confirmation'),
+ ('checked', 'Waiting Approval'),
+ ('done', 'Done'),
+ ('checked', 'Waiting Approval'),
+ ('approve', 'Approved'),
+ ('cancel', 'cancelled')])
+ type = fields.Selection([('project', 'Project'), ('operational', 'Operational')], default='operational')
+ project_id = fields.Many2one('project.project', string='Project')
+ sent_to_commitee = fields.Boolean('Is Sent to Commitee?', default=False)
+ ordering_date = fields.Date(default=fields.Datetime.now)
+ name = fields.Char(string='Agreement Reference', required=True, copy=False)
+ department_id = fields.Many2one('hr.department')
+ purpose = fields.Char()
+ category_ids = fields.Many2many('product.category', string='Categories')
+ account_analytic_id = fields.Many2one("account.analytic.account")
+ purchase_commitee = fields.Boolean('Purchase Commitee?')
+ committe_head = fields.Many2one('res.users', 'Committe Head')
+ committe_members = fields.Many2many('res.users', string='Purchase Committee')
+ min_approve = fields.Integer('No. of Selections')
+ min_vote = fields.Integer('No. of Vots')
+ actual_vote = fields.Integer('No. of Vots')
+ request_id = fields.Many2one('purchase.request', 'Request Ref.')
+ purchase_cost = fields.Selection(
+ [('department', 'Department'), ('default', 'Default Cost Center'), ('product_line', 'Product Line'),
+ ('project', 'Project')], string='Purchase Cost', default='department')
+ selected_purchase_id = fields.Many2one("purchase.order", compute="_compute_selected_purchase_order")
+ is_purchase_budget = fields.Boolean(string="Is Purchase Budget", compute='_compute_purchase_budget')
+ type_id_test = fields.Many2one('purchase.requisition.type', string="Agreement Type")
+ Project_name = fields.Char(string='Project name')
+ Chair_number = fields.Char(string='Chair number')
+ agreement_data = fields.Date(string="Agreement data")
+ city_name = fields.Char(string="City")
+ days_count = fields.Char(string='days_count', compute='_compute_days')
+ is_analytic = fields.Boolean("Use Analytic Account")
+ change_state_line = fields.One2many('change.purchase.user.state', 'requisition_id')
+ date_end = fields.Datetime(string='Agreement Deadline', tracking=True)
+ check_request = fields.Boolean(compute='check_request_field')
+ def check_request_field(self):
+ for rec in self:
+ if rec.request_id:
+ rec.check_request = True
+ else:
+ rec.check_request = False
+
+ # agreement_name = fields.Char()
+ # agreement_number = fields.Char()
+ # agreement_date = fields.Date()
+ # city = fields.Char()
+
+ @api.onchange('purchase_cost')
+ def _onchange_purchase_cost(self):
+ if self.purchase_cost:
+ if self.purchase_cost == 'project':
+ self.type = 'project'
+ else:
+ self.type = 'operational'
+
+ @api.onchange('type', 'project_id')
+ def _onchange_project_id(self):
+ if self.type != 'project':
+ self.project_id = False
+
+ def copy(self, default=None):
+ data = super(PurchaseRequisitionCustom, self).copy(default)
+ data.sent_to_commitee = False
+ data.published_in_portal = False
+ data.publish_in_portal = False
+ data.availability_period = 0
+ data.po_notification = False
+ data.state = 'draft'
+ return data
+
+ @api.onchange('purchase_cost', 'line_ids', 'department_id')
+ def on_project_type_department(self):
+ for line in self.line_ids:
+ if self.purchase_cost == 'project' and self.department_id:
+ line.department_id = self.department_id
+
+ @api.onchange('department_id', 'line_ids')
+ def change_department(self):
+ for line in self.line_ids:
+ if self.purchase_cost in ['project', 'department'] and self.department_id:
+ line.department_id = self.department_id
+
+ def _compute_purchase_budget(self):
+ purchase_budget = self.env.company.purchase_budget
+ for rec in self:
+ if purchase_budget:
+ rec.is_purchase_budget = True
+ else:
+ rec.is_purchase_budget = False
+
+ def action_skip_purchase_budget(self):
+ """ Skip purchase budget"""
+ purchase_orders = self.env['purchase.order'].search([('requisition_id', '=', self.id), ])
+ for po_id in purchase_orders:
+ # Deal with double validation process
+ valid_amount = self.env.user.company_id.currency_id.compute(po_id.company_id.po_double_validation_amount,
+ po_id.currency_id)
+ if po_id.company_id.po_double_validation == 'one_step' or (
+ po_id.company_id.po_double_validation == 'two_step' and po_id.amount_total > valid_amount):
+ po_id.write({'state': 'to approve'})
+ self.write({'state': 'checked'})
+ else:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+ po_id.write({'send_to_budget': False})
+ self.write({'state': 'approve'})
+
+ def _compute_days(self):
+ self.days_count = _("Unknown")
+ for rec in self:
+ if rec.schedule_date and rec.ordering_date:
+ schedule_date = fields.Date.from_string(rec.schedule_date)
+ ordering_date = fields.Date.from_string(rec.ordering_date)
+ diff_time = (schedule_date - ordering_date).days
+ rec.days_count = diff_time
+
+ def _compute_selected_purchase_order(self):
+ for pr in self:
+ if len(pr.purchase_ids) > 0:
+ orders = pr.purchase_ids.filtered(lambda po: po.state in ['purchase', 'sign', 'done'])
+ if len(orders) > 0:
+ pr.selected_purchase_id = orders[0]
+
+ @api.constrains('min_approve')
+ def min_approve_validation(self):
+ if self.purchase_commitee and self.min_approve == 0:
+ raise ValidationError(_("No. of Selections cannot be Zero"))
+
+ @api.constrains('min_approve', 'min_vote')
+ def check_min_vote_and_approve(self):
+ if self.min_approve > len(self.committe_members):
+ raise UserError(
+ _("Minimum approves cannot be greater than members count = " + str(len(self.committe_members))))
+ elif self.min_vote > len(self.committe_members):
+ raise UserError(
+ _("Minimum votes cannot be greater than members count = " + str(len(self.committe_members))))
+
+ @api.model
+ def get_seq_to_view(self):
+ sequence = self.env['ir.sequence'].search([('code', '=', self._name)])
+ return sequence.sequence.number_next_actual
+
+ @api.model
+ def create(self, vals):
+ vals['name'] = self.env['ir.sequence'].next_by_code('purchase.requisition.purchase.seq') or '/'
+ return super(PurchaseRequisitionCustom, self).create(vals)
+
+ def action_quotation(self):
+ """
+ this function is to create new purchase order from the purchase agreement
+ when pressing Quotation button in the workflow
+ """
+ return {
+ 'name': "Request for Quotation",
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'purchase.order',
+ 'view_mode': 'form,tree',
+ 'domain': [('requisition_id', '=', self.id)],
+ 'context': {
+ "default_requisition_id": self.id,
+ "default_department_name": self.department_id.id,
+ "default_category_ids": self.category_ids.ids,
+ "default_purpose": self.purpose,
+ "default_state": 'draft',
+ "default_send_to_budget": True,
+ "default_request_id": self.request_id.id if self.request_id else False},
+ }
+
+ def action_in_progress(self):
+ """
+ This Function validate the product quantity
+ """
+ super(PurchaseRequisitionCustom, self).action_in_progress()
+ for rec in self.line_ids:
+ if rec.product_qty <= 0:
+ raise ValidationError(_("Product Quantity Can't Be Zero or less"))
+ if self.purchase_commitee and len(self.committe_members) == 0:
+ raise ValidationError(_("Please add Committe Members"))
+
+ def action_approve(self):
+ purchase_orders = self.env['purchase.order'].search([('requisition_id', '=', self.id)])
+ po_order_approval = self.env.company.po_double_validation == 'two_step'
+ for po_id in purchase_orders:
+ # Deal with double validation process for first approve
+ valid_amount = self.env.user.company_id.currency_id.compute(po_id.company_id.po_double_validation_amount,
+ po_id.currency_id)
+ if po_order_approval:
+
+ if po_id.amount_total > valid_amount:
+ po_id.write({'state': 'to approve'})
+ self.write({'state': 'second_approve'})
+ else:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+ po_id.write({'send_to_budget': False})
+ self.write({'state': 'approve'})
+ else:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+ po_id.write({'send_to_budget': False})
+ self.write({'state': 'approve'})
+
+ def second_approval(self):
+ purchase_orders = self.env['purchase.order'].search([('requisition_id', '=', self.id)])
+ po_order_approval = self.env.company.po_double_validation == 'two_step'
+ for po_id in purchase_orders:
+ # Deal with double validation process for second_approve
+ valid_amount = self.env.user.company_id.currency_id.compute(po_id.company_id.second_approve,
+ po_id.currency_id)
+ if po_order_approval:
+ if po_id.amount_total > valid_amount:
+ po_id.write({'state': 'to approve'})
+ self.write({'state': 'third_approve'})
+ else:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+ po_id.write({'send_to_budget': False})
+ self.write({'state': 'approve'})
+ else:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+
+ po_id.write({'send_to_budget': False})
+ self.write({'state': 'approve'})
+
+ def third_approve(self):
+ purchase_orders = self.env['purchase.order'].search([('requisition_id', '=', self.id)])
+ for po_id in purchase_orders:
+ if po_id.email_to_vendor:
+ po_id.write({'state': 'sent'})
+ else:
+ po_id.write({'state': 'draft'})
+ po_id.write({'send_to_budget': False})
+ self.write({'state': 'approve'})
+
+ def set_line_account_and_dept(self, line):
+ department_id = self.department_id
+ analytic_account = False
+ if not self.is_analytic:
+ analytic_account = self.department_id.analytic_account_id
+ if not line.department_id:
+ line.update({'department_id': department_id.id or False})
+ line.update({'account_analytic_id': analytic_account.id or False})
+
+ def action_budget(self):
+ """
+ This function create budget confirmation and check if the RFQ created
+ and change the status of the document to the waiting
+ """
+ amount = 0
+ if self.order_count == 0:
+ raise ValidationError(_("Please create RFQ first"))
+ # Find all RFQs as sign
+ purchase_orders = self.env['purchase.order'].search([('requisition_id', '=', self.id), ('state', '=', 'sign')])
+ if len(purchase_orders) == 0:
+ raise ValidationError(_("Please Sign your RFQs first"))
+
+ if not self.purchase_cost:
+ raise ValidationError(_("No purchase cost for this agreement"))
+
+ budget_confirmation_obj = self.env['budget.confirmation']
+ date = fields.Date.from_string(self.ordering_date)
+ for order in purchase_orders:
+ move_lines = []
+ for rec in order.order_line:
+ analytic_account = rec.account_analytic_id
+
+ if not analytic_account:
+ raise ValidationError(
+ _("Please put cost center to the product line") + ': {}'.format(rec.product_id.name))
+
+ if not (
+ rec.product_id.property_account_expense_id.id and rec.product_id.property_account_expense_id.id or rec.product_id.categ_id.property_account_expense_categ_id.id):
+ raise ValidationError(_("This product has no expense account") + ': {}'.format(rec.product_id.name))
+
+ try:
+ budget_lines = analytic_account.crossovered_budget_line.filtered(
+ lambda x:
+ x.crossovered_budget_id.state == 'done' and
+ fields.Date.from_string(x.date_from) <= date <= fields.Date.from_string(x.date_to))
+ except Exception as e:
+ budget_lines = None
+ if budget_lines:
+ budget_line_id = budget_lines[0].id
+ remain = abs(budget_lines[0].remain)
+ amount = amount + rec.price_unit
+ new_balance = remain - rec.price_unit
+ move_lines.append((0, 0, {
+ 'amount': rec.price_subtotal,
+ 'analytic_account_id': analytic_account.id,
+ 'description': rec.product_id.name,
+ 'budget_line_id': budget_line_id,
+ 'remain': remain,
+ 'new_balance': new_balance,
+ 'account_id': rec.product_id.property_account_expense_id.id and rec.product_id.property_account_expense_id.id or rec.product_id.categ_id.property_account_expense_categ_id.id
+ }))
+
+ else:
+ raise ValidationError(
+ _(''' No budget for this service ''') + ': {} - {}'.format(rec.product_id.name,
+ analytic_account.name))
+
+ data = {
+ 'name': self.name,
+ 'date': self.ordering_date,
+ 'beneficiary_id': order.partner_id.id,
+ 'department_id': self.department_id.id,
+ 'type': 'purchase.order',
+ 'ref': self.name,
+ 'description': self.purpose,
+ 'total_amount': order.amount_untaxed,
+ 'lines_ids': move_lines,
+ 'po_id': order.id,
+ }
+ budget_id = budget_confirmation_obj.create(data)
+ # Order to wait
+ order.write({'state': 'waiting'})
+ # Send Notifications
+ subject = _('New Purchase Order')
+ message = _(
+ "New Budget Confirmation Has Been Created for Purchase Order %s to Beneficiary %s in total %s" % (
+ budget_id.name, budget_id.beneficiary_id.name, budget_id.total_amount))
+ group = 'purchase.group_purchase_manager'
+ author_id = self.env.user.partner_id.id or None
+ self.env.user.partner_id.send_notification_message(subject=subject, body=message, author_id=author_id,
+ group=group)
+
+ self.write({'state': 'waiting'})
+
+ def to_committee(self):
+ orders = self.env['purchase.order'].search([('requisition_id', '=', self.id)])
+ if not orders:
+ raise ValidationError(_("Enter Quotations First!"))
+
+ # Send Notifications
+ smart_link_agreement = '{}#{} '.format(
+ self.id, self.name, self.id)
+ for po in orders:
+ smart_link_po = '{}#{} '.format(po.id,
+ po.name,
+ po.id)
+ subject = _('New Purchase Order') + " - {}".format(po.name)
+ message = _("This is Purchase Agreements, see here") + " {} .".format(
+ smart_link_agreement) + "To evaluate this Purchase Order, please click here" + " {} .".format(
+ smart_link_po)
+ author_id = self.env.user.partner_id.id or None
+ for member in self.committe_members:
+ member.partner_id.send_notification_message(subject=subject, body=message, author_id=author_id)
+ self.write({'state': 'committee', 'sent_to_commitee': True})
+
+ def action_accept(self):
+ if self.purchase_cost == 'project':
+ if not self.project_id.analytic_account_id:
+ raise ValidationError(_("No analytic account for the project"))
+ for line in self.line_ids:
+ self.set_line_account_and_dept(line)
+ self.write({'state': 'accept'})
+
+ def action_done(self):
+ self.write({'state': 'done'})
+
+ @api.onchange('committe_head')
+ def on_change_com_head(self):
+ if self.committe_head and not self.committee_type_id:
+ self.committe_members = [self.committe_head.id]
+ if not self.committe_head:
+ self.committe_members = False
+
+ def unlink(self):
+ for rec in self:
+ if rec.state not in ('draft'):
+ raise ValidationError(_('Sorry! You Cannot Delete not Draft Document .'))
+ return super(PurchaseRequisitionCustom, self).unlink()
+
+ @api.onchange('committee_type_id')
+ def onchange_committee_type_id(self):
+ member_ids = self.committee_type_id.committe_members + self.committee_type_id.committe_head
+ head = self.committee_type_id.committe_head
+ self.committe_members = [(6, 0, member_ids.ids)]
+ self.committe_head = head.id
+
+ @api.constrains('committe_members')
+ def check_member_committe_members(self):
+ member_ids = self.committee_type_id.committe_members + self.committee_type_id.committe_head
+ member_ids = member_ids.mapped('id')
+ if self.purchase_commitee and len(self.committe_members) <= 0:
+ raise ValidationError(_('Sorry, No Committee members'))
+ if self.purchase_commitee and self.committee_type_id and len(self.committe_members) > len(member_ids):
+ raise ValidationError(_('Committee members does not match in numbers'))
+ if self.purchase_commitee and self.committee_type_id:
+ for rec in self.committe_members:
+ if rec.id not in member_ids:
+ raise ValidationError(_('This member is not belong to this committee:') + ' {} '.format(rec.name))
+
+
+class StockPickingCustom(models.Model):
+ _inherit = "stock.picking"
+
+ @api.model
+ def create(self, vals):
+ defaults = self.default_get(['name', 'picking_type_id'])
+ if vals.get('name', '/') == '/' and defaults.get('name', '/') == '/' and vals.get('picking_type_id',
+ defaults.get(
+ 'picking_type_id')):
+ vals['name'] = self.env['stock.picking.type'].browse(
+ vals.get('picking_type_id', defaults.get('picking_type_id'))).sequence_id.next_by_id()
+ # TDE FIXME: what ?
+ # As the on_change in one2many list is WIP, we will overwrite the locations on the stock moves here
+ # As it is a create the format will be a list of (0, 0, dict)
+ if vals.get('name') == 'mosabtest':
+ vals['name'] = self.env['stock.picking.type'].browse(
+ vals.get('picking_type_id', defaults.get('picking_type_id'))).sequence_id.next_by_id()
+ if vals.get('move_lines') and vals.get('location_id') and vals.get('location_dest_id'):
+ for move in vals['move_lines']:
+ if len(move) == 3 and move[0] == 0:
+ move[2]['location_id'] = vals['location_id']
+ move[2]['location_dest_id'] = vals['location_dest_id']
+ res = super(StockPickingCustom, self).create(vals)
+ res._autoconfirm_picking()
+ return res
+
+
+class CommitteeTypes(models.Model):
+ _name = 'purchase.committee.type'
+
+ name = fields.Char('Name')
+ committe_members = fields.Many2many('res.users', string='Committee Members')
+ committe_head = fields.Many2one('res.users', string='Committee Head')
+ type_cat = fields.Many2many('product.category', string='Product Category')
+
+
+class CommitteMembers(models.Model):
+ _name = "committe.member"
+ _description = "committe.member"
+
+ po_id = fields.Many2one('purchase.order')
+ req_id = fields.Many2one('purchase.request')
+ user_id = fields.Many2one('res.users', "Member Name")
+ selection_reason = fields.Char("Selection Reason")
+ select = fields.Boolean(string="Select")
+ refusing_reason = fields.Char("Refusing Reason")
+
+
+class SelectReason(models.TransientModel):
+ _name = "select.reason"
+ _description = "select.reason"
+
+ select_reason = fields.Text("select reason")
+ order_id = fields.Integer("order id")
+
+ def action_select(self):
+ self.env['committe.member'].create({
+ 'po_id': self.order_id,
+ 'user_id': self.env.user.id,
+ 'selection_reason': self.select_reason,
+ 'select': True})
+ order_id = self.env['purchase.order'].browse(self.order_id)
+ order_id.select = True
+
+
+class RefuseReason(models.TransientModel):
+ _name = "refuse.reason"
+ _description = "refuse.reason"
+
+ refuse_reason = fields.Text("refuse reason")
+ order_id = fields.Integer("order id")
+ request_id = fields.Integer("Request id")
+
+ def action_refuse(self):
+ if self.order_id:
+ order_id = self.env['purchase.order'].browse(self.order_id)
+ order_id.select = True
+ self.env['committe.member'].create({
+ 'po_id': self.order_id,
+ 'user_id': self.env.user.id,
+ 'refusing_reason': self.refuse_reason,
+ 'select': True})
+ elif self.request_id:
+ request_id = self.env['purchase.request'].search([('id', '=', self.request_id)])
+ request_id.select = True
+ self.env['committe.member'].create({
+ 'req_id': self.request_id,
+ 'user_id': self.env.user.id,
+ 'refusing_reason': self.refuse_reason,
+ 'select': True})
+ body = _(
+ "Purchase Request %s is Rejected By : %s With Reject Reason : %s" % (
+ str(request_id.name), str(self.env.user.name), str(self.refuse_reason)))
+
+ # Send Notifications
+ subject = _('Reject Purchase Request')
+ author_id = self.env.user.partner_id.id or None
+ self.create_uid.partner_id.send_notification_message(subject=subject, body=body, author_id=author_id)
+ request_id.message_post(body=body)
+ request_id.write({'state': 'refuse'})
+
+
+class RejectWizard(models.TransientModel):
+ _name = 'reject.wizard'
+ _description = 'reject.wizard'
+
+ origin = fields.Integer('')
+ reject_reason = fields.Text(string='Reject Reson')
+ origin_name = fields.Char('')
+
+ def action_reject(self):
+ origin_rec = self.env[self.origin_name].sudo().browse(self.origin)
+ if dict(self._fields).get('reject_reason') == None:
+ raise ValidationError(_('Sorry This object have no field named Selection Reasoon'))
+ else:
+ return origin_rec.with_context({'reject_reason': self.reject_reason}).cancel()
+
+
+class ChangePurchaseUserState(models.Model):
+ _name = 'change.purchase.user.state'
+
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('in_progress', 'Confirmed'),
+ ('committee', 'Committee'),
+ ('purchase_manager', 'Purchase manager'),
+ ('second_approve', 'Second Approval'),
+ ('legal_counsel', 'Legal Counsel'),
+ ('third_approve', 'Third Approval'),
+ ('finance approve', 'Financial Approval'),
+ ('cs approve', 'Common Services Approval'),
+ ('general supervisor', 'General Supervisor Approval'),
+ ('accept', 'Accepted'),
+ ('open', 'Bid Selection'),
+ ('waiting', 'Waiting For Budget Confirmation'),
+ ('checked', 'Waiting Approval'),
+ ('done', 'Done'),
+ ('quality', 'Quality'),
+ ('user_approve', 'User Approve'),
+ ('refuse', 'Refused'),
+ ('approve', 'Approved'),
+ ('cancel', 'cancelled'),
+ ],
+ )
+ requisition_id = fields.Many2one('purchase.requisition', "Requisition")
diff --git a/odex25_purchase/purchase_requisition_custom/models/res_company.py b/odex25_purchase/purchase_requisition_custom/models/res_company.py
new file mode 100644
index 000000000..5e4679ec6
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/res_company.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class Company(models.Model):
+ _inherit = 'res.company'
+
+ second_approve = fields.Integer(string='second approve')
+ purchase_budget = fields.Boolean(string='Purchase budget')
+ purchase_analytic_account = fields.Many2one('account.analytic.account')
+ # exceptional_amount = fields.Float(string='Exceptional Amount')
+ chief_executive_officer = fields.Float(string='Exceptional Amount')
+ direct_purchase = fields.Float(string='Direct Purchase Amount')
+ general_supervisor_id = fields.Many2one(string='General Supervisor',comodel_name='hr.employee')
+
diff --git a/odex25_purchase/purchase_requisition_custom/models/res_partner.py b/odex25_purchase/purchase_requisition_custom/models/res_partner.py
new file mode 100644
index 000000000..abcd42463
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/res_partner.py
@@ -0,0 +1,61 @@
+from datetime import datetime
+from datetime import timedelta
+
+from odoo import fields, models, _
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ documents_ids = fields.One2many("partner.document", "partner_id", string="Partner Documents")
+
+ def send_notification_message(self, subject, body, author_id=None, group=None):
+ """Send notification"""
+ if group:
+ partner_ids = self.env.ref(group).users.mapped('partner_id').ids
+ else:
+ partner_ids = [self.id]
+
+ if partner_ids:
+ try:
+ self.message_post(type="notification", subject=subject, body=body, author_id=author_id,
+ partner_ids=partner_ids,
+ subtype_xmlid="mail.mt_comment")
+ except Exception as e:
+ pass
+
+
+class PartnerDocuments(models.Model):
+ _name = 'partner.document'
+ _description = 'Partner Document'
+
+ partner_id = fields.Many2one('res.partner', 'Partner')
+
+ name = fields.Char(string='Name')
+ attachment = fields.Binary(string='Attachment')
+ type_id = fields.Many2one(string='Type',comodel_name='document.type',)
+ exp_date = fields.Date(string='Expiration Date')
+
+ def cron_document_experation(self):
+ date_now = (datetime.now() + timedelta(days=1)).date()
+ documents = self.search([])
+ for i in documents:
+ if i.exp_date:
+ exp_date = fields.Date.from_string(i.exp_date) - timedelta(days=30)
+ if date_now >= exp_date:
+ # Send Notifications
+ subject = _('Document Expiration') + '- {} / {}'.format(i.name, i.exp_date)
+ message = _('Hello, This is a notice about the end date of the document.') + '\n' + _(
+ 'Name of document: ') + '{}'.format(i.name) + '\n' + _('Expiration Date: ') + '{}'.format(
+ i.exp_date) + '\n' + _('Partner Name: ') + '{}'.format(i.partner_id.name)
+ group = 'purchase.group_purchase_manager'
+ author_id = None # i.create_uid.partner_id.id or None
+ i.partner_id.send_notification_message(subject=subject, body=message, author_id=author_id,
+ group=group)
+
+
+class DocumentType(models.Model):
+ _name = 'document.type'
+ _description = 'Partner Document Type'
+
+ name = fields.Char(string='Name', translate=True)
diff --git a/odex25_purchase/purchase_requisition_custom/models/res_settings.py b/odex25_purchase/purchase_requisition_custom/models/res_settings.py
new file mode 100644
index 000000000..87c106e9f
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/res_settings.py
@@ -0,0 +1,37 @@
+from odoo import fields, models
+
+
+class ResSetting(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+
+ chief_executive_officer = fields.Float(string='Chief Executive Officer', readonly=False, related="company_id.chief_executive_officer")
+ direct_purchase = fields.Float(string='Direct Purchase Amount', readonly=False, related="company_id.direct_purchase")
+ # exceptional_amount = fields.Float(string='Exceptional Amount', readonly=False, related="company_id.exceptional_amount")
+ second_approve = fields.Integer(string='second approve', related="company_id.second_approve", readonly=False)
+ purchase_budget = fields.Boolean(string='Purchase budget', related="company_id.purchase_budget", readonly=False)
+ purchase_analytic_account = fields.Many2one('account.analytic.account', related="company_id.purchase_analytic_account", readonly=False)
+
+
+
+class Company(models.Model):
+ _inherit = 'res.company'
+
+ second_approve = fields.Integer(string='second approve')
+ purchase_budget = fields.Boolean(string='Purchase budget')
+ purchase_analytic_account = fields.Many2one('account.analytic.account')
+ # exceptional_amount = fields.Float(string='Exceptional Amount')
+ chief_executive_officer = fields.Float(string='Exceptional Amount')
+ direct_purchase = fields.Float(string='Direct Purchase Amount')
+ general_supervisor_id = fields.Many2one(string='General Supervisor',comodel_name='hr.employee')
+
+
+
+
+
+
+class VendorTypes(models.Model):
+ _name = 'vendor.type'
+ _description = 'vendor.type'
+
+ name = fields.Char('Name',required=True)
diff --git a/odex25_purchase/purchase_requisition_custom/models/res_users.py b/odex25_purchase/purchase_requisition_custom/models/res_users.py
new file mode 100644
index 000000000..5c5ef9885
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/res_users.py
@@ -0,0 +1,22 @@
+
+from odoo import models, fields, api, _
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ def send_notification_message(self, subject, body, group=None):
+ """Send notification"""
+ if group:
+ partner_ids = self.env.ref(group).users.mapped('partner_id').ids
+ # partner_ids = self.env['res.partner'].search([('id', 'in', users)]).mapped('id')
+ else:
+ partner_ids = [self.id]
+
+ if partner_ids:
+ try:
+ self.message_post(type="notification", subject=subject, body=body, author_id=None,
+ partner_ids=partner_ids,
+ subtype_xmlid="mail.mt_comment")
+ except Exception as e:
+ pass
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/models/vendor_type.py b/odex25_purchase/purchase_requisition_custom/models/vendor_type.py
new file mode 100644
index 000000000..b4a8de7bc
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/models/vendor_type.py
@@ -0,0 +1,7 @@
+from odoo import api, fields, models
+
+class VendorTypes(models.Model):
+ _name = 'vendor.type'
+ _description = 'vendor.type'
+
+ name = fields.Char('Name',required=True)
diff --git a/odex25_purchase/purchase_requisition_custom/reports/committee_meeting_minutes_report.xml b/odex25_purchase/purchase_requisition_custom/reports/committee_meeting_minutes_report.xml
new file mode 100644
index 000000000..ecb27f265
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/reports/committee_meeting_minutes_report.xml
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
محضر لجنة المشتريات
+
+
+
+
+
+
+
+ تاريخ الإجتماع
+
+
+
+
+
+ رقم المحضر
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ الجهة الطالبة
+
+
+
+
+
+
+ صاحب الطلب
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نطاق العمل
+
+
+
+
+
+
+
+
+
+
+
+
+
+ التوصيات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ قرار اللجنة
+
+
+
+ أوافق
+
+
+
+ لا أوافق
+
+
+
+
+
+ المورد الموصي به
+
+
+
+
+
+
+
+
+ مدة التنفيذ
+
+
+
+
+
+
+
+
+
+ التكلفة المعتمدة
+
+
+
+
+
+
+
+
+
+
+
+
+ الإسم
+ المسمي الوظيفي
+ التوقيع
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/reports/external_layout.xml b/odex25_purchase/purchase_requisition_custom/reports/external_layout.xml
new file mode 100644
index 000000000..3be09fac8
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/reports/external_layout.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/security/category_groups.xml b/odex25_purchase/purchase_requisition_custom/security/category_groups.xml
new file mode 100644
index 000000000..779a5f9dd
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/security/category_groups.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+ Purchase Requisition
+ User access level for this module
+ 50
+
+
+
+ Purchase Request Permission Group
+ The Purchaser Request Application
+ 20
+
+
+
+ View Purchase Request
+
+
+
+
+
+
+ Confirm Purchase Requisition
+
+
+
+
+ Purchase set to Draft
+
+
+
+
+
+
+ Approve Purchase Requisition
+
+
+
+
+ Direct Manager
+
+
+
+
+
+ Quotation Purchase Requisition
+
+
+
+
+ Executive Director
+
+
+
+
+
+ Sign Purchase Order
+
+
+
+
+ UnSign Purchase Order
+
+
+
+
+ Cancel Purchase Requisition
+
+
+
+
+
+ Done Purchase Requisition
+
+
+
+
+ Purchase Committe Member
+
+
+
+
+
+ Send to the Committee
+
+
+
+
+
+ Skip Purchase Budget
+
+
+
+
+
+ Employee Purchase Request
+
+
+
+
+
+
+ Minimum Amount Approval
+
+
+
+
+ Maximum Amount Approval
+
+
+
+
+ Purchase Reports Menu
+
+
+
+
+
+ Product Category Manager
+
+
+
+
+
+ Accept Purchase Requisition
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/security/ir.model.access.csv b/odex25_purchase/purchase_requisition_custom/security/ir.model.access.csv
new file mode 100644
index 000000000..6b85b153d
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/security/ir.model.access.csv
@@ -0,0 +1,33 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_product_category,category_purchase_requisition_custom,product.model_product_category,group_category_product_manager,1,1,0,1
+committe_member_right4,Committe member access,purchase_requisition.model_purchase_requisition,purchase_requisition_custom.committe_member,1,1,0,0
+committe_member_right7,Committe member,purchase.model_account_move_line,purchase_requisition_custom.committe_member,1,1,0,0
+res_users_emp,res_users_emp,base.model_res_users,base.group_user,1,0,0,0
+wiz_refuse,purchase_wizard_refuse,model_purchase_request_cancel_wizard,base.group_user,1,1,1,1
+purchase_user_res_user,name,base.model_res_users,purchase.group_purchase_user,1,1,1,1
+hr_department_purchase,department,hr.model_hr_department,purchase.group_purchase_user,1,1,1,1
+partner_document_emp,partner_document_emp_access,purchase_requisition_custom.model_partner_document,base.group_user,1,1,1,1
+select_reason,select.reason,purchase_requisition_custom.model_select_reason,,1,1,1,1
+refuse_reason,refuse.reason,purchase_requisition_custom.model_refuse_reason,,1,1,1,1
+document_type,document.type,purchase_requisition_custom.model_document_type,,1,1,1,1
+reject_wizard,reject.wizard,purchase_requisition_custom.model_reject_wizard,,1,1,1,1
+access_vendor_type,vendor_type,purchase_requisition_custom.model_vendor_type,,1,1,1,1
+access_purchase_committee_type,committee type,purchase_requisition_custom.model_purchase_committee_type,,1,0,0,0
+access_purchase_requisition_type,Requisition Type,purchase_requisition.model_purchase_requisition_type,purchase_requisition_custom.committe_member,1,0,0,0
+access_requisition_line,Requisition line committe,purchase_requisition.model_purchase_requisition_line,purchase_requisition_custom.committe_member,1,0,0,0
+access_committe_member,Committe Member Rfq,purchase_requisition_custom.model_committe_member,purchase_requisition_custom.committe_member,1,1,1,0
+committe_member_right6,Committe member order,purchase.model_purchase_order_line,purchase_requisition_custom.committe_member,1,0,0,0
+purchase_request_emp,Purchase Employee,purchase_requisition_custom.model_purchase_request,purchase_requisition_custom.view_purchase_request,1,1,0,0
+purchase_request_create_purchase_request,Purchase Employee create_purchase_request,purchase_requisition_custom.model_purchase_request,purchase_requisition_custom.create_purchase_request,1,1,1,0
+purchase_request_line,purchase_request_line_access,purchase_requisition_custom.model_purchase_request_line,,1,1,1,1
+committe_member_purchase_user,committe_member_purchase_user,purchase_requisition_custom.model_committe_member,purchase.group_purchase_user,1,0,0,0
+committe_stock_move_user,committe_stock_move_user,stock.model_stock_move,purchase_requisition_custom.committe_member,1,0,0,0
+access_manager_purchase_committee_type,group_manager_purchase_committee_type,purchase_requisition_custom.model_purchase_committee_type,purchase.group_purchase_manager,1,1,1,1
+access_user_purchase_order_line,group_user_purchase_order_line create_purchase_request,purchase.model_purchase_order_line,purchase_requisition_custom.view_purchase_request,1,1,0,0
+create_purchase_request_purchase_order_line,group_user_purchase_order_line,purchase.model_purchase_order_line,purchase_requisition_custom.create_purchase_request,1,1,1,0
+committe_member_right5,Committe member,purchase.model_purchase_order,purchase_requisition_custom.committe_member,1,1,0,0
+change_purchase_user_state_purchase_user,change_purchase_user_state,purchase_requisition_custom.model_change_purchase_user_state,base.group_user,1,1,1,1
+model_convert_po_contract_wizard_user,model_convert_po_contract_wizard,purchase_requisition_custom.model_convert_po_contract_wizard,base.group_user,1,1,1,1
+purchase_request_create_purchase_request_stock,stock move create_purchase_request,stock.model_stock_move,purchase_requisition_custom.create_purchase_request,1,0,0,0
+
+committe_group_direct_manger,committe_group_direct_manger,model_committe_member,purchase_requisition_custom.group_direct_manger,1,1,1,1
diff --git a/odex25_purchase/purchase_requisition_custom/security/rules.xml b/odex25_purchase/purchase_requisition_custom/security/rules.xml
new file mode 100644
index 000000000..09af6e700
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/security/rules.xml
@@ -0,0 +1,87 @@
+
+
+
+
+ Committe Member Picking Type
+
+
+ [(1, '=', 1)]
+
+
+
+
+ Purchase Manager Employee
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+ Technical Manager
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+
+
+
+
+ Department Manager
+
+ [('department_id.manager_id.user_id','in', [user.id])]
+
+
+
+
+
+
+ User can only see his / her request
+
+
+
+
+
+
+ [('employee_id.user_id', '=', user.id)]
+
+
+
+
+ Member can only see his / her agreement
+
+
+ [('committe_members', 'in', user.id)]
+
+
+
+
+ Purchase User and Manager see all
+
+
+ [(1, '=', 1)]
+
+
+
+
+
+ Purchase Manager see all requests
+
+
+
+
+
+
+ [(1, '=', 1)]
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/static/description/icon.png b/odex25_purchase/purchase_requisition_custom/static/description/icon.png
new file mode 100644
index 000000000..4141f52da
Binary files /dev/null and b/odex25_purchase/purchase_requisition_custom/static/description/icon.png differ
diff --git a/odex25_purchase/purchase_requisition_custom/static/fonts/ae_AlMohanad.ttf b/odex25_purchase/purchase_requisition_custom/static/fonts/ae_AlMohanad.ttf
new file mode 100644
index 000000000..bdd7360e1
Binary files /dev/null and b/odex25_purchase/purchase_requisition_custom/static/fonts/ae_AlMohanad.ttf differ
diff --git a/odex25_purchase/purchase_requisition_custom/static/src/css/website_rtl.css b/odex25_purchase/purchase_requisition_custom/static/src/css/website_rtl.css
new file mode 100644
index 000000000..85347c670
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/static/src/css/website_rtl.css
@@ -0,0 +1,22 @@
+@media (min-width: 768px){
+ .rtl .navbar-right{
+ float: left !important;
+ }
+ .rtl .navbar-right .dropdown .dropdown-menu{
+ right: auto !important;
+ left: 0 !important;
+ }
+ .rtl .navbar-left{
+ float: right !important;
+ }
+ .rtl .navbar-left .dropdown .dropdown-menu{
+ left: auto !important;
+ right: 0 !important;
+ }
+ .navbar-nav.navbar-right:last-child{
+ margin-left: auto;
+ }
+ .rtl .pull-left{
+ float: right !important;
+ }
+}
diff --git a/odex25_purchase/purchase_requisition_custom/views/budget_confirmation.xml b/odex25_purchase/purchase_requisition_custom/views/budget_confirmation.xml
new file mode 100644
index 000000000..d979ee51e
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/budget_confirmation.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ expert.budget.confirmation.tree
+ budget.confirmation
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/views/product_category.xml b/odex25_purchase/purchase_requisition_custom/views/product_category.xml
new file mode 100644
index 000000000..2ec987f6a
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/product_category.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ view.product.category.form.extend
+ product.category
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/views/purchase_commitee.xml b/odex25_purchase/purchase_requisition_custom/views/purchase_commitee.xml
new file mode 100644
index 000000000..98aa92473
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/purchase_commitee.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+ purchase.committe.view.form
+ purchase.committee
+
+
+
+
+
+
+
+ Purchase Commite
+ purchase.committee
+
+
+
+
+
+
+
+
+
+
+
+ Purchase commitee
+ ir.actions.act_window
+ purchase.committee
+ tree,form
+
+
+ Create New Purchase committe
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/views/purchase_request.xml b/odex25_purchase/purchase_requisition_custom/views/purchase_request.xml
new file mode 100644
index 000000000..f152f32df
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/purchase_request.xml
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+ purchase.request.view.form
+ purchase.request
+
+
+
+
+
+
+
+ Purchase Request
+ purchase.request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Employee Request
+ ir.actions.act_window
+ purchase.request
+ tree,form
+
+
+ Create New Employee purchase request
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/views/purchase_requisition_custom.xml b/odex25_purchase/purchase_requisition_custom/views/purchase_requisition_custom.xml
new file mode 100644
index 000000000..afa6a1058
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/purchase_requisition_custom.xml
@@ -0,0 +1,632 @@
+
+
+
+
+
+
+
+
+ committe type list
+ purchase.committee.type
+
+
+
+
+
+
+
+
+
+ purchase.committee.type.view.form
+ purchase.committee.type
+
+
+
+
+
+
+ purchase committee type
+ ir.actions.act_window
+ purchase.committee.type
+ tree,form
+
+
+ Create Purchase Committee Type
+
+
+
+
+ Request for Quotation
+ ir.actions.act_window
+ purchase.order
+
+ form,tree
+ [('requisition_id','=',active_id)]
+ {"default_requisition_id":active_id}
+
+
+
+ purchase.order.tree.custom
+ purchase.order
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ purchase.order.form.custom
+ purchase.order
+
+
+
+
+
+
+
+
+
+
+ {'no_create': True, 'no_open': True}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ purchase.group_purchase_manager
+
+
+
+
+
+ purchase.group_purchase_manager
+
+
+ purchase.group_purchase_manager
+
+
+ purchase.group_purchase_manager
+
+
+
+
+ draft,to approve,sent,purchase,wait_for_send
+
+
+
+
+
+ {'readonly':[('state','in',('done','cancel','waiting'))]}
+
+
+ {'readonly':[('state','in',('done','cancel','waiting'))]}
+
+
+ {'readonly':[('state','in',('done','cancel','waiting'))]}
+
+
+
+ {'readonly':[('state','in',('waiting','done','cancel'))]}
+
+
+ {'readonly':[('state','in',('done','waiting','cancel'))]}
+
+
+
+ 1
+
+
+
+ 1
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {'readonly':[('state','in',('done','cancel','waiting'))]}
+
+
+ {'readonly':[('state','in',('done','cancel','waiting'))]}
+
+
+ {'readonly':[('state','in',('done','cancel','waiting'))]}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ purchase.requisition.form.custom
+ purchase.requisition
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+ {'invisible':[('state','in',('done','cancel'))]}
+
+
+
+
+
+
+
+
+
+ {'invisible':[('state','!=','cancel')]}
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {'readonly':[('state','in',('cancel','checked','done','waiting'))]}
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ {'readonly':['|',('category_ids','=',False),('state','in',('cancel','done','waiting','checked'))]}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ purchase.requisition.tree.custom
+ purchase.requisition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reject.wizard.wizard.view
+ reject.wizard
+ form
+
+
+
+
+
+ select.reason.wizard.view
+ select.reason
+ form
+
+
+
+
+
+
+
+ refuse.reason.wizard.view
+ refuse.reason
+ form
+
+
+
+
+
+
+ Purchase Committee
+ purchase.requisition
+ search,tree,form
+ [('state' , '=' , 'committee')]
+ {'create':False,'edit':False, 'delete': False, 'duplicate':False}
+
+
+
+
+ Vendors
+ ir.actions.act_window
+ res.partner
+
+ []
+ kanban,tree,form
+ {'search_default_supplier': 1,'default_customer': 0,'default_supplier': 1,
+ 'default_company_type': 'company'}
+
+
+
+
+ Click to add a contact in your address book.
+
+
+ Odoo helps you easily track all activities related to
+ a supplier: discussions, history of purchases,
+ documents, etc.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Contracts List
+ purchase.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Purchase Contracts
+ ir.actions.act_window
+ purchase.order
+ tree,kanban,form,pivot,graph,calendar
+ [('type' , '=' , 'contract'), ('state' , '=' , 'purchase')]
+ {
+ 'default_type': 'contract',
+ 'create': False,
+ 'edit': False,
+ 'delete': False,
+ 'duplicate': False,
+ 'tree_view_ref': 'purchase_requisition_custom.purchase_type_contract_tree',
+ }
+
+
+
+ Create New a Purchase Contract
+
+
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/views/res_setting.xml b/odex25_purchase/purchase_requisition_custom/views/res_setting.xml
new file mode 100644
index 000000000..2316cff51
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/res_setting.xml
@@ -0,0 +1,81 @@
+
+
+
+
+ model.name.inherit.view.form
+ res.config.settings
+
+
+
+
+
+
+
+
+
+ Budgeting
+
+
+
+
+
+
+ Purchase Budget
+
+
+
+
+
+
+
+
+
Purchase Costing
+
+
+
+
+ Set Default Analytic account For Purchase
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.inherit.view.form
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/views/vendor_type.xml b/odex25_purchase/purchase_requisition_custom/views/vendor_type.xml
new file mode 100644
index 000000000..bf1581ce1
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/views/vendor_type.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ res.company.form
+ res.company
+
+
+
+
+
+
+
+
+
+ Vendor Type
+ ir.actions.act_window
+ vendor.type
+ tree,form
+
+
+
+ create new type
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/wizards/__init__.py b/odex25_purchase/purchase_requisition_custom/wizards/__init__.py
new file mode 100644
index 000000000..14e0800b9
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/wizards/__init__.py
@@ -0,0 +1,2 @@
+from . import cancel_purchase_request
+from . import convert_to_contract
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/wizards/cancel_purchase_request.py b/odex25_purchase/purchase_requisition_custom/wizards/cancel_purchase_request.py
new file mode 100644
index 000000000..19657d238
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/wizards/cancel_purchase_request.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class PurcahseRefues(models.TransientModel):
+
+
+ _name = "purchase.request.cancel.wizard"
+ _description = "purchase refuse Reason wizard"
+
+ reason = fields.Text(string='Cancel Request Reason', required=True)
+ request_id = fields.Many2one('purchase.request')
+ user_id = fields.Many2one('res.users', string='Scheduler User', default=lambda self: self.env.user, required=True)
+
+ @api.model
+ def default_get(self, fields):
+ res = super(PurcahseRefues, self).default_get(fields)
+ active_ids = self.env.context.get('active_ids', [])
+
+ res.update({'request_id': active_ids[0] if active_ids else False})
+ return res
+
+ def request_cancel_reason(self):
+ self.ensure_one()
+ self.button_cancel()
+ self.request_id.write({'state':'refuse','cancel_reason':self.reason,'user_id':self.user_id.id})
+ return {'type': 'ir.actions.act_window_close'}
+
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/wizards/cancel_purchase_request.xml b/odex25_purchase/purchase_requisition_custom/wizards/cancel_purchase_request.xml
new file mode 100644
index 000000000..9409dd276
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/wizards/cancel_purchase_request.xml
@@ -0,0 +1,27 @@
+
+
+
+ purchase.request.cancel.wizard.form
+ purchase.request.cancel.wizard
+
+
+
+
+
+
+ Cancel Request Reason
+ purchase.request.cancel.wizard
+ form
+
+ new
+
+
diff --git a/odex25_purchase/purchase_requisition_custom/wizards/convert_to_contract.py b/odex25_purchase/purchase_requisition_custom/wizards/convert_to_contract.py
new file mode 100644
index 000000000..ef8fd2ada
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/wizards/convert_to_contract.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models, _
+from datetime import datetime, timedelta, date
+from dateutil.relativedelta import relativedelta
+from odoo.exceptions import UserError, ValidationError
+
+
+class ConvertPoContract(models.TransientModel):
+
+
+ _name = "convert.po.contract.wizard"
+ _description = "Convert Contract wizard"
+
+ purchase_id = fields.Many2one('purchase.order')
+ contract_name = fields.Char(string='Contract Name')
+ # New Added features on PO (related the cotract features)
+ auto_notification = fields.Boolean()
+ responsible_id = fields.Many2one('res.users')
+ notify_before = fields.Integer()
+ start_date = fields.Date()
+ end_date = fields.Date()
+ # cron_end_date = fields.Date(compute="get_cron_end_date",store=True)
+ period_type = fields.Selection(selection=[('day','Day(s)'),('week','Week(s)'),('month','Month(s)'),('year','Year(s)')])
+
+ @api.onchange('auto_notification')
+ def auto_notification_onchange(self):
+ if self.auto_notification is False:
+ self.notify_before = 0
+ self.period_type = ''
+
+ return {}
+
+ @api.constrains('end_date','start_date', 'auto_notification')
+ def start_notify_constrain(self):
+ for rec in self:
+ if rec.start_date and rec.end_date:
+ if rec.start_date >= rec.end_date:
+ raise ValidationError(_("Start Date Should Be Less Than End Date"))
+
+ if rec.auto_notification and rec.notify_before <1:
+ raise ValidationError(_("Notify Before End Should Be Greater Than Zero"))
+
+ # @api.depends('end_date','notify_before','period_type')
+ # def get_cron_end_date(self):
+ # for rec in self:
+ # if rec.end_date and rec.period_type:
+ # end = fields.Datetime.from_string(rec.end_date)
+ # type = self.period_type
+ # date_to = False
+ # if rec.period_type == 'day':
+ # date_to = (end + relativedelta(days=-rec.notify_before))
+ # elif rec.period_type == 'month':
+ # date_to = (end + relativedelta(months=-rec.notify_before))
+ # elif rec.period_type == 'week':
+ # date_to = (end + relativedelta(weeks=-rec.notify_before))
+ # elif rec.period_type == 'year':
+ # date_to = (end + relativedelta(years=-rec.notify_before))
+ # rec.cron_end_date = date_to
+
+ @api.model
+ def default_get(self, fields):
+ res = super(ConvertPoContract, self).default_get(fields)
+ purchase_id = self.env.context.get('purchase_id', False)
+
+ res.update({
+ 'purchase_id': purchase_id if purchase_id else False,
+ })
+ return res
+
+ def action_create_contract(self):
+ self.ensure_one()
+ self.purchase_id.write({
+ 'type':'contract',
+ 'contract_name':self.contract_name,
+
+ 'auto_notification':self.auto_notification,
+ 'responsible_id':self.responsible_id.id,
+ 'notify_before':self.notify_before,
+ 'start_date':self.start_date,
+ 'end_date':self.end_date,
+ 'period_type':self.period_type
+ })
+
+
+ return {'type': 'ir.actions.act_window_close'}
+
\ No newline at end of file
diff --git a/odex25_purchase/purchase_requisition_custom/wizards/convert_to_contract.xml b/odex25_purchase/purchase_requisition_custom/wizards/convert_to_contract.xml
new file mode 100644
index 000000000..cb4a2649d
--- /dev/null
+++ b/odex25_purchase/purchase_requisition_custom/wizards/convert_to_contract.xml
@@ -0,0 +1,41 @@
+
+
+
+ convert.po.contract.wizard.form
+ convert.po.contract.wizard
+
+
+
+
+
+
+
diff --git a/odex25_purchase/vendor_evaluation/__init__.py b/odex25_purchase/vendor_evaluation/__init__.py
new file mode 100644
index 000000000..3616b3002
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import models
+from . import wizard
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/__manifest__.py b/odex25_purchase/vendor_evaluation/__manifest__.py
new file mode 100644
index 000000000..43fb32f8b
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/__manifest__.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Vendor Evaluation",
+
+ 'summary': """
+ Evaluating vendors in purchase context""",
+
+ 'description': """
+ Long description of module's purpose
+ """,
+
+ 'author': "Expert Co Ltd",
+ 'website': "http://www.ex.com",
+ 'category': 'Odex25-Purchase/Odex25-Purchase',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['purchase','purchase_requisition_custom'],
+
+ # always loaded
+ 'data': [
+ 'security/res_groups.xml',
+ 'security/ir.model.access.csv',
+ 'views/evaluatioin_criteria_veiw.xml',
+ 'views/purchase_orde_view.xml',
+ 'views/vendor_evaluatoin_view.xml',
+ 'views/res_models_views.xml',
+ 'views/stock.xml',
+ 'views/account_invoice_view.xml',
+ 'views/reports.xml',
+ 'views/templates.xml'
+ ],
+ # only loaded in demonstration mode
+ 'demo': [
+
+ ],
+}
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/controllers/__init__.py b/odex25_purchase/vendor_evaluation/controllers/__init__.py
new file mode 100644
index 000000000..457bae27e
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/controllers/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/controllers/controllers.py b/odex25_purchase/vendor_evaluation/controllers/controllers.py
new file mode 100644
index 000000000..2fb198b81
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/controllers/controllers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from odoo import http
+
+# class VendorEvaluation(http.Controller):
+# @http.route('/vendor_evaluation/vendor_evaluation/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/vendor_evaluation/vendor_evaluation/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('vendor_evaluation.listing', {
+# 'root': '/vendor_evaluation/vendor_evaluation',
+# 'objects': http.request.env['vendor_evaluation.vendor_evaluation'].search([]),
+# })
+
+# @http.route('/vendor_evaluation/vendor_evaluation/objects//', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('vendor_evaluation.object', {
+# 'object': obj
+# })
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/demo/demo.xml b/odex25_purchase/vendor_evaluation/demo/demo.xml
new file mode 100644
index 000000000..f8596b5a3
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/demo/demo.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/i18n/ar_001.po b/odex25_purchase/vendor_evaluation/i18n/ar_001.po
new file mode 100644
index 000000000..ed5577e5a
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/i18n/ar_001.po
@@ -0,0 +1,556 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * vendor_evaluation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-10-25 12:04+0000\n"
+"PO-Revision-Date: 2022-10-25 12:04+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "0.0"
+msgstr "0.0"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "Final Evaluation | "
+msgstr "التقييم النهائي "
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,help:vendor_evaluation.cumulative_evaluation_actin
+#: model:ir.actions.act_window,help:vendor_evaluation.cumulative_evaluation_actin_account
+#: model:ir.actions.act_window,help:vendor_evaluation.cumulative_evaluation_actin_stock
+msgid "Create Cumulative Evaluation for a vendor"
+msgstr "إنشاء التقييم التراكمي للمورد"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_criteria_id
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_view_form
+msgid "Criteria"
+msgstr "المعيار"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_cumulative_eval
+msgid "Cumulative"
+msgstr "التقييم التراكمي"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_evaluation_id
+msgid "Cumulative Evaluation"
+msgstr "التقييم التراكمي"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_owner
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_inv_owner
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_owner
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_search
+msgid "Department"
+msgstr "القسم"
+
+#. module: vendor_evaluation
+msgid "Detaild"
+msgstr "تفصيلي"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_line_ids
+msgid "Details"
+msgstr "التفاصيل"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_report_vendor_evaluation_vendor_comparison_report_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.invoice_form_view
+#: model:ir.ui.view,arch_db:vendor_evaluation.purchase_inherit_view
+#: model:ir.ui.view,arch_db:vendor_evaluation.view_id
+msgid "Evaluate"
+msgstr "تقييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_evaluation_id
+msgid "Evaluatioin"
+msgstr "التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_partner_evaluation_ids
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_users_evaluation_ids
+msgid "Evaluation"
+msgstr "التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.evaluation_criteria_action
+#: model:ir.actions.act_window,name:vendor_evaluation.evaluation_criteria_action_account
+#: model:ir.actions.act_window,name:vendor_evaluation.evaluation_criteria_action_stock
+#: model:ir.ui.menu,name:vendor_evaluation.evaluation_criteria_menu
+#: model:ir.ui.menu,name:vendor_evaluation.evaluation_criteria_menu_account
+#: model:ir.ui.menu,name:vendor_evaluation.evaluation_criteria_menu_stock
+msgid "Evaluation Criteria"
+msgstr "معايير التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "Evaluation Details"
+msgstr "تفاصيل التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.actions.report,name:vendor_evaluation.action_report_model_name
+#: model:ir.actions.report,name:vendor_evaluation.action_vendor_compaarison_report
+msgid "Evaluation Report"
+msgstr "تقرير تقييم الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.cumulative_evaluation_view_form
+msgid "Evaluations"
+msgstr "التقييمات"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_partner_final_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_users_final_evaluation
+msgid "Final Evaluation"
+msgstr "التقييم النهائي"
+
+#. module: vendor_evaluation
+msgid "Finance"
+msgstr "المالية"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.finance_group
+msgid "Finance Evaluation"
+msgstr "قسم المالية"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_vendor_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_report_vendor_evaluation_vendor_comparison_report_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_inv_vendor_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_id
+msgid "ID"
+msgstr "المعرف"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_account_invoice
+msgid "Invoice"
+msgstr "الفاتورة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_last_eval
+msgid "Last Evaluation"
+msgstr "اخر تقييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_report_vendor_evaluation_vendor_comparison_report___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type___last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_line_ids
+msgid "Line"
+msgstr "التفاصيل"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "Print"
+msgstr "طباعة"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_search
+msgid "Purchase"
+msgstr "المشتريات"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.purchase_group
+msgid "Purchase Evaluation"
+msgstr "قسم المشتريات"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_purchase_order
+msgid "Purchase Order"
+msgstr "أمر شراء"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_res_id
+msgid "Res"
+msgstr "المصدر"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_evaluation_criteria
+msgid "Rvaluatioin Creiteria"
+msgstr "معيار التقييم"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/models/vendor_evaluation.py:115
+#, python-format
+msgid "Sorry Evaluation must be between 1 and 10"
+msgstr "عذرا !! اقصى تقييم ممكن 10"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/models/account_invoice.py:12
+#: code:addons/vendor_evaluation/models/purchase_order.py:12
+#: code:addons/vendor_evaluation/models/vendor_evaluation.py:70
+#, python-format
+msgid "Sorry There is No Criteria related to purchase Department to Evaluate This Vendor"
+msgstr "لايوجد معيار تابع لقسم المشتريات "
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/models/stock.py:11
+#, python-format
+msgid "Sorry There is No Criteria related to stock Department order to Evaluate This Vendor"
+msgstr "لايوجد معيار تابع لقسم المخازن "
+
+#. module: vendor_evaluation
+msgid "Stock"
+msgstr "المخازن"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.stock_group
+msgid "Stock Evaluation"
+msgstr "قسم المخازن"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:33
+#, python-format
+msgid "Submit Your Prices"
+msgstr "تأكيد الأسعار"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_stock_picking
+msgid "Transfer"
+msgstr "نقل"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_type
+msgid "Type"
+msgstr "النوع"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_value
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_value
+#: model:ir.ui.view,arch_db:vendor_evaluation.cumulative_evaluation_view_tree
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "Value"
+msgstr "القيمة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_vendor_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_vendor_ids
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_vendor_id
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_search
+msgid "Vendor"
+msgstr "المورد"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.vendor_comparison_action
+msgid "Vendor Comparison"
+msgstr "مقارنة الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.cumulative_evaluation_actin
+#: model:ir.actions.act_window,name:vendor_evaluation.cumulative_evaluation_actin_account
+#: model:ir.actions.act_window,name:vendor_evaluation.cumulative_evaluation_actin_stock
+#: model:ir.model,name:vendor_evaluation.model_cumulative_vendor_evaluation
+#: model:ir.module.category,name:vendor_evaluation.vendor_evaluation_ctegory
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_evaluation_main
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_evaluation_main_account
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_evaluation_main_stock
+msgid "Vendor Evaluation"
+msgstr "تقييم الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.vendor_types_action
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_vendor_type_id
+msgid "Vendor Type"
+msgstr "أنواع نشاط الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_type_menu
+msgid "Vendor Types"
+msgstr "أنواع نشاط الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_comparison_repport_menu
+msgid "Vendors Comparison"
+msgstr "مقارنة الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.menu,name:vendor_evaluation.cumulative_evaluation_menu
+#: model:ir.ui.menu,name:vendor_evaluation.cumulative_evaluation_menu_account
+#: model:ir.ui.menu,name:vendor_evaluation.cumulative_evaluation_menu_stock
+msgid "Vendors Evaluations"
+msgstr "تقييمات الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,help:vendor_evaluation.evaluation_criteria_action
+#: model:ir.actions.act_window,help:vendor_evaluation.evaluation_criteria_action_account
+#: model:ir.actions.act_window,help:vendor_evaluation.evaluation_criteria_action_stock
+#: model:ir.actions.act_window,help:vendor_evaluation.vendor_types_action
+msgid "create and edit Vendor Evaluation Criteria"
+msgstr "إنشاء وتحرير معايير التعييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_criteria_ids
+msgid "criteria"
+msgstr "المعيار"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:15
+#, python-format
+msgid "delivary date"
+msgstr "تاريخ التسليم"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_vendor_evaluation
+msgid "description"
+msgstr "الوصف"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.evaluation_criteria_view_form
+msgid "evaluation criteria"
+msgstr "معيير التفييم"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_evaluation_details
+msgid "evaluation.details"
+msgstr "تفاصيل التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "leave it empty to compare all"
+msgstr "اتركه فارغا لمقارنه الكل"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "of 10"
+msgstr "من 10"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "or"
+msgstr "أو"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:16
+#, python-format
+msgid "price"
+msgstr "السعر"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:13
+#, python-format
+msgid "product"
+msgstr "الصنف"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:12
+#, python-format
+msgid "product id"
+msgstr "الصنف"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:14
+#, python-format
+msgid "quantity"
+msgstr "الكمية"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_report_vendor_evaluation_vendor_comparison_report
+msgid "report.vendor_evaluation.vendor_comparison_report"
+msgstr "report.vendor_evaluation.vendor_comparison_report"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_vendor_comparison_wizard
+msgid "vendor.comparison.wizard"
+msgstr "vendor.comparison.wizard"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_vendor_type
+msgid "vendor.type"
+msgstr "vendor.type"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "إسم المورد"
+msgstr "إسم المورد"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "اخر تقييم"
+msgstr "اخر تقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "التاريخ"
+msgstr "التاريخ"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "التقييم"
+msgstr "التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "التقييم التراكمي"
+msgstr "التقييم التراكمي"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "الجهة المقيمة"
+msgstr "الجهة المقيمة"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "القسم:"
+msgstr "القسم:"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "المعيار"
+msgstr "المعيار"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "بواسطة"
+msgstr "بواسطة"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "تفاصيل التقييم"
+msgstr "تفاصيل التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "سجل التقييم للمورد"
+msgstr "سجل التقييم للمورد"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "متوسط التقييم"
+msgstr "متوسط التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "معيار التقييم:"
+msgstr "معيار التقييم:"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "نتيجة مفاضلة الموردين"
+msgstr "نتيجة مفاضلة الموردين"
+
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/wizard/vendor_comparison.py:44
+#, python-format
+msgid "purchase"
+msgstr "المشتريات"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/wizard/vendor_comparison.py:44
+#, python-format
+msgid "stock"
+msgstr "المخازن"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/wizard/vendor_comparison.py:44
+#, python-format
+msgid "account"
+msgstr "الحسابات"
+
+#. module: vendor_evaluation
+msgid "Cumulative"
+msgstr "إجمالي"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.main_vendor_evalution
+msgid "Evaluation"
+msgstr "التقييم"
+
diff --git a/odex25_purchase/vendor_evaluation/i18n/ar_SY.po b/odex25_purchase/vendor_evaluation/i18n/ar_SY.po
new file mode 100644
index 000000000..a45599f40
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/i18n/ar_SY.po
@@ -0,0 +1,554 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * vendor_evaluation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-04-29 11:16+0000\n"
+"PO-Revision-Date: 2021-04-29 11:16+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "0.0"
+msgstr "0.0"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "Final Evaluation | "
+msgstr "Final Evaluation | "
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,help:vendor_evaluation.cumulative_evaluation_actin
+#: model:ir.actions.act_window,help:vendor_evaluation.cumulative_evaluation_actin_account
+#: model:ir.actions.act_window,help:vendor_evaluation.cumulative_evaluation_actin_stock
+msgid "Create Cumulative Evaluation for a vendor"
+msgstr "Create Cumulative Evaluation for a vendor"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_create_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_create_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_criteria_id
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_view_form
+msgid "Criteria"
+msgstr "المعيار"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_cumulative_eval
+msgid "Cumulative"
+msgstr "التقييم التراكمي"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_evaluation_id
+msgid "Cumulative Evaluation"
+msgstr "التقييم التراكمي"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_owner
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_inv_owner
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_owner
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_search
+msgid "Department"
+msgstr "القسم"
+
+#. module: vendor_evaluation
+msgid "Detaild"
+msgstr "تفصيلي"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_line_ids
+msgid "Details"
+msgstr "التفاصيل"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_report_vendor_evaluation_vendor_comparison_report_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_display_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.invoice_form_view
+#: model:ir.ui.view,arch_db:vendor_evaluation.purchase_inherit_view
+#: model:ir.ui.view,arch_db:vendor_evaluation.view_id
+msgid "Evaluate"
+msgstr "تقييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_evaluation_id
+msgid "Evaluatioin"
+msgstr "التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_partner_evaluation_ids
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_users_evaluation_ids
+msgid "Evaluation"
+msgstr "التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.evaluation_criteria_action
+#: model:ir.actions.act_window,name:vendor_evaluation.evaluation_criteria_action_account
+#: model:ir.actions.act_window,name:vendor_evaluation.evaluation_criteria_action_stock
+#: model:ir.ui.menu,name:vendor_evaluation.evaluation_criteria_menu
+#: model:ir.ui.menu,name:vendor_evaluation.evaluation_criteria_menu_account
+#: model:ir.ui.menu,name:vendor_evaluation.evaluation_criteria_menu_stock
+msgid "Evaluation Criteria"
+msgstr "معايير التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "Evaluation Details"
+msgstr "تفاصيل التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.actions.report,name:vendor_evaluation.action_report_model_name
+#: model:ir.actions.report,name:vendor_evaluation.action_vendor_compaarison_report
+msgid "Evaluation Report"
+msgstr "تقرير تقييم الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.cumulative_evaluation_view_form
+msgid "Evaluations"
+msgstr "التقييمات"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_partner_final_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_res_users_final_evaluation
+msgid "Final Evaluation"
+msgstr "التقييم النهائي"
+
+#. module: vendor_evaluation
+msgid "Finance"
+msgstr "المالية"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.finance_group
+msgid "Finance Evaluation"
+msgstr "قسم المالية"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_vendor_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_report_vendor_evaluation_vendor_comparison_report_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_inv_vendor_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_id
+msgid "ID"
+msgstr "المعرف"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_account_invoice
+msgid "Invoice"
+msgstr "الفاتورة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_last_eval
+msgid "Last Evaluation"
+msgstr "اخر تقييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_report_vendor_evaluation_vendor_comparison_report___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation___last_update
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type___last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_write_uid
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_write_date
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_line_ids
+msgid "Line"
+msgstr "التفاصيل"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_name
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_type_name
+msgid "Name"
+msgstr "الاسم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "Print"
+msgstr "طباعة"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_search
+msgid "Purchase"
+msgstr "المشتريات"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.purchase_group
+msgid "Purchase Evaluation"
+msgstr "قسم المشتريات"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_purchase_order
+msgid "Purchase Order"
+msgstr "أمر شراء"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_res_id
+msgid "Res"
+msgstr "المصدر"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_evaluation_criteria
+msgid "Rvaluatioin Creiteria"
+msgstr "معيار التقييم"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/models/vendor_evaluation.py:115
+#, python-format
+msgid "Sorry Evaluation must be between 1 and 10"
+msgstr "عذرا !! اقصى تقييم ممكن 10"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/models/account_invoice.py:12
+#: code:addons/vendor_evaluation/models/purchase_order.py:12
+#: code:addons/vendor_evaluation/models/vendor_evaluation.py:70
+#, python-format
+msgid "Sorry There is No Criteria related to purchase Department to Evaluate This Vendor"
+msgstr "لايوجد معيار تابع لقسم المشتريات "
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/models/stock.py:11
+#, python-format
+msgid "Sorry There is No Criteria related to stock Department order to Evaluate This Vendor"
+msgstr "لايوجد معيار تابع لقسم المخازن "
+
+#. module: vendor_evaluation
+msgid "Stock"
+msgstr "المخازن"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.stock_group
+msgid "Stock Evaluation"
+msgstr "قسم المخازن"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:33
+#, python-format
+msgid "Submit Your Prices"
+msgstr "تأكيد الأسعار"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_stock_picking
+msgid "Transfer"
+msgstr "نقل"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_type
+msgid "Type"
+msgstr "النوع"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_evaluation_details_value
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_value
+#: model:ir.ui.view,arch_db:vendor_evaluation.cumulative_evaluation_view_tree
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "Value"
+msgstr "القيمة"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_cumulative_vendor_evaluation_vendor_id
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_vendor_ids
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_vendor_id
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_search
+msgid "Vendor"
+msgstr "المورد"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.vendor_comparison_action
+msgid "Vendor Comparison"
+msgstr "مقارنة الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.cumulative_evaluation_actin
+#: model:ir.actions.act_window,name:vendor_evaluation.cumulative_evaluation_actin_account
+#: model:ir.actions.act_window,name:vendor_evaluation.cumulative_evaluation_actin_stock
+#: model:ir.model,name:vendor_evaluation.model_cumulative_vendor_evaluation
+#: model:ir.module.category,name:vendor_evaluation.vendor_evaluation_ctegory
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_evaluation_main
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_evaluation_main_account
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_evaluation_main_stock
+msgid "Vendor Evaluation"
+msgstr "تقييم الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,name:vendor_evaluation.vendor_types_action
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_evaluation_vendor_type_id
+msgid "Vendor Type"
+msgstr "أنواع نشاط الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_type_menu
+msgid "Vendor Types"
+msgstr "أنواع نشاط الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.menu,name:vendor_evaluation.vendor_comparison_repport_menu
+msgid "Vendors Comparison"
+msgstr "مقارنة الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.ui.menu,name:vendor_evaluation.cumulative_evaluation_menu
+#: model:ir.ui.menu,name:vendor_evaluation.cumulative_evaluation_menu_account
+#: model:ir.ui.menu,name:vendor_evaluation.cumulative_evaluation_menu_stock
+msgid "Vendors Evaluations"
+msgstr "تقييمات الموردين"
+
+#. module: vendor_evaluation
+#: model:ir.actions.act_window,help:vendor_evaluation.evaluation_criteria_action
+#: model:ir.actions.act_window,help:vendor_evaluation.evaluation_criteria_action_account
+#: model:ir.actions.act_window,help:vendor_evaluation.evaluation_criteria_action_stock
+#: model:ir.actions.act_window,help:vendor_evaluation.vendor_types_action
+msgid "create and edit Vendor Evaluation Criteria"
+msgstr "إنشاء وتحرير معايير التعييم"
+
+#. module: vendor_evaluation
+#: model:ir.model.fields,field_description:vendor_evaluation.field_vendor_comparison_wizard_criteria_ids
+msgid "criteria"
+msgstr "المعيار"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:15
+#, python-format
+msgid "delivary date"
+msgstr "تاريخ التسليم"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_vendor_evaluation
+msgid "description"
+msgstr "الوصف"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.evaluation_criteria_view_form
+msgid "evaluation criteria"
+msgstr "معيير التفييم"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_evaluation_details
+msgid "evaluation.details"
+msgstr "تفاصيل التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "leave it empty to compare all"
+msgstr "اتركه فارغا لمقارنه الكل"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.res_partner_evaluation
+msgid "of 10"
+msgstr "من 10"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.model_name_view_form
+msgid "or"
+msgstr "أو"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:16
+#, python-format
+msgid "price"
+msgstr "السعر"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:13
+#, python-format
+msgid "product"
+msgstr "الصنف"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:12
+#, python-format
+msgid "product id"
+msgstr "الصنف"
+
+#. module: vendor_evaluation
+#. openerp-web
+#: code:addons/vendor_evaluation/static/src/xml/tender_templates.xml:14
+#, python-format
+msgid "quantity"
+msgstr "الكمية"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_report_vendor_evaluation_vendor_comparison_report
+msgid "report.vendor_evaluation.vendor_comparison_report"
+msgstr "report.vendor_evaluation.vendor_comparison_report"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_vendor_comparison_wizard
+msgid "vendor.comparison.wizard"
+msgstr "vendor.comparison.wizard"
+
+#. module: vendor_evaluation
+#: model:ir.model,name:vendor_evaluation.model_vendor_type
+msgid "vendor.type"
+msgstr "vendor.type"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "إسم المورد"
+msgstr "إسم المورد"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "اخر تقييم"
+msgstr "اخر تقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "التاريخ"
+msgstr "التاريخ"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "التقييم"
+msgstr "التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "التقييم التراكمي"
+msgstr "التقييم التراكمي"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "الجهة المقيمة"
+msgstr "الجهة المقيمة"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "القسم:"
+msgstr "القسم:"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "المعيار"
+msgstr "المعيار"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "بواسطة"
+msgstr "بواسطة"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "تفاصيل التقييم"
+msgstr "تفاصيل التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_evaluation_report
+msgid "سجل التقييم للمورد"
+msgstr "سجل التقييم للمورد"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "متوسط التقييم"
+msgstr "متوسط التقييم"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "معيار التقييم:"
+msgstr "معيار التقييم:"
+
+#. module: vendor_evaluation
+#: model:ir.ui.view,arch_db:vendor_evaluation.vendor_comparison_report
+msgid "نتيجة مفاضلة الموردين"
+msgstr "نتيجة مفاضلة الموردين"
+
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/wizard/vendor_comparison.py:44
+#, python-format
+msgid "purchase"
+msgstr "المشتريات"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/wizard/vendor_comparison.py:44
+#, python-format
+msgid "stock"
+msgstr "المخازن"
+
+#. module: vendor_evaluation
+#: code:addons/vendor_evaluation/wizard/vendor_comparison.py:44
+#, python-format
+msgid "account"
+msgstr "الحسابات"
+
+#. module: vendor_evaluation
+msgid "Cumulative"
+msgstr "إجمالي"
+
+#. module: vendor_evaluation
+#: model:res.groups,name:vendor_evaluation.main_vendor_evalution
+msgid "Evaluation"
+msgstr "التقييم"
+
diff --git a/odex25_purchase/vendor_evaluation/models/__init__.py b/odex25_purchase/vendor_evaluation/models/__init__.py
new file mode 100644
index 000000000..4d56c13d3
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/__init__.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from . import evaluation_criteria
+from . import vendor_evaluation
+from . import purchase_order
+from . import res_models
+from . import stock
+from . import account_invoice
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/models/account_invoice.py b/odex25_purchase/vendor_evaluation/models/account_invoice.py
new file mode 100644
index 000000000..7191f00da
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/account_invoice.py
@@ -0,0 +1,37 @@
+from odoo import models, fields, api,_ , exceptions
+
+
+class CustomPurchaseOrder(models.Model):
+ _inherit = 'account.move'
+
+
+ def action_vendor_eval(self):
+ criteria = []
+ criteria_ids = self.env['evaluation.criteria'].search([('owner' , '=' , 'account')]).ids
+ if len(criteria_ids) == 0:
+ raise exceptions.ValidationError(_("Sorry There is No Criteria related to purchase Department to Evaluate This Vendor"))
+ for criteria_id in criteria_ids:
+ criteria.append((0,0,{'criteria_id' : criteria_id}))
+ evaluation = self.env['vendor.evaluation'].search([('res_id' , '=', self.id),('owner' , '=' , 'account' )])
+ if not evaluation:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Vendor Evaluation',
+ 'res_model': 'vendor.evaluation',
+
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context' : {'default_res_id' : self.id,'default_line_ids' : criteria , 'default_owner' : 'account' , 'default_vendor_id' : self.partner_id.id }
+ }
+ else:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Vendor Evaluation',
+ 'res_model': 'vendor.evaluation',
+
+ 'view_mode': 'form',
+ 'res_id' : evaluation.id,
+ 'target': 'new',
+ }
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/models/evaluation_criteria.py b/odex25_purchase/vendor_evaluation/models/evaluation_criteria.py
new file mode 100644
index 000000000..9f9f25b5a
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/evaluation_criteria.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api
+
+class EvaluationCriteria(models.Model):
+ _name = 'evaluation.criteria'
+ _description = 'Rvaluatioin Creiteria'
+
+ active = fields.Boolean(string='active',default=True)
+ vendor_type = fields.Many2one(comodel_name='vendor.type', string='Vendor Type')
+ name = fields.Char(string='Name')
+ owner = fields.Selection([
+ ('account', 'Finance'),
+ ('purchase' , 'Purchase'),
+ ('stock' , 'Stock'),
+ ], string='Owner')
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ res_ids = super(EvaluationCriteria, self).create(vals_list)
+ return res_ids
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/models/purchase_order.py b/odex25_purchase/vendor_evaluation/models/purchase_order.py
new file mode 100644
index 000000000..959de017c
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/purchase_order.py
@@ -0,0 +1,37 @@
+from odoo import models, fields, api,_ , exceptions
+
+
+class CustomPurchaseOrder(models.Model):
+ _inherit = 'purchase.order'
+
+
+ def action_vendor_eval(self):
+ criteria = []
+ criteria_ids = self.env['evaluation.criteria'].search([('owner' , '=' , 'purchase')]).ids
+ if len(criteria_ids) == 0:
+ raise exceptions.ValidationError(_("Sorry There is No Criteria related to purchase Department to Evaluate This Vendor"))
+ for criteria_id in criteria_ids:
+ criteria.append((0,0,{'criteria_id' : criteria_id}))
+ evaluation = self.env['vendor.evaluation'].search([('res_id' , '=', self.id)])
+ if not evaluation:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Vendor Evaluation',
+ 'res_model': 'vendor.evaluation',
+
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context' : {'default_res_id' : self.id,'default_line_ids' : criteria , 'default_owner' : 'purchase' , 'default_vendor_id' : self.partner_id.id }
+ }
+ else:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Vendor Evaluation',
+ 'res_model': 'vendor.evaluation',
+
+ 'view_mode': 'form',
+ 'res_id' : evaluation.id,
+ 'target': 'new',
+ }
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/models/res_models.py b/odex25_purchase/vendor_evaluation/models/res_models.py
new file mode 100644
index 000000000..5543b2444
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/res_models.py
@@ -0,0 +1,30 @@
+from odoo import models, fields, api,_
+from datetime import datetime
+from odoo.exceptions import ValidationError
+
+from odoo import api, fields, models
+
+
+class CustomResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ final_evaluation = fields.Float(string='Final Evaluation',compute="_value_compute")
+ evaluation_ids = fields.One2many(comodel_name='cumulative.vendor.evaluation', inverse_name='vendor_id', string='')
+
+
+ @api.depends('evaluation_ids.cumulative_eval')
+ def _value_compute(self):
+ sum = 0
+ for rec in self:
+ for line in rec.evaluation_ids:
+ sum += line.cumulative_eval
+ if len(rec.evaluation_ids) > 0:
+ rec.final_evaluation = sum /len(rec.evaluation_ids)
+ else:
+ rec.final_evaluation = 0
+ sum = 0
+
+
+
+
+
diff --git a/odex25_purchase/vendor_evaluation/models/stock.py b/odex25_purchase/vendor_evaluation/models/stock.py
new file mode 100644
index 000000000..bced5c48f
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/stock.py
@@ -0,0 +1,37 @@
+from odoo import models, fields, api,_,exceptions
+
+class CustomPurchaseOrder(models.Model):
+ _inherit = 'stock.picking'
+
+
+ def action_vendor_eval(self):
+ criteria = []
+ criteria_ids = self.env['evaluation.criteria'].search([('owner' , '=' , 'stock')]).ids
+ if len(criteria_ids) == 0:
+ raise exceptions.ValidationError(_("Sorry There is No Criteria related to stock Department order to Evaluate This Vendor"))
+
+ for criteria_id in criteria_ids:
+ criteria.append((0,0,{'criteria_id' : criteria_id}))
+ evaluation = self.env['vendor.evaluation'].search([('res_id' , '=', self.id)])
+ if not evaluation:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Vendor Evaluation',
+ 'res_model': 'vendor.evaluation',
+
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context' : {'default_res_id' : self.id,'default_line_ids' : criteria , 'default_owner' : 'stock' , 'default_vendor_id' : self.partner_id.id }
+ }
+ else:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Vendor Evaluation',
+ 'res_model': 'vendor.evaluation',
+
+ 'view_mode': 'form',
+ 'res_id' : evaluation.id,
+ 'target': 'new',
+ }
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/models/vendor_evaluation.py b/odex25_purchase/vendor_evaluation/models/vendor_evaluation.py
new file mode 100644
index 000000000..cf33cfbf4
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/models/vendor_evaluation.py
@@ -0,0 +1,137 @@
+from odoo import models, fields, api,_ , exceptions
+from datetime import datetime
+from odoo.exceptions import ValidationError
+
+class CumulativeVendorEvaluation(models.Model):
+ _name = 'cumulative.vendor.evaluation'
+ _description = 'Vendor Evaluation'
+
+ vendor_id = fields.Many2one(comodel_name='res.partner', string='Vendor')
+ name = fields.Char(related="vendor_id.name")
+ cumulative_eval = fields.Float(string='Cumulative',compute="_value_compute")
+ last_eval = fields.Float('Last Evaluation')
+ owner = fields.Selection([
+ ('account', 'Finance'),
+ ('purchase' , 'Purchase'),
+ ('stock' , 'Stock'),
+ ], string='Department')
+ line_ids = fields.One2many(comodel_name='vendor.evaluation', inverse_name='evaluation_id', string='')
+
+
+ @api.depends('line_ids.value')
+ def _value_compute(self):
+ sum = 0
+ last_eval = 0
+ for rec in self:
+ for line in rec.line_ids:
+ sum += line.value
+ last_eval = line.value
+ if len(rec.line_ids) > 0:
+ rec.cumulative_eval = sum /len(rec.line_ids)
+ else:
+ rec.cumulative_eval = 0
+ rec.write({
+ 'last_eval' : last_eval
+ })
+ sum = 0
+
+
+class VendoeEvaluation(models.Model):
+ _name = 'vendor.evaluation'
+ _description = 'description'
+
+
+ evaluation_id = fields.Many2one(comodel_name='cumulative.vendor.evaluation', string='Cumulative Evaluation')
+ vendor_id = fields.Many2one(comodel_name='res.partner', string='Vendor')
+ inv_vendor_id = fields.Integer(related='vendor_id.id')
+ owner = fields.Selection([
+ ('account', 'Finance'),
+ ('purchase' , 'Purchase'),
+ ('stock' , 'Stock'),
+ ], string='Department' )
+ inv_owner = fields.Selection([
+ ('account', 'Finance'),
+ ('purchase' , 'Purchase'),
+ ('stock' , 'Stock'),
+ ], related='owner')
+ value = fields.Float(string='Value',compute="_value_compute")
+ date = fields.Date(string='Date' ,default=datetime.today())
+ line_ids = fields.One2many(comodel_name='evaluation.details', inverse_name='evaluation_id', string='Details')
+ res_id = fields.Integer(string='')
+ vendor_type_id = fields.Many2one(comodel_name='vendor.type', string='Vendor Type')
+
+ @api.onchange('vendor_type_id')
+ def _onchange_vendor_type(self):
+ if self.vendor_type_id:
+ self.line_ids = False
+ criteria = []
+ criteria_ids = self.env['evaluation.criteria'].search([('owner' , '=' , self.owner),('vendor_type' , '=' , self.vendor_type_id.id)]).ids
+ if len(criteria_ids) == 0:
+ raise exceptions.ValidationError(_("Sorry There is No Criteria related to purchase Department to Evaluate This Vendor"))
+ for criteria_id in criteria_ids:
+ criteria.append((0,0,{'criteria_id' : criteria_id}))
+ self.line_ids = criteria
+ @api.model
+ def create(self, vals):
+ vendor_id = vals['inv_vendor_id']
+ owner = vals['inv_owner']
+ vendor_type_id = vals['vendor_type_id']
+ cumulative_evaluation = self.env['cumulative.vendor.evaluation'].search([('owner' , '=' , owner) , ('vendor_id' , '=' , vendor_id)])
+ if not cumulative_evaluation:
+ cumulative_evaluation = self.env['cumulative.vendor.evaluation'].create({
+ 'owner' : owner,
+ 'vendor_id' : vendor_id,
+ 'line_ids' : False
+
+ })
+ vals['evaluation_id'] = cumulative_evaluation.id
+ return super(VendoeEvaluation, self).create(vals)
+
+
+
+ @api.depends('line_ids.value')
+ def _value_compute(self):
+ sum = 0
+ for rec in self:
+ for line in rec.line_ids:
+ sum += line.value
+ if len(rec.line_ids) > 0:
+ rec.value = sum /len(rec.line_ids)
+ else:
+ rec.value = 0
+ sum = 0
+
+class EvaluatioinDetails(models.Model):
+ _name = 'evaluation.details'
+ _description = 'evaluation.details'
+
+ evaluation_id = fields.Many2one(comodel_name='vendor.evaluation', string='Evaluatioin')
+ criteria_id = fields.Many2one(comodel_name='evaluation.criteria', string='Criteria')
+ value = fields.Float(string='Value',default=0.0)
+ vendor_id = fields.Integer(related="evaluation_id.vendor_id.id",store=True)
+
+ @api.constrains('value')
+ def _constrains_value(self):
+ for rec in self:
+ if rec.value < 0 or rec.value > 10:
+ raise ValidationError(_("Sorry Evaluation must be between 1 and 10"))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/security/ir.model.access.csv b/odex25_purchase/vendor_evaluation/security/ir.model.access.csv
new file mode 100644
index 000000000..2ff71abe8
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/security/ir.model.access.csv
@@ -0,0 +1,14 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+purchase_group_cumulative,purchase_group_cumulative,model_cumulative_vendor_evaluation,purchase_group,1,1,1,1
+purchase_group_evaluation,purchase_group_evaluation,model_vendor_evaluation,purchase_group,1,1,1,1
+purchase_group_evaluation_details,purchase_group_evaluation_details,model_evaluation_details,purchase_group,1,1,1,1
+purchase_group_evaluation_criteria,purchase_group_evaluation_criteria,model_evaluation_criteria,purchase_group,1,1,1,1
+stock_group_cumulative,stock_group_cumulative,model_cumulative_vendor_evaluation,stock_group,1,1,1,1
+stock_group_evaluation,purchase_group_evaluation,model_vendor_evaluation,stock_group,1,1,1,1
+stock_group_evaluation_details,purchase_group_evaluation_details,model_evaluation_details,stock_group,1,1,1,1
+stock_group_evaluation_criteria,purchase_group_evaluation_criteria,model_evaluation_criteria,stock_group,1,1,1,1
+finance_group_cumulative,purchase_group_cumulative,model_cumulative_vendor_evaluation,finance_group,1,1,1,1
+finance_group_evaluation,purchase_group_evaluation,model_vendor_evaluation,finance_group,1,1,1,1
+finance_group_evaluation_details,purchase_group_evaluation_details,model_evaluation_details,finance_group,1,1,1,1
+finance_group_evaluation_criteria,purchase_group_evaluation_criteria,model_evaluation_criteria,finance_group,1,1,1,1
+access_vendor_comparison_wizard,access_vendor_comparison_wizard,model_vendor_comparison_wizard,,1,1,1,1
diff --git a/odex25_purchase/vendor_evaluation/security/res_groups.xml b/odex25_purchase/vendor_evaluation/security/res_groups.xml
new file mode 100644
index 000000000..358f6a197
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/security/res_groups.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ Vendor Evaluation
+
+
+
+ Evaluation
+
+
+
+
+ Purchase Evaluation
+
+
+
+
+ Stock Evaluation
+
+
+
+
+ Finance Evaluation
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/static/description/icon.png b/odex25_purchase/vendor_evaluation/static/description/icon.png
new file mode 100644
index 000000000..a48b24bdb
Binary files /dev/null and b/odex25_purchase/vendor_evaluation/static/description/icon.png differ
diff --git a/odex25_purchase/vendor_evaluation/static/src/css/loginpage.css b/odex25_purchase/vendor_evaluation/static/src/css/loginpage.css
new file mode 100644
index 000000000..d24cf4089
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/static/src/css/loginpage.css
@@ -0,0 +1,16 @@
+
+@charset "UTF-8";
+
+main .oe_website_login_container {
+
+ vertical-align: middle;
+ padding: 40px 65px 0px;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ float: none;
+ background-color: #FFF;
+ box-shadow: 0.33px 3px 12px rgba(0, 0, 0, 0.3);
+ width: 400px;
+ margin: 40px auto;
+ }
+}
diff --git a/odex25_purchase/vendor_evaluation/static/src/js/online_tender.js b/odex25_purchase/vendor_evaluation/static/src/js/online_tender.js
new file mode 100644
index 000000000..dc473dd4d
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/static/src/js/online_tender.js
@@ -0,0 +1,31 @@
+odoo.define('online_tendering.online_tender', function (require) {
+ "use strict";
+ require('web.dom_ready');
+ var core = require('web.core');
+ var ajax = require('web.ajax');
+ var QWeb = core.qweb;
+ $('.subtotal').text("0");
+ $('.untax_total').text("0");
+ $('.tax_total').text("0");
+ $('.price').change(function(event){
+ $('.untax_total').text("0");
+ $('.tax_total').text("0");
+ var subtotal = 0;
+ var parent_tr = $(event.currentTarget).parent().parent();
+ var old_subtotal = parseInt(parent_tr.children(".subtotal").text())
+ subtotal = event.currentTarget.value * parseInt(parent_tr.children(".qty").text())
+ var untax_total = Math.abs(parseInt($('.untax_total').text()) - old_subtotal + subtotal)
+ $('.untax_total').text(untax_total)
+ var tax_total = untax_total + (untax_total * parseInt($('#tax').text())/100)
+ parent_tr.children(".subtotal").text(subtotal)
+ $('.tax_total').text(tax_total)
+ });
+
+ $('#tax').change(function(event){
+ var untax_total = parseInt($('.untax_total').text())
+ var tax_total = untax_total + untax_total * parseInt($(event.currentTarget).text())/100
+ $('.tax_total').text(tax_total)
+ })
+
+
+});
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/static/src/xml/tender_templates.xml b/odex25_purchase/vendor_evaluation/static/src/xml/tender_templates.xml
new file mode 100644
index 000000000..817dc36dd
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/static/src/xml/tender_templates.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/odex25_purchase/vendor_evaluation/views/account_invoice_view.xml b/odex25_purchase/vendor_evaluation/views/account_invoice_view.xml
new file mode 100644
index 000000000..f506f3fbe
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/account_invoice_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ account.move.inherit.view.form
+ account.move
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/evaluatioin_criteria_veiw.xml b/odex25_purchase/vendor_evaluation/views/evaluatioin_criteria_veiw.xml
new file mode 100644
index 000000000..ff3017d8a
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/evaluatioin_criteria_veiw.xml
@@ -0,0 +1,137 @@
+
+
+
+
+
+ evaluation.criteria.view.form
+ evaluation.criteria
+
+
+
+
+
+
+
+ evaluation.criteria.view.tree
+ evaluation.criteria
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Evaluation Criteria
+ ir.actions.act_window
+ evaluation.criteria
+ tree,form
+ {'default_owner' : 'purchase'}
+
+
+ create and edit Vendor Evaluation Criteria
+
+
+
+
+
+
+
+
+
+
+
+
+ Evaluation Criteria
+ ir.actions.act_window
+ evaluation.criteria
+ tree,form
+
+ {'default_owner' : 'stock'}
+ [('owner' , '=' , 'stock')]
+
+
+ create and edit Vendor Evaluation Criteria
+
+
+
+
+
+
+
+
+
+
+
+
+ Evaluation Criteria
+ ir.actions.act_window
+ evaluation.criteria
+ tree,form
+
+ {'default_owner' : 'account'}
+ [('owner' , '=' , 'account')]
+
+
+ create and edit Vendor Evaluation Criteria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/purchase_orde_view.xml b/odex25_purchase/vendor_evaluation/views/purchase_orde_view.xml
new file mode 100644
index 000000000..dd7bdd879
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/purchase_orde_view.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ purchase.order.inherit.view.form
+ purchase.order
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/reports.xml b/odex25_purchase/vendor_evaluation/views/reports.xml
new file mode 100644
index 000000000..26f802901
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/reports.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/res_models_views.xml b/odex25_purchase/vendor_evaluation/views/res_models_views.xml
new file mode 100644
index 000000000..f40cfe1f9
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/res_models_views.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ Res partner Vendor Evaluation
+ res.partner
+
+
+
+
+
+ Final Evaluation |
+ of 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/stock.xml b/odex25_purchase/vendor_evaluation/views/stock.xml
new file mode 100644
index 000000000..0d8d51492
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/stock.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ stock.picking.inherit.view.form
+ stock.picking
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/templates.xml b/odex25_purchase/vendor_evaluation/views/templates.xml
new file mode 100644
index 000000000..afe0599b9
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/templates.xml
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
+ سجل التقييم للمورد
+
+
+
+
+
+ إسم المورد
+
+
+
+
+
+
+
+ الجهة المقيمة
+
+
+
+
+
+
+
+
+
+ اخر تقييم
+
+
+
+
+
+
+
+ التقييم التراكمي
+
+
+
+
+
+
+
+
+
+
+
+
تفاصيل التقييم
+
+
+
+
+
+ التاريخ
+
+
+
+ بواسطة
+
+
+
+
+
+ المعيار
+ التقييم
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نتيجة مفاضلة الموردين
+
+
+
+
+ معيار التقييم:
+
+
+
+ القسم:
+
+
+
+
+
+ #
+ إسم المورد
+ متوسط التقييم
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/vendor_evaluatoin_view.xml b/odex25_purchase/vendor_evaluation/views/vendor_evaluatoin_view.xml
new file mode 100644
index 000000000..82a5ecc8f
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/vendor_evaluatoin_view.xml
@@ -0,0 +1,181 @@
+
+
+
+
+ Evaluation Details
+ vendor.evaluation
+
+
+
+
+
+
+ vendor.evaluation.search
+ cumulative.vendor.evaluation
+
+
+
+
+
+
+
+
+
+
+
+
+ Cumulative Evaluation Details
+ cumulative.vendor.evaluation
+
+
+
+
+
+
+
+ Vendor Evaluation
+ cumulative.vendor.evaluation
+
+
+
+
+
+
+
+
+
+
+
+ Vendor Evaluation
+ ir.actions.act_window
+ cumulative.vendor.evaluation
+ search,tree,form
+
+ {'default_owner' : 'purchase','search_default_purchase_filter': 1}
+
+
+ Create Cumulative Evaluation for a vendor
+
+
+
+
+
+
+
+
+ Vendor Evaluation
+ ir.actions.act_window
+ cumulative.vendor.evaluation
+ tree,form
+
+ {'default_owner' : 'stock'}
+ [('owner' , '=' , 'stock')]
+
+
+ Create Cumulative Evaluation for a vendor
+
+
+
+
+
+
+
+
+
+
+ Vendor Evaluation
+ ir.actions.act_window
+ cumulative.vendor.evaluation
+ tree,form
+
+ {'default_owner' : 'account'}
+ [('owner' , '=' , 'account')]
+
+
+ Create Cumulative Evaluation for a vendor
+
+
+
+
+
+
+
+
+
+ Vendor Comparison
+ ir.actions.act_window
+ vendor.comparison.wizard
+ form
+
+ new
+
+
+
+
+ vendor.comarison.wizard.view.form
+ vendor.comparison.wizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/views/views.xml b/odex25_purchase/vendor_evaluation/views/views.xml
new file mode 100644
index 000000000..db1cdcbfb
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/views/views.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/wizard/__init__.py b/odex25_purchase/vendor_evaluation/wizard/__init__.py
new file mode 100644
index 000000000..4bfdb22d4
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/wizard/__init__.py
@@ -0,0 +1 @@
+from . import vendor_comparison
\ No newline at end of file
diff --git a/odex25_purchase/vendor_evaluation/wizard/vendor_comparison.py b/odex25_purchase/vendor_evaluation/wizard/vendor_comparison.py
new file mode 100644
index 000000000..a1d89e09b
--- /dev/null
+++ b/odex25_purchase/vendor_evaluation/wizard/vendor_comparison.py
@@ -0,0 +1,100 @@
+from odoo import models, fields, api,_,exceptions
+from datetime import datetime
+from odoo.exceptions import ValidationError
+
+from odoo import api, fields, models
+
+
+class VendorComparrisonWizard(models.TransientModel):
+ _name = 'vendor.comparison.wizard'
+ _description = 'vendor.comparison.wizard'
+
+ type = fields.Selection([('detailed' , 'Detaild') , ('cumulative' , 'Cumulative')])
+ vendor_ids = fields.Many2many('res.partner',domain="[('supplier_rank' , '>' , 1) ]")
+ criteria_ids = fields.Many2many('evaluation.criteria',string='criteria')
+
+
+
+
+
+ def action_print(self):
+ vendor_ids = self.vendor_ids.ids
+ criteria_ids = self.criteria_ids.ids
+ if not self.vendor_ids.ids:
+ vendor_ids = self.env['res.partner'].search([('supplier_rank' , '>' , 1) ]).ids
+ if not vendor_ids:
+ raise exceptions.ValidationError(_("Sorry There is No Vendor,make sure you have partner as supplier"))
+
+ if not self.criteria_ids:
+ criteria_ids = self.env['evaluation.criteria'].search([]).ids
+
+ data = {'vendor_ids' : vendor_ids , 'criteria_ids' : criteria_ids , 'report_type' : self.type}
+ return self.env.ref('vendor_evaluation.action_vendor_compaarison_report').report_action([] , data=data)
+
+
+class VendorComparisonParser(models.AbstractModel):
+ _name = "report.vendor_evaluation.vendor_comparison_report"
+ _description = 'vendor.valuation.report'
+
+
+
+
+ def _get_report_values(self, docids, data=None):
+ """
+ this method query database according to report type if it is detailed report will get report by criterie
+ if its totoal get report by cumulative records
+ """
+ type = ''
+ report_data = []
+ departments = [_('account'), _('purchase') , _('stock')]
+ vendor_ids = data['vendor_ids']
+ criteria_ids = data['criteria_ids']
+
+ if data['report_type'] == 'detailed':
+ vendors = ",".join(str(i) for i in vendor_ids)
+ conditions= '''
+ det.vendor_id in '''+('''(''' + vendors +''')''' )+'''
+ '''
+ for criteria_id in criteria_ids:
+ self.env.cr.execute("""
+ select
+ sum(det.value)/count(det.value) as eval, det.vendor_id vendor ,max(v.name) v_name
+ from
+ evaluation_details det left join res_partner v on (det.vendor_id = v.id) where det.criteria_id = """+str(criteria_id)+"""and
+ """+conditions+"""
+ group by vendor
+ order by eval desc ;
+ """)
+ data = self.env.cr.dictfetchall()
+ report_data.append({
+ 'criteria_id' : self.env['evaluation.criteria'].browse([criteria_id]),
+ 'data' : data,
+ })
+ type = 'detailed'
+ else:
+ vendors = ",".join(str(i) for i in vendor_ids)
+ conditions= '''
+ eval.vendor_id in '''+('''(''' + vendors +''')''' )+'''
+ '''
+ type = 'cumulative'
+ for dep in departments:
+ self.env.cr.execute("""
+ select
+ eval.last_eval as eval ,v.name v_name
+ from
+ cumulative_vendor_evaluation eval left join res_partner v on (eval.vendor_id = v.id) where
+ """+conditions+""" and eval.owner = '""" +str(dep)+"""'
+ order by eval desc ;
+ """)
+ data = self.env.cr.dictfetchall()
+ report_data.append({
+ 'department' : dep,
+ 'data' : data,
+ })
+ return {
+ 'data' : report_data,
+ 'type' : type
+ }
+
+
+