From 54ce5a6396f5d5365d8afba0823167dfb5561cc5 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Thu, 22 Sep 2022 17:20:57 +0700 Subject: add approval validation in po confirmation --- indoteknik_custom/models/purchase_order.py | 51 ++++++++++++++++++++++++++++-- indoteknik_custom/views/purchase_order.xml | 6 ++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index fd02cd2b..b53f973f 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -1,4 +1,5 @@ -from odoo import fields, models, api +from odoo import fields, models, api, _ +from odoo.exceptions import AccessError, UserError, ValidationError class PurchaseOrder(models.Model): @@ -13,8 +14,8 @@ class PurchaseOrder(models.Model): 'Total Percent Margin', compute='compute_total_margin', help="Total % Margin in Sales Order Header") approval_status = fields.Selection([ - ('pengajuan1', 'Approval Manager'), #siapa? - ('pengajuan2', 'Approval Pimpinan'), #akbar + ('pengajuan1', 'Approval Manager'), #siapa? darren - 11 + ('pengajuan2', 'Approval Pimpinan'), #akbar - 7 ('approved', 'Approved'), ], string='Approval Status', readonly=True, copy=False, index=True, tracking=3) count_line_product = fields.Float('Count Line Product', compute='compute_count_line_product') @@ -92,3 +93,47 @@ class PurchaseOrder(models.Model): if po.amount_untaxed > 0: total_percent_margin = round((total_margin / po.amount_untaxed), 2) * 100 po.total_percent_margin = total_percent_margin + + def button_confirm(self): + res = super(PurchaseOrder, self).button_confirm() + # for line in self.order_line: + # if line.product_id.id == 232383: + # raise UserError(_('Tidak bisa Confirm menggunakan Produk Sementara')) + for order in self: + approval1 = approval2 = 0 + for line in order.order_line: + if not line.product_id: + continue + if (line.item_percent_margin < 15 or line.item_percent_margin == 100) and \ + (self.env.user.id != 6 and self.env.user.id != 7): # tyas or akbar + approval2 += 1 + elif (line.item_percent_margin >= 15 and line.item_percent_margin < 25) and \ + (self.env.user.id != 6 and self.env.user.id != 7 and self.env.user.id != 11): + approval1 += 1 + if approval2 > 0: + raise UserError("Need Tyas / Akbar Approval") + elif approval1 > 0: + raise UserError("Need Adela Approval") + order.approval_status = 'approved' + return res + + def po_approve(self): + for order in self: + if order.state == 'cancel' or order.state == 'done' or order.state == 'sale': + raise UserError("Status harus draft atau sent") + approval1 = approval2 = 0 + for line in order.order_line: + if not line.product_id: + continue + if (line.item_percent_margin < 15 or line.item_percent_margin == 100) and \ + (self.env.user.id != 6 and self.env.user.id != 7): + approval2 += 1 + elif (line.item_percent_margin >= 15 and line.item_percent_margin < 25) and \ + (self.env.user.id != 6 and self.env.user.id != 7 and self.env.user.id != 11): + approval1 += 1 + if approval2 > 0: + order.approval_status = 'pengajuan2' + elif approval1 > 0: + order.approval_status = 'pengajuan1' + else: + raise UserError("Bisa langsung Confirm") diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml index 7df2ca9f..21ce3c58 100755 --- a/indoteknik_custom/views/purchase_order.xml +++ b/indoteknik_custom/views/purchase_order.xml @@ -14,6 +14,12 @@ attrs="{'invisible': ['|', ('sale_order_id', '=', False), ('state', 'not in', ['draft'])]}" /> + -- cgit v1.2.3