summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFIN-IT_AndriFP <it@fixcomart.co.id>2025-09-22 10:42:13 +0700
committerFIN-IT_AndriFP <it@fixcomart.co.id>2025-09-22 10:42:13 +0700
commit5319325fb717b0fa452ba305cfdb661c3b9de15a (patch)
tree62a960de6d29b6de9b61cf03a664e3148d19d8e3
parentea99289777a3887739a03a54cb292e8fe8067d99 (diff)
parent84bfce78983a3bac22e647740aeeda2e88426310 (diff)
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into form-sp
-rw-r--r--indoteknik_custom/models/refund_sale_order.py39
-rwxr-xr-xindoteknik_custom/models/sale_order.py12
-rw-r--r--indoteknik_custom/models/tukar_guling_po.py24
-rw-r--r--indoteknik_custom/report/purchase_report.xml2
-rw-r--r--indoteknik_custom/views/stock_picking.xml2
5 files changed, 47 insertions, 32 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 94c5f041..39830ffc 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -1877,6 +1877,8 @@ class SaleOrder(models.Model):
})
def open_form_multi_update_status(self):
+ if self.env.user.id != 688 or self.env.user.has_group('indoteknik_custom.group_role_it'):
+ raise UserError("Hanya Finance nya yang bisa approve.")
action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_sale_orders_multi_update')
action['context'] = {
'sale_ids': [x.id for x in self]
@@ -3257,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')
diff --git a/indoteknik_custom/models/tukar_guling_po.py b/indoteknik_custom/models/tukar_guling_po.py
index f61b3828..2a5ca3dd 100644
--- a/indoteknik_custom/models/tukar_guling_po.py
+++ b/indoteknik_custom/models/tukar_guling_po.py
@@ -353,18 +353,18 @@ class TukarGulingPO(models.Model):
# self._check_bill_on_retur_po()
tipe = vals.get('return_type', self.return_type)
- if self.operations and self.operations.picking_type_id.id == 28 and tipe == 'tukar_guling':
- group = self.operations.group_id
- if group:
- # Cari BU/PUT dalam group yang sama
- bu_put = self.env['stock.picking'].search([
- ('group_id', '=', group.id),
- ('picking_type_id.id', '=', 75), # 75 = ID BU/PUT
- ('state', '=', 'done')
- ], limit=1)
-
- if bu_put:
- raise UserError("❌ Tidak bisa retur BU/INPUT karena BU/PUT sudah Done!")
+ # if self.operations and self.operations.picking_type_id.id == 28 and tipe == 'tukar_guling':
+ # group = self.operations.group_id
+ # if group:
+ # # Cari BU/PUT dalam group yang sama
+ # bu_put = self.env['stock.picking'].search([
+ # ('group_id', '=', group.id),
+ # ('picking_type_id.id', '=', 75), # 75 = ID BU/PUT
+ # ('state', '=', 'done')
+ # ], limit=1)
+ #
+ # if bu_put:
+ # raise UserError("❌ Tidak bisa retur BU/INPUT karena BU/PUT sudah Done!")
if self.operations.picking_type_id.id == 28 and tipe == 'tukar_guling':
raise UserError("❌ BU/INPUT tidak boleh di retur tukar guling")
diff --git a/indoteknik_custom/report/purchase_report.xml b/indoteknik_custom/report/purchase_report.xml
index dd19340d..9ff7e718 100644
--- a/indoteknik_custom/report/purchase_report.xml
+++ b/indoteknik_custom/report/purchase_report.xml
@@ -9,7 +9,7 @@
<field name="report_name">indoteknik_custom.report_purchaseorder_website</field>
<field name="report_file">indoteknik_custom.report_purchaseorder_website</field>
<field name="print_report_name">
- ('PO - %s - %s' % (object.partner_id.name, object.name))
+ ('%s - %s' % (object.name, object.partner_id.name))
</field>
<field name="binding_model_id" ref="purchase.model_purchase_order"/>
<field name="binding_type">report</field>
diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml
index abaf347d..0e2eb9e4 100644
--- a/indoteknik_custom/views/stock_picking.xml
+++ b/indoteknik_custom/views/stock_picking.xml
@@ -35,7 +35,7 @@
<field name="partner_id" position="after">
<field name="area_name" optional="hide"/>
<field name="purchase_representative_id"/>
- <field name="status_printed"/>
+ <field name="status_printed" optional="hide"/>
</field>
</field>
</record>