summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/stock_picking_return.py1
-rw-r--r--indoteknik_custom/models/tukar_guling.py51
2 files changed, 36 insertions, 16 deletions
diff --git a/indoteknik_custom/models/stock_picking_return.py b/indoteknik_custom/models/stock_picking_return.py
index fa557ce8..e274a147 100644
--- a/indoteknik_custom/models/stock_picking_return.py
+++ b/indoteknik_custom/models/stock_picking_return.py
@@ -103,6 +103,7 @@ class StockReturnPicking(models.TransientModel):
'pick_id': picking.id, # ID BU/PICK itu sendiri
'product_id': move_line.product_id.id,
'qty_done': move_line.qty_done,
+ 'qty_return': move_line.qty_done,
}))
sequence += 10
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py
index 333e2c8e..a2168f5b 100644
--- a/indoteknik_custom/models/tukar_guling.py
+++ b/indoteknik_custom/models/tukar_guling.py
@@ -65,13 +65,13 @@ class TukarGuling(models.Model):
raise UserError("❌ Mapping Koli belum diisi")
# Calculate totals as integers
- total_mapping_qty = sum(int(mapping.qty_done) for mapping in record.mapping_koli_ids)
+ total_mapping_qty = sum(int(mapping.qty_done) for mapping in record.mapping_koli_ids.qty_return)
total_line_qty = sum(int(line.product_uom_qty) for line in record.line_ids)
# Strict integer comparison
if total_mapping_qty != total_line_qty:
raise UserError(
- "❌ Total quantity mapping koli (%d) tidak sama dengan quantity retur (%d)" %
+ "❌ Total quantity return di mapping koli (%d) tidak sama dengan quantity retur product lines (%d)" %
(total_mapping_qty, total_line_qty)
)
else:
@@ -92,6 +92,28 @@ class TukarGuling(models.Model):
# Hanya update origin, jangan ubah lines
if self.operations.origin:
self.origin = self.operations.origin
+ _logger.info("📌 Menggunakan product lines dari return wizard, tidak populate ulang.")
+
+ # 🚀 Tapi tetap populate mapping koli jika BU/OUT
+ if self.operations.picking_type_id.id == 29:
+ mapping_koli_data = []
+ sequence = 10
+ tg_product_ids = self.line_ids.mapped('product_id.id')
+
+ for koli_line in self.operations.konfirm_koli_lines:
+ pick_move = koli_line.pick_id.move_line_ids_without_package
+ if pick_move.product_id.id in tg_product_ids:
+ mapping_koli_data.append((0, 0, {
+ 'sequence': sequence,
+ 'pick_id': koli_line.pick_id.id,
+ 'product_id': pick_move.product_id.id,
+ 'qty_done': pick_move.qty_done
+ }))
+ sequence += 10
+
+ self.mapping_koli_ids = mapping_koli_data
+ _logger.info(f"✅ Created {len(mapping_koli_data)} mapping koli lines (from return wizard)")
+ return # keluar supaya tidak populate ulang lines
# Clear existing lines hanya jika tidak dari return picking
self.line_ids = [(5, 0, 0)]
@@ -108,14 +130,12 @@ class TukarGuling(models.Model):
# Untuk Odoo 14, gunakan move_ids_without_package atau move_lines
moves_to_check = []
- # 1. move_ids_without_package (standard di Odoo 14)
if hasattr(self.operations, 'move_ids_without_package') and self.operations.move_ids_without_package:
moves_to_check = self.operations.move_ids_without_package
- # 2. move_lines (backup untuk versi lama)
elif hasattr(self.operations, 'move_lines') and self.operations.move_lines:
moves_to_check = self.operations.move_lines
- # Collect product data for both lines and mapping koli
+ # Collect product data
product_data = {}
for move in moves_to_check:
if move.product_id and move.product_uom_qty > 0:
@@ -128,7 +148,7 @@ class TukarGuling(models.Model):
'name': move.name or move.product_id.display_name
}
- # Create lines_data for product lines
+ # Buat lines_data
for product_id, data in product_data.items():
lines_data.append((0, 0, {
'sequence': sequence,
@@ -143,24 +163,23 @@ class TukarGuling(models.Model):
self.line_ids = lines_data
_logger.info(f"Created {len(lines_data)} product lines")
- # Prepare mapping koli based on picking type
+ # Prepare mapping koli jika BU/OUT
mapping_koli_data = []
sequence = 10
- # Case 1: BU/OUT (picking_type_id.id == 29)
if self.operations.picking_type_id.id == 29:
- # Ambil dari konfirm_koli_lines BU/OUT
+ tg_product_ids = [p for p in product_data]
for koli_line in self.operations.konfirm_koli_lines:
- if koli_line.pick_id.move_line_ids_without_package.product_id.id in product_data:
+ pick_move = koli_line.pick_id.move_line_ids_without_package
+ if pick_move.product_id.id in tg_product_ids:
mapping_koli_data.append((0, 0, {
'sequence': sequence,
- 'pick_id': koli_line.pick_id.move_line_ids_without_package.picking_id.id,
- 'product_id': koli_line.pick_id.move_line_ids_without_package.product_id.id,
- 'qty_done': koli_line.pick_id.move_line_ids_without_package.qty_done
+ 'pick_id': koli_line.pick_id.id,
+ 'product_id': pick_move.product_id.id,
+ 'qty_done': pick_move.qty_done
}))
sequence += 10
-
if mapping_koli_data:
self.mapping_koli_ids = mapping_koli_data
_logger.info(f"Created {len(mapping_koli_data)} mapping koli lines")
@@ -169,7 +188,6 @@ class TukarGuling(models.Model):
else:
_logger.info("No product lines created - no valid moves found")
else:
- # Clear lines jika operations dikosongkan, kecuali dari return picking
from_return_picking = self.env.context.get('from_return_picking', False) or \
self.env.context.get('default_line_ids', False)
@@ -631,5 +649,6 @@ class TukarGulingMappingKoli(models.Model):
tukar_guling_id = fields.Many2one('tukar.guling', string='Tukar Guling')
pick_id = fields.Many2one('stock.picking', string='BU PICK')
product_id = fields.Many2one('product.product', string='Product')
- qty_done = fields.Float(string='Qty Done di BU PICK')
+ qty_done = fields.Float(string='Qty Done BU PICK')
+ qty_return = fields.Float(string='Qty yang mau diretur')
sequence = fields.Integer(string='Sequence', default=10)