# Copyright 2019 Akretion France (http://www.akretion.com) # @author Alexis de Lattre # 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, )