Add odex25_purchase

This commit is contained in:
expert 2024-06-24 14:19:28 +03:00
parent 3a3f834c54
commit 58488512c1
270 changed files with 28078 additions and 1 deletions

View File

@ -1,2 +1,2 @@
# odex25-standard-moduless
# odex25-standard-modules
This Repo contains general standard modules for all projects.

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -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',
]
}

View File

@ -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 "آخر تعديل في"

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -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')

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_department_form_inherit" model="ir.ui.view">
<field name="name">hr.department.analytic.inherit.form</field>
<field name="inherit_id" ref="hr.view_department_form"/>
<field name="model">hr.department</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='company_id']" position="after">
<field name="analytic_account_id" options='{"no_open": True, "no_create": True}'/>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -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',
]
}

View File

@ -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 "آخر تعديل في"

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -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')

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_department_form_inherit" model="ir.ui.view">
<field name="name">hr.department.analytic.inherit.form</field>
<field name="inherit_id" ref="hr.view_department_form"/>
<field name="model">hr.department</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='company_id']" position="after">
<field name="analytic_account_id" options='{"no_open": True, "no_create": True}'/>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import models
from . import wizard

View File

@ -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,
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.cron" id="purchase_order_auto_notify_cron_job">
<field name="name">PO Contract Auto Notification</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field name="state">code</field>
<field name="code">model.cron_po_auto_notify()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall"/>
</record>
</odoo>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="auto_po_notify" model="mail.template">
<field name="name">PO Auto Notify</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field name="auto_delete" eval="True"/>
<field name="email_to">${object.responsible_id.partner_id.email}</field>
<field name="subject">Po Auto Notify</field>
<field name="body_html"><![CDATA[
<p>Dear ${object.responsible_id.name},</p>
<p> ${object.contract_name} Will Be Expired<br>
IN Purchase order: ${object.name}<br>
Vendor: ${object.partner_id.name}<br>
End Date: ${object.end_date}<br>
</p>
]]></field>
</record>
</odoo>

View File

@ -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 "الرجاء إختيار حساب تحليلي"

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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",
}

View File

@ -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()

View File

@ -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')

View File

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_crossovered_budget_group_department_approve crossovered.budget odex25_account_budget.model_crossovered_budget purchase_requisition_custom.group_department_approve 1 0 0 0
3 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
4 access_budget_confirmation_group_department_approve budget_confirmation account_budget_custom.model_budget_confirmation purchase_requisition_custom.group_department_approve 1 1 1 0
5 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
6 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
7 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
8 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
9 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
10 group_user_purchase_requisition_type Requisition Type purchase_requisition.model_purchase_requisition_type base.group_user 1 1 0 0

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="executive_director_of_purchase_and_contract" model="res.groups">
<field name="name">Executive Director of Purchase and Contract</field>
<field name="category_id" ref="purchase_requisition_custom.module_category_purchase_request"/>
<field name="implied_ids" eval="[(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
</record>
<record id="group_ceo_of_corporate_resources" model="res.groups">
<field name="name">Chief Executive Officer</field>
<field name="category_id" ref="purchase_requisition_custom.module_category_purchase_request"/>
<field name="implied_ids" eval="[(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
</record>
<record id="group_executive_vice_approve" model="res.groups">
<field name="name">Executive Vice President</field>
<field name="category_id" ref="purchase_requisition_custom.module_category_purchase_request"/>
<field name="implied_ids" eval="[(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
</record>
<record id="account_budget_custom.group_budget_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
</record>
<record id="account_budget_custom.group_department_manager_budget" model="res.groups">
<field name="implied_ids" eval="[(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
</record>
<record id="purchase.group_purchase_user" model="res.groups">
<field name="name">Purchasing Specialist</field>
<field name="implied_ids"
eval="[
(4, ref('purchase_requisition_custom.group_confirm_purchase_requisition')),
(4, ref('purchase_requisition_custom.group_quotation_purchase_requisition')),
(4, ref('purchase_requisition_custom.group_sign_purchase_order')),
(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
<field name="menu_access"
eval="[(4,ref('purchase.menu_purchase_root')),
(4,ref('purchase_requisition.menu_purchase_requisition_pro_mgt')),
(4,ref('purchase.menu_procurement_management'))]"/>
</record>
<!-- Record Rules -->
<record id="executive_director_of_purchase_and_contract_record_rule" model="ir.rule">
<field name="name">Executive Director of Purchase and Contract Rule</field>
<field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('governmental_purchase.executive_director_of_purchase_and_contract'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="group_ceo_of_corporate_resources_record_rule" model="ir.rule">
<field name="name">CEO of Corporate Resources Rule</field>
<field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('governmental_purchase.group_ceo_of_corporate_resources'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="group_executive_vice_approve_record_rule" model="ir.rule">
<field name="name">Executive Vice President of Corporate Resources Rule</field>
<field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('governmental_purchase.executive_director_of_purchase_and_contract'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="group_budget_user_record_rule" model="ir.rule">
<field name="name">Budget User Rule</field>
<field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('account_budget_custom.group_budget_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="group_department_manager_budget_record_rule" model="ir.rule">
<field name="name">Budget department Rule</field>
<field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('account_budget_custom.group_department_manager_budget'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="group_manager_budget_record_rule" model="ir.rule">
<field name="name">Manager Budget Manager</field>
<field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('account_budget_custom.group_manager_budget'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
</odoo>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="inherit_view_budget_confirmation_form" model="ir.ui.view">
<field name="name">budget.confirmation.form</field>
<field name="model">budget.confirmation</field>
<field name="inherit_id" ref="account_budget_custom.view_budget_confirmation_form"/>
<field name="arch" type="xml">
<xpath expr="//page[last()]" position="after">
<page string="Budget Management">
<group>
<field name="budget_scope" widget="radio" options="{'horizontal': true}" attrs="{'required':[('state','=','bdgt_dep_mngr')],'readonly':[('state' , '!=' , 'bdgt_dep_mngr')]}"/>
<field name="permission" widget="radio" options="{'horizontal': true}" attrs="{'required':[('state','=','bdgt_dep_mngr')],'readonly':[('state' , '!=' , 'bdgt_dep_mngr')]}"/>
<field name="request_id" readonly="1" attrs="{'invisible':[('request_id' , '=' , False)]}"/>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,109 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="purchase_order_governmental_form_view" model="ir.ui.view">
<field name="name">purchase.order.governmental.form.custom</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="priority" eval="200"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_rfq_send']" position="after">
<button string="PO To Contract" states="sign" name="open_convert_po_contract" type="object"
class="oe_highlight"/>
<button type="object" name="action_recommend"
confirm="Are you sure you want to process ?"
attrs="{'invisible':['|',
('recommendation_order','=', True),('purchase_commitee', '=', False)]}" string="Recommend"/>
</xpath>
<xpath expr="//field[@name='type']" position="after">
<!-- <field name="type"/> -->
<field name="contract_name"
attrs="{'invisible':[('type','!=', 'contract')],'required':[('type','=', 'contract'),]}"/>
<field name="responsible_id"
attrs="{'invisible':[('type','!=', 'contract')],'required':[('type','=', 'contract'),]}"/>
<field name="start_date"
attrs="{'invisible':[('type','!=', 'contract')],'required':[('type','=', 'contract'),]}"/>
<field name="end_date"
attrs="{'invisible':[('type','!=', 'contract')],'required':[('type','=', 'contract'),]}"/>
<field name="auto_notification" attrs="{'invisible':[('type','!=', 'contract')]}"/>
<field name="notify_before" string="Notify Before End"
attrs="{'invisible':['|',('type','!=', 'contract'), ('auto_notification','=', False)],
'required':[('auto_notification','=', True),]}"/>
<field name="period_type"
attrs="{'invisible':['|',('type','!=', 'contract'), ('auto_notification','=', False)],
'required':[('auto_notification','=', True),]}"/>
<field name="cron_end_date" invisible="1"/>
</xpath>
<xpath expr="//button[@name='button_confirm']" position="replace">
<button name="button_confirm" type="object" states="sign" string="Confirm Order"
class="oe_highlight" id="bid_confirm"/>
</xpath>
<!-- show analytic account -->
<xpath expr="//field[@name='order_line']/tree/field[@name='account_analytic_id']" position="replace">
</xpath>
<xpath expr="//field[@name='order_line']/tree/field[@name='department_name']" position="after">
<field name="account_analytic_id" optional="show" context="{'default_partner_id':parent.partner_id}"
groups="analytic.group_analytic_accounting"
domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
</xpath>
<!-- end -->
<xpath expr="//group[@class='oe_subtotal_footer oe_right']" position="after">
<group class="oe_right" style="float:right !important;">
<field name="billed_amount"/>
<field name="remaining_amount"/>
</group>
</xpath>
</field>
</record>
<!-- purchase.orders only for Purchase Contracts action window -->
<record id="purchase_type_contract_tree" model="ir.ui.view">
<field name="name">Purchase Contracts List</field>
<field name="model">purchase.order</field>
<field name="arch" type="xml">
<tree>
<field name="contract_name"/>
<field name="name"/>
<field name="date_order"/>
<field name="partner_id"/>
<field name="date_planned"/>
<field name="origin"/>
<field name="amount_untaxed"/>
<field name="amount_total"/>
<field name="state"/>
<field name="invoice_status"/>
</tree>
</field>
</record>
<record id="purchase_type_contract_action" model="ir.actions.act_window">
<field name="name">Purchase Contracts</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order</field>
<field name="view_mode">tree,kanban,form,pivot,graph,calendar</field>
<field name="domain">[('type' , '=' , 'contract'), ('state' , '=' , 'purchase')]</field>
<field name="context">{
'default_type': 'contract',
'create': False,
'edit': False,
'delete': False,
'duplicate': False,
'tree_view_ref': 'purchase_requisition_custom.purchase_type_contract_tree',
}
</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('purchase_type_contract_tree')}),
]"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create New a Purchase Contract
</p>
</field>
</record>
<menuitem id="purchase_type_contract_menu" name="Purchase Contracts"
parent="purchase.menu_procurement_management" action="purchase_type_contract_action" sequence="7"/>
</odoo>

