diff --git a/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po b/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po
index 82f883c28..eb7485e2d 100644
--- a/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po
+++ b/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po
@@ -119,7 +119,15 @@ msgstr "طلب عرض أسعار سنوي"
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_purchase_order__annual_request_id
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_purchase_requisition__annual_request_id
msgid "Annual Request"
-msgstr "الطلب السنوي"
+msgstr "المستند المصدر"
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__line_ids
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Products"
+msgstr "الأصناف/الخدمات"
#. module: odex25_annual_purchase
#: model:ir.actions.act_window,name:odex25_annual_purchase.action_odx_annual_request
@@ -179,8 +187,8 @@ msgstr "المحادثات"
#. module: odex25_annual_purchase
#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
-msgid "Committee"
-msgstr "اللجنة"
+msgid "Committee "
+msgstr "أعضاء لجنة المشتريات"
#. module: odex25_annual_purchase
#: model:res.groups,name:odex25_annual_purchase.group_technical_committee
@@ -195,7 +203,7 @@ msgstr "رئيس اللجنة"
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__committee
msgid "Committee Review"
-msgstr "مراجعة اللجنة"
+msgstr "اللجان"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__committee_status
@@ -261,11 +269,7 @@ msgstr "وحدة القياس الافتراضية المستخدمة في أو
msgid "Department"
msgstr "الإدارة"
-#. module: odex25_annual_purchase
-#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum_line__description
-#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request_line__description
-msgid "Description"
-msgstr "الوصف"
+
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum__display_name
@@ -333,7 +337,6 @@ msgstr "رفض المدير العام"
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_addendum__state__gm
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__gm
-#: model:res.groups,name:odex25_annual_purchase.group_gm
msgid "General Manager"
msgstr "المدير العام"
@@ -387,7 +390,7 @@ msgstr "لجنة فنية"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__product_category_ids
msgid "Items Categories"
-msgstr "فئات الأصناف"
+msgstr "تصنيف الأصناف"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum____last_update
@@ -498,7 +501,7 @@ msgstr "عدد الاختيارات لا يمكن أن يكون صفراً"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__min_vote
msgid "No. of Votes"
-msgstr "عدد الأصوات"
+msgstr "عدد الاختيارات/ التصويت"
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__committee_status__none
@@ -576,12 +579,7 @@ msgstr "يرجى تحديد المورد المختار."
msgid "Product"
msgstr "المنتج"
-#. module: odex25_annual_purchase
-#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__line_ids
-#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
-#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_purchase_order_form_annual_rfq_odx
-msgid "Products"
-msgstr "المنتجات"
+
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__purchase
@@ -606,10 +604,7 @@ msgstr "تم إنشاء وربط اتفاقية الشراء."
msgid "Purchase Committee"
msgstr "لجنة المشتريات"
-#. module: odex25_annual_purchase
-#: model:ir.model,name:odex25_annual_purchase.model_purchase_order
-msgid "Purchase Order"
-msgstr "أمر الشراء"
+
#. module: odex25_annual_purchase
#: model:ir.model,name:odex25_annual_purchase.model_purchase_requisition
@@ -619,14 +614,13 @@ msgstr "طلب شراء"
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__procurement
msgid "Purchasing"
-msgstr "المشتريات"
+msgstr "إدارة المشتريات"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum__purpose
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__purpose
-#: model:ir.model.fields,field_description:odex25_annual_purchase.field_purchase_order__purpose
msgid "Purpose"
-msgstr "الغرض"
+msgstr "مبررات طلب الشراء (الغرض)"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum_line__quantity
@@ -642,8 +636,8 @@ msgstr "طلب عرض أسعار"
#. module: odex25_annual_purchase
#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
-msgid "RFQs / POs"
-msgstr "طلبات عروض الأسعار / أوامر الشراء"
+msgid "RFQs"
+msgstr "طلبات عروض الأسعار "
#. module: odex25_annual_purchase
#: code:addons/odex25_annual_purchase/models/annual_request.py:0
@@ -662,10 +656,6 @@ msgstr "طلبات عروض الأسعار/أوامر الشراء"
msgid "Reason/Justification"
msgstr "السبب/التبرير"
-#. module: odex25_annual_purchase
-#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__committee_status__recommended
-msgid "Recommended"
-msgstr "موصى به"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__committee_recommended_vendor_id
@@ -745,7 +735,7 @@ msgstr "بطلب من"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__committee_enabled
msgid "Require Committee Review"
-msgstr "يتطلب مراجعة اللجنة"
+msgstr "يحتاج لجنة"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum__activity_user_id
@@ -760,9 +750,9 @@ msgid "SMS Delivery error"
msgstr "خطأ في تسليم الرسائل القصيرة"
#. module: odex25_annual_purchase
-#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_addendum_form
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__ssd_approve
msgid "SSD Approve"
-msgstr "موافقة مدير الخدمات المشتركة"
+msgstr "موافقة مدير الخدمات المشتركة؟"
#. module: odex25_annual_purchase
#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_addendum_form
@@ -799,7 +789,6 @@ msgstr "أُرسل إلى اللجنة؟"
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_addendum__state__ssd
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__ssd
-#: model:res.groups,name:odex25_annual_purchase.group_ssd
msgid "Shared Services Director"
msgstr "مدير الخدمات المشتركة"
@@ -903,7 +892,7 @@ msgstr "المورد"
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__to_manager
msgid "Waiting Manager"
-msgstr "بانتظار المدير"
+msgstr " المدير المباشر"
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_addendum__website_message_ids
@@ -966,4 +955,95 @@ msgstr ""
#. module: odex25_annual_purchase
#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_purchase_order_form_annual_rfq_odx
msgid "ملاحظة"
-msgstr ""
\ No newline at end of file
+msgstr ""
+
+
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__ceo
+msgid "CEO"
+msgstr "المدير التنفيذي"
+
+
+
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__date
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__seo_approve
+msgid "SEO Approve"
+msgstr "موافقة المدير التنفيذي؟"
+
+#. module: odex25_annual_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Committee Members"
+msgstr "أعضاء اللجنة"
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__description
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
+msgid "Description"
+msgstr "الملاحظة"
+
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__attach_no
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Documents"
+msgstr "المرفقات"
+
+
+#. module: odex25_annual_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Other Information"
+msgstr "معلومات أخرى"
+
+#. module: odex25_annual_purchase
+#: model:ir.model,name:odex25_annual_purchase.model_purchase_order
+msgid "Purchase Order"
+msgstr "أمر الشراء"
+
+
+#. module: odex25_annual_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Select"
+msgstr "إختيار"
+
+#. module: odex25_annual_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Refuse"
+msgstr "رفض"
+
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request_line__description
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_tech_committee
+msgid "Technical Description"
+msgstr "المواصفات الفنية"
+
+#. module: odex25_annual_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+msgid "Are you sure you want to process ?"
+msgstr "هل أنت متأكد أنك تريد المتابعة؟"
+
+
+
+
+
+
+
+#. module: odex25_annual_purchase
+#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__committee_status__recommended
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_po_form_products_for_annual_committee
+msgid "Recommended"
+msgstr "موصى به"
diff --git a/odex25_purchase/odex25_annual_purchase/models/annual_request.py b/odex25_purchase/odex25_annual_purchase/models/annual_request.py
index 7c4e67e2c..8a5679f1c 100644
--- a/odex25_purchase/odex25_annual_purchase/models/annual_request.py
+++ b/odex25_purchase/odex25_annual_purchase/models/annual_request.py
@@ -11,6 +11,7 @@ STATES = [
('committee', 'Committee Review'),
('ssd', 'Shared Services Director'),
('gm', 'General Manager'),
+ ('ceo', 'CEO'),
('purchase', 'Purchase '),
('approved', 'Approved'),
('rejected', 'Rejected'),
@@ -52,6 +53,8 @@ class AnnualPurchaseRequest(models.Model):
store=True)
committee_enabled = fields.Boolean(string="Require Committee Review", default=False, tracking=True)
+ ssd_approve = fields.Boolean(string="SSD Approve", default=False)
+ seo_approve = fields.Boolean(string="SEO Approve", default=False)
rfq_count = fields.Integer(string='RFQs/POs', compute='_compute_counts')
po_count = fields.Integer(string='PO Count', compute='_compute_counts')
@@ -66,7 +69,42 @@ class AnnualPurchaseRequest(models.Model):
min_vote = fields.Integer(string='No. of Votes', help='Minimum number of votes required')
actual_vote = fields.Integer(string='Actual Votes', default=0)
sent_to_commitee = fields.Boolean(string='Sent to Committee?', default=False)
+ description = fields.Char(string="Description", tracking=True)
+
+ attach_no = fields.Integer(
+ string="Documents",
+ compute="_compute_attach_no",
+ store=False,
+ readonly=True,
+ )
+
+ def _compute_attach_no(self):
+ Attachment = self.env['ir.attachment']
+ for rec in self:
+ rec.attach_no = Attachment.search_count([
+ ('res_model', '=', rec._name),
+ ('res_id', '=', rec.id)
+ ])
+
+ def get_attachments(self):
+ self.ensure_one()
+ return {
+ 'name': "Documents",
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'ir.attachment',
+ 'view_mode': 'kanban,tree,form',
+ 'domain': [
+ ('res_model', '=', self._name),
+ ('res_id', 'in', self.ids)
+ ],
+ 'context': {
+ 'default_res_model': self._name,
+ 'default_res_id': self.id,
+
+ },
+ 'target': 'current',
+ }
def copy(self, default=None):
default = dict(default or {})
@@ -138,7 +176,7 @@ class AnnualPurchaseRequest(models.Model):
@api.depends('state', 'vendor_id', 'line_ids')
def _compute_can_create_agreement(self):
for rec in self:
- rec.can_create_agreement = rec.state in ('gm','approved') and not rec.agreement_id and bool(rec.vendor_id)
+ rec.can_create_agreement = rec.state in ('ceo','approved') and not rec.agreement_id and bool(rec.vendor_id)
@api.depends('agreement_id')
def _compute_counts(self):
@@ -179,9 +217,6 @@ class AnnualPurchaseRequest(models.Model):
def action_create_rfq(self):
self.ensure_one()
self._check_lines()
- if not self.vendor_id:
- raise UserError(_("You must set a Vendor for this RFQ."))
-
order_line_vals = []
for line in self.line_ids:
order_line_vals.append((0, 0, {
@@ -195,29 +230,37 @@ class AnnualPurchaseRequest(models.Model):
'taxes_id': [(6, 0, line.product_id.supplier_taxes_id.ids)],
}))
- PO = self.env['purchase.order'].sudo().create({
- 'origin': self.name,
- 'annual_request_id': self.id,
- 'partner_id': self.vendor_id.id,
- 'department_id': self.department_id.id if hasattr(self.department_id, 'id') else False,
- 'purpose': self.purpose,
- 'is_recommended': False,
- 'order_line': order_line_vals,
- 'purchase_commitee': self.committee_enabled, # نقل حالة اللجنة
- })
-
- # نسخ أعضاء اللجنة
- if self.committee_enabled:
- PO._copy_committee_from_annual_request()
+ # PO = self.env['purchase.order'].sudo().create({
+ # 'origin': self.name,
+ # 'annual_request_id': self.id,
+ # 'department_id': self.department_id.id if hasattr(self.department_id, 'id') else False,
+ # 'purpose': self.purpose,
+ # 'is_recommended': False,
+ # 'allow_empty_vendor': True,
+ # 'order_line': order_line_vals,
+ # 'purchase_commitee': self.committee_enabled,
+ # })
+ #
+ # if self.committee_enabled:
+ # PO._copy_committee_from_annual_request()
return {
'name': _("Annual RFQ"),
'type': 'ir.actions.act_window',
'res_model': 'purchase.order',
'view_mode': 'form',
- 'res_id': PO.id,
'target': 'current',
- 'context': {'default_annual_request_id': self.id, 'default_origin': self.name},
+ 'context': {
+ 'default_origin': self.name,
+ 'default_annual_request_id': self.id,
+ 'default_department_id': self.department_id.id if self.department_id else False,
+ 'default_purpose': self.purpose,
+ 'default_is_recommended': False,
+
+ 'default_partner_id': False,
+
+ 'default_order_line': order_line_vals,
+ },
}
def action_open_agreement(self):
@@ -243,10 +286,17 @@ class AnnualPurchaseRequest(models.Model):
self._check_lines()
for rec in self:
rec.write({'state': 'to_manager'})
- rec.activity_schedule('mail.mail_activity_data_todo', user_id=rec.department_id.manager_id.user_id.id if rec.department_id and rec.department_id.manager_id else False, summary=_("Approve Annual Request"))
def action_manager_approve(self):
- self.write({'state': 'procurement'})
+ for rec in self:
+ manager = rec.sudo().employee_id.parent_id
+ if manager:
+ if manager.user_id.id == rec.env.uid :
+ rec.write({'state': 'procurement'})
+ else:
+ raise Warning(_("Sorry, The Approval For The Direct Manager '%s' Only !")%(rec.employee_id.parent_id.name))
+ else:
+ rec.write({'state': 'procurement'})
def action_manager_reject(self, reason=False):
self.message_post(body=_("Rejected by Manager: %s") % (reason or ''))
@@ -270,16 +320,19 @@ class AnnualPurchaseRequest(models.Model):
self.write({'committee_status':'approved'})
def action_ssd_approve(self):
- self.write({'state':'gm'})
+ if self.seo_approve:
+ self.write({'state':'ceo'})
+ else:
+ self.write({'state': 'purchase'})
def action_ssd_reject(self, reason=False):
self.message_post(body=_("Rejected by SSD: %s") % (reason or ''))
self.write({'state':'rejected'})
- def action_gm_approve(self):
+ def action_ceo_approve(self):
self.write({'state':'purchase'})
- def action_gm_reject(self, reason=False):
+ def action_ceo_reject(self, reason=False):
self.message_post(body=_("Rejected by GM: %s") % (reason or ''))
self.write({'state':'rejected'})
@@ -329,7 +382,7 @@ class AnnualPurchaseRequestLine(models.Model):
request_id = fields.Many2one('odx.annual.request', string="Request", required=True, ondelete='cascade')
product_id = fields.Many2one('product.product', string="Product", required=True, domain=[('purchase_ok','=',True)])
- description = fields.Char(string="Description")
+ description = fields.Char(string="Technical Description")
quantity = fields.Float(string="Quantity", default=1.0)
uom_id = fields.Many2one('uom.uom', string="UoM", related='product_id.uom_po_id', readonly=False)
price_unit = fields.Monetary(string="Unit Price", currency_field='currency_id', groups="purchase_requisition_custom.committe_member")
diff --git a/odex25_purchase/odex25_annual_purchase/models/purchase_inherit.py b/odex25_purchase/odex25_annual_purchase/models/purchase_inherit.py
index fd6d617bc..3e31eda36 100644
--- a/odex25_purchase/odex25_annual_purchase/models/purchase_inherit.py
+++ b/odex25_purchase/odex25_annual_purchase/models/purchase_inherit.py
@@ -22,22 +22,38 @@ class PurchaseOrder(models.Model):
is_technical_committee = fields.Boolean(
compute='_compute_is_technical_committee',
string='Is Technical Committee',
+ store=False
)
+
+ @api.depends(
+ 'requisition_id', 'requisition_id.state', 'requisition_id.purchase_commitee',
+ 'annual_request_id', 'annual_request_id.state', 'annual_request_id.committee_enabled'
+ )
+ def _compute_parent_state(self):
+ """
+
+ """
+ for rec in self:
+ state = False
+ comm = False
+
+ if rec.requisition_id:
+ state = rec.requisition_id.state or False
+ comm = bool(getattr(rec.requisition_id, 'purchase_commitee', False))
+ elif rec.annual_request_id:
+ state = rec.annual_request_id.state or False
+ comm = bool(getattr(rec.annual_request_id, 'committee_enabled', False))
+
+ rec.parent_state = state
+ rec.purchase_commitee = comm
+
def _compute_is_technical_committee(self):
for record in self:
record.is_technical_committee = self.env.user.has_group(
'odex25_annual_purchase.group_technical_committee'
)
- @api.depends('annual_request_id', 'annual_request_id.committee_enabled',
- 'annual_request_id.committe_members')
- def _compute_annual_committee_fields(self):
- for po in self:
- if po.annual_request_id:
- po.annual_purchase_commitee = po.annual_request_id.committee_enabled
- else:
- po.annual_purchase_commitee = False
def _compute_annual_can_committee_vote(self):
user = self.env.user
@@ -52,7 +68,6 @@ class PurchaseOrder(models.Model):
@api.model
def create(self, vals):
res = super(PurchaseOrder, self).create(vals)
- # نسخ أعضاء اللجنة من الاحتياج السنوي
if res.annual_request_id and res.annual_request_id.committee_enabled:
res._copy_committee_from_annual_request()
return res
@@ -76,6 +91,28 @@ class PurchaseOrder(models.Model):
'refused': False,
})
+
+ @api.constrains('recommendation_order')
+ def check_recommendation_order(self):
+ for rec in self:
+ if not rec.recommendation_order:
+ continue
+
+ domain = [
+ ('id', '!=', rec.id),
+ ('state', '!=', 'cancel'),
+ ('recommendation_order', '=', True),
+ ]
+
+ if rec.requisition_id:
+ domain.append(('requisition_id', '=', rec.requisition_id.id))
+ elif rec.annual_request_id:
+ domain.append(('annual_request_id', '=', rec.annual_request_id.id))
+ else:
+ continue
+ if self.env['purchase.order'].search_count(domain):
+ raise ValidationError(_("Only one recommended order is allowed per parent document."))
+
@api.depends('state', 'requisition_state', 'requisition_type_exclusive', 'requisition_id', 'is_purchase_budget', 'annual_request_id')
def _compute_hide_action_budget_button(self):
for record in self:
@@ -101,7 +138,6 @@ class PurchaseOrder(models.Model):
def action_select(self):
- # التحقق من المصدر (اتفاقية أو احتياج سنوي)
if self.annual_request_id and self.annual_request_id.committee_enabled:
self.annual_request_id.actual_vote += 1
elif self.requisition_id:
@@ -118,7 +154,6 @@ class PurchaseOrder(models.Model):
def action_refuse(self):
- # التحقق من المصدر (اتفاقية أو احتياج سنوي)
if self.annual_request_id and self.annual_request_id.committee_enabled:
self.annual_request_id.actual_vote += 1
elif self.requisition_id:
@@ -151,7 +186,14 @@ class PurchaseOrder(models.Model):
])
for order in other_orders:
order.action_unsign()
- self.annual_request_id.state = 'ssd'
+ self.annual_request_id.vendor_id = self.partner_id.id
+ if self.annual_request_id.ssd_approve:
+ self.annual_request_id.state = 'ssd'
+ elif self.annual_request_id.seo_approve:
+ self.annual_request_id.state = 'seo'
+ else:
+ self.annual_request_id.state = 'purchase'
+
super(PurchaseOrder, self).action_sign()
diff --git a/odex25_purchase/odex25_annual_purchase/security/ir.model.access.csv b/odex25_purchase/odex25_annual_purchase/security/ir.model.access.csv
index a6dfa3b0a..927084232 100644
--- a/odex25_purchase/odex25_annual_purchase/security/ir.model.access.csv
+++ b/odex25_purchase/odex25_annual_purchase/security/ir.model.access.csv
@@ -2,8 +2,8 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_request_staff,access_request_staff,model_odx_annual_request,purchase.group_purchase_user,1,1,1,0
access_request_manager,access_request_manager,model_odx_annual_request,purchase.group_purchase_manager,1,1,1,1
access_request_committee,access_request_committee,model_odx_annual_request,purchase_requisition_custom.committe_member,1,0,0,0
-access_request_ssd,access_request_ssd,model_odx_annual_request,odex25_annual_purchase.group_ssd,1,1,0,0
-access_request_gm,access_request_gm,model_odx_annual_request,odex25_annual_purchase.group_gm,1,1,0,0
+access_request_ssd,access_request_ssd,model_odx_annual_request,hr_base.group_services_manager,1,1,0,0
+access_request_gm,access_request_gm,model_odx_annual_request,hr_base.group_general_manager,1,1,0,0
access_request_line_staff,access_request_line_staff,model_odx_annual_request_line,purchase.group_purchase_user,1,1,1,0
access_addendum_staff,access_addendum_staff,model_odx_annual_addendum,purchase.group_purchase_user,1,1,1,0
access_addendum_line_staff,access_addendum_line_staff,model_odx_annual_addendum_line,purchase.group_purchase_user,1,1,1,0
diff --git a/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml b/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml
index 24f6d25ef..e61414f3f 100644
--- a/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml
+++ b/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml
@@ -7,18 +7,12 @@
-