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 | |
| parent | 1c637ef3fa5f1a0cb39ba0b32353320485622901 (diff) | |
<miqdad> redirect to pengajuan retur
| -rwxr-xr-x | indoteknik_custom/__manifest__.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_picking_return.py | 113 | ||||
| -rw-r--r-- | indoteknik_custom/views/tukar_guling_return_views.xml | 20 |
3 files changed, 98 insertions, 36 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index f58acbfb..7a1cf2a3 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -169,6 +169,7 @@ 'views/stock_inventory.xml', 'views/sale_order_delay.xml', 'views/tukar_guling.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 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' diff --git a/indoteknik_custom/views/tukar_guling_return_views.xml b/indoteknik_custom/views/tukar_guling_return_views.xml new file mode 100644 index 00000000..9312005a --- /dev/null +++ b/indoteknik_custom/views/tukar_guling_return_views.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <!-- Inherit the return picking form view --> + <record id="view_stock_return_picking_form_inherit" model="ir.ui.view"> + <field name="name">stock.return.picking.form.inherit.tukar.guling</field> + <field name="model">stock.return.picking</field> + <field name="inherit_id" ref="stock.view_stock_return_picking_form"/> + <field name="priority" eval="20"/> <!-- Higher than stock_account --> + <field name="arch" type="xml"> + <!-- Add fields above the product moves table --> + <xpath expr="//field[@name='product_return_moves']" position="before"> + <div class="row mb-3"> + <div class="col-12"> + <field name="return_type" class="oe_inline"/> + </div> + </div> + </xpath> + </field> + </record> +</odoo>
\ No newline at end of file |
