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

64 lines
2.2 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 fields, models
from odoo.tools import float_round
class AccountPayment(models.Model):
_inherit = "account.payment"
sale_id = fields.Many2one("sale.order", string="Sale Order")
def action_validate_invoice_payment(self):
if self.sale_id:
self.post()
else:
return super(AccountPayment, self).action_validate_invoice_payment()
def _get_counterpart_move_line_vals(self, invoice=False):
res = super(AccountPayment, self)._get_counterpart_move_line_vals(
invoice=invoice
)
if self.sale_id:
res["sale_id"] = self.sale_id.id
return res
class AccountAbstractPayment(models.AbstractModel):
_inherit = "account.abstract.payment"
def default_get(self, fields_list):
res = super(AccountAbstractPayment, self).default_get(fields_list)
if self._context.get("active_model") == "sale.order" and self._context.get(
"active_id"
):
so = self.env["sale.order"].browse(self._context["active_id"])
res.update(
{
"amount": so.amount_total,
"currency_id": so.currency_id.id,
"payment_type": "inbound",
"partner_id": so.partner_invoice_id.commercial_partner_id.id,
"partner_type": "customer",
"communication": so.name,
"sale_id": so.id,
}
)
return res
def _compute_payment_amount(self, invoices=None, currency=None):
amount = super(AccountAbstractPayment, self)._compute_payment_amount(
invoices=invoices, currency=currency
)
if self.sale_id:
payment_currency = currency
if not payment_currency:
payment_currency = self.sale_id.currency_id
amount = float_round(
self.sale_id.amount_total - self.sale_id.amount_down_payment,
precision_rounding=payment_currency.rounding,
)
return amount