summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-06-27 15:45:45 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-06-27 15:45:45 +0700
commit605385c9c0bf3ed95ada1628c02f00b53dc19eb6 (patch)
tree9177acbf769ab71b8cb7d16b81ed278da57d71c4
parent2c3358216c4a2b09ef0df3a2f8998889198ad310 (diff)
<miqdad> validation rev
-rwxr-xr-xindoteknik_custom/__manifest__.py2
-rw-r--r--indoteknik_custom/models/stock_picking_return.py16
-rw-r--r--indoteknik_custom/models/tukar_guling.py112
3 files changed, 72 insertions, 58 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py
index 7a1cf2a3..16b0e332 100755
--- a/indoteknik_custom/__manifest__.py
+++ b/indoteknik_custom/__manifest__.py
@@ -169,7 +169,7 @@
'views/stock_inventory.xml',
'views/sale_order_delay.xml',
'views/tukar_guling.xml',
- 'views/tukar_guling_return_views.xml'
+ # 'views/tukar_guling_return_views.xml'
# 'views/tukar_guling_po.xml',
],
'demo': [],
diff --git a/indoteknik_custom/models/stock_picking_return.py b/indoteknik_custom/models/stock_picking_return.py
index 982f3ebb..97b622b4 100644
--- a/indoteknik_custom/models/stock_picking_return.py
+++ b/indoteknik_custom/models/stock_picking_return.py
@@ -6,17 +6,17 @@ from odoo import models, fields, api, _
class StockReturnPicking(models.TransientModel):
_inherit = 'stock.return.picking'
- return_type = fields.Selection([
- ('revisi_so', 'Revisi SO'),
- ('tukar_guling', 'Tukar Guling')
- ], string='Jenis Retur', default='revisi_so')
+ # return_type = fields.Selection([
+ # ('revisi_so', 'Revisi SO'),
+ # ('tukar_guling', 'Tukar Guling')
+ # ], string='Jenis Retur', default='revisi_so')
def create_returns(self):
picking = self.picking_id
- if picking.picking_type_id.sequence_code == 'PICK' or picking.picking_type_id.id == 30 and picking.linked_manual_bu_out.state == 'done':
+ if picking.picking_type_id.id == 30 and picking.linked_manual_bu_out.state == 'done':
raise UserError("❌ BU/PICK tidak dapat di retur karena BU/OUT Sudah Done")
- if self._context.get('from_ui', True) and self.return_type == 'tukar_guling':
+ if self._context.get('from_ui', True):
return self._redirect_to_tukar_guling()
return super(StockReturnPicking, self).create_returns()
@@ -25,7 +25,7 @@ class StockReturnPicking(models.TransientModel):
self.ensure_one()
picking = self.picking_id
- if picking.picking_type_id.sequence_code == 'PICK' or picking.picking_type_id.id == 30 and picking.linked_manual_bu_out.state == 'done':
+ if picking.picking_type_id.id == 30 and picking.linked_manual_bu_out.state == 'done':
raise UserError("❌ BU/PICK tidak dapat di retur karena BU/OUT Sudah Done")
# Get valid return lines with better error handling
@@ -70,7 +70,7 @@ class StockReturnPicking(models.TransientModel):
# Prepare context for Tukar Guling form
context = {
'default_operations': picking.id,
- 'default_return_type': 'tukar_guling',
+ # 'default_return_type': 'tukar_guling',
'default_date': fields.Datetime.now(),
'default_state': 'draft',
'default_ba_num': _('Retur dari %s') % picking.name,
diff --git a/indoteknik_custom/models/tukar_guling.py b/indoteknik_custom/models/tukar_guling.py
index e1513c2e..df501261 100644
--- a/indoteknik_custom/models/tukar_guling.py
+++ b/indoteknik_custom/models/tukar_guling.py
@@ -23,9 +23,23 @@ class TukarGuling(models.Model):
# 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',
- domain=[('picking_type_id.sequence_code', 'in', ['OUT', 'PICK']),
- ('state', '=', 'done'), ('linked_manual_bu_out', '!=', 'done')], help='Nomor BU/Out atau BU/Pick')
+ operations = fields.Many2one(
+ 'stock.picking',
+ string='Operations',
+ domain=[
+ '|',
+ # BU/OUT
+ '&',
+ ('picking_type_id.id', '=', 29),
+ ('state', '=', 'done'),
+ '&',
+ '&',
+ ('picking_type_id.id', '=', 30),
+ ('state', '=', 'done'),
+ ('linked_manual_bu_out', '!=', 'done'),
+ ],
+ help='Nomor BU/OUT atau BU/PICK'
+ )
ba_num = fields.Text('Nomor BA')
notes = fields.Text('Notes')
return_type = fields.Selection(String='Return Type', selection=[
@@ -169,6 +183,12 @@ class TukarGuling(models.Model):
return True
+ def _is_already_returned(self, picking):
+ return self.env['stock.picking'].search_count([
+ ('origin', '=', 'Return of %s' % picking.name),
+ ('state', '!=', 'cancel')
+ ]) > 0
+
@api.model
def create(self, vals):
# Generate sequence number
@@ -214,6 +234,8 @@ class TukarGuling(models.Model):
return new_record
def write(self, vals):
+ if self._is_already_returned(self.operations):
+ raise UserError("BU ini sudah pernah diretur oleh dokumen lain.")
if 'operations' in vals and not vals.get('origin'):
picking = self.env['stock.picking'].browse(vals['operations'])
if picking.origin:
@@ -242,35 +264,29 @@ class TukarGuling(models.Model):
def action_submit(self):
self.ensure_one()
+ picking = self.env['stock.picking']
+ if picking.picking_type_id.id == 29:
+ if picking.picking_type_id.state != 'done':
+ raise UserError("BU/OUT belum Done!")
+ elif picking.picking_type_id.id == 30:
+ linked_bu_out = picking.linked_manual_bu_out
+ if linked_bu_out and linked_bu_out.state == 'done':
+ raise UserError("Tidak bisa retur BU/PICK karena BU/OUT suda Done!")
+ else:
+ raise UserError("Dokumen Mungkin sudah done")
- picking = self.operations
-
- if self.state != 'draft':
- raise UserError("Submit hanya bisa dilakukan dari Draft.")
-
- if not self.operations:
- raise UserError("Operations harus diisi!")
-
- if not self.return_type:
- raise UserError("Return Type harus diisi!")
-
+ if self._is_already_returned(self.operations):
+ raise UserError("BU ini sudah pernah diretur oleh dokumen lain.")
self._validate_product_lines()
- if picking.picking_type_id.sequence_code == 'OUT' or picking.picking_type_id.id == 29:
- if picking.state != 'done':
- raise UserError("BU/OUT Harus Sudah DONE")
-
- elif picking.picking_type_id.sequence_code == 'PICK' or picking.picking_type_id.id == 30:
- linked_bu_out = picking.linked_manual_bu_out
- if linked_bu_out.state == 'done':
- raise UserError("BU/PICK yang bisa diretur ketika BU/OUT yang belum DONE")
- else:
- raise UserError("Picking Type harus BU/OUT atau BU/PICK")
+ if self.state != 'draft':
+ raise UserError("Submit hanya bisa dilakukan dari Draft.")
self.state = 'approval_sales'
def action_approve(self):
self.ensure_one()
+ self._validate_product_lines()
if not self.operations:
raise UserError("Operations harus diisi!")
@@ -309,6 +325,8 @@ class TukarGuling(models.Model):
if not record.operations:
raise UserError("BU/OUT dari field operations tidak ditemukan.")
+ operation_picking = record.operations
+
related_pickings = self.env['stock.picking'].search([
('origin', '=', record.origin),
('state', '=', 'done'),
@@ -327,7 +345,6 @@ class TukarGuling(models.Model):
created_returns = []
-
# Lokasi default untuk retur
srt_type = self.env['stock.picking.type'].browse(73)
ort_type = self.env['stock.picking.type'].browse(74)
@@ -354,25 +371,25 @@ class TukarGuling(models.Model):
BU_STOCK_LOCATION_ID = 57
# Determine locations based on picking type
- if picking.picking_type_id.id == 30: # -> ngeretur bu pick
+ if picking.picking_type_id.id == 30: # -> ngeretur bu pick
return_type = ort_type
default_location_id = BU_OUTPUT_LOCATION_ID
default_location_dest_id = BU_STOCK_LOCATION_ID
if not default_location_id or not default_location_dest_id:
raise UserError("Lokasi Origin atau Destination salah.")
- elif picking.picking_type_id.id == 29: # -> ngeretur bu out
+ elif picking.picking_type_id.id == 29: # -> ngeretur bu out
return_type = srt_type
default_location_id = PARTNER_LOCATION_ID
default_location_dest_id = BU_OUTPUT_LOCATION_ID
if not default_location_id or not default_location_dest_id:
raise UserError("Lokasi Origin atau Destination salah.")
- elif picking.picking_type_id.id == 74: # -> ngeretur srt
+ elif picking.picking_type_id.id == 74: # -> ngeretur srt
return_type = bu_pick_type
default_location_id = BU_STOCK_LOCATION_ID
default_location_dest_id = BU_OUTPUT_LOCATION_ID
if not default_location_id or not default_location_dest_id:
raise UserError("Lokasi Origin atau Destination salah.")
- elif picking.picking_type_id.id == 73: # -> ngeretur ort
+ elif picking.picking_type_id.id == 73: # -> ngeretur ort
return_type = bu_out_type
default_location_id = BU_OUTPUT_LOCATION_ID
default_location_dest_id = PARTNER_LOCATION_ID
@@ -434,27 +451,24 @@ class TukarGuling(models.Model):
return return_picking
# Buat return dari BU/OUT
- if record.operations.picking_type_id == 30:
- for picking in [bu_pick_to_return]:
- name = _create_return_from_picking(picking)
- if name:
- created_returns.append(name)
+ for picking in bu_out_to_return:
+ name = _create_return_from_picking(picking)
+ if name:
+ created_returns.append(name)
# Buat return dari BU/PICK
- else:
- for picking in [bu_out_to_return]:
- name = _create_return_from_picking(picking)
- if name:
- created_returns.append(name)
-
- # Buat return dari SRT dan ort
- if record.return_type == 'tukar_guling' and record.operations.picking_type_id.id != 30:
- target = [woi for woi in created_returns if woi.picking_type_id.id in (74, 73)]
- for picking in target:
- retur = _create_return_from_picking(picking)
- if retur:
- created_returns.append(retur)
-
+ for picking in bu_pick_to_return:
+ name = _create_return_from_picking(picking)
+ if name:
+ created_returns.append(name)
+
+ # Buat return dari SRT dan ort
+ if record.return_type == 'tukar_guling':
+ target = [woi for woi in created_returns if woi.picking_type_id.id in (74, 73)]
+ for picking in target:
+ retur = _create_return_from_picking(picking)
+ if retur:
+ created_returns.append(retur)
if not created_returns:
raise UserError("wkwkwk")
@@ -498,4 +512,4 @@ class TukarGulingLine(models.Model):
class StockPicking(models.Model):
_inherit = 'stock.picking'
- tukar_guling_id = fields.Many2one('tukar.guling', string='Tukar Guling Ref') \ No newline at end of file
+ tukar_guling_id = fields.Many2one('tukar.guling', string='Tukar Guling Ref')