diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-07-16 13:37:08 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-07-16 13:37:08 +0700 |
| commit | 0e330178d087b2b4cb519c4e078f0fe25a76dfe5 (patch) | |
| tree | ecc310cb386de4b6d8a967b483ad61e9a63d22a1 | |
| parent | 3b1bc7642b6a5d0ac19dd74563c5b353a7f3b8ba (diff) | |
<miqdad> fix qty prod line and add qty return
| -rw-r--r-- | indoteknik_custom/models/stock_picking_return.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/tukar_guling.py | 51 |
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) |
