From 7d07a282c134cb5e2a784b73cc477e3f398df57c Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 12 Sep 2025 10:48:13 +0700 Subject: add rc in journal --- indoteknik_custom/models/refund_sale_order.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 731d8e41..e981abb5 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -462,7 +462,7 @@ class RefundSaleOrder(models.Model): total_invoice = 0.0 so_ids = self.sale_order_ids.ids - + amount_refund_before = 0.0 for so in self.sale_order_ids: self.ongkir += so.delivery_amt or 0.0 valid_invoices = so.invoice_ids.filtered( @@ -470,6 +470,10 @@ class RefundSaleOrder(models.Model): ) all_invoices |= valid_invoices total_invoice += sum(valid_invoices.mapped('amount_total_signed')) + refunds = self.env['refund.sale.order'].search([ + ('sale_order_ids', 'in', so_ids) + ]) + amount_refund_before += sum(refunds.mapped('amount_refund')) if refunds else 0.0 moves = self.env['account.move'].search([ ('sale_id', 'in', so_ids), @@ -478,7 +482,7 @@ class RefundSaleOrder(models.Model): ]) total_uang_muka = sum(moves.mapped('amount_total_signed')) if moves else 0.0 total_midtrans = sum(self.env['sale.order'].browse(so_ids).mapped('gross_amount')) if so_ids else 0.0 - self.uang_masuk = total_uang_muka + total_midtrans + self.uang_masuk = (total_uang_muka + total_midtrans) - amount_refund_before self.invoice_ids = all_invoices -- cgit v1.2.3 From fb069315f937ea1a8a094d23f22f8314cef412a4 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 12 Sep 2025 14:37:48 +0700 Subject: fix label --- indoteknik_custom/models/refund_sale_order.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 9bcdd974..f511ed5d 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -824,15 +824,26 @@ class RefundSaleOrder(models.Model): # Ambil label refund type refund_type_label = dict( self.fields_get(allfields=['refund_type'])['refund_type']['selection'] - ).get(refund.refund_type, '').replace("Refund ", "").upper() - + ).get(refund.refund_type, '') + + # Normalisasi + refund_type_label = refund_type_label.upper() + + if refund.refund_type in ['barang_kosong', 'barang_kosong_sebagian']: + refund_type_label = "REFUND BARANG KOSONG" + elif refund.refund_type in ['retur_half', 'retur']: + refund_type_label = "REFUND RETUR BARANG" + elif refund.refund_type == 'uang': + refund_type_label = "REFUND LEBIH BAYAR" + elif refund.refund_type == 'salah_transfer': + refund_type_label = "REFUND SALAH TRANSFER" if not partner: raise UserError("❌ Partner tidak ditemukan.") # Ref format - ref_text = f"REFUND {refund_type_label} {refund.name or ''} {partner.display_name}".upper() + ref_text = f"{refund_type_label} {refund.name or ''} {partner.display_name}".upper() # Buat Account Move (Journal Entry) account_move = self.env['account.move'].create({ @@ -882,7 +893,8 @@ class RefundSaleOrder(models.Model): def _compute_journal_refund_move_id(self): for rec in self: move = self.env['account.move'].search([ - ('refund_id', '=', rec.id) + ('refund_id', '=', rec.id), + ('state', '!=', 'cancel') ], limit=1) rec.journal_refund_move_id = move -- cgit v1.2.3 From 1ca068669ba7e255e8a69d981aba513dcfeedd40 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 15 Sep 2025 16:23:48 +0700 Subject: fix validasi refund --- indoteknik_custom/models/refund_sale_order.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index f511ed5d..9b14243b 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -56,6 +56,7 @@ class RefundSaleOrder(models.Model): refund_type = fields.Selection([ ('barang_kosong_sebagian', 'Refund Barang Kosong Sebagian'), + ('barang_kosong_indent', 'Refund Barang Kosong Jika ada Indent'), ('barang_kosong', 'Refund Barang Kosong Full'), ('uang', 'Refund Lebih Bayar'), ('retur_half', 'Refund Retur Sebagian'), @@ -77,7 +78,7 @@ class RefundSaleOrder(models.Model): 'account.move', string="Journal Payment", copy=False, - help="Pilih transaksi salah transfer dari jurnal Uang Muka (journal_id=11) yang tidak terkait SO." + help="Pilih transaksi salah transfer dari jurnal Uang Muka yang tidak terkait SO." ) tukar_guling_count = fields.Integer( @@ -297,6 +298,14 @@ class RefundSaleOrder(models.Model): total_invoice = sum(self.env['account.move'].browse(invoice_ids).mapped('amount_total_signed')) if invoice_ids else 0.0 vals['total_invoice'] = total_invoice amount_refund = vals.get('amount_refund', 0.0) + can_refund = sisa_uang_masuk - total_invoice + + if can_refund > amount_refund or can_refund == 0.0: + raise ValidationError( + _("Maksimal refund yang bisa dilakukan adalah sebesar %s. " + "Silakan sesuaikan jumlah refund.") % (can_refund) + ) + if amount_refund <= 0.00: raise ValidationError('Total Refund harus lebih dari 0 jika ingin mengajukan refund') @@ -393,9 +402,16 @@ class RefundSaleOrder(models.Model): total_invoice = sum(self.env['account.move'].browse(invoice_ids).mapped('amount_total_signed')) vals['total_invoice'] = total_invoice uang_masuk = rec.uang_masuk + can_refund = uang_masuk - total_invoice amount_refund = vals.get('amount_refund', rec.amount_refund) + if amount_refund > can_refund: + raise ValidationError( + _("Maksimal refund yang bisa dilakukan adalah sebesar %s. " + "Silakan sesuaikan jumlah refund.") % (can_refund) + ) + if amount_refund <= 0: raise ValidationError("Total Refund harus lebih dari 0.") @@ -829,7 +845,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" -- cgit v1.2.3 From ada4b39703d079a92da5c6ad96ad715df13b67de Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 15 Sep 2025 17:08:09 +0700 Subject: fix validasi refund --- indoteknik_custom/models/refund_sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 9b14243b..51d42514 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -300,7 +300,7 @@ class RefundSaleOrder(models.Model): amount_refund = vals.get('amount_refund', 0.0) can_refund = sisa_uang_masuk - total_invoice - if can_refund > amount_refund or can_refund == 0.0: + if amount_refund > can_refund or can_refund == 0.0: raise ValidationError( _("Maksimal refund yang bisa dilakukan adalah sebesar %s. " "Silakan sesuaikan jumlah refund.") % (can_refund) -- cgit v1.2.3 From 4c305c1ac192d5610dedbc90723281dd09bc0a97 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 15 Sep 2025 17:14:22 +0700 Subject: fix validasi refund --- indoteknik_custom/models/refund_sale_order.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 51d42514..55128080 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -56,7 +56,6 @@ class RefundSaleOrder(models.Model): refund_type = fields.Selection([ ('barang_kosong_sebagian', 'Refund Barang Kosong Sebagian'), - ('barang_kosong_indent', 'Refund Barang Kosong Jika ada Indent'), ('barang_kosong', 'Refund Barang Kosong Full'), ('uang', 'Refund Lebih Bayar'), ('retur_half', 'Refund Retur Sebagian'), @@ -845,7 +844,7 @@ class RefundSaleOrder(models.Model): # Normalisasi refund_type_label = refund_type_label.upper() - if refund.refund_type in ['barang_kosong', 'barang_kosong_sebagian', 'barang_kosong_indent']: + if refund.refund_type in ['barang_kosong', 'barang_kosong_sebagian']: refund_type_label = "REFUND BARANG KOSONG" elif refund.refund_type in ['retur_half', 'retur']: refund_type_label = "REFUND RETUR BARANG" -- cgit v1.2.3 From 9e6ab83ccd890c2ddd4e74cc0ed650d35a12f31e Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 16 Sep 2025 16:18:24 +0700 Subject: journal payment tempo --- indoteknik_custom/models/refund_sale_order.py | 118 +++++++++++++++++++++----- 1 file changed, 97 insertions(+), 21 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 55128080..4ee76006 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -113,7 +113,7 @@ class RefundSaleOrder(models.Model): string='Customer', required=True ) - advance_move_names = fields.Html(string="Group Journal SO", compute="_compute_advance_move_names") + advance_move_names = fields.Html(string="Group Journal Payment", compute="_compute_advance_move_names") uang_masuk_type = fields.Selection([ ('pdf', 'PDF'), ('image', 'Image'), @@ -237,6 +237,7 @@ class RefundSaleOrder(models.Model): 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) if invoice_ids and refund_type and refund_type not in ['uang', 'barang_kosong_sebagian', 'barang_kosong', 'retur_half']: raise UserError("Refund type Hanya Bisa Lebih Bayar, Barang Kosong Sebagian, atau Retur jika ada invoice") @@ -276,18 +277,46 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 11), ('state', '=', 'posted'), ]) - total_uang_muka = sum(moves.mapped('amount_total_signed')) if moves else 0.0 - total_midtrans = sum(self.env['sale.order'].browse(so_ids).mapped('gross_amount')) if so_ids else 0.0 - total_pembayaran = total_uang_muka + total_midtrans + piutangbca = self.env['account.move'].search([ + ('ref', 'in', invoices.mapped('name')), + ('journal_id', '=', 4), + ('state', '=', 'posted'), + ]) + piutangmdr = self.env['account.move'].search([ + ('ref', 'in', invoices.mapped('name')), + ('journal_id', '=', 7), + ('state', '=', 'posted'), + ]) + has_moves = bool(moves) + has_piutangmdr = bool(piutangmdr) + has_piutangbca = bool(piutangbca) + ssos = self.env['sale.order'].browse(so_ids) + has_settlement = any(so.payment_status == 'settlement' for so in ssos) + + sisa_uang_masuk = 0.0 + if has_moves and has_settlement: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + elif has_moves: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + elif has_settlement: + sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + elif has_piutangmdr: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + else: + raise UserError( + "❌ Tidak bisa melakukan refund karena SO tidak memiliki Record Uang Masuk " + "(Journal Uang Muka / Payment Invoices / Midtrans Payment)." + ) + existing_refunds = self.env['refund.sale.order'].search([ ('sale_order_ids', 'in', so_ids) ], order='id desc', limit=1) if existing_refunds: sisa_uang_masuk = existing_refunds.remaining_refundable - else: - sisa_uang_masuk = total_pembayaran if sisa_uang_masuk < 0: raise UserError("❌ Tidak ada sisa transaksi untuk di-refund.") @@ -452,15 +481,34 @@ class RefundSaleOrder(models.Model): def _compute_advance_move_names(self): for rec in self: move_links = [] + + invoice_ids = rec.sale_order_ids.mapped('invoice_ids') + moves = self.env['account.move'].search([ ('sale_id', 'in', rec.sale_order_ids.ids), ('journal_id', '=', 11), - ('state', '=', 'posted') + ('state', '=', 'posted'), ]) - for move in moves: + + piutangbca = self.env['account.move'].search([ + ('ref', 'in', invoice_ids.mapped('name')), + ('journal_id', '=', 4), + ('state', '=', 'posted'), + ]) + + piutangmdr = self.env['account.move'].search([ + ('ref', 'in', invoice_ids.mapped('name')), + ('journal_id', '=', 7), + ('state', '=', 'posted'), + ]) + + all_moves = moves | piutangbca | piutangmdr + + for move in all_moves: url = f"/web#id={move.id}&model=account.move&view_type=form" name = html_escape(move.name or 'Unnamed') move_links.append(f'{name}') + rec.advance_move_names = ', '.join(move_links) if move_links else "-" @api.depends('sale_order_ids.user_id') @@ -496,9 +544,35 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 11), ('state', '=', 'posted'), ]) - total_uang_muka = sum(moves.mapped('amount_total_signed')) if moves else 0.0 - total_midtrans = sum(self.env['sale.order'].browse(so_ids).mapped('gross_amount')) if so_ids else 0.0 - self.uang_masuk = (total_uang_muka + total_midtrans) - amount_refund_before + piutangbca = self.env['account.move'].search([ + ('ref', 'in', all_invoices.mapped('name')), + ('journal_id', '=', 4), + ('state', '=', 'posted'), + ]) + piutangmdr = self.env['account.move'].search([ + ('ref', 'in', all_invoices.mapped('name')), + ('journal_id', '=', 7), + ('state', '=', 'posted'), + ]) + has_moves = bool(moves) + has_piutangmdr = bool(piutangmdr) + has_piutangbca = bool(piutangbca) + ssos = self.env['sale.order'].browse(so_ids) + has_settlement = any(so.payment_status == 'settlement' for so in ssos) + + sisa_uang_masuk = 0.0 + if has_moves and has_settlement: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + elif has_moves: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + elif has_settlement: + sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + elif has_piutangmdr: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + + self.uang_masuk = sisa_uang_masuk - amount_refund_before self.invoice_ids = all_invoices @@ -519,7 +593,6 @@ class RefundSaleOrder(models.Model): """ Validasi SO harus punya uang masuk (Journal Uang Muka / Midtrans) """ for rec in self: invalid_orders = [] - total_uang_masuk = 0.0 for so in rec.sale_order_ids: # cari journal uang muka @@ -528,21 +601,24 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 11), # Journal Uang Muka ('state', '=', 'posted'), ]) + piutangbca = self.env['account.move'].search([ + ('ref', 'in', rec.invoice_ids.mapped('name')), + ('journal_id', '=', 4), + ('state', '=', 'posted'), + ]) + piutangmdr = self.env['account.move'].search([ + ('ref', 'in', rec.invoice_ids.mapped('name')), + ('journal_id', '=', 7), + ('state', '=', 'posted'), + ]) - if not moves and so.payment_status != 'settlement': + if not moves and so.payment_status != 'settlement' and not piutangbca and not piutangmdr: invalid_orders.append(so.name) - if moves: - total_uang_muka = sum(moves.mapped('amount_total_signed')) or 0.0 - total_uang_masuk += total_uang_muka - else: - # fallback Midtrans gross_amount - total_uang_masuk += so.gross_amount or 0.0 - if invalid_orders: raise ValidationError( f"Tidak dapat membuat refund untuk SO {', '.join(invalid_orders)} " - "karena tidak memiliki Record Uang Masuk (Journal Uang Muka/Midtrans).\n" + "karena tidak memiliki Record Uang Masuk (Journal Uang Muka/Payment Invoice/Midtrans).\n" "Pastikan semua SO yang dipilih sudah memiliki Record pembayaran yang valid." ) -- cgit v1.2.3 From c1b61f16ac40b400e85c9e4c5992f056560ac308 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 19 Sep 2025 10:07:31 +0700 Subject: match return type tukgul --- indoteknik_custom/models/refund_sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 4ee76006..6695df56 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -1146,7 +1146,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, -- cgit v1.2.3 From 4665d0ffe4146d0badc535af2c002ab63ef8cb4b Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 19 Sep 2025 11:20:10 +0700 Subject: refund barang kosong SO indent --- indoteknik_custom/models/refund_sale_order.py | 37 ++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 7 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 4ee76006..b8350829 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" -- cgit v1.2.3 From 6d50b35724592c4f8c302204adcfbc0f5db3727f Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Tue, 23 Sep 2025 11:30:45 +0700 Subject: pull odoo backup --- indoteknik_custom/models/refund_sale_order.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index b8350829..d89954cc 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -859,19 +859,19 @@ class RefundSaleOrder(models.Model): if not rec.status or rec.status == 'draft': rec.status = 'pengajuan1' - elif rec.status == 'pengajuan1' and self.env.user.id == 19: + elif rec.status == 'pengajuan1': rec.status = 'pengajuan2' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_sales = now rec.position_sales = 'Sales Manager' - elif rec.status == 'pengajuan2' and self.env.user.id == 688: + elif rec.status == 'pengajuan2': rec.status = 'pengajuan3' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_ar = now rec.position_ar = 'AR' - elif rec.status == 'pengajuan3' and self.env.user.id == 7: + elif rec.status == 'pengajuan3': rec.status = 'refund' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_pimpinan = now @@ -902,6 +902,14 @@ class RefundSaleOrder(models.Model): for rec in self: if not is_fat: raise UserError("Hanya Finance yang dapat mengkonfirmasi pembayaran refund.") + is_journal = self.env['account.move'].search([ + ('refund_id', '=', rec.id), + ('state', '=', 'posted') + ]) + if not is_journal: + raise UserError("Journal Payment Refund belum dibuat, buat Journal Payment Refund sebelum confirm refund.") + if is_journal and rec.amount_refund != sum(is_journal.mapped('amount_total_signed')): + raise UserError("Total Refund dengan Total Journal Harus Sama.") if rec.status_payment == 'pending': rec.status_payment = 'done' rec.refund_date = fields.Date.context_today(self) -- cgit v1.2.3 From 5abefd1181a148c4caf9b5dd2082ee3b3e884751 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Tue, 23 Sep 2025 15:49:18 +0700 Subject: validate confirm journal refund --- indoteknik_custom/models/refund_sale_order.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index d4702210..eab25452 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -859,19 +859,19 @@ class RefundSaleOrder(models.Model): if not rec.status or rec.status == 'draft': rec.status = 'pengajuan1' - elif rec.status == 'pengajuan1': + elif rec.status == 'pengajuan1' and self.env.user.id == 19: rec.status = 'pengajuan2' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_sales = now rec.position_sales = 'Sales Manager' - elif rec.status == 'pengajuan2': + elif rec.status == 'pengajuan2' and self.env.user.id == 688: rec.status = 'pengajuan3' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_ar = now rec.position_ar = 'AR' - elif rec.status == 'pengajuan3': + elif rec.status == 'pengajuan3' and self.env.user.id == 7: rec.status = 'refund' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_pimpinan = now -- cgit v1.2.3 From fa4d124243688f4a74dd605a21b7b402ee632191 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Wed, 24 Sep 2025 16:46:18 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 28 ++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index eab25452..6a6d10ea 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -51,6 +51,7 @@ class RefundSaleOrder(models.Model): account_no = fields.Char(string='Account No', required=True) kcp = fields.Char(string='Alamat KCP') finance_note = fields.Text(string='Finance Note') + biaya_admin = fields.Float(string='Biaya Admin Transfer') invoice_names = fields.Html(string="Group Invoice Number", compute="_compute_invoice_names") so_names = fields.Html(string="Group SO Number", compute="_compute_so_names") @@ -280,8 +281,11 @@ class RefundSaleOrder(models.Model): if refund_type == 'salah_transfer' and vals.get('transfer_move_id'): move = self.env['account.move'].browse(vals['transfer_move_id']) if move: + sisa_uang_masuk = move.amount_total_signed # ← set dengan nilai move vals['uang_masuk'] = move.amount_total_signed vals['remaining_refundable'] = 0 + else: + sisa_uang_masuk = 0.0 else: # ==== perhitungan normal ==== moves = self.env['account.move'].search([ @@ -906,9 +910,10 @@ class RefundSaleOrder(models.Model): ('refund_id', '=', rec.id), ('state', '=', 'posted') ]) + amount = rec.amount_refund + rec.biaya_admin if not is_journal: raise UserError("Journal Payment Refund belum dibuat, buat Journal Payment Refund sebelum confirm refund.") - if is_journal and rec.amount_refund != sum(is_journal.mapped('amount_total_signed')): + if is_journal and amount != sum(is_journal.mapped('amount_total_signed')): raise UserError("Total Refund dengan Total Journal Harus Sama.") if rec.status_payment == 'pending': rec.status_payment = 'done' @@ -966,6 +971,7 @@ class RefundSaleOrder(models.Model): # Ref format ref_text = f"{refund_type_label} {refund.name or ''} {partner.display_name}".upper() + admintex = f"BIAYA ADMIN BANK {refund_type_label} {refund.name or ''} {partner.display_name}".upper() # Buat Account Move (Journal Entry) account_move = self.env['account.move'].create({ @@ -976,10 +982,10 @@ class RefundSaleOrder(models.Model): 'refund_so_ids': [(6, 0, refund.sale_order_ids.ids)], 'partner_id': partner.id, }) - + admintf = refund.biaya_admin amount = refund.amount_refund # 450 Penerimaan Belum Teridentifikasi, 668 Penerimaan Belum Alokasi - second_account_id = 450 if refund.refund_type not in ['barang_kosong', 'barang_kosong_sebagian'] else 668 + second_account_id = 450 if refund.refund_type not in ['barang_kosong', 'barang_kosong_sebagian', 'barang_kosong_indent'] else 668 debit_line = { 'move_id': account_move.id, @@ -991,17 +997,29 @@ class RefundSaleOrder(models.Model): 'name': ref_text, } + adminline = { + 'move_id': account_move.id, + 'account_id': 555, + 'partner_id': partner.id, + 'currency_id': 12, + 'debit': admintf, + 'credit': 0.0, + 'name': admintex, + } + credit_line = { 'move_id': account_move.id, 'account_id': 389, # Intransit BCA 'partner_id': partner.id, 'currency_id': 12, 'debit': 0.0, - 'credit': amount, + 'credit': amount + admintf, 'name': ref_text, } - self.env['account.move.line'].create([debit_line, credit_line]) + journal_line = [debit_line, adminline, credit_line] if admintf > 0 else [debit_line, credit_line] + + self.env['account.move.line'].create(journal_line) return { 'name': _('Journal Entries'), -- cgit v1.2.3 From 2bfd932b541351452dda67039740ac1e72ca2326 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Wed, 24 Sep 2025 17:16:35 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 6a6d10ea..96082447 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -1013,11 +1013,21 @@ class RefundSaleOrder(models.Model): 'partner_id': partner.id, 'currency_id': 12, 'debit': 0.0, - 'credit': amount + admintf, + 'credit': amount, 'name': ref_text, } - journal_line = [debit_line, adminline, credit_line] if admintf > 0 else [debit_line, credit_line] + credit_admin_line = { + 'move_id': account_move.id, + 'account_id': 389, # Intransit BCA + 'partner_id': partner.id, + 'currency_id': 12, + 'debit': 0.0, + 'credit': admintf, + 'name': admintex, + } + + journal_line = [debit_line, credit_line, adminline, credit_admin_line] if admintf > 0 else [debit_line, credit_line] self.env['account.move.line'].create(journal_line) -- cgit v1.2.3 From fabd151ff9a8b4c118062299653c77fd34ea89df Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 11:22:26 +0700 Subject: add misc in refund --- indoteknik_custom/models/refund_sale_order.py | 33 ++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 96082447..f4711faf 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -303,22 +303,35 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + + misc = self.env['account.move'].search([ + ('ref', 'ilike', invoices.mapped('name')[0]), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) has_moves = bool(moves) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) + has_misc = bool(misc) ssos = self.env['sale.order'].browse(so_ids) has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + elif has_moves and has_misc: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca and has_misc: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + elif has_piutangmdr and has_misc: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) else: @@ -528,8 +541,14 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + + misc = self.env['account.move'].search([ + ('ref', 'ilike', invoice_ids.mapped('name')[0]), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) - all_moves = moves | piutangbca | piutangmdr + all_moves = moves | piutangbca | piutangmdr | misc for move in all_moves: url = f"/web#id={move.id}&model=account.move&view_type=form" @@ -581,21 +600,33 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + misc = self.env['account.move'].search([ + ('ref', 'ilike', all_invoices.mapped('name')[0]), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) has_moves = bool(moves) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) + has_misc = bool(misc) ssos = self.env['sale.order'].browse(so_ids) has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + if has_moves and has_misc: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca and has_misc: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + elif has_piutangmdr and has_misc: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) -- cgit v1.2.3 From 88a5f39629ac6f5700af27a8144dd3a761e5aa41 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 13:31:45 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index f4711faf..eca781e2 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -542,11 +542,14 @@ class RefundSaleOrder(models.Model): ('state', '=', 'posted'), ]) - misc = self.env['account.move'].search([ - ('ref', 'ilike', invoice_ids.mapped('name')[0]), - ('journal_id', '=', 13), - ('state', '=', 'posted'), - ]) + misc = self.env['account.move'] + if invoice_ids: + invoice_name = invoice_ids.mapped('name')[0] + misc = self.env['account.move'].search([ + ('ref', 'ilike', invoice_name), + ('journal_id', '=', 13), + ('state', '=', 'posted'), + ]) all_moves = moves | piutangbca | piutangmdr | misc -- cgit v1.2.3 From 07502e1f93e166abea766c8b4b50ed2e94639df8 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 13:44:25 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index eca781e2..2a6a9d9b 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -306,6 +306,7 @@ class RefundSaleOrder(models.Model): misc = self.env['account.move'].search([ ('ref', 'ilike', invoices.mapped('name')[0]), + ('ref', 'not ilike', 'reklas'), ('journal_id', '=', 13), ('state', '=', 'posted'), ]) @@ -547,6 +548,7 @@ class RefundSaleOrder(models.Model): invoice_name = invoice_ids.mapped('name')[0] misc = self.env['account.move'].search([ ('ref', 'ilike', invoice_name), + ('ref', 'not ilike', 'reklas'), ('journal_id', '=', 13), ('state', '=', 'posted'), ]) @@ -605,6 +607,7 @@ class RefundSaleOrder(models.Model): ]) misc = self.env['account.move'].search([ ('ref', 'ilike', all_invoices.mapped('name')[0]), + ('ref', 'not ilike', 'reklas'), ('journal_id', '=', 13), ('state', '=', 'posted'), ]) -- cgit v1.2.3 From 7fed48782b6790be66cf8134eacc36881eeb29d4 Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 16:11:07 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 86 ++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 2 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 2a6a9d9b..ae8df4ef 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -310,8 +310,22 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 13), ('state', '=', 'posted'), ]) + moves2 = self.env['account.move'] + if so_ids: + so_names = self.env['sale.order'].browse(so_ids).mapped('name') + domain = [ + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ('ref', 'ilike', 'dp') + ] + if so_names: + domain += ['|'] * (len(so_names) - 1) + for n in so_names: + domain.append(('ref', 'ilike', n)) + moves2 = self.env['account.move'].search(domain) has_moves = bool(moves) + has_moves2 = bool(moves2) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) has_misc = bool(misc) @@ -319,20 +333,38 @@ class RefundSaleOrder(models.Model): has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 + if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) + elif has_moves2: + sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) elif has_moves and has_misc: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_moves and has_misc and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) + elif has_moves and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + + elif has_piutangbca and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangbca and has_misc: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangbca and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + + elif has_piutangmdr and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangmdr and has_misc: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangmdr and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) else: @@ -542,6 +574,21 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 7), ('state', '=', 'posted'), ]) + + moves2 = self.env['account.move'] + if rec.sale_order_ids: + so_names = rec.sale_order_ids.mapped('name') + + domain = [ + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ('ref', 'ilike', 'dp') + ] + domain += ['|'] * (len(so_names) - 1) + for n in so_names: + domain.append(('ref', 'ilike', n)) + + moves2 = self.env['account.move'].search(domain) misc = self.env['account.move'] if invoice_ids: @@ -553,7 +600,7 @@ class RefundSaleOrder(models.Model): ('state', '=', 'posted'), ]) - all_moves = moves | piutangbca | piutangmdr | misc + all_moves = moves | piutangbca | piutangmdr | misc | moves2 for move in all_moves: url = f"/web#id={move.id}&model=account.move&view_type=form" @@ -611,7 +658,24 @@ class RefundSaleOrder(models.Model): ('journal_id', '=', 13), ('state', '=', 'posted'), ]) + moves2 = self.env['account.move'] + if so_ids: + so_records = self.env['sale.order'].browse(so_ids) + so_names = so_records.mapped('name') + + domain = [ + ('journal_id', '=', 11), + ('state', '=', 'posted'), + ('ref', 'ilike', 'dp') + ] + domain += ['|'] * (len(so_names) - 1) + for n in so_names: + domain.append(('ref', 'ilike', n)) + + moves2 = self.env['account.move'].search(domain) + has_moves = bool(moves) + has_moves2 = bool(moves2) has_piutangmdr = bool(piutangmdr) has_piutangbca = bool(piutangbca) has_misc = bool(misc) @@ -619,20 +683,38 @@ class RefundSaleOrder(models.Model): has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 + if has_moves and has_settlement: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) - if has_moves and has_misc: + elif has_moves2: + sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) + elif has_moves and has_misc: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_moves and has_misc and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) + elif has_moves and has_moves2: + sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_moves: sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + elif has_settlement: sisa_uang_masuk = sum(ssos.mapped('gross_amount')) + elif has_piutangbca and has_misc: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangbca and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) + elif has_piutangbca and has_moves2: + sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangbca: sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + + elif has_piutangmdr and has_misc and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangmdr and has_misc: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + elif has_piutangmdr and has_moves2: + sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) elif has_piutangmdr: sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) -- cgit v1.2.3 From b29805b2540c357f420580aa746b376f0b4c54bd Mon Sep 17 00:00:00 2001 From: HafidBuroiroh Date: Thu, 25 Sep 2025 17:04:52 +0700 Subject: refund --- indoteknik_custom/models/refund_sale_order.py | 102 ++++++++++---------------- 1 file changed, 37 insertions(+), 65 deletions(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index ae8df4ef..820a58f7 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -333,41 +333,30 @@ class RefundSaleOrder(models.Model): has_settlement = any(so.payment_status == 'settlement' for so in ssos) sisa_uang_masuk = 0.0 + amounts = [] if has_moves and has_settlement: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) - elif has_moves2: - sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_misc: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_moves and has_misc and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) - - elif has_settlement: - sisa_uang_masuk = sum(ssos.mapped('gross_amount')) - - elif has_piutangbca and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca and has_misc: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangbca and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) - - elif has_piutangmdr and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangmdr and has_misc: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangmdr and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangmdr: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + amounts.append(sum(moves.mapped('amount_total_signed'))) + amounts.append(sum(ssos.mapped('gross_amount'))) else: + if has_moves: + amounts.append(sum(moves.mapped('amount_total_signed'))) + if has_settlement: + amounts.append(sum(ssos.mapped('gross_amount'))) + + # sisanya bisa dijumlahkan tanpa konflik + if has_moves2: + amounts.append(sum(moves2.mapped('amount_total_signed'))) + if has_piutangbca: + amounts.append(sum(piutangbca.mapped('amount_total_signed'))) + if has_piutangmdr: + amounts.append(sum(piutangmdr.mapped('amount_total_signed'))) + if has_misc: + amounts.append(sum(misc.mapped('amount_total_signed'))) + + sisa_uang_masuk = sum(amounts) + + if not sisa_uang_masuk: raise UserError( "❌ Tidak bisa melakukan refund karena SO tidak memiliki Record Uang Masuk " "(Journal Uang Muka / Payment Invoices / Midtrans Payment)." @@ -684,39 +673,22 @@ class RefundSaleOrder(models.Model): sisa_uang_masuk = 0.0 - if has_moves and has_settlement: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(ssos.mapped('gross_amount')) - elif has_moves2: - sisa_uang_masuk = sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_misc: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_moves and has_misc and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves and has_moves2: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_moves: - sisa_uang_masuk = sum(moves.mapped('amount_total_signed')) - - elif has_settlement: - sisa_uang_masuk = sum(ssos.mapped('gross_amount')) - - elif has_piutangbca and has_misc: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangbca and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca and has_moves2: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangbca: - sisa_uang_masuk = sum(piutangbca.mapped('amount_total_signed')) - - elif has_piutangmdr and has_misc and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangmdr and has_misc: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(misc.mapped('amount_total_signed')) - elif has_piutangmdr and has_moves2: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + sum(moves2.mapped('amount_total_signed')) - elif has_piutangmdr: - sisa_uang_masuk = sum(piutangmdr.mapped('amount_total_signed')) + amounts = [] + + if has_moves: + amounts.append(sum(moves.mapped('amount_total_signed'))) + if has_moves2: + amounts.append(sum(moves2.mapped('amount_total_signed'))) + if has_piutangbca: + amounts.append(sum(piutangbca.mapped('amount_total_signed'))) + if has_piutangmdr: + amounts.append(sum(piutangmdr.mapped('amount_total_signed'))) + if has_misc: + amounts.append(sum(misc.mapped('amount_total_signed'))) + if has_settlement: + amounts.append(sum(ssos.mapped('gross_amount'))) + + sisa_uang_masuk = sum(amounts) self.uang_masuk = sisa_uang_masuk - amount_refund_before -- cgit v1.2.3 From f714a29bc051d029d5ac34f46c3cabfcb64478e0 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 26 Sep 2025 16:56:13 +0700 Subject: add p stephan --- indoteknik_custom/models/refund_sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/refund_sale_order.py') diff --git a/indoteknik_custom/models/refund_sale_order.py b/indoteknik_custom/models/refund_sale_order.py index 820a58f7..de9870f6 100644 --- a/indoteknik_custom/models/refund_sale_order.py +++ b/indoteknik_custom/models/refund_sale_order.py @@ -954,7 +954,7 @@ class RefundSaleOrder(models.Model): if not rec.status or rec.status == 'draft': rec.status = 'pengajuan1' - elif rec.status == 'pengajuan1' and self.env.user.id == 19: + elif rec.status == 'pengajuan1' and self.env.user.id in [19, 28]: rec.status = 'pengajuan2' rec.approved_by = f"{rec.approved_by}, {user_name}" if rec.approved_by else user_name rec.date_approved_sales = now -- cgit v1.2.3