diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-03-25 13:07:44 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-03-25 13:07:44 +0700 |
| commit | b2377426bec8aa334277aac48b0b25f0dfac420f (patch) | |
| tree | 49c6a042e0fe29295231b1d409d705a92ddbfc03 /indoteknik_custom/models/purchase_order.py | |
| parent | a05da3fad1855cbf2ce4cc7645f1fda79cae037c (diff) | |
purchasing job feedback
Diffstat (limited to 'indoteknik_custom/models/purchase_order.py')
| -rwxr-xr-x | indoteknik_custom/models/purchase_order.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index 99d79072..1cdf5094 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -53,6 +53,7 @@ class PurchaseOrder(models.Model): responsible_ids = fields.Many2many('res.users', string='Responsibles', compute='_compute_responsibles') status_paid_cbd = fields.Boolean(string='Paid Status', tracking=3, help='Field ini diisi secara manual oleh Finance AP dan hanya untuk status PO CBD') revisi_po = fields.Boolean(string='Revisi', tracking=3) + from_apo = fields.Boolean(string='From APO') @api.model def action_multi_cancel(self): @@ -442,6 +443,10 @@ class PurchaseOrder(models.Model): return res def compute_total_margin(self): + if self.from_apo: + self.compute_total_margin_from_apo() + return + sum_so_margin = sum_sales_price = sum_margin = 0 for line in self.order_line: sale_order_line = line.so_line_id @@ -475,6 +480,59 @@ class PurchaseOrder(models.Model): self.total_so_margin = 0 self.total_so_percent_margin = 0 + def compute_total_margin_from_apo(self): + purchase_price_dict = {} + + for lines in self.order_line: + product_id = lines.product_id.id + + if product_id not in purchase_price_dict: + purchase_price_dict[product_id] = lines.price_subtotal + + sum_so_margin = sum_sales_price = sum_margin = 0 + for line in self.order_sales_match_line: + sale_order_line = line.sale_line_id + + if not sale_order_line: + sale_order_line = self.env['sale.order.line'].search([ + ('product_id', '=', line.product_id.id), + ('order_id', '=', line.sale_id.id) + ], limit=1, order='price_reduce_taxexcl') + + sum_so_margin += sale_order_line.item_margin + + sales_price = sale_order_line.price_reduce_taxexcl * sale_order_line.product_uom_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 + + product_id = sale_order_line.product_id.id + + purchase_price = purchase_price_dict.get(product_id, 0) + + if line.purchase_order_id.delivery_amount > 0: + purchase_price += line.delivery_amt_line + + 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 + self.total_so_margin = 0 + self.total_so_percent_margin = 0 + def compute_amt_total_without_service(self): for order in self: sum_price_total = 0 |
