diff options
| author | AndriFP <andrifebriyadiputra@gmail.com> | 2025-04-22 10:57:24 +0700 |
|---|---|---|
| committer | AndriFP <andrifebriyadiputra@gmail.com> | 2025-04-22 10:57:24 +0700 |
| commit | fc5ed4aab391eb3ec09cae6179209fe30c1bc57f (patch) | |
| tree | fbde09cefffe2204096695758f1487fc1ee0ac12 | |
| parent | 286d1c7d91b3e957e26a2ef1350a80faba9405ed (diff) | |
(andri) add min amount vendor payment
| -rwxr-xr-x | indoteknik_custom/models/purchase_order.py | 45 | ||||
| -rw-r--r-- | indoteknik_custom/views/res_partner.xml | 1 | ||||
| -rw-r--r-- | indoteknik_custom/views/vendor_payment_term.xml | 2 |
3 files changed, 48 insertions, 0 deletions
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index b107f389..5e9e509f 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -89,6 +89,39 @@ class PurchaseOrder(models.Model): store_name = fields.Char(string='Nama Toko') purchase_order_count = fields.Integer('Purchase Order Count', related='partner_id.purchase_order_count') + # cek payment term + def _check_payment_term(self): + _logger.info("Check Payment Term Terpanggil") + + cbd_term = self.env['account.payment.term'].search([ + ('name', 'ilike', 'Cash Before Delivery') + ], limit=1) + + for order in self: + if not order.partner_id or not order.partner_id.minimum_amount: + continue + + if not order.order_line or order.amount_total == 0: + continue + + if order.amount_total < order.partner_id.minimum_amount: + if cbd_term and order.payment_term_id != cbd_term: + order.payment_term_id = cbd_term.id + self.env.user.notify_info( + message="Total belanja PO belum mencapai minimum yang ditentukan vendor. " + "Payment Term telah otomatis diubah menjadi Cash Before Delivery (C.B.D).", + title="Payment Term Diperbarui" + ) + else: + vendor_term = order.partner_id.property_supplier_payment_term_id + if vendor_term and order.payment_term_id != vendor_term: + order.payment_term_id = vendor_term.id + self.env.user.notify_info( + message=f"Total belanja PO telah memenuhi jumlah minimum vendor. " + f"Payment Term otomatis dikembalikan ke pengaturan vendor awal: *{vendor_term.name}*.", + title="Payment Term Diperbarui" + ) + @api.onchange('total_cost_service') def _onchange_total_cost_service(self): for order in self: @@ -672,6 +705,7 @@ class PurchaseOrder(models.Model): raise UserError("Produk "+line.product_id.name+" memiliki vendor berbeda dengan SO (Vendor PO: "+str(self.partner_id.name)+", Vendor SO: "+str(line.so_line_id.vendor_id.name)+")") def button_confirm(self): + # self._check_payment_term() # check payment term res = super(PurchaseOrder, self).button_confirm() current_time = datetime.now() self.check_ppn_mix() @@ -1079,6 +1113,17 @@ class PurchaseOrder(models.Model): return super(PurchaseOrder, self).button_unlock() + @api.model #override custom create & write for check payment term + def create(self, vals): + order = super().create(vals) + order.with_context(skip_check_payment=True)._check_payment_term() + return order + + def write(self, vals): + res = super().write(vals) + if not self.env.context.get('skip_check_payment'): + self.with_context(skip_check_payment=True)._check_payment_term() + return res class PurchaseOrderUnlockWizard(models.TransientModel): _name = 'purchase.order.unlock.wizard' diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index cb9fa3ac..0208a9c2 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -104,6 +104,7 @@ <field name="estimasi_tempo"/> <field name="tempo_duration"/> <field name="tempo_limit"/> + <field name="minimum_amount"/> <field name="category_produk_ids" widget="many2many_tags"/> </group> </group> diff --git a/indoteknik_custom/views/vendor_payment_term.xml b/indoteknik_custom/views/vendor_payment_term.xml index e0e96388..f7c7e4dc 100644 --- a/indoteknik_custom/views/vendor_payment_term.xml +++ b/indoteknik_custom/views/vendor_payment_term.xml @@ -8,6 +8,7 @@ <field name="display_name"/> <field name="name"/> <field name="parent_id"/> + <field name="minimum_amount"/> <field name="property_supplier_payment_term_id"/> </tree> </field> @@ -23,6 +24,7 @@ <group> <field name="name"/> <field name="parent_id" readonly="1"/> + <field name="minimum_amount"/> <field name="property_supplier_payment_term_id"/> </group> </group> |
