summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/automatic_purchase.py72
1 files changed, 46 insertions, 26 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py
index f4ecdcd6..f7c0d75e 100644
--- a/indoteknik_custom/models/automatic_purchase.py
+++ b/indoteknik_custom/models/automatic_purchase.py
@@ -314,6 +314,8 @@ class AutomaticPurchase(models.Model):
sale_ids_set = set()
sale_ids_name = set()
+ retur_cache = {}
+ incoming_cache = {}
for sale_order in matches_so:
exist = self.env['purchase.order.sales.match'].search([
('product_id', '=', sale_order.product_id.id),
@@ -324,32 +326,50 @@ class AutomaticPurchase(models.Model):
skip_line = False
- for existing in exist:
- if existing.purchase_order_id.state in ['done', 'purchase']:
- # if existing.purchase_line_id.qty_received != existing.purchase_line_id.product_qty:
- # break
-
- incoming = self.env['stock.move'].search([
- ('reference', 'ilike', 'BU/INPUT'),
- ('state', 'not in', ['done','cancel']),
- ('product_id', '=', existing.product_id.id),
- ('purchase_line_id', '=', existing.purchase_line_id.id),
- ], limit=1)
-
- if incoming:
- skip_line = True
- break
-
- retur = self.env['stock.move'].search([
- ('reference', 'ilike', 'BU/INPUT'),
- ('state', 'in', ['done']),
- ('product_id', '=', existing.product_id.id),
- ('purchase_line_id', '=', existing.purchase_line_id.id),
- ], limit=1)
-
- if retur and existing.purchase_line_id.qty_received == existing.purchase_line_id.product_qty:
- skip_line = True
- break
+ sale_line_id = sale_order.sale_line_id.id
+
+ if sale_line_id not in incoming_cache:
+
+ qty_incoming = 0
+
+ for existing in exist:
+ if existing.purchase_order_id.state in ['done', 'purchase']:
+
+ incoming_moves = self.env['stock.move'].search([
+ ('reference', 'ilike', 'BU/INPUT'),
+ ('state', 'not in', ['done','cancel']),
+ ('product_id', '=', existing.product_id.id),
+ ('purchase_line_id', '=', existing.purchase_line_id.id),
+ ])
+
+ qty_incoming += sum(incoming_moves.mapped('product_uom_qty'))
+
+ incoming_cache[sale_line_id] = qty_incoming
+
+
+ qty_need = sale_order.sale_line_id.product_uom_qty
+
+ if incoming_cache[sale_line_id] >= qty_need:
+ skip_line = True
+
+ sale_line_id = sale_order.sale_line_id.id
+
+ if sale_line_id not in retur_cache:
+
+ fully_received = True
+
+ for existing in exist:
+ if existing.purchase_order_id.state in ['done', 'purchase']:
+
+ if existing.purchase_line_id.qty_received != existing.purchase_line_id.product_qty:
+ fully_received = False
+ break
+
+ retur_cache[sale_line_id] = fully_received
+
+
+ if retur_cache[sale_line_id] and exist:
+ skip_line = True
if skip_line:
continue