[IMP] account: add hooks on compute residual & register payment
closes odoo/odoo#26472 Signed-off-by: Quentin De Paoli (qdp) <qdp@openerp.com>
This commit is contained in:
@@ -95,6 +95,11 @@ class AccountInvoice(models.Model):
|
||||
def _get_reference_type(self):
|
||||
return [('none', _('Free Reference'))]
|
||||
|
||||
def _get_aml_for_amount_residual(self):
|
||||
""" Get the aml to consider to compute the amount residual of invoices """
|
||||
self.ensure_one()
|
||||
return self.sudo().move_id.line_ids.filtered(lambda l: l.account_id == self.account_id)
|
||||
|
||||
@api.one
|
||||
@api.depends(
|
||||
'state', 'currency_id', 'invoice_line_ids.price_subtotal',
|
||||
@@ -104,14 +109,13 @@ class AccountInvoice(models.Model):
|
||||
residual = 0.0
|
||||
residual_company_signed = 0.0
|
||||
sign = self.type in ['in_refund', 'out_refund'] and -1 or 1
|
||||
for line in self.sudo().move_id.line_ids:
|
||||
if line.account_id == self.account_id:
|
||||
residual_company_signed += line.amount_residual
|
||||
if line.currency_id == self.currency_id:
|
||||
residual += line.amount_residual_currency if line.currency_id else line.amount_residual
|
||||
else:
|
||||
from_currency = (line.currency_id and line.currency_id.with_context(date=line.date)) or line.company_id.currency_id.with_context(date=line.date)
|
||||
residual += from_currency.compute(line.amount_residual, self.currency_id)
|
||||
for line in self._get_aml_for_amount_residual():
|
||||
residual_company_signed += line.amount_residual
|
||||
if line.currency_id == self.currency_id:
|
||||
residual += line.amount_residual_currency if line.currency_id else line.amount_residual
|
||||
else:
|
||||
from_currency = (line.currency_id and line.currency_id.with_context(date=line.date)) or line.company_id.currency_id.with_context(date=line.date)
|
||||
residual += from_currency.compute(line.amount_residual, self.currency_id)
|
||||
self.residual_company_signed = abs(residual_company_signed) * sign
|
||||
self.residual_signed = abs(residual) * sign
|
||||
self.residual = abs(residual)
|
||||
@@ -916,12 +920,18 @@ class AccountInvoice(models.Model):
|
||||
tax_grouped[key]['base'] += round_curr(val['base'])
|
||||
return tax_grouped
|
||||
|
||||
@api.multi
|
||||
def _get_aml_for_register_payment(self):
|
||||
""" Get the aml to consider to reconcile in register payment """
|
||||
self.ensure_one()
|
||||
return self.move_id.line_ids.filtered(lambda r: not r.reconciled and r.account_id.internal_type in ('payable', 'receivable'))
|
||||
|
||||
@api.multi
|
||||
def register_payment(self, payment_line, writeoff_acc_id=False, writeoff_journal_id=False):
|
||||
""" Reconcile payable/receivable lines from the invoice with payment_line """
|
||||
line_to_reconcile = self.env['account.move.line']
|
||||
for inv in self:
|
||||
line_to_reconcile += inv.move_id.line_ids.filtered(lambda r: not r.reconciled and r.account_id.internal_type in ('payable', 'receivable'))
|
||||
line_to_reconcile += inv._get_aml_for_register_payment()
|
||||
return (line_to_reconcile + payment_line).reconcile(writeoff_acc_id, writeoff_journal_id)
|
||||
|
||||
@api.multi
|
||||
|
||||
Reference in New Issue
Block a user