View File

@ -0,0 +1,201 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="purchase_request_form" model="ir.ui.view">
<field name="name">purchase.request.view.form</field>
<field name="model">purchase.request</field>
<field name="inherit_id" ref="purchase_requisition_custom.purchase_request_form"/>
<field name="arch" type="xml">
<xpath expr="//header" position="replace">
<header>
<button name="action_dm_confirm" groups="purchase_requisition_custom.create_purchase_request"
type="object" string="Send" states="draft" class="oe_highlight"/>
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
string="Submit" states="dm" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="dm" type="action" groups="purchase_requisition_custom.group_direct_manger"/>
<button name="approve_department" type="object" string="Approve"
groups="purchase_requisition_custom.group_department_approve" states="direct_manager"
class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="direct_manager" type="action"
groups="purchase_requisition_custom.group_department_approve"/>
<button type="object" name="action_budget" string="First Budget Check" class="oe_highlight"
states="send_budget" groups="purchase_requisition_custom.group_department_approve"/>
<button name="action_pc_confirm"
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
string="Approve" states="ceo_purchase" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="ceo_purchase" type="action"
groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
<button name="approve_executive_vice"
groups="governmental_purchase.group_executive_vice_approve" type="object"
string="Approve" states="executive_vice" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="executive_vice" type="action"
groups="governmental_purchase.group_executive_vice_approve"/>
<button type="object" name="action_general_supervisor_approve" class="oe_highlight"
groups="governmental_purchase.group_ceo_of_corporate_resources" string="Approve"
attrs="{'invisible':[('state', '!=', 'general_supervisor')]}"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="general_supervisor" groups="governmental_purchase.group_ceo_of_corporate_resources"
type="action"/>
<button name="create_requisition"
groups="purchase.group_purchase_user,purchase.group_purchase_manager" type="object"
string="Create Requisition" class="oe_highlight" attrs="{'invisible' : ['|',('purchase_create' , '=' , True),
('state' , 'not in' , ['waiting'])]}"/>
<button name="create_purchase_order2"
groups="purchase.group_purchase_user,purchase.group_purchase_manager" type="object"
string="Create Purchase Order" class="oe_highlight" attrs="{'invisible' : ['|',('purchase_create' , '=' , True),
('state' , 'not in' , ['waiting'])]}"/>
<!-- <button name="action_done" type="object" string="Done" class="oe_stat_button"-->
<!-- groups="purchase.group_purchase_manager" states="waiting"/>-->
<button name="action_draft" type="object" string="Reset To Draft" class="oe_highlight"
attrs="{'invisible' : [('state','not in' , ['refuse'])]}"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,dm,direct_manager,send_budget,wait_budget,ceo_purchase,executive_vice,general_supervisor,waiting,done,refuse"/>
</header>
</xpath>
<xpath expr="//page[@name='dep_use']" position="after">
<page string="For technical management use" name="technical_use"
attrs="{'invisible':[('state' , 'in' , 'draft,dm')]}">
<group string="For technical management use" name="technical_use">
<group>
<field name="available" attrs="{'readonly':[('state' , '!=' , 'direct_manager')]}"/>
<field name="unavailable" attrs="{'readonly':[('state' , '!=' , 'direct_manager')]}"/>
<field name="specifications_conform"
attrs="{'readonly':[('state' , '!=' , 'direct_manager')]}"/>
<field name="specifications_not_conform"
attrs="{'readonly':[('state' , '!=' , 'direct_manager')]}"/>
</group>
</group>
</page>
</xpath>
<xpath expr="//notebook//page[@name='dep_use']" position="replace">
<page string="Departments Use" name="dep_use" attrs="{'invisible':[('state' , 'in' , 'draft')]}">
<group>
<group string="Requesting ِAdministration">
<field name="planned_for" attrs="{'readonly':[('state' , '!=' , 'dm')]}"/>
<field name="emergency" attrs="{'readonly':[('state' , '!=' , 'dm')]}"/>
</group>
<group name="attachment_booklet_uploade">
<div class="row mb4">
<div class="col-12">
<button string="download Booklet" name="download_url" type="object"
class="oe_highlight" attrs="{'readonly':[('state' , '!=' , 'dm')]}"/>
</div>
</div>
<div class="row mb4">
<div class="col-12">
<label for="attachment_booklet_uploade"/>
<field name="attachment_booklet_uploade" widget="binary"
attrs="{'readonly':[('state' , '!=' , 'dm')]}"/>
</div>
</div>
</group>
</group>
</page>
<page string="Departments Use Base info" name="base_info_dep_use">
<group>
<group string="Delivery Info" name="DeliveryInfo">
<field name="tender_name" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="purpose_of_tender" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="other_details" invisible="1" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="is_delivered" required="1" widget="radio" options="{'horizontal': true}"/>
<field name="samples_delivery_address"
attrs="{'readonly':[('state' , '!=' , 'draft')],'invisible':[('is_delivered' , '!=' , 'yes')],'required':[('is_delivered' , '=' , 'yes')]}"/>
<field name="delivery_building"
attrs="{'readonly':[('state' , '!=' , 'draft')],'invisible':[('is_delivered' , '!=' , 'yes')],'required':[('is_delivered' , '=' , 'yes')]}"/>
<field name="delivery_floor"
attrs="{'readonly':[('state' , '!=' , 'draft')],'invisible':[('is_delivered' , '!=' , 'yes')],'required':[('is_delivered' , '=' , 'yes')]}"/>
<field name="delivery_unit"
attrs="{'readonly':[('state' , '!=' , 'draft')],'invisible':[('is_delivered' , '!=' , 'yes')],'required':[('is_delivered' , '=' , 'yes')]}"/>
<field name="date_time"
attrs="{'readonly':[('state' , '!=' , 'draft')],'invisible':[('is_delivered' , '!=' , 'yes')],'required':[('is_delivered' , '=' , 'yes')]}"/>
</group>
<group name="Info">
<!-- <field name="activities" required="1" widget="many2many_tags"-->
<!-- options="{'no_create': True}" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>-->
<field name="project_duration" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="activity_description" style="white-space: normal;word-break: break-word;"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="competion_description" required="1"
style="white-space: normal;word-break: break-word;"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="list_documentaries" required="1"
style="white-space: normal;word-break: break-word;"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="attachment_scope_project" required="1" widget="binary"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="program_action" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
</group>
<group>
<group string="Project Location">
<group>
<field name="work_location_state"/>
<field name="work_location_city"/>
</group>
<group>
<field name="work_location_district"/>
<field name="work_location_GPS"/>
</group>
</group>
</group>
</page>
<page name="procurement_use" string="Procurement use">
<group>
<group>
<field name="type_id"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="document_cost"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="body_technical"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="is_competition_divisible" widget="radio" options="{'horizontal': true}"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="classify_des"
attrs="{'invisible':[('is_competition_divisible','!=','yes')],'required':[('is_competition_divisible','=','yes')],'readonly':[('state','!=','waiting')]}"/>
</group>
<group>
<field name="pre_qualification" widget="radio" options="{'horizontal': true}"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="initial_guarantee_percentage"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="applying_address"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
<field name="alternative_offer_allowed" widget="radio" options="{'horizontal': true}"
attrs="{'required':[('state','=','waiting')],'readonly':[('state','!=','waiting')]}"/>
</group>
</group>
</page>
</xpath>
<xpath expr="//field[@name='purchase_purpose']" position="after">
<field name="type_id"
options="{'no_create': True}"/>
</xpath>
</field>
</record>
<menuitem id="purchase_request_root_menu" name="Employee Requests" parent="purchase.menu_purchase_root" sequence="4"
groups="purchase_requisition_custom.view_purchase_request"/>
<!-- Purchase requests -->
<menuitem id="purchase_requisition_custom.purchase_request_menu" name="Purchase Request"
parent="purchase_request_root_menu" sequence="4"
groups="purchase_requisition_custom.view_purchase_request"/>
</odoo>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="purchase_governmental_requisition_form_view_inherit" model="ir.ui.view">
<field name="name">purchase.governmental.requisition.form.inherit</field>
<field name="model">purchase.requisition</field>
<field name="inherit_id" ref="purchase_requisition.view_purchase_requisition_form"/>
<field name="arch" type="xml">
<field name="custom_three_validation_steps" position="attributes">
<attribute name="invisible">1</attribute>
</field>
<xpath expr="//field[@name='date_end']" position="before">
<field name="agreement_name" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="agreement_number" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="agreement_date" attrs="{'readonly': [('state','!=', 'draft')]}"/>
<field name="city" attrs="{'readonly': [('state','!=', 'draft')]}"/>
</xpath>
<field name="type_id" position="replace"/>
<xpath expr="//field[@name='user_id']" position="before">
<field name="type_id" readonly="1"/>
</xpath>
<field name="account_analytic_id" position="attributes">
<attribute name="optional"></attribute>
</field>
</field>
</record>
</odoo>

