diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-06-19 15:00:29 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-06-19 15:00:29 +0700 |
| commit | 1c637ef3fa5f1a0cb39ba0b32353320485622901 (patch) | |
| tree | 742d4ed5662cf2e4de3000597c7daf70fd3d944d | |
| parent | bb8d3f325228936acaad5f8cbdac555fc289b854 (diff) | |
<miqdad> Don, create 4 document
| -rw-r--r-- | indoteknik_custom/models/tukar_guling.py | 175 |
1 files changed, 69 insertions, 106 deletions
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py index fe0d6ab0..6c5d74ec 100644 --- a/indoteknik_custom/models/tukar_guling.py +++ b/indoteknik_custom/models/tukar_guling.py @@ -273,113 +273,76 @@ class TukarGuling(models.Model): self.state = 'cancel' def _create_pickings(self): - if not self.operations: - raise UserError("BU/Out harus diisi terlebih dahulu.") - - origin_so = self.operations.origin - if not origin_so: - raise UserError("BU/OUT tidak memiliki origin (SO), tidak bisa cari BU/PICK.") - - # Cari DO (deliv order (bu/out)) dari SO - get_group_id = self.env['stock.picking'].search([ - ('origin', '=', origin_so), - ], limit=1) - - if not get_group_id: - raise UserError(f"Delivery Order dari SO {origin_so} tidak ditemukan.") - - group_id = get_group_id.group_id.id if get_group_id.group_id else False - Picking = self.env['stock.picking'] - srt_type = self.env['stock.picking.type'].search([ - ('sequence_code', '=', 'SRT') - ], limit=1) - - ort_type = self.env['stock.picking.type'].search([ - ('sequence_code', '=', 'ORT') - ], limit=1) - - # Lokasi - location_dest_id = srt_type.default_location_dest_id.id - location_dest_id_ort = ort_type.default_location_dest_id.id - location_customer = self.operations.location_dest_id - - # 1. BU/SRT: retur dari operations - srt_picking = Picking.create({ - 'partner_id': self.operations.partner_id.id, - 'real_shipping_id': self.operations.real_shipping_id.id, - 'picking_type_id': srt_type.id, - 'location_id': location_customer.id, - 'location_dest_id': location_dest_id, - 'origin': f"Retur {self.operations.name}", - 'tukar_guling_id': self.id, - 'group_id': group_id, - 'move_ids_without_package': [ - (0, 0, { - 'name': line.name or line.product_id.name, - 'product_id': line.product_id.id, - 'product_uom_qty': line.product_uom_qty, - 'product_uom': line.product_uom.id, - 'location_id': location_customer.id, - 'location_dest_id': location_dest_id, - 'group_id': group_id, - }) for line in self.line_ids - ] - }) - srt_picking.action_confirm() - - # 2. Cari BU/PICK dari SO yang sama - origin_so = self.operations.origin - if not origin_so: - raise UserError("BU/OUT tidak memiliki origin (SO), tidak bisa cari BU/PICK.") - - pick = Picking.search([ - ('origin', '=', origin_so), - ('picking_type_id.code', '=', 'internal') - ], limit=1) - - if not pick: - raise UserError(f"BU/PICK dengan origin {origin_so} tidak ditemukan.") - - # 3. BU/ORT: retur dari BU/PICK - ort_picking = Picking.create({ - 'partner_id': self.operations.partner_id.id, - 'real_shipping_id': self.operations.real_shipping_id.id, - 'picking_type_id': ort_type.id, - 'location_id': location_dest_id, - 'location_dest_id': location_dest_id_ort, - 'origin': f"Retur {pick.name}", - 'tukar_guling_id': self.id, - 'group_id': group_id, - 'move_ids_without_package': [ - (0, 0, { - 'name': line.name or line.product_id.name, - 'product_id': line.product_id.id, - 'product_uom_qty': line.product_uom_qty, - 'product_uom': line.product_uom.id, - 'location_id': location_dest_id, - 'location_dest_id': location_dest_id_ort, - 'group_id': group_id, - }) for line in self.line_ids - ] - }) - for line in self.line_ids: - move = ort_picking.move_ids_without_package.filtered( - lambda m: m.product_id == line.product_id - )[:1] - - if move: - self.env['stock.move.line'].create({ - 'move_id': move.id, - 'picking_id': ort_picking.id, - 'product_id': line.product_id.id, - 'product_uom_id': line.product_uom.id, - 'qty_done': line.product_uom_qty, - 'location_id': location_customer.id, - 'location_dest_id': location_dest_id, - }) - ort_picking.action_confirm() - ort_picking.action_assign() + group_id = self.env['procurement.group'].create({'name': self.name}).id + + def create_moves(picking_type, origin_suffix, location_id, location_dest_id): + return Picking.create({ + 'partner_id': self.operations.partner_id.id, + 'real_shipping_id': self.operations.real_shipping_id.id, + 'picking_type_id': picking_type.id, + 'location_id': location_id, + 'location_dest_id': location_dest_id, + 'origin': f"Tukar Guling {self.name} - {origin_suffix}", + 'tukar_guling_id': self.id, + 'group_id': group_id, + 'move_ids_without_package': [ + (0, 0, { + 'name': line.name or line.product_id.name, + 'product_id': line.product_id.id, + 'product_uom_qty': line.product_uom_qty, + 'product_uom': line.product_uom.id, + 'location_id': location_id, + 'location_dest_id': location_dest_id, + 'group_id': group_id, + }) for line in self.line_ids + ] + }) + + # BU/SRT + srt_type = self.env['stock.picking.type'].search([('sequence_code', '=', 'SRT')], limit=1) + if not srt_type: + raise UserError("Picking Type dengan sequence_code 'SRT' tidak ditemukan.") + bu_srt = create_moves( + srt_type, 'SRT', + self.operations.location_dest_id.id, + srt_type.default_location_dest_id.id + ) + bu_srt.action_confirm() + + # BU/ORT + ort_type = self.env['stock.picking.type'].search([('sequence_code', '=', 'ORT')], limit=1) + if not ort_type: + raise UserError("Picking Type dengan sequence_code 'ORT' tidak ditemukan.") + bu_ort = create_moves( + ort_type, 'ORT', + ort_type.default_location_src_id.id, + ort_type.default_location_dest_id.id + ) + bu_ort.action_confirm() + + # Jika return_type tukar_guling → lanjut buat PICK dan OUT + if self.return_type == 'tukar_guling': + pick_type = self.env['stock.picking.type'].search([('sequence_code', '=', 'PICK')], limit=1) + if not pick_type: + raise UserError("Picking Type dengan sequence_code 'PICK' tidak ditemukan.") + bu_pick = create_moves( + pick_type, 'PICK', + pick_type.default_location_src_id.id, + pick_type.default_location_dest_id.id + ) + bu_pick.action_confirm() + + out_type = self.env['stock.picking.type'].search([('sequence_code', '=', 'OUT')], limit=1) + if not out_type: + raise UserError("Picking Type dengan sequence_code 'OUT' tidak ditemukan.") + bu_out = create_moves( + out_type, 'OUT', + out_type.default_location_src_id.id, + self.operations.location_dest_id.id + ) + bu_out.action_confirm() + class TukarGulingLine(models.Model): _name = 'tukar.guling.line' |
