diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-07-09 10:47:11 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-07-09 10:47:11 +0700 |
| commit | 9dba3deae4024bf083220076fccc9295a9ccecf3 (patch) | |
| tree | d06c2245b74ff4b20ae6e6a56048a5627f1451c8 | |
| parent | 22d34a07dc8755158f0c85b15d60e348deda0fc2 (diff) | |
refactor code margin po
| -rwxr-xr-x | indoteknik_custom/models/purchase_order.py | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index 32ddf1e5..9e6d8556 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -612,10 +612,13 @@ class PurchaseOrder(models.Model): def compute_total_margin_from_apo(self): sum_so_margin = sum_sales_price = sum_margin = 0 for line in self.order_sales_match_line: + # Mencari purchase order line terkait po_line = self.env['purchase.order.line'].search([ ('product_id', '=', line.product_id.id), ('order_id', '=', line.purchase_order_id.id) ], limit=1) + + # Mencari sale order line terkait sale_order_line = line.sale_line_id if not sale_order_line: sale_order_line = self.env['sale.order.line'].search([ @@ -623,25 +626,30 @@ class PurchaseOrder(models.Model): ('order_id', '=', line.sale_id.id) ], limit=1, order='price_reduce_taxexcl') - sum_so_margin += line.qty_po / line.qty_so * sale_order_line.item_margin - # sales_price = sale_order_line.price_reduce_taxexcl * sale_order_line.product_uom_qty - sales_price = sale_order_line.price_reduce_taxexcl * po_line.product_qty - if sale_order_line.order_id.shipping_cost_covered == 'indoteknik': - sales_price -= sale_order_line.delivery_amt_line - if sale_order_line.order_id.fee_third_party > 0: - sales_price -= sale_order_line.fee_third_party_line - sum_sales_price += sales_price - purchase_price = po_line.price_subtotal - if line.purchase_order_id.delivery_amount > 0: - purchase_price += po_line.delivery_amt_line - real_item_margin = sales_price - purchase_price - sum_margin += real_item_margin + # Menghitung margin per item + if sale_order_line and po_line: + so_margin = (line.qty_po / line.qty_so) * sale_order_line.item_margin + sum_so_margin += so_margin + + sales_price = sale_order_line.price_reduce_taxexcl * line.qty_po + if sale_order_line.order_id.shipping_cost_covered == 'indoteknik': + sales_price -= (sale_order_line.delivery_amt_line / sale_order_line.product_uom_qty) * line.qty_po + if sale_order_line.order_id.fee_third_party > 0: + sales_price -= (sale_order_line.fee_third_party_line / sale_order_line.product_uom_qty) * line.qty_po + sum_sales_price += sales_price + + purchase_price = po_line.price_subtotal / po_line.product_qty * line.qty_po + if line.purchase_order_id.delivery_amount > 0: + purchase_price += (po_line.delivery_amt_line / po_line.product_qty) * line.qty_po + real_item_margin = sales_price - purchase_price + sum_margin += real_item_margin 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 + else: self.total_margin = 0 self.total_percent_margin = 0 |