View File

@ -0,0 +1,31 @@
<!-- <?xml version='1.0' encoding='utf-8'?>
<odoo>
<!-- model.name inherit form view -->
<record id="purchase_requisition_custom_setting" model="ir.ui.view">
<field name="name">model.name.inherit.view.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="purchase.res_config_settings_view_form_purchase"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-string='Purchase']" position="inside">
<h2>Booklet</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-md-6 o_setting_box" title="Activate Budget check in purchase">
<div class="o_setting_left_pane">
<div class="mt16">
<field name="attachment_booklet_exp" widget="binary" nolabel="1" />
</div>
</div>
<div class="o_setting_right_pane">
<label for="attachment_booklet_exp"/>
<div class="text-muted">
Purchase Booklet
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo> -->

View File

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import convert_to_contract

View File

@ -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'}

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="convert_to_contract_po_wizard" model="ir.ui.view">
<field name="name">convert.po.contract.wizard.form</field>
<field name="model">convert.po.contract.wizard</field>
<field name="arch" type="xml">
<form string="Convert To Contract">
<separator string="Contract Information"/>
<group>
<field name="purchase_id" invisible="1"/>
<field name="contract_name" required="1"/>
<field name="responsible_id" required="1"/>
<field name="start_date" required="1"/>
<field name="end_date" required="1"/>
<field name="auto_notification"/>
<field name="notify_before" string="Notify Before End"
attrs="{'invisible':[('auto_notification','=', False)],
'required':[('auto_notification','=', True),]}"/>
<field name="period_type"
attrs="{'invisible':[('auto_notification','=', False)],
'required':[('auto_notification','=', True),]}"/>
</group>
<footer>
<button string='Save' name="action_create_contract" type="object" class="oe_highlight"/>
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>

View File

@ -0,0 +1,2 @@
from . import models
from . import wizard

View File

@ -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,
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!-- Sequences for res.partner -->
<record id="seq_res_partner" model="ir.sequence">
<field name="name">Res Partner</field>
<field name="code">res.partner</field>
<field name="prefix">V/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>

View File

@ -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 ""

View File

@ -0,0 +1 @@
from . import res_parnter

View File

@ -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'
#

