summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriFP <andrifebriyadiputra@gmail.com>2025-04-23 08:59:23 +0700
committerAndriFP <andrifebriyadiputra@gmail.com>2025-04-23 08:59:23 +0700
commit30382037882e15bb43f56fc0d81500faeb364fa5 (patch)
tree00aec8b213095885947f06e844a1aca5e1c26728
parent71e47cc88e250600c2975a114dd420f27fda36b3 (diff)
(andri) add field min amt tax vendor PO
-rwxr-xr-xindoteknik_custom/models/purchase_order.py76
-rw-r--r--indoteknik_custom/models/res_partner.py4
-rw-r--r--indoteknik_custom/views/vendor_payment_term.xml2
3 files changed, 82 insertions, 0 deletions
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py
index 5e9e509f..60d26105 100755
--- a/indoteknik_custom/models/purchase_order.py
+++ b/indoteknik_custom/models/purchase_order.py
@@ -122,6 +122,80 @@ class PurchaseOrder(models.Model):
title="Payment Term Diperbarui"
)
+ def _check_tax_rule(self):
+ _logger.info("Check Tax Rule Terpanggil")
+
+ # Pajak 11%
+ tax_11 = self.env['account.tax'].search([
+ ('type_tax_use', '=', 'purchase'),
+ ('name', 'ilike', '11%')
+ ], limit=1)
+
+ # Pajak "No Tax"
+ no_tax = self.env['account.tax'].search([
+ ('type_tax_use', '=', 'purchase'),
+ ('name', 'ilike', 'no tax')
+ ], limit=1)
+
+ if not tax_11:
+ raise UserError("Pajak 11% tidak ditemukan. Mohon pastikan pajak 11% tersedia.")
+
+ if not no_tax:
+ raise UserError("Pajak 'No Tax' tidak ditemukan. Harap buat tax dengan nama 'No Tax' dan tipe 'Purchase'.")
+
+ for order in self:
+ partner = order.partner_id
+ minimum_tax = partner.minimum_amount_tax
+
+ _logger.info("Partner ID: %s, Minimum Tax: %s, Untaxed Total: %s", partner.id, minimum_tax, order.amount_untaxed)
+
+ if not minimum_tax or not order.order_line:
+ continue
+
+ if order.amount_untaxed < minimum_tax:
+ _logger.info(">>> Total di bawah minimum → apply No Tax")
+ for line in order.order_line:
+ line.taxes_id = [(6, 0, [no_tax.id])]
+
+ if self.env.context.get('notify_tax'):
+ self.env.user.notify_info(
+ message="Total belanja PO belum mencapai minimum pajak vendor. "
+ "Pajak diganti menjadi 'No Tax'.",
+ title="Pajak Diperbarui",
+ sticky=True
+ )
+ else:
+ _logger.info(">>> Total memenuhi minimum → apply Pajak 11%")
+ for line in order.order_line:
+ line.taxes_id = [(6, 0, [tax_11.id])]
+
+ if self.env.context.get('notify_tax'):
+ self.env.user.notify_info(
+ message="Total belanja sebelum pajak telah memenuhi minimum. "
+ "Pajak 11%% diterapkan",
+ title="Pajak Diperbarui",
+ sticky=True
+ )
+
+ @api.onchange('order_line')
+ def _onchange_order_line_tax_default(self):
+ _logger.info("Onchange Order Line Tax Default Terpanggil")
+
+ no_tax = self.env['account.tax'].search([
+ ('type_tax_use', '=', 'purchase'),
+ ('name', 'ilike', 'no tax')
+ ], limit=1)
+
+ if not no_tax:
+ _logger.info("No Tax tidak ditemukan")
+ return
+
+ for order in self:
+ for line in order.order_line:
+ if not line.taxes_id:
+ line.taxes_id = [(6, 0, [no_tax.id])]
+ _logger.info("Auto-set No tax ke baris product: %s", line.product_id.name)
+
@api.onchange('total_cost_service')
def _onchange_total_cost_service(self):
for order in self:
@@ -1117,12 +1191,14 @@ class PurchaseOrder(models.Model):
def create(self, vals):
order = super().create(vals)
order.with_context(skip_check_payment=True)._check_payment_term()
+ order.with_context(notify_tax=True)._check_tax_rule()
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()
+ self.with_context(notify_tax=True)._check_tax_rule()
return res
class PurchaseOrderUnlockWizard(models.TransientModel):
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index 84edafea..191a44c9 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -44,6 +44,10 @@ class ResPartner(models.Model):
string="Minimum Order",
help="Jika total belanja kurang dari ini, maka payment term akan otomatis menjadi CBD."
)
+ minimum_amount_tax = fields.Float(
+ string="Minimum Amount Tax",
+ help="Jika total belanja kurang dari ini, maka tax akan otomatis menjadi 0%."
+ )
category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', domain=lambda self: self._get_default_category_domain())
@api.model
diff --git a/indoteknik_custom/views/vendor_payment_term.xml b/indoteknik_custom/views/vendor_payment_term.xml
index f7c7e4dc..7d16b129 100644
--- a/indoteknik_custom/views/vendor_payment_term.xml
+++ b/indoteknik_custom/views/vendor_payment_term.xml
@@ -9,6 +9,7 @@
<field name="name"/>
<field name="parent_id"/>
<field name="minimum_amount"/>
+ <field name="minimum_amount_tax"/>
<field name="property_supplier_payment_term_id"/>
</tree>
</field>
@@ -25,6 +26,7 @@
<field name="name"/>
<field name="parent_id" readonly="1"/>
<field name="minimum_amount"/>
+ <field name="minimum_amount_tax"/>
<field name="property_supplier_payment_term_id"/>
</group>
</group>