diff options
| -rw-r--r-- | indoteknik_custom/models/tukar_guling.py | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py index ff52bab5..da1cfcf4 100644 --- a/indoteknik_custom/models/tukar_guling.py +++ b/indoteknik_custom/models/tukar_guling.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api +from odoo import models, fields, api, _ from odoo.exceptions import UserError, ValidationError import logging @@ -20,6 +20,7 @@ class TukarGuling(models.Model): 'tukar_guling_id', string='Transfers' ) + # origin_so = fields.Many2one('sale.order', string='Origin SO') name = fields.Char('Number', required=True, copy=False, readonly=True, default='New') date = fields.Datetime('Date', default=fields.Datetime.now, required=True) operations = fields.Many2one('stock.picking', 'Operations', @@ -300,11 +301,11 @@ class TukarGuling(models.Model): ]) if not related_pickings: raise UserError( - "Tidak ditemukan BU/PICK atau BU/OUT dari SO: %s" % record.origin + "Atau masih belum Done") + "Tidak ditemukan BU/PICK atau BU/OUT dari SO: %s" % record.origin) # 2. Filter berdasarkan tipe picking - bu_pick_to_return = related_pickings.filtered(lambda p: p.picking_type_id.id == 30) # BU/PICK - bu_out_to_return = related_pickings.filtered(lambda p: p.picking_type_id.id == 29) # BU/OUT + bu_pick_to_return = related_pickings.filtered(lambda ktl: ktl.picking_type_id.id == 30) # BU/PICK + bu_out_to_return = related_pickings.filtered(lambda ktl: ktl.picking_type_id.id == 29) # BU/OUT if not bu_pick_to_return and not bu_out_to_return: raise UserError("Tidak ada BU/PICK atau BU/OUT yang selesai untuk diretur.") @@ -312,13 +313,18 @@ class TukarGuling(models.Model): created_returns = [] # Lokasi default untuk retur - bu_out_type = self.env['stock.picking.type'].browse(73) - bu_stock_type = self.env['stock.picking.type'].browse(74) + srt_type = self.env['stock.picking.type'].browse(73) + ort_type = self.env['stock.picking.type'].browse(74) - bu_out = bu_out_type.default_location_src_id.id - bu_stock = bu_out_type.default_location_dest_id.id + stock_location = self.env['stock.location'] - if not bu_out or not bu_stock: + srt_src = stock_location.browse(5) + srt_dest = stock_location.browse(60) + + ort_src = stock_location.browse(60) + ort_dest = stock_location.browse(57) + + if not ort_src or not ort_dest or not srt_src or not srt_dest: raise UserError("salahwoi") partner_location = self.env['stock.location'].search( @@ -329,14 +335,19 @@ class TukarGuling(models.Model): # Fungsi membuat retur dari picking tertentu def _create_return_from_picking(picking): - grup = self.env['stock.picking'].search([('origin', '=', self.operations.origin)]) - # Tentukan lokasi berdasarkan jenis picking + grup = self.operations.group_id + + PARTNER_LOCATION_ID = 5 # Partner Locations/Customers + BU_OUTPUT_LOCATION_ID = 60 # BU/Output (from your logs) + BU_STOCK_LOCATION_ID = 57 # BU/Stock (adjust to your actual ID) + + # Determine locations based on picking type if picking.picking_type_id.id == 29: # BU/OUT → BU/SRT - default_location_id = partner_location.id - default_location_dest_id = bu_out + default_location_id = PARTNER_LOCATION_ID # From: Partner Locations + default_location_dest_id = BU_OUTPUT_LOCATION_ID # To: BU/Output elif picking.picking_type_id.id == 30: # BU/PICK → BU/ORT - default_location_id = bu_out - default_location_dest_id = bu_stock + default_location_id = BU_OUTPUT_LOCATION_ID # From: BU/Output + default_location_dest_id = BU_STOCK_LOCATION_ID # To: BU/Stock (FIXED) else: return None @@ -353,7 +364,7 @@ class TukarGuling(models.Model): 'location_id': default_location_id, }) - # Buat return lines + # Create return lines return_lines = [] for move in picking.move_lines: qty = move.quantity_done or move.product_uom_qty @@ -371,19 +382,21 @@ class TukarGuling(models.Model): _logger.info("Creating return for picking %s", picking.name) _logger.info("Default location src: %s", default_location_id) _logger.info("Default location dest: %s", default_location_dest_id) - _logger.info("Move lines: %s", picking.move_lines) return_vals = return_wizard.create_returns() return_id = return_vals.get('res_id') + return_picking = self.env['stock.picking'].browse(return_id) - if not return_id: + if not return_picking: raise UserError("Retur gagal dibuat. Hasil create_returns: %s" % str(return_vals)) - picking_obj = self.env['stock.picking'].browse(return_id) - for p in picking_obj: - p.group_id = self.operations.group_id.id - p.tukar_guling_id = record.id + # Force the destination location (extra safeguard) + return_picking.write({ + 'location_dest_id': default_location_dest_id, + 'group_id': grup.id, + 'tukar_guling_id': record.id, + }) - return picking_obj.name + return return_picking.name # Buat return dari BU/PICK for picking in bu_pick_to_return: @@ -439,4 +452,4 @@ class TukarGulingLine(models.Model): class StockPicking(models.Model): _inherit = 'stock.picking' - tukar_guling_id = fields.Many2one('tukar.guling', string='Tukar Guling Ref') + tukar_guling_id = fields.Many2one('tukar.guling', string='Tukar Guling Ref')
\ No newline at end of file |