View File

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_partner_cancel_wizard access_partner_cancel_wizard model_partner_cancel_wizard base.group_user 1 1 1 1

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.module.category" id="smart_module_management">
<field name="name">Contacts WorkFlow</field>
<field name="description">User access level for this module</field>
<field name="sequence">99</field>
</record>
<record id="group_vendor_approve" model="res.groups">
<field name="name">Vendor Approve</field>
<field name="category_id" ref="smart_module_management" />
</record>
<record id="group_refuse_vendor" model="res.groups">
<field name="name">Refuse Vendor</field>
<field name="category_id" ref="smart_module_management" />
</record>
<!-- <record id="group_financial_manager" model="res.groups">
<field name="name">Financial Manager</field>
<field name="category_id" ref="smart_module_management" />
</record>
<record id="group_ceo" model="res.groups">
<field name="name">Chief Executive Officer</field>
<field name="category_id" ref="smart_module_management" />
</record>
<record id="group_general_manager" model="res.groups">
<field name="name">General Manager</field>
<field name="category_id" ref="smart_module_management" />
</record> -->
</data>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -0,0 +1,34 @@
<?xml version="1.0"?>
<odoo>
<data>
<record id="view_partner_form_inherited" model="ir.ui.view">
<field name="name">view.res.partner.form.inherited</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="before">
<header>
<button string="Vendor Approval" groups="khwalid_vendor.group_vendor_approve" states="new" class="oe_highlight" name="action_purchase_vendor_approve" type="object"/>
<button string="Refuse" groups="khwalid_vendor.group_refuse_vendor" states="new" class="oe_highlight" name="action_purchase_vendor_refuse" type="object"/>
<field name="state" widget="statusbar"/>
</header>
</xpath>
<field name="vat" position="after">
<field name="cancel_reason" readonly="1" attrs="{'invisible': [('state', '!=', 'cancel')]}" />
</field>
<xpath expr="//div[hasclass('oe_title')]" position="inside">
<group>
<field name="parnter_referencen" readonly="1"/>
</group>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1 @@
from . import messeage_wiz

View File

@ -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})

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_info_wizard" model="ir.ui.view">
<field name="name">info.form</field>
<field name="model">partner.cancel.wizard</field>
<field name="arch" type="xml">
<form string="Info">
<group>
<field name="cancel_reason" />
<field name="partner_id" invisible="1" />
</group>
<footer>
<button name="cancel_partner" string="OK" type="object" class="btn-primary" />
<button string="Cancel" special="cancel" class="oe_highlight" />
</footer>
</form>
</field>
</record>
</odoo>

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import report

View File

@ -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'],
}

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="purchase_order_1" model="purchase.order">
<field name="partner_id" ref="base.res_partner_1"/>
<field name="user_id" ref="base.user_admin"/>
<field name="state">purchase</field>
<field name="create_date" eval="DateTime.today() - relativedelta(days=20)"/>
<field name="date_order" eval="DateTime.today() - relativedelta(days=5)"/>
<field name="date_approve" eval="DateTime.today() - relativedelta(days=9)"/>
<field name="order_line" model="purchase.order.line" eval="[(5, 0, 0),
(0, 0, {
'product_id': ref('product.product_product_16'),
'name': 'Drawer Black',
'price_unit': 280.80,
'product_qty': 15.0,
'product_uom': ref('uom.product_uom_dozen'),
'date_planned': time.strftime('%Y-%m-%d')}),
(0, 0, {
'product_id': ref('product.product_product_20'),
'name': 'Flipover',
'price_unit': 450.70,
'product_qty': 5.0,
'product_uom': ref('uom.product_uom_dozen'),
'date_planned': time.strftime('%Y-%m-%d')})
]"/>
</record>
<record id="purchase_order_2" model="purchase.order">
<field name="partner_id" ref="base.res_partner_3"/>
<field name="user_id" ref="base.user_admin"/>
<field name="state">purchase</field>
<field name="create_date" eval="DateTime.today() - relativedelta(days=20)"/>
<field name="date_order" eval="DateTime.today() - relativedelta(days=15)"/>
<field name="date_approve" eval="DateTime.today() - relativedelta(days=5)"/>
<field name="order_line" model="purchase.order.line" eval="[(5, 0, 0),
(0, 0, {
'product_id': ref('product.product_product_8'),
'name': 'Large Desk',
'price_unit': 500.00,
'product_qty': 20.0,
'product_uom': ref('uom.product_uom_dozen'),
'date_planned': time.strftime('%Y-%m-%d')}),
(0, 0, {
'product_id': ref('product.product_product_5'),
'name': 'Corner Desk Right Sit',
'price_unit': 500.0,
'product_qty': 5.0,
'product_uom': ref('uom.product_uom_dozen'),
'date_planned': time.strftime('%Y-%m-%d')}),
]"/>
</record>
<record id="purchase_order_3" model="purchase.order">
<field name="partner_id" ref="base.res_partner_12"/>
<field name="user_id" ref="base.user_admin"/>
<field name="state">purchase</field>
<field name="create_date" eval="DateTime.today() - relativedelta(days=20)"/>
<field name="date_order" eval="DateTime.today() - relativedelta(days=15)"/>
<field name="date_approve" eval="DateTime.today() - relativedelta(days=18)"/>
<field name="order_line" model="purchase.order.line" eval="[(5, 0, 0),
(0, 0, {
'product_id': ref('product.product_product_12'),
'name': 'Office Chair Black',
'price_unit': 250.50,
'product_qty': 10.0,
'product_uom': ref('uom.product_uom_dozen'),
'date_planned': time.strftime('%Y-%m-%d')}),
]"/>
</record>
</data>
</odoo>

View File

@ -0,0 +1,71 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * odex25_purchase
#
# Translators:
# Mustafa Rawi <mustafa@cubexco.com>, 2020
# Osoul <baruni@osoul.ly>, 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 <baruni@osoul.ly>, 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 "يوم"

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="purchase_report_view_dashboard" model="ir.ui.view">
<field name="name">purchase.report.view.dashboard</field>
<field name="model">purchase.report</field>
<field name="mode">primary</field>
<field name="arch" type="xml">
<dashboard sample="1">
<view type="graph" ref="purchase.view_purchase_order_graph"/>
<group>
<group>
<aggregate name="price_subtotal_confirmed_orders" string="Total Purchased" field="price_total" help="Total, Tax Included" widget="monetary"/>
<aggregate name="price_subtotal_all_orders" string="Untaxed Total" field="untaxed_total" widget="monetary"/>
<aggregate name="purchase_orders" string="Orders" field="order_id"/>
<formula name="typetotal" string="Average Order" value="record.price_subtotal_confirmed_orders / record.purchase_orders" widget="monetary"/>
<aggregate name="avg_days_to_purchase" string="Average Days to Purchase" field="avg_days_to_purchase" group_operator="avg" value_label="days"
domain="[('date_approve', '!=', False)]" domain_label="purchase orders" clickable="False"/>
</group>
</group>
<view type="pivot" ref="purchase.view_purchase_order_pivot"/>
</dashboard>
</field>
</record>
<record id="purchase_report_action_dashboard" model="ir.actions.act_window">
<field name="name">Purchase Analysis</field>
<field name="res_model">purchase.report</field>
<field name="view_mode">dashboard,pivot,graph</field>
<field name="search_view_id" ref="purchase.view_purchase_order_search"/>
<field name="context" eval="{
'search_default_orders': 1,
'search_default_filter_date_approve': 1}"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No data yet!
</p><p>
Create a new purchase order
</p>
</field>
</record>
<record id="purchase.purchase_report" model="ir.ui.menu">
<field name="action" ref="purchase_report_action_dashboard"/>
</record>
</data>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import controllers
from . import models

View File

@ -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',
],
}

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import controllers

View File

@ -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/<model("odex25_purchase_coc.odex25_purchase_coc"):obj>/', auth='public')
# def object(self, obj, **kw):
# return http.request.render('odex25_purchase_coc.object', {
# 'object': obj
# })

View File

