38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
from odoo import models
|
|
from odoo.tools import float_is_zero
|
|
|
|
|
|
class SaleAdvancePaymentInv(models.TransientModel):
|
|
_inherit = "sale.advance.payment.inv"
|
|
|
|
def _prepare_invoice_values(self, order, name, amount, so_line):
|
|
"""
|
|
Create as many invoice lines as order lines with their original
|
|
order line taxes. Lines quantities have the ratio of the advance payment.
|
|
"""
|
|
invoice_vals = super()._prepare_invoice_values(order, name, amount, so_line)
|
|
lines = []
|
|
uom_precision_digits = self.env["decimal.precision"].precision_get(
|
|
"Product Unit of Measure"
|
|
)
|
|
for line in order.order_line:
|
|
if (
|
|
not float_is_zero(
|
|
# avoids taking lines like previous advance payments
|
|
line.product_uom_qty, precision_digits=uom_precision_digits
|
|
)
|
|
):
|
|
lines.append((0, 0, {
|
|
"name": name,
|
|
"price_unit": line.price_unit,
|
|
"quantity": line.product_uom_qty * amount / order.amount_total,
|
|
"product_id": line.product_id.id,
|
|
"product_uom_id": line.product_uom.id,
|
|
"tax_ids": [(6, 0, line.tax_id.ids)],
|
|
"sale_line_ids": [(6, 0, [line.id])],
|
|
"analytic_tag_ids": [(6, 0, line.analytic_tag_ids.ids)],
|
|
"analytic_account_id": order.analytic_account_id.id or False,
|
|
}))
|
|
invoice_vals["invoice_line_ids"] = lines
|
|
return invoice_vals
|