summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriFP <andrifebriyadiputra@gmail.com>2025-04-22 10:57:24 +0700
committerAndriFP <andrifebriyadiputra@gmail.com>2025-04-22 10:57:24 +0700
commitfc5ed4aab391eb3ec09cae6179209fe30c1bc57f (patch)
treefbde09cefffe2204096695758f1487fc1ee0ac12
parent286d1c7d91b3e957e26a2ef1350a80faba9405ed (diff)
(andri) add min amount vendor payment
-rwxr-xr-xindoteknik_custom/models/purchase_order.py45
-rw-r--r--indoteknik_custom/views/res_partner.xml1
-rw-r--r--indoteknik_custom/views/vendor_payment_term.xml2
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>