@ -0,0 +1,30 @@
<odoo>
<data>
<!-- -->
<!-- <record id="object0" model="odex25_purchase_coc.odex25_purchase_coc"> -->
<!-- <field name="name">Object 0</field> -->
<!-- <field name="value">0</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object1" model="odex25_purchase_coc.odex25_purchase_coc"> -->
<!-- <field name="name">Object 1</field> -->
<!-- <field name="value">10</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object2" model="odex25_purchase_coc.odex25_purchase_coc"> -->
<!-- <field name="name">Object 2</field> -->
<!-- <field name="value">20</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object3" model="odex25_purchase_coc.odex25_purchase_coc"> -->
<!-- <field name="name">Object 3</field> -->
<!-- <field name="value">30</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object4" model="odex25_purchase_coc.odex25_purchase_coc"> -->
<!-- <field name="name">Object 4</field> -->
<!-- <field name="value">40</field> -->
<!-- </record> -->
<!-- -->
</data>
</odoo>

View File

@ -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 "قائمة شهادة استلام"

View File

@ -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 "قائمة شهادة استلام"

View File

@ -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 "تم الرفض"

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -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()

View File

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_odex25_purchase_coc_odex25_purchase_coc odex25_purchase_coc.odex25_purchase_coc model_purchase_coc 1 0 0 0
3 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
4 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

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<!-- Purchase COC groups -->
<record id="group_coc_user" model="res.groups">
<field name="name">COC User</field>
<field name="category_id" ref="base.module_category_purchase_management"/>
</record>
<record id="group_coc_manager" model="res.groups">
<field name="name">COC Manager</field>
<field name="category_id" ref="base.module_category_purchase_management"/>
</record>
<record id="group_coc_menu" model="res.groups">
<field name="name">COC Menu</field>
<field name="category_id" ref="base.module_category_purchase_management"/>
</record>
</data>
</odoo>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="tender_application_sequence" model="ir.sequence">
<field name="name">CoC Sequence</field>
<field name="code">purchase.coc</field>
<field name="prefix">COC-%(year)s/%(month)s/0000</field>
<field name="company_id" eval="False"/>
<field name="use_date_range">True</field>
<field eval="1" name="number_increment"/>
</record>
</data>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -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;
}
}

View File

@ -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)
})
});

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="tender" id="tender">
<!-- <t t-call="website.layout"> -->
<t t-esc="tender.name"/>
<form method="POST" action="/Application_result">
<input style="visibility: hidden;" name="tender" type="number" readonly="1" t-att-value="tender.id" />
<table>
<thead>
<tr>
<th style="visibility: hidden; border: 1px black solid">product id</th>
<th style="border: 1px black solid">product</th>
<th style="border: 1px black solid">quantity</th>
<th style="border: 1px black solid">delivary date</th>
<th style="border: 1px black solid">price</th>
</tr>
</thead>
<tbody>
<tr t-foreach="tender.line_ids" t-as="line">
<td style="visibility: hidden;"><input name="product_id" type="number" readonly="1" t-att-value="line.product_id.id" /></td>
<td style="border: 1px black solid"><input type="text" t-att-value="line.product_id.name"/></td>
<td style="border: 1px black solid"> <input type="text" t-att-value="line.product_qty"/> </td>
<td style="border: 1px black solid"> <input type="text" t-att-value="line.schedule_date"/></td>
<td><input type="number" name="price" required="required" /></td>
</tr>
</tbody>
</table>
<button type="submit" class="btn btn-primary pull-left o_signup_btn">Submit Your Prices</button>
</form>
<!-- </t> -->
</t>
</templates>

View File

@ -0,0 +1,91 @@
<odoo>
<data>
<!-- purchase.order inherit form view -->
<record id="view_id" model="ir.ui.view">
<field name="name">purchase.order.inherit.view.form</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_view_invoice']" position="after">
<button type="object" name="action_view_coc" class="oe_stat_button" icon="fa-check" attrs="{'invisible':['|',('state', 'in', ('draft','sent','to approve')),('coc_count','=', 0)]}">
<field name="coc_count" widget="statinfo" string="CoCs" help="Certificates of Completion"/>
<field name="coc_ids" invisible="1"/>
</button>
</xpath>
<xpath expr="//field[@name='company_id']" position="after">
<!-- <field name="need_coc"/> -->
<!-- <field name="coc_id" readonly="1"/> -->
<field name="coc_created" invisible="1"/>
</xpath>
</field>
</record>
<!-- purchase.coc form view -->
<record id="purchase_coc_form" model="ir.ui.view">
<field name="name">purchase.coc.view.form</field>
<field name="model">purchase.coc</field>
<field name="arch" type="xml">
<form string="" create="false" delete="false">
<header>
<button name="action_confirm" type="object" class="oe_highlight" states="draft" string="Confirm" groups="odex25_purchase_coc.group_coc_user,odex25_purchase_coc.group_coc_manager"/>
<button name="action_approve" type="object" class="oe_highlight" states="confirm" string="Approve" groups="odex25_purchase_coc.group_coc_manager"/>
<button name="action_cancel" type="object" class="oe_highlight" states="draft,confirm" string="Reject" groups="odex25_purchase_coc.group_coc_manager"/>
<button name="action_draft" type="object" class="oe_highlight" states="cancel" string="Set to Draft"/>
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group col="4" colspan="2">
<field name="po_id" readonly="1"/>
<field name="vendor_id" readonly="1"/>
<field name="date" readonly="1"/>
<field name="coc_stage"/>
</group>
<notebook>
<page string="Products" name="products">
<field name="po_line_ids" readonly="1"/>
</page>
<page string="Note" name="note">
<field name="note"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- purchase.coc tree view -->
<record id="purchase_coc_view_tree" model="ir.ui.view">
<field name="name">model.name.view.tree</field>
<field name="model">purchase.coc</field>
<field name="arch" type="xml">
<tree create="false" delete="false" edit="false">
<field name="name"/>
<field name="po_id"/>
<field name="date"/>
<field name="state"/>
</tree>
</field>
</record>
<!-- purchase.coc action window -->
<record id="purchase_coc_action" model="ir.actions.act_window">
<field name="name">Certificate of Completion</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.coc</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Approve and Confirm CoC
</p>
</field>
</record>
<!-- This Menu Item must have a parent and an action -->
<menuitem id="coc_menu" name="Certificat of Completion CoC" parent="purchase.menu_purchase_root" action="purchase_coc_action" groups="group_coc_menu" sequence="3"/>
</data>
</odoo>

View File

@ -0,0 +1 @@
from . import models

View File

@ -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,
}

View File

@ -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 "الغرفة/اﻹدارة"

View File

@ -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

View File

@ -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')

View File

@ -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'})

View File

@ -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)

View File

@ -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')

View File

@ -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

View File

@ -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()

View File

@ -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")

View File

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_purchase_requests_line odex25_taqeem_purchase.purchase_requests_line model_purchase_requests_line base.group_user 1 1 1 1
3 access_competitive_purchase_attachment odex25_taqeem_purchase.competitive_purchase_attachment model_competitive_purchase_attachment base.group_user 1 1 1 1

View File

