diff options
Diffstat (limited to 'indoteknik_custom/models/tukar_guling.py')
| -rw-r--r-- | indoteknik_custom/models/tukar_guling.py | 77 |
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) |
