From 6a8b6d97e2f7814843935b179bfe5390861d8e6c Mon Sep 17 00:00:00 2001 From: Mqdd Date: Wed, 3 Dec 2025 09:17:06 +0700 Subject: cannot approve requisition when has same product in so --- indoteknik_custom/models/requisition.py | 39 +++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index bcdafb12..39251a45 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -77,9 +77,20 @@ class Requisition(models.Model): vals['number'] = self.env['ir.sequence'].next_by_code('requisition') or '0' result = super(Requisition, self).create(vals) return result - + + def check_product_line_to_so(self): + for req in self: + for prod_line in req.requisition_lines: + match = self.env['sale.order.line'].search([ + ('product_id', '=', prod_line.product_id.id), ('order_id', '=', req.sale_order_id.id) + ]) + if match: + raise UserError ('Product sudah di SO tidak approve') + + def button_approve(self): state = ['done', 'sale'] + self.check_product_line_to_so() if self.sale_order_id.state in state: raise UserError('SO sudah Confirm, akan berakibat double Purchase melalui PJ') if self.env.user.id not in [21, 19, 28]: @@ -98,9 +109,9 @@ class Requisition(models.Model): raise UserError('Sudah pernah di create PO') if not self.sale_order_id: raise UserError('Tidak ada link dengan Sales Order, tidak bisa dihitung sebagai Plafon Qty di PO') - + vendor_ids = self.env['requisition.line'].read_group([ - ('requisition_id', '=', self.id), + ('requisition_id', '=', self.id), ('partner_id', '!=', False) ], fields=['partner_id'], groupby=['partner_id']) @@ -116,7 +127,7 @@ class Requisition(models.Model): 'type': 'ir.actions.act_window', 'domain': [('id', 'in', po_ids)], } - + def create_po_by_vendor(self, vendor_id): current_time = datetime.now() @@ -137,7 +148,7 @@ class Requisition(models.Model): } domain = [ - ('requisition_id', '=', self.id), + ('requisition_id', '=', self.id), ('partner_id', '=', vendor_id), ('qty_purchase', '>', 0) ] @@ -151,8 +162,8 @@ class Requisition(models.Model): new_po.name = new_po.name + "/R/" + str(i + 1) po_ids.append(new_po.id) lines = requisition_line.search( - domain, - offset=i * PRODUCT_PER_PO, + domain, + offset=i * PRODUCT_PER_PO, limit=PRODUCT_PER_PO ) tax = [22] @@ -179,7 +190,7 @@ class Requisition(models.Model): self.is_po = True return po_ids - + # def create_po_from_requisition(self): # if not self.requisition_lines: # raise UserError('Tidak ada Lines, belum bisa create PO') @@ -187,7 +198,7 @@ class Requisition(models.Model): # raise UserError('Sudah pernah di create PO') # current_time = datetime.now() # vendor_ids = self.env['requisition.line'].read_group([('requisition_id', '=', self.id), ('partner_id', '!=', False)], fields=['partner_id'], groupby=['partner_id']) - + # counter_po_number = 0 # po_ids = [] # for vendor in vendor_ids: @@ -203,7 +214,7 @@ class Requisition(models.Model): # 'note_description': 'from Purchase Requisition' # } # param_requisition_line = [ - # ('requisition_id', '=', self.id), + # ('requisition_id', '=', self.id), # ('partner_id', '=', vendor['partner_id'][0]), # ('qty_purchase', '>', 0) # ] @@ -238,7 +249,7 @@ class Requisition(models.Model): # tax = [22] # param_line = { - + # 'sequence': count, # 'product_id': product.product_id.id, # 'product_qty': product.qty_purchase, @@ -251,7 +262,7 @@ class Requisition(models.Model): # new_line = self.env['purchase.order.line'].create([param_line]) # if new_po: # new_line.write({ - # 'order_id': new_po.id, + # 'order_id': new_po.id, # }) # product.current_po_id = new_po.id # product.current_po_line_id = new_line.id @@ -298,7 +309,7 @@ class RequisitionLine(models.Model): taxes = 24 human_last_update = purchase_price.human_last_update or datetime.min system_last_update = purchase_price.system_last_update or datetime.min - + #if purchase_price.taxes_product_id.type_tax_use == 'purchase': price = purchase_price.product_price taxes = purchase_price.taxes_product_id.id or 24 @@ -307,7 +318,7 @@ class RequisitionLine(models.Model): #if purchase_price.taxes_system_id.type_tax_use == 'purchase': price = purchase_price.system_price taxes = purchase_price.taxes_system_id.id or 24 - + return price, taxes @api.onchange('price_unit') -- cgit v1.2.3 From 015269c0268f2cd9a38ad708c8e26bf85a79fcf3 Mon Sep 17 00:00:00 2001 From: Mqdd Date: Wed, 3 Dec 2025 09:26:03 +0700 Subject: requisition add product match in create po button --- indoteknik_custom/models/requisition.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 39251a45..64ef4fc8 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -85,7 +85,7 @@ class Requisition(models.Model): ('product_id', '=', prod_line.product_id.id), ('order_id', '=', req.sale_order_id.id) ]) if match: - raise UserError ('Product sudah di SO tidak approve') + raise UserError ('Product sudah di SO tidak approve/create PO') def button_approve(self): @@ -101,6 +101,7 @@ class Requisition(models.Model): self.merchandise_approve = True def create_po_from_requisition(self): + self.check_product_line_to_so() if not self.sales_approve and not self.merchandise_approve: raise UserError('Harus Di Approve oleh Darren atau Rafly') if not self.requisition_lines: -- cgit v1.2.3