summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2026-02-03 11:41:35 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2026-02-03 11:41:35 +0700
commit4fa6b57647f7f53573bd83d9dd4f0292ab955e1a (patch)
treee616a29eae6683d1b78b1812f5213076f8192dac
parent79be20bab073f75c6dcd070b7c4bac5e7c96a564 (diff)
<Miqdad> fix margin PO
-rwxr-xr-xindoteknik_custom/models/purchase_order.py51
1 files changed, 33 insertions, 18 deletions
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py
index 6b6e6aa2..820f8091 100755
--- a/indoteknik_custom/models/purchase_order.py
+++ b/indoteknik_custom/models/purchase_order.py
@@ -53,9 +53,7 @@ class PurchaseOrder(models.Model):
total_so_percent_margin = fields.Float(
'SO Margin%', compute='compute_total_margin',
help="Total % Margin in Sales Order Header")
- amount_cashback = fields.Float(
- 'Cashback', compute='compute_total_margin',
- help="Total Cashback brand Altama")
+ amount_cashback = fields.Float('Cashback', compute = 'compute_total_margin', help = 'Total Cashback brand Altama')
amount_total_without_service = fields.Float('AmtTotalWithoutService', compute='compute_amt_total_without_service')
summary_qty_po = fields.Float('Total Qty', compute='_compute_summary_qty')
summary_qty_receipt = fields.Float('Summary Qty Receipt', compute='_compute_summary_qty')
@@ -1086,9 +1084,19 @@ class PurchaseOrder(models.Model):
if '/PJ/' in self.name:
price_change_detected = any(line.price_unit_before for line in self.order_line)
if price_change_detected:
- if self.order_sales_match_line:
- if self.total_percent_margin <= 15.0:
- raise UserError("Approval Pimpinan diperlukan jika terdapat perubahan Unit Price pada PO Line dan Memiliki Margin <= 15%")
+ if self.total_percent_margin <= 15.0:
+ raise UserError("Approval Pimpinan diperlukan jika terdapat perubahan Unit Price pada PO Line dan Memiliki Margin <= 15%")
+ else:
+ low_margin_match_so = self.order_sales_match_line.filtered(
+ lambda match: match.so_header_margin <= 15.0
+ )
+ if low_margin_match_so:
+ raise UserError("Approval Pimpinan diperlukan jika pada PO Line yang Matches SO item memiliki header margin SO <= 15%")
+ # else:
+ # is_po_manual = '/A/' not in self.name and '/MO/' not in self.name
+ # if is_po_manual:
+ # if not self.order_sales_match_line:
+ # raise UserError("Tidak ada matches SO, Approval Pimpinan diperlukan.")
self._check_assets_note()
# self._check_payment_term() # check payment term
@@ -1410,18 +1418,25 @@ class PurchaseOrder(models.Model):
purchase_price += line.delivery_amt_line
if line.order_id.delivery_amt > 0:
purchase_price += line.order_id.delivery_amt
+ real_item_margin = sales_price - purchase_price
+ sum_margin += real_item_margin
- cashback_amount = 0.0
+ cashback_amount = 0
if self.partner_id.id == 5571:
cashback_percent = line.product_id.x_manufacture.cashback_percent or 0.0
if cashback_percent > 0:
cashback_amount = purchase_price * cashback_percent
purchase_price -= cashback_amount
- real_item_margin = sales_price - purchase_price
- sum_margin += real_item_margin
+ # line.amount_cashback = cashback_amount
- if sum_so_margin != 0 and sum_sales_price != 0 and sum_margin != 0 and cashback_amount != 0:
+ if sum_so_margin != 0 and sum_sales_price != 0 and sum_margin != 0:
+ self.total_so_margin = sum_so_margin
+ self.total_so_percent_margin = round((sum_so_margin / sum_sales_price), 2) * 100
+ self.total_margin = sum_margin
+ self.total_percent_margin = round((sum_margin / sum_sales_price), 2) * 100
+ self.amount_cashback = 0
+ elif self.partner_id.id == 5571 and sum_so_margin != 0 and sum_sales_price != 0 and sum_margin != 0 and cashback_amount != 0:
self.total_so_margin = sum_so_margin
self.total_so_percent_margin = round((sum_so_margin / sum_sales_price), 2) * 100
self.total_margin = sum_margin
@@ -1435,7 +1450,7 @@ class PurchaseOrder(models.Model):
self.amount_cashback = 0
def compute_total_margin_from_apo(self):
- sum_so_margin = sum_sales_price = sum_margin = 0
+ sum_so_margin = sum_sales_price = sum_margin = cashback_amount = 0
for line in self.order_sales_match_line:
po_line = self.env['purchase.order.line'].search([
('product_id', '=', line.product_id.id),
@@ -1471,17 +1486,17 @@ class PurchaseOrder(models.Model):
purchase_price += (po_line.delivery_amt_line / po_line.product_qty) * qty_po
if line.purchase_order_id.delivery_amt > 0:
purchase_price += line.purchase_order_id.delivery_amt
-
- cashback_amount = 0.0
- if self.partner_id.id == 5571:
- cashback_percent = line.product_id.x_manufacture.cashback_percent or 0.0
- if cashback_percent > 0:
- cashback_amount = purchase_price * cashback_percent
- purchase_price -= cashback_amount
+
+ if self.partner_id.id == 5571:
+ cashback_percent = line.product_id.x_manufacture.cashback_percent or 0.0
+ if cashback_percent > 0:
+ cashback_amount = purchase_price * cashback_percent
+ purchase_price -= cashback_amount
real_item_margin = sales_price - purchase_price
sum_margin += real_item_margin
+ self.amount_cashback = cashback_amount
# Akumulasi hasil akhir
if sum_sales_price != 0:
self.total_so_margin = sum_so_margin