diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-06-20 08:28:02 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-06-20 08:28:02 +0700 |
| commit | f1bd55eed208cc351e7486c556cbdf7b6c94a341 (patch) | |
| tree | c6440c712981ade7fa1b95979b4f4ead829d3f90 /indoteknik_custom/models | |
| parent | 1c637ef3fa5f1a0cb39ba0b32353320485622901 (diff) | |
<miqdad> redirect to pengajuan retur
Diffstat (limited to 'indoteknik_custom/models')
| -rw-r--r-- | indoteknik_custom/models/stock_picking_return.py | 113 |
1 files changed, 77 insertions, 36 deletions
diff --git a/indoteknik_custom/models/stock_picking_return.py b/indoteknik_custom/models/stock_picking_return.py index e50446d3..d6225f1a 100644 --- a/indoteknik_custom/models/stock_picking_return.py +++ b/indoteknik_custom/models/stock_picking_return.py @@ -1,46 +1,87 @@ -from odoo import _, api, fields, models from odoo.exceptions import UserError from odoo.tools.float_utils import float_round +from odoo import models, fields, api, _ +from odoo.exceptions import UserError + +from odoo import models, fields, api, _ +from odoo.exceptions import UserError -class ReturnPicking(models.TransientModel): +class StockReturnPicking(models.TransientModel): _inherit = 'stock.return.picking' - # @api.model - # def default_get(self, fields): - # res = super(ReturnPicking, self).default_get(fields) - # - # stock_picking = self.env['stock.picking'].search([ - # ('id', '=', res['picking_id']), - # ]) - # - # # sale_id = stock_picking.group_id.sale_id - # if not stock_picking.approval_return_status == 'approved': - # raise UserError('Harus Approval Accounting AR untuk melakukan Retur') - # - # # purchase = self.env['purchase.order'].search([ - # # ('name', '=', stock_picking.group_id.name), - # # ]) - # # if not stock_picking.approval_return_status == 'approved' and purchase.invoice_ids: - # # raise UserError('Harus Approval Accounting AP untuk melakukan Retur') - # - # return res - - @api.model - def default_get(self, fields): - res = super(ReturnPicking, self).default_get(fields) - - picking_id = res.get('picking_id') - if not picking_id: - return res - - stock_picking = self.env['stock.picking'].browse(picking_id) - - if not stock_picking.approval_return_status == 'approved': - raise UserError('Harus Approval Accounting AR untuk melakukan Retur') - - return res + return_type = fields.Selection([ + ('revisi_so', 'Revisi SO'), + ('tukar_guling', 'Tukar Guling') + ], string='Jenis Retur', default='revisi_so') + + def create_returns(self): + """Override method to handle Tukar Guling redirection""" + if self.return_type == 'tukar_guling': + return self._redirect_to_tukar_guling() + return super(StockReturnPicking, self).create_returns() + + def _redirect_to_tukar_guling(self): + """Redirect to Tukar Guling form with pre-filled data""" + self.ensure_one() + picking = self.picking_id + + # Gunakan pendekatan yang lebih kompatibel untuk Odoo 14 + # Cari hanya baris yang masih ada dan memiliki quantity > 0 + valid_lines = [] + for line in self.product_return_moves: + # Periksa apakah baris masih ada di database atau baru dibuat + if line.id: + # Untuk baris yang sudah ada di database, pastikan masih ada + if not self.env['stock.return.picking.line'].browse(line.id).exists(): + continue + # Baris baru yang belum disimpan tidak memiliki id + + if line.quantity > 0: + valid_lines.append(line) + + if not valid_lines: + raise UserError(_("Please specify at least one product to return with positive quantity.")) + + # Prepare context for Tukar Guling form + context = { + 'default_operations': picking.id, + 'default_partner_id': picking.partner_id.id, + 'default_origin': picking.origin or picking.name, + 'default_return_type': 'tukar_guling', + 'default_date': fields.Datetime.now(), + 'default_state': 'draft', + 'default_ba_num': _('Retur dari %s') % picking.name, + } + + # Prepare product lines + line_vals = [] + for line in valid_lines: + line_vals.append((0, 0, { + 'product_id': line.product_id.id, + 'product_uom_qty': line.quantity, + 'product_uom': line.product_id.uom_id.id, + 'name': line.product_id.display_name, + })) + + context['default_line_ids'] = line_vals + + # Set SO if available + if picking.sale_id: + context['default_so_id'] = picking.sale_id.id + + # Set shipping address + if picking.partner_id: + context['default_real_shipping_id'] = picking.partner_id.id + return { + 'name': _('Tukar Guling'), + 'type': 'ir.actions.act_window', + 'res_model': 'tukar.guling', + 'view_mode': 'form', + 'target': 'current', + 'context': context, + } class ReturnPickingLine(models.TransientModel): _inherit = 'stock.return.picking.line' |
