summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-06-19 15:00:29 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-06-19 15:00:29 +0700
commit1c637ef3fa5f1a0cb39ba0b32353320485622901 (patch)
tree742d4ed5662cf2e4de3000597c7daf70fd3d944d
parentbb8d3f325228936acaad5f8cbdac555fc289b854 (diff)
<miqdad> Don, create 4 document
-rw-r--r--indoteknik_custom/models/tukar_guling.py175
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'