Files
odoo-usability/sale_down_payment/models/sale.py
2021-11-26 18:57:02 +03:00

58 lines
2.1 KiB
Python

# Copyright 2019 Akretion France (http://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
from odoo.tools import float_round
class SaleOrder(models.Model):
_inherit = "sale.order"
payment_line_ids = fields.One2many(
"account.move.line", "sale_id", string="Advance Payments", readonly=True
)
amount_down_payment = fields.Monetary(
compute="_compute_amount_down_payment", string="Down Payment Amount"
)
# amount_residual : only used to hide 'Register Payment' button
amount_residual = fields.Monetary(
compute="_compute_amount_down_payment", string="Residual"
)
@api.depends(
"payment_line_ids.credit",
"payment_line_ids.debit",
"payment_line_ids.amount_currency",
"payment_line_ids.currency_id",
"payment_line_ids.date",
"currency_id",
)
def _compute_amount_down_payment(self):
for sale in self:
down_payment = 0.0
sale_currency = sale.pricelist_id.currency_id
if sale_currency == sale.company_id.currency_id:
for pl in sale.payment_line_ids:
down_payment -= pl.balance
else:
for pl in sale.payment_line_ids:
if (
pl.currency_id
and pl.currency_id == sale_currency
and pl.amount_currency
):
down_payment -= pl.amount_currency
else:
down_payment -= sale.company_id.currency_id._convert(
pl.balance, sale_currency, sale.company_id, pl.date
)
down_payment = float_round(
down_payment, precision_rounding=sale.currency_id.rounding
)
sale.amount_down_payment = down_payment
sale.amount_residual = float_round(
sale.amount_total - down_payment,
precision_rounding=sale.currency_id.rounding,
)