summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-06-20 08:28:02 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-06-20 08:28:02 +0700
commitf1bd55eed208cc351e7486c556cbdf7b6c94a341 (patch)
treec6440c712981ade7fa1b95979b4f4ead829d3f90
parent1c637ef3fa5f1a0cb39ba0b32353320485622901 (diff)
<miqdad> redirect to pengajuan retur
-rwxr-xr-xindoteknik_custom/__manifest__.py1
-rw-r--r--indoteknik_custom/models/stock_picking_return.py113
-rw-r--r--indoteknik_custom/views/tukar_guling_return_views.xml20
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