v2-annual

This commit is contained in:
mohammed-alkhazrji 2025-10-26 13:03:56 +03:00
parent 16728984a4
commit 95cf14c9a7
9 changed files with 637 additions and 241 deletions

View File

@ -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
@ -967,3 +956,94 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_purchase_order_form_annual_rfq_odx
msgid "ملاحظة"
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 "موصى به"

View File

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

View File

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

View File

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

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_request_staff access_request_staff model_odx_annual_request purchase.group_purchase_user 1 1 1 0
3 access_request_manager access_request_manager model_odx_annual_request purchase.group_purchase_manager 1 1 1 1
4 access_request_committee access_request_committee model_odx_annual_request purchase_requisition_custom.committe_member 1 0 0 0
5 access_request_ssd access_request_ssd model_odx_annual_request odex25_annual_purchase.group_ssd hr_base.group_services_manager 1 1 0 0
6 access_request_gm access_request_gm model_odx_annual_request odex25_annual_purchase.group_gm hr_base.group_general_manager 1 1 0 0
7 access_request_line_staff access_request_line_staff model_odx_annual_request_line purchase.group_purchase_user 1 1 1 0
8 access_addendum_staff access_addendum_staff model_odx_annual_addendum purchase.group_purchase_user 1 1 1 0
9 access_addendum_line_staff access_addendum_line_staff model_odx_annual_addendum_line purchase.group_purchase_user 1 1 1 0

View File

@ -7,18 +7,12 @@
</record>
<record id="group_ssd" model="res.groups">
<field name="name">Shared Services Director</field>
<field name="category_id" ref="module_category_purchase_management"/>
</record>
<record id="group_gm" model="res.groups">
<field name="name">General Manager</field>
<field name="category_id" ref="module_category_purchase_management"/>
</record>
committe_member
<record id="group_technical_committee" model="res.groups">
<field name="name">Committee / Technical</field>
<field name="category_id" ref="module_category_purchase_management"/>
</record>
<record id="group_annual_committee" model="res.groups">
<field name="name">Committee</field>
<field name="category_id" ref="module_category_purchase_management"/>
</record>
</odoo>

View File

@ -20,10 +20,10 @@
<form>
<header>
<button name="action_send" string="Send" type="object" states="draft" groups="purchase.group_purchase_user"/>
<button name="action_ssd_approve" string="SSD Approve" type="object" states="ssd" groups="odex25_annual_purchase.group_ssd"/>
<button name="action_ssd_reject" string="SSD Reject" type="object" states="ssd" groups="odex25_annual_purchase.group_ssd"/>
<button name="action_gm_approve" string="GM Approve (Add to Agreement)" type="object" states="gm" groups="odex25_annual_purchase.group_gm"/>
<button name="action_gm_reject" string="GM Reject" type="object" states="gm" groups="odex25_annual_purchase.group_gm"/>
<button name="action_ssd_approve" string="SSD Approve" type="object" states="ssd" groups="hr_base.group_services_manager"/>
<button name="action_ssd_reject" string="SSD Reject" type="object" states="ssd" groups="hr_base.group_services_manager"/>
<button name="action_gm_approve" string="GM Approve (Add to Agreement)" type="object" states="gm" groups="hr_base.group_general_manager"/>
<button name="action_gm_reject" string="GM Reject" type="object" states="gm" groups="hr_base.group_general_manager"/>
<button name="action_cancel" string="Cancel" type="object" states="draft,ssd,gm"/>
<field name="state" widget="statusbar" statusbar_visible="draft,ssd,gm,approved,rejected,cancel"/>
</header>

View File

