summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/tukar_guling.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/tukar_guling.py')
-rw-r--r--indoteknik_custom/models/tukar_guling.py77
1 files changed, 61 insertions, 16 deletions
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py
index 7e857d02..f0fe13f6 100644
--- a/indoteknik_custom/models/tukar_guling.py
+++ b/indoteknik_custom/models/tukar_guling.py
@@ -55,6 +55,7 @@ class TukarGuling(models.Model):
], default='draft', tracking=True, required=True)
line_ids = fields.One2many('tukar.guling.line', 'tukar_guling_id', string='Product Lines')
+ mapping_koli_ids = fields.One2many('tukar.guling.mapping.koli', 'tukar_guling_id', string='Mapping Koli')
@api.onchange('operations')
def _onchange_operations(self):
@@ -71,10 +72,10 @@ class TukarGuling(models.Model):
# Hanya update origin, jangan ubah lines
if self.operations.origin:
self.origin = self.operations.origin
- return
# Clear existing lines hanya jika tidak dari return picking
self.line_ids = [(5, 0, 0)]
+ self.mapping_koli_ids = [(5, 0, 0)] # Clear existing mapping koli juga
# Set origin dari operations
if self.operations.origin:
@@ -94,26 +95,59 @@ class TukarGuling(models.Model):
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
+ product_data = {}
for move in moves_to_check:
- _logger.info(
- f"Move: {move.name}, Product: {move.product_id.name if move.product_id else 'No Product'}, Qty: {move.product_uom_qty}, State: {move.state}")
-
- # Ambil semua move yang ada quantity
if move.product_id and move.product_uom_qty > 0:
- lines_data.append((0, 0, {
- 'sequence': sequence,
- 'product_id': move.product_id.id,
- 'product_uom_qty': move.product_uom_qty,
- 'product_uom': move.product_uom.id,
- 'name': move.name or move.product_id.display_name,
- }))
- sequence += 10
+ product_id = move.product_id.id
+ if product_id not in product_data:
+ product_data[product_id] = {
+ 'product': move.product_id,
+ 'qty': move.product_uom_qty,
+ 'uom': move.product_uom.id,
+ 'name': move.name or move.product_id.display_name
+ }
+
+ # Create lines_data for product lines
+ for product_id, data in product_data.items():
+ lines_data.append((0, 0, {
+ 'sequence': sequence,
+ 'product_id': product_id,
+ 'product_uom_qty': data['qty'],
+ 'product_uom': data['uom'],
+ 'name': data['name'],
+ }))
+ sequence += 10
if lines_data:
self.line_ids = lines_data
- _logger.info(f"Created {len(lines_data)} lines")
+ _logger.info(f"Created {len(lines_data)} product lines")
+
+ # Prepare mapping koli based on picking type
+ 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
+ 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:
+ 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
+ }))
+ sequence += 10
+
+
+ if mapping_koli_data:
+ self.mapping_koli_ids = mapping_koli_data
+ _logger.info(f"Created {len(mapping_koli_data)} mapping koli lines")
+ else:
+ _logger.info("No mapping koli lines created")
else:
- _logger.info("No lines created - no valid moves found")
+ _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 \
@@ -121,6 +155,7 @@ class TukarGuling(models.Model):
if not from_return_picking:
self.line_ids = [(5, 0, 0)]
+ self.mapping_koli_ids = [(5, 0, 0)]
self.origin = False
@@ -470,7 +505,6 @@ class TukarGuling(models.Model):
})
return_lines = []
- # 🔥 Hanya pakai qty dari tukar guling line
for line in record.line_ids:
move = picking.move_lines.filtered(lambda m: m.product_id == line.product_id)
if move:
@@ -568,3 +602,14 @@ class StockPicking(models.Model):
_inherit = 'stock.picking'
tukar_guling_id = fields.Many2one('tukar.guling', string='Tukar Guling Ref')
+
+
+class TukarGulingMappingKoli(models.Model):
+ _name = 'tukar.guling.mapping.koli'
+ _description = 'Mapping Koli di Tukar Guling'
+
+ 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')
+ sequence = fields.Integer(string='Sequence', default=10)