diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-06-27 15:45:45 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-06-27 15:45:45 +0700 |
| commit | 605385c9c0bf3ed95ada1628c02f00b53dc19eb6 (patch) | |
| tree | 9177acbf769ab71b8cb7d16b81ed278da57d71c4 | |
| parent | 2c3358216c4a2b09ef0df3a2f8998889198ad310 (diff) | |
<miqdad> validation rev
| -rwxr-xr-x | indoteknik_custom/__manifest__.py | 2 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_picking_return.py | 16 | ||||
| -rw-r--r-- | indoteknik_custom/models/tukar_guling.py | 112 |
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') |
