From a774c1bd0b2dc1ee27a08b6b4da7162bdb7a9365 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 15 Mar 2024 11:12:46 +0700 Subject: Fix compute fulfillment feature in sale order --- indoteknik_custom/models/report_stock_forecasted.py | 9 +-------- indoteknik_custom/models/sale_order.py | 11 +++++++++++ indoteknik_custom/models/sale_order_line.py | 3 --- indoteknik_custom/models/sales_order_fullfillment.py | 2 +- indoteknik_custom/views/sale_order.xml | 1 + 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/indoteknik_custom/models/report_stock_forecasted.py b/indoteknik_custom/models/report_stock_forecasted.py index 7ae93fda..44bdfe3e 100644 --- a/indoteknik_custom/models/report_stock_forecasted.py +++ b/indoteknik_custom/models/report_stock_forecasted.py @@ -20,17 +20,10 @@ class ReplenishmentReport(models.AbstractModel): result_dict.setdefault(order_id, []).append((result, quantity)) for order_id, results in result_dict.items(): - sale_order_lines = self.env['sale.order.line'].search([('order_id', '=', order_id)]) sales_order = self.env['sale.order'].browse(order_id) for result, quantity in results: - fullfillment = self.env['sales.order.fullfillment'].search([('sales_order_id', '=', sales_order.id), ('product_id', '=', product_id)]) - if fullfillment: - fullfillment.reserved_from = result - fullfillment.qty_fullfillment = quantity - continue - - fullfillment.create({ + self.env['sales.order.fullfillment'].create({ 'sales_order_id': sales_order.id, 'product_id': product_id, 'reserved_from': result, diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 32ffc964..d046bb00 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -86,6 +86,17 @@ class SaleOrder(models.Model): picking_iu_id = fields.Many2one('stock.picking', 'Picking IU') helper_by_id = fields.Many2one('res.users', 'Helper By') eta_date = fields.Datetime(string='ETA Date', copy=False, compute='_compute_eta_date') + compute_fullfillment = fields.Boolean(string='Compute Fullfillment', compute="_compute_fullfillment") + + def _compute_fullfillment(self): + for rec in self: + for fullfillment in rec.fullfillment_line: + fullfillment.sales_order_id = False + + for line in rec.order_line: + line._compute_reserved_from() + + rec.compute_fullfillment = True def _compute_eta_date(self): max_leadtime = 0 diff --git a/indoteknik_custom/models/sale_order_line.py b/indoteknik_custom/models/sale_order_line.py index 95c9cdfa..5b5b35d6 100644 --- a/indoteknik_custom/models/sale_order_line.py +++ b/indoteknik_custom/models/sale_order_line.py @@ -67,9 +67,6 @@ class SaleOrderLine(models.Model): reserved_qty = sum(move.product_uom_qty for move in stock_moves) line.qty_reserved = reserved_qty - if reserved_qty > 0: - self._compute_reserved_from() - def _compute_reserved_from(self): for line in self: report_stock_forecasted = self.env['report.stock.report_product_product_replenishment'] diff --git a/indoteknik_custom/models/sales_order_fullfillment.py b/indoteknik_custom/models/sales_order_fullfillment.py index db6b7369..97e6d5c2 100644 --- a/indoteknik_custom/models/sales_order_fullfillment.py +++ b/indoteknik_custom/models/sales_order_fullfillment.py @@ -9,7 +9,7 @@ _logger = logging.getLogger(__name__) class SalesOrderFullfillment(models.Model): _name = 'sales.order.fullfillment' - sales_order_id = fields.Many2one('sale.order', string='Sale Order', index=True, required=True, ondelete='cascade') + sales_order_id = fields.Many2one('sale.order', string='Sale Order') product_id = fields.Many2one('product.product', string='Product') reserved_from = fields.Char(string='Reserved From', copy=False) qty_fullfillment = fields.Float(string='Qty') \ No newline at end of file diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index 0f21d65f..7d1d4c4a 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -43,6 +43,7 @@ + -- cgit v1.2.3