summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-06-20 09:21:19 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-06-20 09:21:19 +0700
commitbce4d940dc90bf50e045a8fde3fd1c7bb53e8562 (patch)
tree08ee076d902bc62e192a9dae60af4e71e5832dfa
parentf1bd55eed208cc351e7486c556cbdf7b6c94a341 (diff)
<miqdad> revert
-rw-r--r--indoteknik_custom/models/tukar_guling.py176
-rw-r--r--indoteknik_custom/views/ir_sequence.xml11
2 files changed, 108 insertions, 79 deletions
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py
index 6c5d74ec..7bcf5e80 100644
--- a/indoteknik_custom/models/tukar_guling.py
+++ b/indoteknik_custom/models/tukar_guling.py
@@ -202,7 +202,6 @@ class TukarGuling(models.Model):
line.sequence = (i + 1) * 10
return new_record
-
def write(self, vals):
if 'operations' in vals and not vals.get('origin'):
picking = self.env['stock.picking'].browse(vals['operations'])
@@ -273,76 +272,113 @@ class TukarGuling(models.Model):
self.state = 'cancel'
def _create_pickings(self):
- Picking = self.env['stock.picking']
- 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()
+ 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 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, # Ambil dari return.picking.line.quantity
+ 'location_id': location_customer.id,
+ 'location_dest_id': location_dest_id,
+ })
+ ort_picking.action_confirm()
+ ort_picking.action_assign()
class TukarGulingLine(models.Model):
_name = 'tukar.guling.line'
diff --git a/indoteknik_custom/views/ir_sequence.xml b/indoteknik_custom/views/ir_sequence.xml
index 934e9100..bfee0fd4 100644
--- a/indoteknik_custom/views/ir_sequence.xml
+++ b/indoteknik_custom/views/ir_sequence.xml
@@ -161,20 +161,13 @@
<field name="number_increment">1</field>
</record>
<record id="seq_tukar_guling" model="ir.sequence">
- <field name="name">Pengajuan Retur Tukar Guling SO</field>
+ <field name="name">Pengajuan Return SO</field>
<field name="code">tukar.guling</field>
<field name="prefix">PTG/</field>
<field name="padding">5</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
+ <field name="company_id" eval="False"/>
</record>
- <record id="seq_tukar_guling_prs" model="ir.sequence">
- <field name="name">Pengajuan Retur Revisi SO (PRS)</field>
- <field name="code">tukar.guling.prs</field>
- <field name="prefix">PRS-</field>
- <field name="padding">5</field>
- <field name="number_next">1</field>
- <field name="number_increment">1</field>
- </record>
</data>
</odoo> \ No newline at end of file