From 5de479edc054edc241a1d8088cf8e06108fb0c7d Mon Sep 17 00:00:00 2001 From: Mqdd Date: Thu, 26 Feb 2026 08:59:53 +0700 Subject: fix bill PO item --- fixco_custom/models/account_move.py | 45 ++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) (limited to 'fixco_custom') diff --git a/fixco_custom/models/account_move.py b/fixco_custom/models/account_move.py index 376c368..3ec7e5e 100644 --- a/fixco_custom/models/account_move.py +++ b/fixco_custom/models/account_move.py @@ -394,29 +394,44 @@ class PurchaseOrderLineWizard(models.TransientModel): ) def action_add_lines(self): + for item in self.line_ids: + if item.qty_received <= 0: + raise UserError(f"Line {item.name} has no received quantity.") + + if item.qty_invoiced >= item.qty_received: + raise UserError(f"Item: {item.name} from PO: {item.order_id.name} has already been fully invoiced.") + self.ensure_one() move = self.move_id if move.state != 'draft': raise UserError('Invoice harus draft') + if not move.partner_id: + raise UserError("Vendor belum dipilih") + + if not move.journal_id: + raise UserError("Journal belum dipilih") + + new_lines = self.env['account.move.line'] + + for po_line in self.line_ids.filtered(lambda l: not l.display_type): + + vals = po_line._prepare_account_move_line(move) + + # override qty sisa + vals['quantity'] = po_line.qty_received - po_line.qty_invoiced + + line = new_lines.new(vals) - for po_line in self.line_ids: + # WAJIB supaya account kecompute benar + line.account_id = line._get_computed_account() + line._onchange_price_subtotal() - line = self.env['account.move.line'].with_context( - check_move_validity=False - ).new({ - 'move_id': move.id, - 'product_id': po_line.product_id.id, - }) + new_lines += line - line._onchange_product_id() + move.invoice_line_ids += new_lines - line.name = po_line.name - # 🔹 Hanya qty yang belum di-invoice - line.quantity = po_line.product_qty - po_line.qty_invoiced - line.price_unit = po_line.price_unit - line.tax_ids = po_line.taxes_id - line.purchase_line_id = po_line.id + move._recompute_dynamic_lines(recompute_all_taxes=True) - move.invoice_line_ids += line + return {'type': 'ir.actions.act_window_close'} -- cgit v1.2.3