@ -0,0 +1,29 @@
<odoo>
<record id="strategy_project_group" model="res.groups">
<field name="name">Strategy And Project Group</field>
<field name="implied_ids" eval="[(4, ref('purchase_requisition_custom.view_purchase_request'))]"/>
<field name="category_id" ref="purchase_requisition_custom.module_category_purchase_request"/>
</record>
<record id="purchase_requisition_custom.group_direct_manger" model="res.groups">
<field name="name">Budget Executive Officer</field>
</record>
<record id="governmental_purchase.executive_director_of_purchase_and_contract" model="res.groups">
<field name="name">Executive Vice President of Corporate Resources</field>
</record>
<record id="governmental_purchase.group_ceo_of_corporate_resources" model="res.groups">
<field name="name">Chief Procurement Executive</field>
</record>
<record id="group_direct_manger_record_rule" model="ir.rule">
<field name="name">Group Direct Manger Rule</field>
<field name="model_id" ref="odex25_taqeem_purchase.model_purchase_request"/>
<field name="domain_force">['|',('user_id','=',user.id),('chief_executive_officer', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('purchase_requisition_custom.group_direct_manger'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
</odoo>

View File

@ -0,0 +1,14 @@
<odoo>
<record model="ir.ui.view" id="view_account_analytic_account_form_view">
<field name="name">account.analytic.account.form.view</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='group_id']" position="after">
<field name="item_executive_officer"/>
<field name="department_id"/>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,39 @@
<odoo>
<record model="ir.ui.view" id="competitive_purchase_attachment_form_view">
<field name="name">competitive.purchase.attachment.form.view</field>
<field name="model">competitive.purchase.attachment</field>
<field name="arch" type="xml">
<form string="Application brochure">
<sheet>
<group>
<field name="attachment_scop"/>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="competitive_purchase_attachment_tree_view">
<field name="name">competitive.purchase.attachment.tree.view</field>
<field name="model">competitive.purchase.attachment</field>
<field name="arch" type="xml">
<tree>
<field name="attachment_scop"/>
</tree>
</field>
</record>
<record id="action_competitive_purchase_attachment" model="ir.actions.act_window">
<field name="name">Application brochure</field>
<field name="res_model">competitive.purchase.attachment</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem parent="purchase.menu_purchase_config" name='Application brochure' id="menu_action_competitive_purchase_attachment"
action="action_competitive_purchase_attachment"/>/>
</odoo>

View File

@ -0,0 +1,187 @@
<odoo>
<record id="purchase_request_competitive" model="ir.ui.view">
<field name="name">purchase.request.competitive</field>
<field name="model">purchase.request</field>
<field name="inherit_id" ref="governmental_purchase.purchase_request_form"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='type_id']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='by_purchase']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='is_analytic']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=',('draft','waiting'))]}</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="replace">
<field name="state" widget="statusbar" statusbar_visible="draft,dm,str_pro_department,direct_manager,send_budget,wait_budget,budget_approve,general_supervisor,waiting"/>
</xpath>
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
<button name="action_pc_confirm" groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object" string="Approve" states="budget_approve" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse" states="budget_approve" type="action" groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
</xpath>
<xpath expr="//field[@name='partner_id']" position="after">
<field name="purchase_type" invisible="1"/>
<field name="check_chief_executive" invisible="1"/>
</xpath>
<xpath expr="//button[@name='action_confirm']" position="replace">
<button name="action_confirm_button" groups="purchase_requisition_custom.group_direct_manger" type="object" string="Submit" class="oe_highlight" attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
<button name="technical_department" type="object" groups="odex25_taqeem_purchase.strategy_project_group" string="Technical Department" states="str_pro_department" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse" type="action" groups="odex25_taqeem_purchase.strategy_project_group" states="str_pro_department"/>
</xpath>
<xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="attributes">
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="after">
<field name="remain" attrs="{'column_invisible': [('parent.state', '!=', 'dm')]}"/>
</xpath>
<xpath expr="//page[@name='base_info_dep_use']" position="replace"/>
<xpath expr="//page[@name='purchase_request_info']" position="after">
<page string="Order Base info" name="base_info_order">
<group>
<group string="Delivery Info" name="DeliveryInfo">
<field name="tender_name" required="1" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="purpose_of_tender" required="1" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="project_duration" required="1" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="project_start_date" required="1" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="work_service_imp" widget="radio" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="record_licenses" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="quality_spec" widget="radio" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="quality_notes" attrs="{'invisible':[('quality_spec' , '!=' , 'yes')],'readonly':[('state', '!=', 'draft')],'required':[('quality_spec' , '=' , 'yes')]}"/>
<field name="material_spec" widget="radio" attrs="{'invisible':[('state' , '!=' , 'draft')]}"/>
<field name="material_notes" attrs="{'invisible':[('material_spec' , '!=' , 'yes')],'readonly':[('state', '!=', 'draft')],'required':[('material_spec' , '=' , 'yes')]}"/>
<field name="other_details" invisible="1" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="is_delivered" required="1" widget="radio" options="{'horizontal': true}" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="delivery_type" attrs="{'invisible':[('is_delivered' , '!=' , 'yes')],'readonly':[('state', '!=', 'draft')],}"/>
</group>
<group>
<field name="business_place" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="attachment_scope_project" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="document_list" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="mech_evaluating_supp" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="offer_requirements" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="alternative_offer" widget="radio" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="department_alter_offer" widget="radio" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="date_receive_offer" widget="radio" attrs="{'readonly':[('state', '!=', 'draft')]}"/>
<field name="day" attrs="{'invisible': [('date_receive_offer', '!=', 'day')],'readonly':[('state', '!=', 'draft')]}"/>
<field name="month" attrs="{'invisible': [('date_receive_offer', '!=', 'month')],'readonly':[('state', '!=', 'draft')]}"/>
<field name="year" attrs="{'invisible': [('date_receive_offer', '!=', 'year')],'readonly':[('state', '!=', 'draft')]}"/>
<field name="special_condition" attrs="{'invisible':[('state' , '!=' , 'draft')]}"/>
<!-- <field name="attach" attrs="{'invisible':[('state' , '!=' , 'draft')]}"/>-->
</group>
<!-- -->
</group>
<group string="Delivered sample address" attrs="{'invisible':['|',('delivery_type' , '!=' , 'manual'),('is_delivered' , '!=' , 'yes')]}">
<group>
<field name="delivery_building" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="delivery_floor" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
<group>
<field name="room" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="date_time" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
</group>
<group name="attachment_upload" string="Download Application brochure" attrs="{'invisible':[('state' , '!=' , 'draft')]}">
<div class=" row mb4">
<div class="col-12">
<!-- <button string="Download" name="download_url" type="object" class="oe_highlight"/> -->
<field readonly="1" name="attachment_scop" class="btn btn-primary" widget="binary" nolabel="1"/>
</div>
</div>
<div class="row mb4">
<div class="col-12">
<label for="attachment_upload"/>
<field name="attachment_upload" widget="binary"/>
</div>
</div>
</group>
</page>
</xpath>
<xpath expr="//page[@name='base_info_order']" position="after">
<page string="Suggested Supplier" name="selected_supplier">
<field name="selected_supplier_id" attrs="{'readonly':[('state' , '!=' , 'draft')]}">
<tree editable="bottom">
<field name="supplier_id" required="1"/>
<field name="supplier_email"/>
<field name="supplier_phone"/>
</tree>
</field>
</page>
</xpath>
<xpath expr="//page[@name='selected_supplier']" position="after">
<page name="srt_project_dep" string="Strategy Project Department">
<group>
<group>
<field name="operational_construction" attrs="{'readonly':[('state' , '!=' , 'str_pro_department')]}"/>
<field name="dep_suggestion" attrs="{'readonly':[('state' , '!=' , 'str_pro_department')]}"/>
</group>
</group>
</page>
</xpath>
<xpath expr="//page[@name='srt_project_dep']" position="after">
<page name="technical_dep_use" string="Technical Department Use">
<group>
<group>
<field name="competitive_type" attrs="{'readonly':[('state' , '!=' , 'waiting')]}"/>
<field name="sell_document" attrs="{'readonly':[('state' , '!=' , 'waiting')]}"/>
</group>
<group>
<field name="need_to_reparation" attrs="{'readonly':[('state' , '!=' , 'waiting')]}"/>
</group>
</group>
</page>
</xpath>
<xpath expr="//page[@name='dep_use']" position="replace"/>
<xpath expr="//page[@name='technical_use']" position="replace"/>
<xpath expr="//page[@name='procurement_use']" position="replace"/>
<xpath expr="//page[@name='note']" position="replace"/>
</field>
</record>
<record id="action_purchase_request_competitive" model="ir.actions.act_window">
<field name="name">Competitive Purchase</field>
<field name="res_model">purchase.request</field>
<field name="view_mode">tree,form</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree'}),
(0, 0, {'view_mode': 'form', 'view_id': ref('purchase_request_competitive')})]"/>
<field name="domain">[('purchase_type', '=', 'competitive')]</field>
<field name="context">{'default_purchase_type': 'competitive'}</field>
</record>
<menuitem id="purchase_request_competitive_menu" name="Competitive Purchase Request" parent="purchase_requisition_custom.purchase_request_menu" action="action_purchase_request_competitive"/>
<!-- <record id="purchase_request_less_thirt" model="ir.actions.server">-->
<!-- <field name="name">Purchase Request Less Thirty</field>-->
<!-- <field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">-->
<!-- action = model.purchase_less_than_thirty()-->
<!-- </field>-->
<!-- </record>-->
</odoo>

