From f53312f3f2c78d50d838c249a8d0eb1ed1e5b7f2 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 5 Mar 2024 16:05:41 +0700 Subject: Add web sale approval feature --- indoteknik_custom/models/res_partner.py | 6 ++++++ indoteknik_custom/models/sale_order.py | 5 +++++ 2 files changed, 11 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index a7302245..c7b8865f 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -23,6 +23,12 @@ class ResPartner(models.Model): digital_invoice_tax = fields.Boolean(string="Digital Invoice & Faktur Pajak") is_potential = fields.Boolean(string='Potential') pakta_integritas = fields.Boolean(string='Pakta Integritas') + + use_so_approval = fields.Boolean(string='Use SO Approval') + web_role = fields.Selection([ + ('manager', 'Manager'), + ('director', 'Director') + ], string='Web Role') def get_child_ids(self): partner = self.env['res.partner'].search([('id', '=', self.id)], limit=1) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index f44f624e..988f13c8 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -88,6 +88,11 @@ class SaleOrder(models.Model): picking_iu_id = fields.Many2one('stock.picking', 'Picking IU') helper_by_id = fields.Many2one('res.users', 'Helper By') eta_date = fields.Datetime(string='ETA Date', copy=False, compute='_compute_eta_date') + web_approval = fields.Selection([ + ('company', 'Company'), + ('cust_manager', 'Customer Manager'), + ('cust_director', 'Customer Director') + ], string='Web Approval', copy=False) def _compute_eta_date(self): max_leadtime = 0 -- cgit v1.2.3 From d569804844ee77f9f08879dda8c3f1e292470813 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 6 Mar 2024 10:40:10 +0700 Subject: Add action web approve on sale order, approval_step on get so api, role aliases on login --- indoteknik_custom/models/sale_order.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 988f13c8..6fe1db3b 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -636,7 +636,20 @@ class SaleOrder(models.Model): line.discount = line.initial_discount line.initial_discount = False - + def action_web_approve(self): + if self.env.uid != self.partner_id.user_id.id: + raise UserError('You are not authorized to approve this order. Only %s can approve this order.' % self.partner_id.user_id.name) + + self.web_approval = 'company' + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': 'Notification', + 'message': 'Berhasil approve web order', + 'next': {'type': 'ir.actions.act_window_close'}, + } + } -- cgit v1.2.3 From 46d50e970b14ca7f3a8da53702ef2933178dbbf0 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 6 Mar 2024 13:49:43 +0700 Subject: Fix cancel web approval in sale order --- indoteknik_custom/models/sale_order.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index d4c70fdc..fb6a457d 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -477,6 +477,9 @@ class SaleOrder(models.Model): raise UserError("Invoice harus di Cancel dahulu") elif self.have_outstanding_picking: raise UserError("DO harus di Cancel dahulu") + + if not self.web_approval: + self.web_approval = 'company' # elif self.have_outstanding_po: # raise UserError("PO harus di Cancel dahulu") -- cgit v1.2.3 From 29dfec334ebf6a15a8a66e4af564fd5d812d8d67 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 6 Mar 2024 15:42:12 +0700 Subject: Add validation confirm when partner use approval feature --- indoteknik_custom/models/sale_order.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index fb6a457d..0cd7067a 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -450,6 +450,13 @@ class SaleOrder(models.Model): order._validate_order() order.order_line.validate_line() + main_parent = order.partner_id.get_main_parent() + SYSTEM_UID = 25 + FROM_WEBSITE = order.create_uid.id == SYSTEM_UID + + if FROM_WEBSITE and main_parent.use_so_approval and order.web_approval != 'cust_director': + raise UserError("This order not yet approved by customer director") + if order.validate_partner_invoice_due(): return self._create_notification_action('Notification', 'Terdapat invoice yang telah melewati batas waktu, mohon perbarui pada dokumen Due Extension') -- cgit v1.2.3 From b7b71be97a73f454f2df9fd9a37f5017c82192ae Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 12 Mar 2024 11:50:21 +0700 Subject: Add email template notification web approve on sale order --- indoteknik_custom/models/res_partner.py | 9 +++++++++ indoteknik_custom/models/sale_order.py | 3 +++ 2 files changed, 12 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index c7b8865f..467d3be9 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -37,6 +37,15 @@ class ResPartner(models.Model): partner_child_ids += [x['id'] for x in partner.parent_id.child_ids] partner_child_ids += [partner.parent_id.id] return partner_child_ids + + def get_approve_partner_ids(self, type=False): + parent = self.parent_id or self + partners = self.search([('parent_id', '=', parent.id), ('web_role', 'in', ['manager', 'director'])]) + + if type == 'email_comma_sep': + return ",".join([x.email for x in partners]) + + return partners @api.constrains('kota_id') def update_product_solr_flag(self): diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 0cd7067a..b7578da0 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -651,6 +651,9 @@ class SaleOrder(models.Model): raise UserError('You are not authorized to approve this order. Only %s can approve this order.' % self.partner_id.user_id.name) self.web_approval = 'company' + template = self.env.ref('indoteknik_custom.mail_template_sale_order_web_approve_notification') + template.send_mail(self.id, force_send=True) + return { 'type': 'ir.actions.client', 'tag': 'display_notification', -- cgit v1.2.3