commit
b4ed8b0ccc
|
|
@ -1229,4 +1229,25 @@ msgstr "أعضاء اللجنة"
|
||||||
#: model:ir.actions.act_window,name:odex25_annual_purchase.action_annual_committe
|
#: model:ir.actions.act_window,name:odex25_annual_purchase.action_annual_committe
|
||||||
#: model:ir.ui.menu,name:odex25_annual_purchase.menu_odx_annual_committee
|
#: model:ir.ui.menu,name:odex25_annual_purchase.menu_odx_annual_committee
|
||||||
msgid "Annual Committee"
|
msgid "Annual Committee"
|
||||||
msgstr "لجان الإحتياج السنوي"
|
msgstr "لجان الإحتياج السنوي"
|
||||||
|
|
||||||
|
#. module: odex25_annual_purchase
|
||||||
|
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_annual_rfq__technical_attachment_ids
|
||||||
|
#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_annual_rfq_form_hide_chatter_for_committee
|
||||||
|
msgid "Technical Attachments"
|
||||||
|
msgstr "المرفقات الفنية"
|
||||||
|
|
||||||
|
#. module: odex25_annual_purchase
|
||||||
|
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_annual_rfq__name
|
||||||
|
msgid "Reference Number"
|
||||||
|
msgstr "رقم المرجع"
|
||||||
|
|
||||||
|
#. module: odex25_annual_purchase
|
||||||
|
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_annual_rfq__request_date
|
||||||
|
msgid "Request Date"
|
||||||
|
msgstr "تاريخ الطلب"
|
||||||
|
|
||||||
|
#. module: odex25_annual_purchase
|
||||||
|
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_annual_rfq__state
|
||||||
|
msgid "Status"
|
||||||
|
msgstr "الحالة"
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,14 @@ class AnnualPurchaseRequest(models.Model):
|
||||||
employee_id = fields.Many2one('hr.employee', string="Employee", tracking=True, default=lambda self: self.env['hr.employee'].search([('user_id', '=', self.env.user.id)], limit=1))
|
employee_id = fields.Many2one('hr.employee', string="Employee", tracking=True, default=lambda self: self.env['hr.employee'].search([('user_id', '=', self.env.user.id)], limit=1))
|
||||||
user_id = fields.Many2one('res.users', string="Requested By", default=lambda self: self.env.user, tracking=True)
|
user_id = fields.Many2one('res.users', string="Requested By", default=lambda self: self.env.user, tracking=True)
|
||||||
department_id = fields.Many2one('hr.department', string="Department", tracking=True, related='employee_id.department_id', store=True)
|
department_id = fields.Many2one('hr.department', string="Department", tracking=True, related='employee_id.department_id', store=True)
|
||||||
date = fields.Date(string="Date", tracking=True)
|
date = fields.Date(
|
||||||
|
string="Date",
|
||||||
|
tracking=True,
|
||||||
|
default=lambda self: fields.Date.context_today(self)
|
||||||
|
)
|
||||||
date_start = fields.Date(string="Start Date", tracking=True)
|
date_start = fields.Date(string="Start Date", tracking=True)
|
||||||
date_end = fields.Date(string="End Date", tracking=True)
|
date_end = fields.Date(string="End Date", tracking=True)
|
||||||
purpose = fields.Char(string="Purpose", tracking=True)
|
purpose = fields.Char(string="Purpose", tracking=True, required=True)
|
||||||
note = fields.Text(string="Notes")
|
note = fields.Text(string="Notes")
|
||||||
state = fields.Selection(selection=STATES, default='draft', tracking=True)
|
state = fields.Selection(selection=STATES, default='draft', tracking=True)
|
||||||
line_ids = fields.One2many('odx.annual.request.line', 'request_id', string="Products")
|
line_ids = fields.One2many('odx.annual.request.line', 'request_id', string="Products")
|
||||||
|
|
@ -53,8 +57,8 @@ class AnnualPurchaseRequest(models.Model):
|
||||||
store=True)
|
store=True)
|
||||||
|
|
||||||
committee_enabled = fields.Boolean(string="Require Committee Review", default=False)
|
committee_enabled = fields.Boolean(string="Require Committee Review", default=False)
|
||||||
ssd_approve = fields.Boolean(string="SSD Approve", default=False)
|
ssd_approve = fields.Boolean(string="SSD Approve", default=True)
|
||||||
seo_approve = fields.Boolean(string="SEO Approve", default=False)
|
seo_approve = fields.Boolean(string="SEO Approve", default=True)
|
||||||
|
|
||||||
|
|
||||||
can_create_agreement = fields.Boolean(compute='_compute_can_create_agreement')
|
can_create_agreement = fields.Boolean(compute='_compute_can_create_agreement')
|
||||||
|
|
@ -315,17 +319,17 @@ class AnnualPurchaseRequest(models.Model):
|
||||||
else:
|
else:
|
||||||
rec.write({'state': 'procurement'})
|
rec.write({'state': 'procurement'})
|
||||||
|
|
||||||
def action_manager_reject(self, reason=False):
|
def action_manager_reject(self):
|
||||||
for rec in self:
|
self.ensure_one()
|
||||||
manager = rec.sudo().employee_id.parent_id
|
manager = self.sudo().employee_id.parent_id
|
||||||
if manager:
|
if manager:
|
||||||
if manager.user_id.id == rec.env.uid :
|
if manager.user_id.id == self.env.uid:
|
||||||
rec.write({'state': 'rejected'})
|
return self._open_reason_wizard('manager_reject')
|
||||||
else:
|
|
||||||
raise UserError(_("Sorry, The Approval For The Direct Manager '%s' Only !")%(rec.employee_id.parent_id.name))
|
|
||||||
else:
|
else:
|
||||||
rec.write({'state': 'rejected'})
|
raise UserError(
|
||||||
|
_("Sorry, The Approval For The Direct Manager '%s' Only!") % (self.employee_id.parent_id.name))
|
||||||
|
else:
|
||||||
|
return self._open_reason_wizard('manager_reject')
|
||||||
|
|
||||||
def action_send_to_committee(self):
|
def action_send_to_committee(self):
|
||||||
self.write({'sent_to_commitee': True})
|
self.write({'sent_to_commitee': True})
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class PurchaseRFQ(models.Model):
|
||||||
vendor_id = fields.Many2one(
|
vendor_id = fields.Many2one(
|
||||||
'res.partner',
|
'res.partner',
|
||||||
string='Vendor',
|
string='Vendor',
|
||||||
domain=[('supplier_rank', '>', 0)],
|
domain=[('supplier_rank', '>', 0)], required=True
|
||||||
)
|
)
|
||||||
partner_id = fields.Many2one(
|
partner_id = fields.Many2one(
|
||||||
'res.partner',
|
'res.partner',
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ access_annual_rfq_general_manager,access_annual_rfq_general_manager,model_annual
|
||||||
access_annual_rfq_technical_committee,access_annual_rfq_technical_committee,model_annual_rfq,odex25_annual_purchase.group_technical_committee,1,1,0,0
|
access_annual_rfq_technical_committee,access_annual_rfq_technical_committee,model_annual_rfq,odex25_annual_purchase.group_technical_committee,1,1,0,0
|
||||||
access_annual_rfq_annual_committee,access_annual_rfq_annual_committee,model_annual_rfq,odex25_annual_purchase.group_annual_committee,1,1,0,0
|
access_annual_rfq_annual_committee,access_annual_rfq_annual_committee,model_annual_rfq,odex25_annual_purchase.group_annual_committee,1,1,0,0
|
||||||
|
|
||||||
access_annual_rfq_line_purchase_user,access_annual_rfq_line_purchase_user,model_annual_rfq_line,purchase.group_purchase_user,1,1,1,0
|
access_annual_rfq_line_purchase_user,access_annual_rfq_line_purchase_user,model_annual_rfq_line,purchase.group_purchase_user,1,1,1,1
|
||||||
access_annual_rfq_line_purchase_manager,access_annual_rfq_line_purchase_manager,model_annual_rfq_line,purchase.group_purchase_manager,1,1,1,0
|
access_annual_rfq_line_purchase_manager,access_annual_rfq_line_purchase_manager,model_annual_rfq_line,purchase.group_purchase_manager,1,1,1,0
|
||||||
access_annual_rfq_line_services_manager,access_annual_rfq_line_services_manager,model_annual_rfq_line,hr_base.group_services_manager,1,1,1,0
|
access_annual_rfq_line_services_manager,access_annual_rfq_line_services_manager,model_annual_rfq_line,hr_base.group_services_manager,1,1,1,0
|
||||||
access_annual_rfq_line_general_manager,access_annual_rfq_line_general_manager,model_annual_rfq_line,hr_base.group_general_manager,1,1,1,0
|
access_annual_rfq_line_general_manager,access_annual_rfq_line_general_manager,model_annual_rfq_line,hr_base.group_general_manager,1,1,1,0
|
||||||
|
|
|
||||||
|
|
|
@ -106,18 +106,19 @@
|
||||||
|
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
<page string="Products">
|
<page string="Products">
|
||||||
<field name="line_ids">
|
<field name="line_ids">
|
||||||
<tree editable="bottom">
|
<tree editable="bottom" delete="true">
|
||||||
<field name="product_id"/>
|
<field name="product_id"/>
|
||||||
<field name="description"/>
|
<field name="description"/>
|
||||||
<field name="price_unit" readonly="1"
|
<field name="price_unit" readonly="1"
|
||||||
attrs="{'column_invisible': [('parent.state','not in',['ssd','ceo','purchase'])]}"/>
|
attrs="{'column_invisible': [('parent.state','not in',['ssd','ceo','purchase'])]}"/>
|
||||||
<field name="uom_id"/>
|
<field name="uom_id"/>
|
||||||
<field name="quantity"/>
|
<field name="quantity"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page string="Description">
|
<page string="Description">
|
||||||
<group>
|
<group>
|
||||||
<field name="description"/>
|
<field name="description"/>
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
<group>
|
<group>
|
||||||
|
|
||||||
<field name="show_committee_actions" invisible="1"/>
|
<field name="show_committee_actions" invisible="1"/>
|
||||||
<field name="recommendation_order"/>
|
<field name="recommendation_order" readonly="1"/>
|
||||||
<field name="purchase_commitee" invisible="1"/>
|
<field name="purchase_commitee" invisible="1"/>
|
||||||
<field name="vendor_id"/>
|
<field name="vendor_id"/>
|
||||||
<field name="partner_ref"/>
|
<field name="partner_ref"/>
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
<notebook>
|
<notebook>
|
||||||
<page string="المنتجات" id="page_product">
|
<page string="المنتجات" id="page_product">
|
||||||
<field name="line_ids" context="{'default_currency_id': currency_id, 'default_company_id': company_id}">
|
<field name="line_ids" context="{'default_currency_id': currency_id, 'default_company_id': company_id}">
|
||||||
<tree editable="bottom" string="RFQ Lines">
|
<tree editable="bottom" string="RFQ Lines" delete="true">
|
||||||
<field name="company_id" invisible="1"/>
|
<field name="company_id" invisible="1"/>
|
||||||
<field name="sequence" invisible="1"/>
|
<field name="sequence" invisible="1"/>
|
||||||
<field name="product_id"/>
|
<field name="product_id"/>
|
||||||
|
|
@ -165,7 +165,7 @@
|
||||||
</page>
|
</page>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//notebook" position="inside">
|
<xpath expr="//notebook" position="inside">
|
||||||
<page string="العرض الفني" id="page_technical_offer">
|
<page string="العرض الفني" id="page_technical_offer" groups="purchase.group_purchase_user">
|
||||||
<group>
|
<group>
|
||||||
<field name="technical_attachment_ids" widget="many2many_binary"
|
<field name="technical_attachment_ids" widget="many2many_binary"
|
||||||
string="Technical Attachments"
|
string="Technical Attachments"
|
||||||
|
|
@ -183,6 +183,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Annual RFQs" default_order="id desc">
|
<tree string="Annual RFQs" default_order="id desc">
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
|
<field name="recommendation_order" />
|
||||||
<field name="vendor_id"/>
|
<field name="vendor_id"/>
|
||||||
<field name="request_date"/>
|
<field name="request_date"/>
|
||||||
<field name="amount_total"/>
|
<field name="amount_total"/>
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,14 @@
|
||||||
<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_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="odex25_annual_purchase.group_annual_committee,odex25_annual_purchase.group_technical_committee"/>
|
<menuitem id="menu_odx_annual_committee" name="Annual Committee" parent="menu_odx_root" sequence="11" action="action_annual_committe" groups="odex25_annual_purchase.group_annual_committee,odex25_annual_purchase.group_technical_committee"/>
|
||||||
<!-- <menuitem id="menu_odx_addendum" name="Addendum" parent="menu_odx_root" sequence="30" action="action_odx_annual_addendum"/>-->
|
<!-- <menuitem id="menu_odx_addendum" name="Addendum" parent="menu_odx_root" sequence="30" action="action_odx_annual_addendum"/>-->
|
||||||
|
|
||||||
|
|
||||||
|
<record id="purchase.menu_purchase_root" model="ir.ui.menu">
|
||||||
|
<field name="groups_id" eval="[
|
||||||
|
(4, ref('odex25_annual_purchase.group_annual_committee')),
|
||||||
|
(4, ref('odex25_annual_purchase.group_technical_committee'))
|
||||||
|
]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
@ -9,6 +9,7 @@ class AnnualRequestReasonWizard(models.TransientModel):
|
||||||
('cancel', 'Cancel'),
|
('cancel', 'Cancel'),
|
||||||
('ssd_reject', 'SSD Reject'),
|
('ssd_reject', 'SSD Reject'),
|
||||||
('ceo_reject', 'CEO Reject'),
|
('ceo_reject', 'CEO Reject'),
|
||||||
|
('manager_reject', 'Manager Reject'),
|
||||||
], required=True)
|
], required=True)
|
||||||
request_id = fields.Many2one('odx.annual.request', string='Request', required=True)
|
request_id = fields.Many2one('odx.annual.request', string='Request', required=True)
|
||||||
reason = fields.Text(string='Reason', required=True)
|
reason = fields.Text(string='Reason', required=True)
|
||||||
|
|
@ -18,19 +19,15 @@ class AnnualRequestReasonWizard(models.TransientModel):
|
||||||
req = self.request_id
|
req = self.request_id
|
||||||
|
|
||||||
if self.action_type == 'cancel':
|
if self.action_type == 'cancel':
|
||||||
|
|
||||||
req.message_post(body=_("Reason: %s") % self.reason)
|
req.message_post(body=_("Reason: %s") % self.reason)
|
||||||
vals = {'state': 'cancel'}
|
vals = {'state': 'cancel'}
|
||||||
if 'cancel_reason' in req._fields:
|
if 'cancel_reason' in req._fields:
|
||||||
vals['cancel_reason'] = self.reason
|
vals['cancel_reason'] = self.reason
|
||||||
req.write(vals)
|
req.write(vals)
|
||||||
|
|
||||||
elif self.action_type == 'ssd_reject':
|
elif self.action_type in ['ssd_reject', 'ceo_reject', 'manager_reject']: # حدث هنا لتشمل الرفض من المدير
|
||||||
req.message_post(body=_("Reason: %s") % self.reason)
|
|
||||||
req.write({'state': 'rejected'})
|
|
||||||
|
|
||||||
elif self.action_type == 'ceo_reject':
|
|
||||||
req.message_post(body=_("Reason: %s") % self.reason)
|
req.message_post(body=_("Reason: %s") % self.reason)
|
||||||
req.write({'state': 'rejected'})
|
req.write({'state': 'rejected'})
|
||||||
|
|
||||||
return {'type': 'ir.actions.act_window_close'}
|
return {'type': 'ir.actions.act_window_close'}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue