summaryrefslogtreecommitdiff
path: root/fixco_custom
diff options
context:
space:
mode:
Diffstat (limited to 'fixco_custom')
-rw-r--r--fixco_custom/models/account_move.py45
1 files changed, 30 insertions, 15 deletions
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'}