diff --git a/odex25_purchase/odex25_annual_purchase/__init__.py b/odex25_purchase/odex25_annual_purchase/__init__.py
index 0650744f6..9b4296142 100644
--- a/odex25_purchase/odex25_annual_purchase/__init__.py
+++ b/odex25_purchase/odex25_annual_purchase/__init__.py
@@ -1 +1,2 @@
from . import models
+from . import wizard
diff --git a/odex25_purchase/odex25_annual_purchase/__manifest__.py b/odex25_purchase/odex25_annual_purchase/__manifest__.py
index 46cd3d021..d35494e7e 100644
--- a/odex25_purchase/odex25_annual_purchase/__manifest__.py
+++ b/odex25_purchase/odex25_annual_purchase/__manifest__.py
@@ -17,6 +17,7 @@
"views/purchase_requisition.xml",
"data/mail_activity.xml",
"views/menu.xml",
+ "wizard/annual_cancel_wizard_view.xml"
],
"application": True,
"installable": True
diff --git a/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po b/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po
index eb7485e2d..9114e42f8 100644
--- a/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po
+++ b/odex25_purchase/odex25_annual_purchase/i18n/ar_001.po
@@ -140,6 +140,11 @@ msgstr "الطلبات السنوية"
msgid "Approve"
msgstr "موافقة"
+#. module: odex25_annual_purchase
+#: model_terms:ir.ui.view,arch_db:odex25_annual_purchase.view_odx_annual_request_form
+msgid "Back To Draft"
+msgstr "إعادة الى مسودة"
+
#. module: odex25_annual_purchase
#: code:addons/odex25_annual_purchase/models/annual_request.py:0
#, python-format
@@ -195,6 +200,16 @@ msgstr "أعضاء لجنة المشتريات"
msgid "Committee / Technical"
msgstr "اللجنة / الفنية"
+#. module: odex25_annual_purchase
+#: model:res.groups,name:odex25_annual_purchase.group_annual_committee
+msgid "Committee"
+msgstr "اللجنة / المالية"
+
+#. module: odex25_annual_purchase
+#: model:res.groups,name:odex25_annual_purchase.group_annual_to_draft
+msgid "To Draft"
+msgstr "إعادة الى مسودة"
+
#. module: odex25_annual_purchase
#: model:ir.model.fields,field_description:odex25_annual_purchase.field_odx_annual_request__committe_head
msgid "Committee Head"
diff --git a/odex25_purchase/odex25_annual_purchase/models/annual_request.py b/odex25_purchase/odex25_annual_purchase/models/annual_request.py
index 4059311f6..1e94e4b60 100644
--- a/odex25_purchase/odex25_annual_purchase/models/annual_request.py
+++ b/odex25_purchase/odex25_annual_purchase/models/annual_request.py
@@ -24,7 +24,7 @@ class AnnualPurchaseRequest(models.Model):
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = "create_date desc"
- name = fields.Char(string="Reference", default=lambda self: self.env['ir.sequence'].next_by_code('odx.annual.request'), readonly=True, copy=False)
+ name = fields.Char(string="Reference", default="New", readonly=True, copy=False)
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)
department_id = fields.Many2one('hr.department', string="Department", tracking=True, related='employee_id.department_id', store=True)
@@ -101,6 +101,13 @@ class AnnualPurchaseRequest(models.Model):
},
'target': 'current',
}
+
+ @api.model
+ def create(self, vals):
+ if vals.get('name', 'New') in (False, '/', 'New'):
+ vals['name'] = self.env['ir.sequence'].next_by_code('odx.annual.request') or 'New'
+ return super(AnnualPurchaseRequest, self).create(vals)
+
def _compute_attach_no(self):
Attachment = self.env['ir.attachment']
for rec in self:
@@ -147,6 +154,7 @@ class AnnualPurchaseRequest(models.Model):
default = dict(default or {})
default.update({
+ 'name': 'New',
'committee_recommended_vendor_id': False,
'committee_enabled': False,
'committee_type_id': False,
@@ -326,6 +334,10 @@ class AnnualPurchaseRequest(models.Model):
for rec in self:
rec.write({'state': 'to_manager'})
+ def action_to_draft(self):
+ for rec in self:
+ rec.write({'state': 'draft'})
+
def action_manager_approve(self):
for rec in self:
manager = rec.sudo().employee_id.parent_id
@@ -384,14 +396,17 @@ class AnnualPurchaseRequest(models.Model):
self.write({'state':'rejected'})
def action_cancel(self):
- for request in self:
- related_orders = self.env['purchase.order'].search([('annual_request_id', '=', request.id)])
-
- for order in related_orders:
- if order.state:
- order.button_cancel()
-
- request.write({'state': 'cancel'})
+ self.ensure_one()
+ 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):
for rec in self:
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 927084232..9a01ee5b2 100644
--- a/odex25_purchase/odex25_annual_purchase/security/ir.model.access.csv
+++ b/odex25_purchase/odex25_annual_purchase/security/ir.model.access.csv
@@ -7,3 +7,4 @@ 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_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_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
diff --git a/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml b/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml
index e61414f3f..5b44e7b79 100644
--- a/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml
+++ b/odex25_purchase/odex25_annual_purchase/security/odex25_security.xml
@@ -15,4 +15,8 @@
Committee
+
+ To Draft
+
+
diff --git a/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml b/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml
index 18c1d4a28..d700ac8d1 100644
--- a/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml
+++ b/odex25_purchase/odex25_annual_purchase/views/annual_request_views.xml
@@ -33,7 +33,8 @@
-
+
+
diff --git a/odex25_purchase/odex25_annual_purchase/wizard/__init__.py b/odex25_purchase/odex25_annual_purchase/wizard/__init__.py
new file mode 100644
index 000000000..d7d631b9b
--- /dev/null
+++ b/odex25_purchase/odex25_annual_purchase/wizard/__init__.py
@@ -0,0 +1 @@
+from . import annual_cancel_wizard
\ No newline at end of file
diff --git a/odex25_purchase/odex25_annual_purchase/wizard/annual_cancel_wizard.py b/odex25_purchase/odex25_annual_purchase/wizard/annual_cancel_wizard.py
new file mode 100644
index 000000000..0278f2ac6
--- /dev/null
+++ b/odex25_purchase/odex25_annual_purchase/wizard/annual_cancel_wizard.py
@@ -0,0 +1,27 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+
+class AnnualRequestCancelWizard(models.TransientModel):
+ _name = 'odx.annual.request.cancel.wizard'
+ _description = 'Cancel Annual Request Wizard'
+
+ request_id = fields.Many2one('odx.annual.request', string='Request', required=True)
+ reason = fields.Text(string='Cancellation Reason', required=True)
+
+ def action_confirm(self):
+ self.ensure_one()
+ request = self.request_id
+
+ related_orders = self.env['purchase.order'].search([('annual_request_id', '=', request.id)])
+ for order in related_orders:
+ if order.state:
+ order.button_cancel()
+
+ request.message_post(body=_("Cancelled: %s") % (self.reason or ''))
+
+ vals = {'state': 'cancel'}
+ if 'cancel_reason' in request._fields:
+ vals['cancel_reason'] = self.reason
+ request.write(vals)
+
+ return {'type': 'ir.actions.act_window_close'}
diff --git a/odex25_purchase/odex25_annual_purchase/wizard/annual_cancel_wizard_view.xml b/odex25_purchase/odex25_annual_purchase/wizard/annual_cancel_wizard_view.xml
new file mode 100644
index 000000000..dba6c2e24
--- /dev/null
+++ b/odex25_purchase/odex25_annual_purchase/wizard/annual_cancel_wizard_view.xml
@@ -0,0 +1,27 @@
+
+
+
+ odx.annual.request.cancel.wizard.form
+ odx.annual.request.cancel.wizard
+
+
+
+
+
+
+ Cancel Request
+ odx.annual.request.cancel.wizard
+ form
+ new
+
+
+
\ No newline at end of file