v4-po
This commit is contained in:
parent
c738cfbae1
commit
cfdd71ecf6
|
|
@ -384,29 +384,31 @@ class AnnualPurchaseRequest(models.Model):
|
||||||
else:
|
else:
|
||||||
self.write({'state': 'purchase'})
|
self.write({'state': 'purchase'})
|
||||||
|
|
||||||
|
def _open_reason_wizard(self, action_type):
|
||||||
|
self.ensure_one()
|
||||||
|
return {
|
||||||
|
'name': _('Provide Reason'),
|
||||||
|
'type': 'ir.actions.act_window',
|
||||||
|
'res_model': 'odx.annual.request.reason.wizard',
|
||||||
|
'view_mode': 'form',
|
||||||
|
'target': 'new',
|
||||||
|
'context': {
|
||||||
|
'default_request_id': self.id,
|
||||||
|
'default_action_type': action_type,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
def action_ssd_reject(self, reason=False):
|
def action_ssd_reject(self, reason=False):
|
||||||
self.message_post(body=_("Rejected by SSD: %s") % (reason or ''))
|
return self._open_reason_wizard('ssd_reject')
|
||||||
self.write({'state':'rejected'})
|
|
||||||
|
|
||||||
def action_ceo_approve(self):
|
def action_ceo_approve(self):
|
||||||
self.write({'state':'purchase'})
|
self.write({'state':'purchase'})
|
||||||
|
|
||||||
def action_ceo_reject(self, reason=False):
|
def action_ceo_reject(self, reason=False):
|
||||||
self.message_post(body=_("Rejected by GM: %s") % (reason or ''))
|
return self._open_reason_wizard('ssd_reject')
|
||||||
self.write({'state':'rejected'})
|
|
||||||
|
|
||||||
def action_cancel(self):
|
def action_cancel(self):
|
||||||
self.ensure_one()
|
return self._open_reason_wizard('cancel')
|
||||||
return {
|
|
||||||
'name': _('Cancel Request'),
|
|
||||||
'type': 'ir.actions.act_window',
|
|
||||||
'res_model': 'odx.annual.request.cancel.wizard',
|
|
||||||
'view_mode': 'form',
|
|
||||||
'target': 'new',
|
|
||||||
'context': {
|
|
||||||
'default_request_id': self.id,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
def action_create_agreement(self):
|
def action_create_agreement(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,8 @@ access_request_gm,access_request_gm,model_odx_annual_request,hr_base.group_gener
|
||||||
access_request_line_staff,access_request_line_staff,model_odx_annual_request_line,purchase.group_purchase_user,1,1,1,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_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
|
access_addendum_line_staff,access_addendum_line_staff,model_odx_annual_addendum_line,purchase.group_purchase_user,1,1,1,0
|
||||||
access_odx_annual_request_cancel_wizard_user,odx_annual_request_cancel_wizard_user,model_odx_annual_request_cancel_wizard,base.group_user,1,1,1,1
|
access_odx_annual_request_reason_wizard_user,odx_annual_request_reason_wizard_user,model_odx_annual_request_reason_wizard,base.group_user,1,1,1,1
|
||||||
|
access_purchase_order_group_technical_committee,purchase_order_group_technical_committee,model_purchase_order,odex25_annual_purchase.group_technical_committee,1,1,0,0
|
||||||
|
access_purchase_order_group_annual_committee,purchase_order_group_annual_committee,model_purchase_order,odex25_annual_purchase.group_annual_committee,1,1,0,0
|
||||||
|
access_annual_request_group_technical_committee,annual_request_group_technical_committee,model_odx_annual_request,odex25_annual_purchase.group_technical_committee,1,1,0,0
|
||||||
|
access_annual_request_group_annual_committee,annual_request_group_annual_committee,model_odx_annual_request,odex25_annual_purchase.group_annual_committee,1,1,0,0
|
||||||
|
|
|
@ -1,27 +1,40 @@
|
||||||
from odoo import api, fields, models, _
|
from odoo import api, fields, models, _
|
||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
class AnnualRequestCancelWizard(models.TransientModel):
|
class AnnualRequestReasonWizard(models.TransientModel):
|
||||||
_name = 'odx.annual.request.cancel.wizard'
|
_name = 'odx.annual.request.reason.wizard'
|
||||||
_description = 'Cancel Annual Request Wizard'
|
_description = 'Annual Request Reason Wizard'
|
||||||
|
|
||||||
|
action_type = fields.Selection([
|
||||||
|
('cancel', 'Cancel'),
|
||||||
|
('ssd_reject', 'SSD Reject'),
|
||||||
|
('ceo_reject', 'CEO Reject'),
|
||||||
|
], 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='Cancellation Reason', required=True)
|
reason = fields.Text(string='Reason', required=True)
|
||||||
|
|
||||||
def action_confirm(self):
|
def action_confirm(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
request = self.request_id
|
req = self.request_id
|
||||||
|
|
||||||
related_orders = self.env['purchase.order'].search([('annual_request_id', '=', request.id)])
|
if self.action_type == 'cancel':
|
||||||
for order in related_orders:
|
# نفس منطقك الحالي لإلغاء أوامر الشراء المرتبطة
|
||||||
if order.state:
|
related_orders = self.env['purchase.order'].search([('annual_request_id', '=', req.id)])
|
||||||
order.button_cancel()
|
for order in related_orders:
|
||||||
|
if order.state:
|
||||||
|
order.button_cancel()
|
||||||
|
req.message_post(body=_("Reason: %s") % self.reason)
|
||||||
|
vals = {'state': 'cancel'}
|
||||||
|
if 'cancel_reason' in req._fields:
|
||||||
|
vals['cancel_reason'] = self.reason
|
||||||
|
req.write(vals)
|
||||||
|
|
||||||
request.message_post(body=_("Cancelled: %s") % (self.reason or ''))
|
elif self.action_type == 'ssd_reject':
|
||||||
|
req.message_post(body=_("Reason: %s") % self.reason)
|
||||||
|
req.write({'state': 'rejected'})
|
||||||
|
|
||||||
vals = {'state': 'cancel'}
|
elif self.action_type == 'ceo_reject':
|
||||||
if 'cancel_reason' in request._fields:
|
req.message_post(body=_("Reason: %s") % self.reason)
|
||||||
vals['cancel_reason'] = self.reason
|
req.write({'state': 'rejected'})
|
||||||
request.write(vals)
|
|
||||||
|
|
||||||
return {'type': 'ir.actions.act_window_close'}
|
return {'type': 'ir.actions.act_window_close'}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
<odoo>
|
<odoo>
|
||||||
<!-- Wizard Form View -->
|
<!-- Wizard Form View -->
|
||||||
<record id="view_odx_annual_request_cancel_wizard_form" model="ir.ui.view">
|
<record id="view_odx_annual_request_reason_wizard_form" model="ir.ui.view">
|
||||||
<field name="name">odx.annual.request.cancel.wizard.form</field>
|
<field name="name">odx.annual.request.reason.wizard.form</field>
|
||||||
<field name="model">odx.annual.request.cancel.wizard</field>
|
<field name="model">odx.annual.request.reason.wizard</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Cancel Request">
|
<form string="Provide Reason">
|
||||||
<group>
|
<group>
|
||||||
|
<field name="action_type" invisible="1"/>
|
||||||
<field name="request_id" invisible="1"/>
|
<field name="request_id" invisible="1"/>
|
||||||
<field name="reason" placeholder="اكتب سبب الإلغاء..." required="1"/>
|
<field name="reason" placeholder="اكتب السبب هنا..." required="1"/>
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_confirm" type="object" string="Confirm" class="btn-primary"/>
|
<button name="action_confirm" type="object" string="Confirm" class="btn-primary"/>
|
||||||
|
|
@ -17,9 +18,10 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<record id="action_odx_annual_request_cancel_wizard" model="ir.actions.act_window">
|
<record id="action_odx_annual_request_cancel_wizard" model="ir.actions.act_window">
|
||||||
<field name="name">Cancel Request</field>
|
<field name="name">Cancel Request</field>
|
||||||
<field name="res_model">odx.annual.request.cancel.wizard</field>
|
<field name="res_model">odx.annual.request.reason.wizard</field>
|
||||||
<field name="view_mode">form</field>
|
<field name="view_mode">form</field>
|
||||||
<field name="target">new</field>
|
<field name="target">new</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue