diff options
| author | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-09-22 10:42:13 +0700 |
|---|---|---|
| committer | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-09-22 10:42:13 +0700 |
| commit | 5319325fb717b0fa452ba305cfdb661c3b9de15a (patch) | |
| tree | 62a960de6d29b6de9b61cf03a664e3148d19d8e3 | |
| parent | ea99289777a3887739a03a54cb292e8fe8067d99 (diff) | |
| parent | 84bfce78983a3bac22e647740aeeda2e88426310 (diff) | |
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into form-sp
| -rw-r--r-- | indoteknik_custom/models/refund_sale_order.py | 39 | ||||
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 12 | ||||
| -rw-r--r-- | indoteknik_custom/models/tukar_guling_po.py | 24 | ||||
| -rw-r--r-- | indoteknik_custom/report/purchase_report.xml | 2 | ||||
| -rw-r--r-- | indoteknik_custom/views/stock_picking.xml | 2 |
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> |
