This commit is contained in:
esam 2025-12-31 17:01:24 -05:00
parent 83ca1424cd
commit 61cbc936bb
3 changed files with 58 additions and 17 deletions

View File

@ -1451,3 +1451,8 @@ msgstr ""
" <br/>\n" " <br/>\n"
"</div>\n" "</div>\n"
" " " "
#. module: odex25_annual_purchase
#: model:ir.model.fields.selection,name:odex25_annual_purchase.selection__odx_annual_request__state__manprocurement
msgid "Purchasing Manager"
msgstr "رئيس قسم المشتريات"

View File

@ -5,7 +5,7 @@ from datetime import datetime
STATES = [ STATES = [
('draft', 'Draft'), ('draft', 'Draft'),
('to_manager', 'Waiting Manager'), ('manprocurement', 'Purchasing Manager'),
('rejected_by_committee', 'Rejected by Committee'), ('rejected_by_committee', 'Rejected by Committee'),
('procurement', 'Purchasing'), ('procurement', 'Purchasing'),
('committee', 'Committee Review'), ('committee', 'Committee Review'),
@ -298,21 +298,57 @@ class AnnualPurchaseRequest(models.Model):
def action_send(self): def action_send(self):
self._check_lines() self._check_lines()
for rec in self: for rec in self:
rec.write({'state': 'to_manager'})
manager = rec.sudo().employee_id.parent_id manager = rec.sudo().employee_id.parent_id
if manager and manager.user_id and manager.user_id.email: if manager:
try: if manager.user_id.id == rec.env.uid:
template = self.env.ref('odex25_annual_purchase.email_template_direct_manager_x') rec.write({'state': 'manprocurement'})
purchase_group = self.env.ref('purchase.group_purchase_manager')
managers = self.env['res.users'].search([
('groups_id', '=', purchase_group.id),
('email', '!=', False)
])
if managers:
try:
template = self.env.ref('odex25_annual_purchase.email_template_purchase_manager')
first_manager = managers[0]
cc_emails = ','.join(managers[1:].mapped('email')) if len(managers) > 1 else ''
mail_values = { mail_values = {
'model': None, 'model': None,
'res_id': None, 'res_id': None,
} }
template.send_mail(rec.id, force_send=True, email_values=mail_values) template.with_context(
except Exception as e: default_email_to=first_manager.email,
pass default_email_cc=cc_emails
).send_mail(rec.id, force_send=True, email_values=mail_values)
except Exception as e:
pass
else:
raise UserError(
_("Sorry, The Approval For The Direct Manager '%s' Only !") % (rec.employee_id.parent_id.name))
else: else:
pass rec.write({'state': 'manprocurement'})
purchase_group = self.env.ref('purchase.group_purchase_manager')
managers = self.env['res.users'].search([
('groups_id', '=', purchase_group.id),
('email', '!=', False)
])
if managers:
try:
template = self.env.ref('odex25_annual_purchase.email_template_purchase_manager')
first_manager = managers[0]
cc_emails = ','.join(managers[1:].mapped('email')) if len(managers) > 1 else ''
mail_values = {
'model': None,
'res_id': None,
}
template.with_context(
default_email_to=first_manager.email,
default_email_cc=cc_emails
).send_mail(rec.id, force_send=True, email_values=mail_values)
except Exception as e:
pass
def action_to_draft(self): def action_to_draft(self):
for rec in self: for rec in self:
rec.write({'state': 'draft'}) rec.write({'state': 'draft'})

View File

@ -25,8 +25,8 @@
<field name="can_create_agreement" invisible="1"/> <field name="can_create_agreement" invisible="1"/>
<button name="action_send" string="Send" type="object" states="draft" class="btn-primary" groups="purchase.group_purchase_user" icon="fa-send"/> <button name="action_send" string="Send" type="object" states="draft" class="btn-primary" groups="purchase.group_purchase_user" icon="fa-send"/>
<button name="action_manager_approve" string="Approve" type="object" class="btn-primary" states="to_manager" groups="purchase.group_purchase_manager" icon="fa-check-circle"/> <button name="action_manager_approve" string="Approve" type="object" class="btn-primary" states="manprocurement" groups="purchase.group_purchase_manager" icon="fa-check-circle"/>
<button name="action_manager_reject" string="Reject" type="object" states="to_manager" groups="purchase.group_purchase_manager" class="btn-danger" icon="fa-times-circle"/> <button name="action_manager_reject" string="Reject" type="object" states="manprocurement" groups="purchase.group_purchase_manager" class="btn-danger" icon="fa-times-circle"/>
<button name="action_send_to_committee" string="Send to Committee" type="object" class="btn-info" groups="purchase.group_purchase_user" attrs="{'invisible': ['|', ('committee_enabled','=',False), ('state','not in',['procurement','rejected_by_committee'])]}" icon="fa-users"/> <button name="action_send_to_committee" string="Send to Committee" type="object" class="btn-info" groups="purchase.group_purchase_user" attrs="{'invisible': ['|', ('committee_enabled','=',False), ('state','not in',['procurement','rejected_by_committee'])]}" icon="fa-users"/>
<button name="action_create_rfq" string="Create RFQ" type="object" class="btn-primary" states="procurement,rejected_by_committee" groups="purchase.group_purchase_user" icon="fa-file-text-o"/> <button name="action_create_rfq" string="Create RFQ" type="object" class="btn-primary" states="procurement,rejected_by_committee" groups="purchase.group_purchase_user" icon="fa-file-text-o"/>
<button name="action_cancel" string="Cancel" type="object" states="procurement,rejected_by_committee,committee" groups="purchase.group_purchase_user" class="btn-secondary" icon="fa-ban"/> <button name="action_cancel" string="Cancel" type="object" states="procurement,rejected_by_committee,committee" groups="purchase.group_purchase_user" class="btn-secondary" icon="fa-ban"/>
@ -37,7 +37,7 @@
<button name="action_create_agreement" string="Create Agreement" type="object" states="purchase" class="btn-primary" groups="purchase.group_purchase_manager" icon="fa-file-contract"/> <button name="action_create_agreement" string="Create Agreement" type="object" states="purchase" class="btn-primary" groups="purchase.group_purchase_manager" icon="fa-file-contract"/>
<button name="action_to_draft" string="Back To Draft" type="object" states="rejected" class="btn-secondary" groups="odex25_annual_purchase.group_annual_to_draft" icon="fa-undo" /> <button name="action_to_draft" string="Back To Draft" type="object" states="rejected" class="btn-secondary" groups="odex25_annual_purchase.group_annual_to_draft" icon="fa-undo" />
<field name="state" widget="statusbar" statusbar_visible="draft,to_manager,procurement,committee,ssd,ceo,approved,rejected,cancel"/> <field name="state" widget="statusbar" statusbar_visible="draft,manprocurement,procurement,committee,ssd,ceo,approved,rejected,cancel"/>
</header> </header>
<sheet attrs="{'readonly': [('state', '!=', 'draft')]}"> <sheet attrs="{'readonly': [('state', '!=', 'draft')]}">
<div class="oe_button_box" name="button_box"> <div class="oe_button_box" name="button_box">
@ -73,7 +73,7 @@
<group> <group>
<field name="sent_to_commitee" invisible="1"/> <field name="sent_to_commitee" invisible="1"/>
<field name="department_id" attrs="{'readonly': [('state', '!=', 'draft')]}"/> <field name="department_id" readonly="1"/>
<field name="product_category_ids" widget="many2many_tags" attrs="{'readonly': [('state', '!=', 'draft')]}"/> <field name="product_category_ids" widget="many2many_tags" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="date" attrs="{'readonly': [('state', '!=', 'draft')]}"/> <field name="date" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="date_start" attrs="{'readonly': [('state', '!=', 'draft')]}"/> <field name="date_start" attrs="{'readonly': [('state', '!=', 'draft')]}"/>