@ -9,7 +9,7 @@
<field name="purpose"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="vendor_id"/>
<field name="vendor_id" invisible="1"/>
<field name="state"/>
<field name="agreement_id"/>
</tree>
@ -28,58 +28,75 @@
<button name="action_manager_reject" string="Reject" type="object" states="to_manager" groups="purchase.group_purchase_manager"/>
<button name="action_send_to_committee" string="Send to Committee" type="object" class="oe_highlight" groups="purchase.group_purchase_user" attrs="{'invisible': ['|', ('committee_enabled','=',False), ('state','not in',['procurement','rejected_by_committee'])]}"/>
<button name="action_create_rfq" string="Create RFQ" type="object" class="oe_highlight" states="procurement,rejected_by_committee" groups="purchase.group_purchase_user"/>
<button name="action_cancel" string="Cancel" type="object" states="procurement,rejected_by_committee" groups="purchase.group_purchase_user"/>
<button name="action_ssd_approve" string="Approve" class="oe_highlight" type="object" states="ssd" groups="odex25_annual_purchase.group_ssd"/>
<button name="action_ssd_reject" string="Reject" type="object" states="ssd" groups="odex25_annual_purchase.group_ssd"/>
<button name="action_gm_approve" string="Approve" class="oe_highlight" type="object" states="gm" groups="odex25_annual_purchase.group_gm"/>
<button name="action_gm_reject" string="Reject" type="object" states="gm" groups="odex25_annual_purchase.group_gm"/>
<button name="action_cancel" string="Cancel" type="object" states="procurement,rejected_by_committee,committee" groups="purchase.group_purchase_user"/>
<button name="action_ssd_approve" string="Approve" class="oe_highlight" type="object" states="ssd" groups="hr_base.group_services_manager"/>
<button name="action_ssd_reject" string="Reject" type="object" states="ssd" groups="hr_base.group_services_manager"/>
<button name="action_ceo_approve" string="Approve" class="oe_highlight" type="object" states="ceo" groups="hr_base.group_general_manager"/>
<button name="action_ceo_reject" string="Reject" type="object" states="ceo" groups="hr_base.group_general_manager"/>
<button name="action_create_agreement" string="Create Agreement" type="object" states="purchase" class="oe_highlight"/>
<field name="state" widget="statusbar" statusbar_visible="draft,to_manager,procurement,committee,ssd,gm,approved,rejected,cancel"/>
<field name="state" widget="statusbar" statusbar_visible="draft,to_manager,procurement,committee,ssd,ceo,approved,rejected,cancel"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button class="oe_stat_button" type="object" name="action_open_rfqs" icon="fa-envelope">
<field name="rfq_count" widget="statinfo" string="RFQs / POs"/>
<button class="oe_stat_button" type="object" name="action_open_rfqs" icon="fa-list-alt">
<field name="rfq_count" widget="statinfo" string="RFQs"/>
</button>
<button class="oe_stat_button" type="object"
name="action_open_agreement"
string="Agreement"
icon="fa-shopping-cart"
attrs="{'invisible': [('state','!=','approved')]}"/>
<button name="get_attachments"
type="object"
class="oe_stat_button"
icon="fa-file-text-o">
<field name="attach_no" widget="statinfo" string="Documents"/>
</button>
</div>
<div class="oe_title" name="title">
<h2>
<field name="name" readonly="1" style=" font-size:24px; "/>
</h2>
</div>
<group>
<group>
<field name="name" readonly="1"/>
<field name="employee_id"/>
<field name="user_id" readonly="1"/>
<field name="sent_to_commitee" invisible="1"/>
<field name="department_id"/>
<field name="product_category_ids" widget="many2many_tags"/>
<field name="purpose"/>
<field name="date"/>
<field name="date_start"/>
<field name="date_end"/>
<field name="vendor_id"/>
<field name="committee_enabled"/>
<field name="agreement_id" attrs="{'invisible':[('agreement_id','=',False)]}"/>
</group>
<group attrs="{'invisible': [('committee_enabled', '=', False)]}">
<group>
<field name="committee_type_id"
attrs="{'required': [('committee_enabled', '=', True)]}"/>
<field name="committe_head"
attrs="{'required': [('committee_enabled', '=', True)]}"/>
<field name="min_approve"
attrs="{'required': [('committee_enabled', '=', True)]}"/>
<field name="ssd_approve"/>
<field name="seo_approve"/>
</group>
<group>
<field name="employee_id" readonly="1"/>
<field name="user_id" invisible="1"/>
<field name="purpose"/>
<field name="date_start" invisible="1"/>
<field name="date_end" invisible="1"/>
<field name="vendor_id" invisible="1"/>
<field name="committee_enabled"/>
<field name="committee_type_id"
attrs="{'invisible': [('committee_enabled', '=', False)], 'required': [('committee_enabled', '=', True)]}"/>
<field name="committe_head"
attrs="{'invisible': [('committee_enabled', '=', False)], 'required': [('committee_enabled', '=', True)]}"/>
<field name="agreement_id" invisible="1"/>
<field name="min_approve"
attrs="{'invisible': [('committee_enabled', '=', False)], 'required': [('committee_enabled', '=', True)]}"/>
<field name="min_vote"
attrs="{'required': [('committee_enabled', '=', True)]}"/>
<field name="actual_vote" readonly="1"/>
<field name="sent_to_commitee" invisible="1"/>
</group>
attrs="{'invisible': [('committee_enabled', '=', False)], 'required': [('committee_enabled', '=', True)]}"/>
</group>
</group>
<notebook>
<page string="Products">
@ -87,13 +104,17 @@
<tree editable="bottom">
<field name="product_id"/>
<field name="description"/>
<field name="quantity"/>
<field name="uom_id"/>
<field name="price_unit" groups="purchase_requisition_custom.committe_member"/>
<field name="technical_spec"/>
<field name="quantity"/>
</tree>
</field>
</page>
<page string="Description">
<group>
<field name="description"/>
</group>
</page>
<page string="Committee " attrs="{'invisible': [('committee_enabled', '=', False)]}">
<group>

View File

@ -1,6 +1,6 @@
<odoo>
<menuitem id="menu_odx_root" name="Annual Purchase" sequence="10" parent="purchase.menu_purchase_root"/>
<menuitem id="menu_odx_requests" name="Annual Requests" parent="menu_odx_root" sequence="10" action="action_odx_annual_request" groups="odex25_annual_purchase.group_gm,odex25_annual_purchase.group_ssd,purchase.group_purchase_user,purchase.group_purchase_manager"/>
<menuitem id="menu_odx_requests" name="Annual Requests" parent="menu_odx_root" sequence="10" action="action_odx_annual_request" groups="hr_base.group_general_manager,hr_base.group_services_manager,purchase.group_purchase_user,purchase.group_purchase_manager"/>
<menuitem id="menu_odx_annual_committee" name="Annual Committee" parent="menu_odx_root" sequence="11" action="action_annual_committe" groups="purchase_requisition_custom.committe_member,odex25_annual_purchase.group_technical_committee"/>
<!-- <menuitem id="menu_odx_addendum" name="Addendum" parent="menu_odx_root" sequence="30" action="action_odx_annual_addendum"/>-->
</odoo>

View File

@ -1,114 +1,105 @@
<odoo>
<record id="view_purchase_order_form_annual_rfq_odx" model="ir.ui.view">
<field name="name">purchase.order.form.annual.rfq.odx</field>
<record id="view_po_form_products_for_tech_committee" model="ir.ui.view">
<field name="name">purchase.order.form.products.tech_committee</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase_requisition_custom.purchase_order_custom_form_view"/>
<field name="groups_id" eval="[(4, ref('odex25_annual_purchase.group_technical_committee'))]"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='request_id']" position="after">
<field name="annual_request_id" readonly="1"
attrs="{'invisible': [('annual_request_id', '=', False)]}"/>
</xpath>
<xpath expr="/form" position="replace">
<form>
<header>
<field name="can_committee_vote" invisible="1"/>
<field name="purchase_commitee" invisible="1"/>
<field name="requisition_id" invisible="1"/>
<button type="object" name="action_select" groups="odex25_annual_purchase.group_technical_committee"
attrs="{'invisible':['|', ('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
string="Select"/>
<button type="object" name="action_refuse" groups="odex25_annual_purchase.group_technical_committee"
attrs="{'invisible':['|',('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
string="Refuse"/>
<field name="state" widget="statusbar" statusbar_visible="draft,sent,purchase" readonly="1"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="get_attachments" type="object"
class="oe_stat_button"
icon="fa-file-text-o">
<field name="attach_no" widget="statinfo" string="Documents"/>
</button>
</div>
<div class="oe_title">
<span class="o_form_label" attrs="{'invisible': [('state','not in',('draft','sent'))]}">Request for Quotation </span>
<span class="o_form_label" attrs="{'invisible': [('state','in',('draft','sent'))]}">Purchase Order </span>
<h1>
<field name="priority" widget="priority" class="mr-3"/>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<field name="recommendation_order" readonly="1" attrs="{
'invisible': [('purchase_commitee', '=', False)]}"/>
<field name="partner_id" />
<field name="partner_ref" />
<field name="annual_request_id" readonly="1"/>
<field name="no_of_approve"/>
</group>
<xpath expr="/form/header/button[@name='action_sign']" position="attributes">
<attribute name="attrs">
{
'invisible': [
'&amp;',
('requisition_id', '=', False),
('annual_request_id', '=', False),
'|',
('state', 'in', [
'sign','purchase','to approve','done',
'cancel','budget_rejected','wait_for_send','waiting'
]),
('is_signed', '=', True)
]
}
</attribute>
</xpath>
<xpath expr="//page[@id='page_committee_members']" position="attributes">
<attribute name="attrs">{'invisible': ['&amp;', ('requisition_id', '=', False), ('annual_request_id', '=', False)]}</attribute>
</xpath>
<xpath expr="//field[@name='state']" position="before">
<field name="is_technical_committee" invisible="1"/>
</xpath>
<xpath expr="//page[@name='products']" position="attributes">
<attribute name="attrs">{'invisible': [('is_technical_committee', '=', True)]}</attribute>
</xpath>
<xpath expr="//page[@name='products']" position="after">
<page string="Products" name="technical_committee_products"
attrs="{'invisible': [('is_technical_committee', '=', False)]}">
<notebook>
<page string="Products" name="products">
<field name="order_line"
widget="section_and_note_one2many"
mode="tree"
context="{'default_state': 'draft'}"
attrs="{'readonly': [('state', 'in', ('done', 'cancel'))]}">
<tree string="عناصر الطلب" editable="bottom">
<control>
<create name="add_product_control" string="إضافة منتج"/>
<create name="add_section_control" string="إضافة قسم"
context="{'default_display_type': 'line_section'}"/>
<create name="add_note_control" string="إضافة ملاحظة"
context="{'default_display_type': 'line_note'}"/>
</control>
<!-- الحقول المخفية الضرورية -->
attrs="{'readonly': [('state','in',('done','cancel'))]}">
<tree string="عناصر الطلب (لجنة تقنية)" editable="bottom">
<field name="display_type" invisible="1"/>
<field name="currency_id" invisible="1"/>
<field name="state" invisible="1"/>
<field name="product_type" invisible="1"/>
<field name="sequence" widget="handle"/>
<!-- الحقول المرئية فقط -->
<field name="product_id"
attrs="{
'readonly': [('state', 'in', ('purchase', 'to approve','done', 'cancel'))],
'required': [('display_type', '=', False)]
'readonly': [('state','in',('purchase','to approve','done','cancel'))],
'required': [('display_type','=',False)]
}"
context="{'partner_id':parent.partner_id, 'quantity':product_qty,'uom':product_uom, 'company_id': parent.company_id}"
force_save="1"
domain="[('purchase_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
domain="[('purchase_ok','=',True),'|',('company_id','=',False),('company_id','=',parent.company_id)]"/>
<field name="name" widget="section_and_note_text"/>
<field name="name" widget="section_and_note_text" string="Technical Description"/>
<field name="product_qty"
attrs="{'readonly': [('state', 'in', ('purchase', 'done', 'cancel'))]}"/>
attrs="{'readonly':[('state','in',('purchase','done','cancel'))]}"/>
<field name="product_uom"
string="UoM"
groups="uom.group_uom"
attrs="{
'readonly': [('state', 'in', ('purchase', 'done', 'cancel'))],
'required': [('display_type', '=', False)]
'readonly':[('state','in',('purchase','done','cancel'))],
'required':[('display_type','=',False)]
}"
force_save="1"/>
<field name="product_uom_category_id" invisible="1"/>
</tree>
<!-- Form view مبسط -->
<form string="عنصر طلب الشراء">
<field name="state" invisible="1"/>
<field name="display_type" invisible="1"/>
<group attrs="{'invisible': [('display_type', '!=', False)]}">
<group attrs="{'invisible':[('display_type','!=',False)]}">
<group>
<field name="product_uom_category_id" invisible="1"/>
<field name="product_id"
context="{'partner_id': parent.partner_id}"
widget="many2one_barcode"
domain="[('purchase_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
domain="[('purchase_ok','=',True),'|',('company_id','=',False),('company_id','=',parent.company_id)]"/>
<label for="product_qty"/>
<div class="o_row">
<field name="product_qty"/>
<field name="product_uom"
groups="uom.group_uom"
attrs="{'required': [('display_type', '=', False)]}"/>
<field name="product_uom" groups="uom.group_uom"
attrs="{'required':[('display_type','=',False)]}"/>
</div>
</group>
</group>
@ -118,17 +109,232 @@
</group>
<label for="name" string="اسم القسم"
attrs="{'invisible': [('display_type', '!=', 'line_section')]}"/>
attrs="{'invisible':[('display_type','!=','line_section')]}"/>
<label for="name" string="ملاحظة"
attrs="{'invisible': [('display_type', '!=', 'line_note')]}"/>
attrs="{'invisible':[('display_type','!=','line_note')]}"/>
<field name="name" nolabel="1"
attrs="{'invisible': [('display_type', '=', False)]}"/>
attrs="{'invisible':[('display_type','=',False)]}"/>
</form>
</field>
</page>
<page id="page_committee_members" string="Committee Members"
groups="odex25_annual_purchase.group_technical_committee"
attrs="{'invisible':['&amp;',('requisition_id','=',False),('annual_request_id','=',False)]}">
<field name="committe_members">
<tree>
<field name="user_id"/>
<field name="selection_reason"/>
<field name="select"/>
<field name="refused"/>
<field name="refusing_reason"/>
</tree>
</field>
</page>
<page string="Other Information" name="purchase_delivery_invoice">
<group>
<group name="other_info">
<field name="user_id" domain="[('share', '=', False)]" widget="many2one_avatar_user"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
</group>
<group name="invoice_info">
<field name="invoice_status" attrs="{'invisible': [('state', 'in', ('draft', 'sent', 'to approve', 'cancel'))]}"/>
<field name="payment_term_id" attrs="{'readonly': ['|', ('invoice_status','=', 'invoiced'), ('state', '=', 'done')]}" options="{'no_create': True}"/>
<field name="fiscal_position_id" options="{'no_create': True}" attrs="{'readonly': ['|', ('invoice_status','=', 'invoiced'), ('state', '=', 'done')]}"/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</xpath>
</field>
</record>
<record id="view_po_form_products_for_annual_committee" model="ir.ui.view">
<field name="name">purchase.order.form.products.annual_committee</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase_requisition_custom.purchase_order_custom_form_view"/>
<field name="groups_id" eval="[(4, ref('odex25_annual_purchase.group_annual_committee'))]"/>
<field name="arch" type="xml">
<xpath expr="/form" position="replace">
<form>
<header>
<field name="can_committee_vote" invisible="1"/>
<field name="purchase_commitee" invisible="1"/>
<field name="requisition_id" invisible="1"/>
<button type="object" name="action_recommend"
groups="purchase_requisition_custom.group_select_recommended_offer"
confirm="Are you sure you want to process ?"
attrs="{'invisible':['|',
('recommendation_order','=', True),('purchase_commitee', '=', False)]}" string="Recommended"/>
<button type="object" name="action_select" groups="odex25_annual_purchase.group_annual_committee"
attrs="{'invisible':['|', ('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
string="Select"/>
<button type="object" name="action_refuse" groups="odex25_annual_purchase.group_annual_committee"
attrs="{'invisible':['|',('state','in',['done','purchase','waiting','cancel']),('can_committee_vote', '=', False)]}"
string="Refuse"/>
<field name="state" widget="statusbar" statusbar_visible="draft,sent,purchase" readonly="1"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="get_attachments" type="object"
class="oe_stat_button"
icon="fa-file-text-o">
<field name="attach_no" widget="statinfo" string="Documents"/>
</button>
</div>
<div class="oe_title">
<span class="o_form_label" attrs="{'invisible': [('state','not in',('draft','sent'))]}">Request for Quotation </span>
<span class="o_form_label" attrs="{'invisible': [('state','in',('draft','sent'))]}">Purchase Order </span>
<h1>
<field name="priority" widget="priority" class="mr-3"/>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<field name="recommendation_order" readonly="1" attrs="{
'invisible': [('purchase_commitee', '=', False)]}"/>
<field name="partner_id" />
<field name="partner_ref" />
<field name="annual_request_id" readonly="1"/>
<field name="no_of_approve"/>
</group>
<notebook>
<page string="Products" name="products">
<field name="order_line"
widget="section_and_note_one2many"
mode="tree,kanban"
context="{'default_state': 'draft'}"
attrs="{'readonly': [('state', 'in', ('done', 'cancel'))]}">
<tree string="Purchase Order Lines" editable="bottom">
<control>
<create name="add_product_control" string="Add a product"/>
<create name="add_section_control" string="Add a section" context="{'default_display_type': 'line_section'}"/>
<create name="add_note_control" string="Add a note" context="{'default_display_type': 'line_note'}"/>
</control>
<field name="display_type" invisible="1"/>
<field name="currency_id" invisible="1"/>
<field name="state" invisible="1" readonly="1"/>
<field name="product_type" invisible="1"/>
<field name="product_uom_category_id" invisible="1"/>
<field name="invoice_lines" invisible="1"/>
<field name="sequence" widget="handle"/>
<field
name="product_id"
attrs="{
'readonly': [('state', 'in', ('purchase', 'to approve','done', 'cancel'))],
'required': [('display_type', '=', False)],
}"
context="{'partner_id':parent.partner_id, 'quantity':product_qty,'uom':product_uom, 'company_id': parent.company_id}"
force_save="1" domain="[('purchase_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
<field name="name" widget="section_and_note_text" string="Technical Description"/>
<field name="product_qty"/>
<field name="product_uom" string="UoM" groups="uom.group_uom"
attrs="{
'readonly': [('state', 'in', ('purchase', 'done', 'cancel'))],
'required': [('display_type', '=', False)]
}"
force_save="1" optional="show"/>
<field name="price_unit" attrs="{'readonly': [('invoice_lines', '!=', [])]}"/>
<field name="taxes_id" widget="many2many_tags" domain="[('type_tax_use','=','purchase'), ('company_id', '=', parent.company_id)]" context="{'default_type_tax_use': 'purchase', 'search_view_ref': 'account.account_tax_view_search'}" options="{'no_create': True}" optional="show"/>
<field name="price_subtotal" widget="monetary"/>
<field name="price_total" invisible="1"/>
<field name="price_tax" invisible="1"/>
</tree>
<form string="Purchase Order Line">
<field name="state" invisible="1"/>
<field name="display_type" invisible="1"/>
<group attrs="{'invisible': [('display_type', '!=', False)]}">
<group>
<field name="product_uom_category_id" invisible="1"/>
<field name="product_id"
context="{'partner_id': parent.partner_id}"
widget="many2one_barcode"
domain="[('purchase_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"
/>
<label for="product_qty"/>
<div class="o_row">
<field name="product_qty"/>
<field name="product_uom" groups="uom.group_uom" attrs="{'required': [('display_type', '=', False)]}"/>
</div>
<field name="qty_received_method" invisible="1"/>
<field name="price_unit"/>
<field name="taxes_id" widget="many2many_tags" domain="[('type_tax_use', '=', 'purchase'), ('company_id', '=', parent.company_id)]" options="{'no_create': True}"/>
</group>
<group colspan="12">
<notebook>
<page string="Notes" name="notes">
<field name="name"/>
</page>
<page string="Invoices and Incoming Shipments" name="invoices_incoming_shiptments">
<field name="invoice_lines"/>
</page>
</notebook>
</group>
</group>
<label for="name" string="Section Name (eg. Products, Services)" attrs="{'invisible': [('display_type', '!=', 'line_section')]}"/>
<label for="name" string="Note" attrs="{'invisible': [('display_type', '!=', 'line_note')]}"/>
<field name="name" nolabel="1" attrs="{'invisible': [('display_type', '=', False)]}"/>
</form>
</field>
<group class="oe_subtotal_footer oe_right">
<field name="amount_untaxed" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<field name="amount_tax" widget="monetary" options="{'currency_field': 'currency_id'}"/>
<div class="oe_subtotal_footer_separator oe_inline">
<label for="amount_total"/>
</div>
<field name="amount_total" nolabel="1" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
</group>
<field name="notes" class="oe_inline" placeholder="Define your terms and conditions ..."/>
<div class="oe_clear"/>
</page>
<page id="page_committee_members" string="Committee Members"
groups="odex25_annual_purchase.group_annual_committee"
attrs="{'invisible':['&amp;',('requisition_id','=',False),('annual_request_id','=',False)]}">
<field name="committe_members">
<tree>
<field name="user_id"/>
<field name="selection_reason"/>
<field name="select"/>
<field name="refused"/>
<field name="refusing_reason"/>
</tree>
</field>
</page>
<page string="Other Information" name="purchase_delivery_invoice">
<group>
<group name="other_info">
<field name="user_id" domain="[('share', '=', False)]" widget="many2one_avatar_user"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
</group>
<group name="invoice_info">
<field name="invoice_status" attrs="{'invisible': [('state', 'in', ('draft', 'sent', 'to approve', 'cancel'))]}"/>
<field name="payment_term_id" attrs="{'readonly': ['|', ('invoice_status','=', 'invoiced'), ('state', '=', 'done')]}" options="{'no_create': True}"/>
<field name="fiscal_position_id" options="{'no_create': True}" attrs="{'readonly': ['|', ('invoice_status','=', 'invoiced'), ('state', '=', 'done')]}"/>
</group>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</xpath>
</field>
</record>
</odoo>