View File

@ -0,0 +1,155 @@
<odoo>
<record id="purchase_request_less_twenty" model="ir.ui.view">
<field name="name">purchase.request.less.twenty</field>
<field name="model">purchase.request</field>
<field name="inherit_id" ref="governmental_purchase.purchase_request_form"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='type_id']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='by_purchase']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='is_analytic']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="replace">
<field name="state" widget="statusbar"
statusbar_visible="draft,dm,direct_manager,send_budget,wait_budget,budget_approve,general_supervisor,waiting"/>
</xpath>
<xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="attributes">
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="after">
<field name="remain" attrs="{'column_invisible': [('parent.state', '!=', 'dm')]}"/>
</xpath>
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
<button name="action_pc_confirm"
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
string="Approve" states="budget_approve" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="budget_approve" type="action"
groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
</xpath>
<xpath expr="//field[@name='partner_id']" position="after">
<field name="purchase_type" invisible="1"/>
<field name="check_chief_executive" invisible="1"/>
</xpath>
<xpath expr="//button[@name='action_confirm']" position="replace">
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
string="Submit" class="oe_highlight"
attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
</xpath>
<xpath expr="//page[@name='base_info_dep_use']" position="replace"/>
<xpath expr="//page[@name='purchase_request_info']" position="after">
<page string="Order Base info" name="base_info_order"
>
<group>
<group string="Delivery Info" name="DeliveryInfo">
<field name="tender_name" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="purpose_of_tender" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="other_details" invisible="1" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="is_delivered" required="1" widget="radio" options="{'horizontal': true}"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="delivery_type"
attrs="{'invisible':[('is_delivered' , '!=' , 'yes')],'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
<group name="Info">
<field name="project_duration" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="project_start_date" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="work_service_imp" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="business_place" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="attachment_scope_project" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="alternative_offer" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="quality_spec" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="quality_notes"
attrs="{'invisible':[('quality_spec' , '!=' , 'yes')],'readonly':[('state' , '!=' , 'draft')],'required':[('quality_spec' , '=' , 'yes')]}"/>
<field name="material_spec" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="material_notes"
attrs="{'invisible':[('material_spec' , '!=' , 'yes')],'readonly':[('state' , '!=' , 'draft')],'required':[('material_spec' , '=' , 'yes')]}"/>
<field name="special_condition"/>
</group>
</group>
<group string="Delivered sample address"
attrs="{'invisible':['|',('delivery_type' , '!=' , 'manual'),('is_delivered' , '!=' , 'yes')]}">
<group>
<field name="delivery_building"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="delivery_floor"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
<group>
<field name="room"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="date_time"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
</group>
</page>
</xpath>
<xpath expr="//page[@name='base_info_order']" position="after">
<page string="Suggested Supplier" name="selected_supplier"
attrs="{'readonly':[('state' , '!=' , 'draft')]}">
<field name="selected_supplier_id">
<tree editable="bottom">
<field name="supplier_id" required="1"/>
<field name="supplier_email"/>
<field name="supplier_phone"/>
</tree>
</field>
</page>
</xpath>
<xpath expr="//page[@name='dep_use']" position="replace"/>
<xpath expr="//page[@name='technical_use']" position="replace"/>
<xpath expr="//page[@name='procurement_use']" position="replace"/>
<xpath expr="//page[@name='note']" position="replace"/>
</field>
</record>
<record id="action_purchase_request_direct" model="ir.actions.act_window">
<field name="name">Purchase less than twenty</field>
<field name="res_model">purchase.request</field>
<field name="view_mode">tree,form</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree'}),
(0, 0, {'view_mode': 'form', 'view_id': ref('purchase_request_less_twenty')})]"/>
<field name="domain">[('purchase_type', '=', 'less_twenty')]</field>
<field name="context">{'default_purchase_type': 'less_twenty'}</field>
</record>
<menuitem id="purchase_request_direct_menu" name="Direct Purchase Request"
parent="purchase_requisition_custom.purchase_request_menu"
action="action_purchase_request_direct"/>
<!-- <record id="purchase_request_less_thirt" model="ir.actions.server">-->
<!-- <field name="name">Purchase Request Less Thirty</field>-->
<!-- <field name="model_id" ref="purchase_requisition_custom.model_purchase_request"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">-->
<!-- action = model.purchase_less_than_thirty()-->
<!-- </field>-->
<!-- </record>-->
</odoo>

View File

