summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-09-19 21:37:47 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-09-19 21:37:47 +0700
commit1a12aed3695265ce3114c51178cffcb2523e0592 (patch)
tree7bd7a8e728ee6642f373f31ecb3c8c3a89f1048b
parentdc9fd38206e9234319e8088717b39cf0770aaad7 (diff)
parent84bfce78983a3bac22e647740aeeda2e88426310 (diff)
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into dispatch_sp
merge
-rw-r--r--indoteknik_custom/models/refund_sale_order.py39
-rwxr-xr-xindoteknik_custom/models/sale_order.py10
2 files changed, 31 insertions, 18 deletions
diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py
index 4ee76006..687acd6d 100644
--- a/indoteknik_custom/models/refund_sale_order.py
+++ b/indoteknik_custom/models/refund_sale_order.py
@@ -57,6 +57,7 @@ class RefundSaleOrder(models.Model):
refund_type = fields.Selection([
('barang_kosong_sebagian', 'Refund Barang Kosong Sebagian'),
('barang_kosong', 'Refund Barang Kosong Full'),
+ ('barang_kosong_indent', 'Refund Barang Kosong Sebagian(Indent)'),
('uang', 'Refund Lebih Bayar'),
('retur_half', 'Refund Retur Sebagian'),
('retur', 'Refund Retur Full'),
@@ -216,7 +217,7 @@ class RefundSaleOrder(models.Model):
vals['created_date'] = fields.Date.context_today(self)
vals['create_uid'] = self.env.user.id
-
+ refund_type = vals.get('refund_type')
if 'sale_order_ids' in vals:
so_cmd = vals['sale_order_ids']
so_ids = so_cmd[0][2] if so_cmd and so_cmd[0][0] == 6 else []
@@ -226,6 +227,18 @@ class RefundSaleOrder(models.Model):
if len(partner) > 1:
raise UserError("❌ Tidak dapat membuat refund untuk Multi SO dengan Customer berbeda. Harus memiliki Customer yang sama.")
vals['partner_id'] = sale_orders[0].partner_id.id
+ if refund_type not in ['barang_kosong_indent', 'salah_transfer']:
+ for so in sale_orders:
+ if so.state not in ['cancel', 'sale']:
+ raise UserError(f"❌ SO {so.name} tidak bisa direfund. Status harus Cancel atau Sale.")
+ if so.state == 'sale':
+ not_done_pickings = so.picking_ids.filtered(lambda p: p.state not in ['done', 'cancel'])
+ if not_done_pickings:
+ raise UserError(
+ f"❌ SO {so.name} Belum melakukan kirim barang "
+ f"({', '.join(not_done_pickings.mapped('name'))}). "
+ "Selesaikan Pengiriman untuk melakukan refund."
+ )
invoices = sale_orders.mapped('invoice_ids').filtered(
lambda inv: inv.move_type in ['out_invoice', 'out_refund'] and inv.state != 'cancel'
@@ -234,7 +247,6 @@ class RefundSaleOrder(models.Model):
vals['invoice_ids'] = [(6, 0, invoices.ids)]
- refund_type = vals.get('refund_type')
invoice_ids_data = vals.get('invoice_ids', [])
invoice_ids = invoice_ids_data[0][2] if invoice_ids_data and invoice_ids_data[0][0] == 6 else []
invoices = self.env['account.move'].browse(invoice_ids)
@@ -244,7 +256,7 @@ class RefundSaleOrder(models.Model):
if not invoice_ids and refund_type and refund_type in ['uang', 'barang_kosong_sebagian', 'retur_half']:
raise UserError("Refund type Lebih Bayar dan Barang Kosong Sebagian Hanya Bisa dipilih Jika Ada Invoice")
- if refund_type in ['barang_kosong', 'barang_kosong_sebagian'] and so_ids:
+ if refund_type in ['barang_kosong', 'barang_kosong_sebagian', 'barang_kosong_indent'] and so_ids:
sale_orders = self.env['sale.order'].browse(so_ids)
if refund_type == 'barang_kosong':
@@ -382,6 +394,7 @@ class RefundSaleOrder(models.Model):
sale_orders = self.env['sale.order'].browse(so_ids)
+
valid_invoices = sale_orders.mapped('invoice_ids').filtered(
lambda inv: inv.move_type in ['out_invoice', 'out_refund'] and inv.state != 'cancel'
)
@@ -391,9 +404,19 @@ class RefundSaleOrder(models.Model):
so_ids = rec.sale_order_ids.ids
sale_orders = self.env['sale.order'].browse(so_ids)
-
-
refund_type = vals.get('refund_type', rec.refund_type)
+ if refund_type not in ['barang_kosong_indent', 'salah_transfer']:
+ for so in sale_orders:
+ if so.state not in ['cancel', 'sale']:
+ raise UserError(f"❌ SO {so.name} tidak bisa direfund. Status harus Cancel atau Sale.")
+ if so.state == 'sale':
+ not_done_pickings = so.picking_ids.filtered(lambda p: p.state not in ['done', 'cancel'])
+ if not_done_pickings:
+ raise UserError(
+ f"❌ SO {so.name} Belum melakukan kirim barang "
+ f"({', '.join(not_done_pickings.mapped('name'))}). "
+ "Selesaikan Pengiriman untuk melakukan refund."
+ )
if refund_type in ['barang_kosong', 'barang_kosong_sebagian'] and sale_orders:
zero_delivery_lines = sale_orders.mapped('order_line').filtered(lambda l: l.qty_delivered >= 0 or l.product_uom_qty > l.qty_delivered)
@@ -625,7 +648,7 @@ class RefundSaleOrder(models.Model):
@api.onchange('refund_type')
def _onchange_refund_type(self):
self.line_ids = [(5, 0, 0)]
- if self.refund_type in ['barang_kosong_sebagian', 'barang_kosong'] and self.sale_order_ids:
+ if self.refund_type in ['barang_kosong_sebagian', 'barang_kosong', 'barang_kosong_indent'] and self.sale_order_ids:
line_vals = []
for so in self.sale_order_ids:
for line in so.order_line:
@@ -920,7 +943,7 @@ class RefundSaleOrder(models.Model):
# Normalisasi
refund_type_label = refund_type_label.upper()
- if refund.refund_type in ['barang_kosong', 'barang_kosong_sebagian']:
+ if refund.refund_type in ['barang_kosong', 'barang_kosong_sebagian', 'barang_kosong_indent']:
refund_type_label = "REFUND BARANG KOSONG"
elif refund.refund_type in ['retur_half', 'retur']:
refund_type_label = "REFUND RETUR BARANG"
@@ -1146,7 +1169,7 @@ class RefundSaleOrder(models.Model):
'origin': ','.join(refund.sale_order_ids.mapped('name')),
'origin_so': refund.sale_order_ids.id,
'operations': picking.id,
- 'return_type': 'revisi_so',
+ 'return_type': 'retur_so',
'invoice_id': [(6, 0, refund.invoice_ids.ids)],
'refund_id': refund.id,
'line_ids': line_vals,
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 2d8567b0..39830ffc 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -3259,16 +3259,6 @@ class SaleOrder(models.Model):
def button_refund(self):
self.ensure_one()
-
- if self.state not in ['cancel', 'sale']:
- raise UserError(f"❌ SO {self.name} tidak bisa direfund. Status harus Cancel atau Sale.")
- if self.state == 'sale':
- not_done_pickings = self.picking_ids.filtered(lambda p: p.state not in ['done', 'cancel'])
- if not_done_pickings:
- raise UserError(
- f"❌ SO {self.name} Belum melakukan kirim barang "
- f"({', '.join(not_done_pickings.mapped('name'))}). Selesaikan Pengiriman untuk melakukan refund."
- )
invoice_ids = self.invoice_ids.filtered(lambda inv: inv.state != 'cancel')