@ -0,0 +1,169 @@
<odoo>
<record id="purchase_request_less_thirty" model="ir.ui.view">
<field name="name">purchase.request.less.thirty</field>
<field name="model">purchase.request</field>
<field name="inherit_id" ref="governmental_purchase.purchase_request_form"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='type_id']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='by_purchase']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='is_analytic']" position="attributes">
<attribute name="attrs">{'readonly':[('state', '!=','draft')]}</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="replace">
<field name="state" widget="statusbar"
statusbar_visible="draft,dm,direct_manager,send_budget,wait_budget,budget_approve,waiting"/>
</xpath>
<xpath expr="//field[@name='partner_id']" position="after">
<field name="purchase_type" invisible="1"/>
<field name="check_chief_executive" invisible="1"/>
<field name="chief_executive_officer" invisible="1"/>
<!-- <field name="remain_budget" invisible="0"/>-->
</xpath>
<xpath expr="//button[@name='action_confirm']" position="replace">
<button name="action_confirm" groups="purchase_requisition_custom.group_direct_manger" type="object"
string="Submit" class="oe_highlight"
attrs="{'invisible': ['|',('check_chief_executive','=',False),('state','!=', 'dm')]}"/>
</xpath>
<xpath expr="//button[@name='action_pc_confirm']" position="replace">
<button name="action_pc_confirm"
groups="governmental_purchase.executive_director_of_purchase_and_contract" type="object"
string="Approve" states="budget_approve" class="oe_highlight"/>
<button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"
states="budget_approve" type="action"
groups="governmental_purchase.executive_director_of_purchase_and_contract"/>
</xpath>
<!-- <xpath expr="//button[@name='%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d']"-->
<!-- position="replace">-->
<!-- <button name="%(purchase_requisition_custom.purchase_request_cancel_wizard_action)d" string="Refuse"-->
<!-- type="action" groups="purchase_requisition_custom.group_direct_manger"/>-->
<!-- </xpath>-->
<xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="attributes">
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='line_ids']//field[@name='sum_total']" position="after">
<field name="remain" attrs="{'column_invisible': [('parent.state', '!=', 'dm')]}"/>
</xpath>
<xpath expr="//page[@name='base_info_dep_use']" position="replace"/>
<xpath expr="//page[@name='purchase_request_info']" position="after">
<page string="Order Base info" name="base_info_order"
>
<group>
<group string="Delivery Info" name="DeliveryInfo">
<field name="tender_name" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="purpose_of_tender" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="other_details" invisible="1" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="is_delivered" required="1" widget="radio" options="{'horizontal': true}"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="delivery_type"
attrs="{'invisible':[('is_delivered' , '!=' , 'yes')],'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
<group name="Info">
<field name="project_duration" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="project_start_date" required="1"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="work_service_imp" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="business_place" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="attachment_scope_project" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="quality_spec" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="quality_notes"
attrs="{'invisible':[('quality_spec' , '!=' , 'yes')],'required':[('quality_spec' , '=' , 'yes')],'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="material_spec" widget="radio"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="material_notes"
attrs="{'invisible':[('material_spec' , '!=' , 'yes')],'readonly':[('state' , '!=' , 'draft')],'required':[('material_spec' , '=' , 'yes')]}"/>
<field name="special_condition" attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
</group>
<group string="Delivered sample address"
attrs="{'invisible':['|',('delivery_type' , '!=' , 'manual'),('is_delivered' , '!=' , 'yes')]}">
<group>
<field name="delivery_building"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="delivery_floor"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
<group>
<field name="room"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
<field name="date_time"
attrs="{'readonly':[('state' , '!=' , 'draft')]}"/>
</group>
</group>
</page>
</xpath>
<xpath expr="//page[@name='base_info_order']" position="after">
<page string="Suggested Supplier" name="selected_supplier"
attrs="{'readonly':[('state' , '!=' , 'draft')]}">
<field name="selected_supplier_id">
<tree editable="bottom">
<field name="supplier_id" required="1"/>
<field name="supplier_email"/>
<field name="supplier_phone"/>
</tree>
</field>
</page>
</xpath>
<xpath expr="//page[@name='dep_use']" position="replace"/>
<xpath expr="//page[@name='technical_use']" position="replace"/>
<xpath expr="//page[@name='procurement_use']" position="replace"/>
<xpath expr="//page[@name='note']" position="replace"/>
</field>
</record>
<record id="action_purchase_request_less_thirty" model="ir.actions.act_window">
<field name="name">Purchase less than thirty</field>
<field name="res_model">purchase.request</field>
<field name="view_mode">tree,form</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree'}),
(0, 0, {'view_mode': 'form', 'view_id': ref('purchase_request_less_thirty')})]"/>
<field name="domain">[('purchase_type', '=', 'less_thirty')]</field>
<field name="context">{'default_purchase_type': 'less_thirty'}</field>
</record>
<!-- add seq -->
<record model="ir.sequence" id="purchase_seq30_sequence">
<field name="name">purchase request 30 Sequence</field>
<field name="code">purchase.seq30.sequence</field>
<field name="prefix">PR30 %(year)s/%(month)s/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
<field name="number_increment" eval="1"/>
</record>
<record model="ir.sequence" id="purchase_com_sequence">
<field name="name">purchase com Sequence</field>
<field name="code">purchase.com.sequence</field>
<field name="prefix">PRCOMP %(year)s/%(month)s/</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
<field name="number_increment" eval="1"/>
</record>
<!-- end -->
<menuitem id="purchase_request_less_thirty_menu" name="Purchase Request Less Thirty"
parent="purchase_requisition_custom.purchase_request_menu"
action="action_purchase_request_less_thirty"/>
</odoo>

View File

@ -0,0 +1,18 @@
<odoo>
<!-- <record model="ir.ui.view" id="view_res_company_form">-->
<!-- <field name="name">view.res.company.form</field>-->
<!-- <field name="model">res.company</field>-->
<!-- <field name="inherit_id" ref="base.view_company_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//page[@name='general_info']" position="after">-->
<!-- <page name="attachment" string="Application brochure">-->
<!-- <group>-->
<!-- <field name="attachment_scop"/>-->
<!-- </group>-->
<!-- </page>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
</odoo>

View File

@ -0,0 +1,33 @@
<odoo>
<record id="res_config_settings_view_form_purchase" model="ir.ui.view">
<field name="name">res.config.settings.view.form.purchase</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="purchase.res_config_settings_view_form_purchase"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='invoicing_settings_container']" position="after">
<h2>Proposed Period Receiving Offer</h2>
<div class="row mt16 o_settings_container" name="proposed_period_receiving_offer">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="day"/>
<field name="day"/>
</div>
<div class="o_setting_right_pane">
<label for="month"/>
<field name="month"/>
</div>
<div class="o_setting_right_pane">
<label for="year"/>
<field name="year"/>
</div>
<br/>
<div class="o_setting_right_pane">
<label for="attachment_scop"/>
<field name="attachment_scop"/>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,21 @@
<odoo>
<record id="res_partner_view_inherit" model="ir.ui.view">
<field name="name">res.partner.view.inherit</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="attributes">
<attribute name="attrs">{'required':[('company_type', '=','company')]}
</attribute>
</xpath>
<xpath expr="//field[@name='commercial_register']" position="attributes">
<attribute name="attrs">{'required':[('company_type', '=','company')]}
</attribute>
</xpath>
<xpath expr="//field[@name='id_number']" position="attributes">
<attribute name="attrs">{'required':[('company_type', '=','person')]}
</attribute>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import controllers
from . import models

View File

@ -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',
# ],
}

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import controllers

View File

@ -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/<model("odex_online_tendering.odex_online_tendering"):obj>/', auth='public')
# def object(self, obj, **kw):
# return http.request.render('odex_online_tendering.object', {
# 'object': obj
# })

View File

@ -0,0 +1,30 @@
<odoo>
<data>
<!-- -->
<!-- <record id="object0" model="odex_online_tendering.odex_online_tendering"> -->
<!-- <field name="name">Object 0</field> -->
<!-- <field name="value">0</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object1" model="odex_online_tendering.odex_online_tendering"> -->
<!-- <field name="name">Object 1</field> -->
<!-- <field name="value">10</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object2" model="odex_online_tendering.odex_online_tendering"> -->
<!-- <field name="name">Object 2</field> -->
<!-- <field name="value">20</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object3" model="odex_online_tendering.odex_online_tendering"> -->
<!-- <field name="name">Object 3</field> -->
<!-- <field name="value">30</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object4" model="odex_online_tendering.odex_online_tendering"> -->
<!-- <field name="name">Object 4</field> -->
<!-- <field name="value">40</field> -->
<!-- </record> -->
<!-- -->
</data>
</odoo>

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

Some files were not shown because too many files have changed in this diff Show More