[FIX] account: restrict to create payment without payment date
This traceback raises when user tries to create payment without payment date. To reproduce this issue: 1) Install 'account' 2) Open any existing invoice (not a DRAFT one) 3) Click 'REGISTER PAYMENT' button. 4) Now remove 'Payment Date' Error: 'Expected singleton: account.payment.term()' Note:- 'TypeError: unsupported operand type(s) for +=: 'float' and 'NoneType'' is also produced for some invoices. When user removes 'payment_date' '_compute_amount' method will be called, In which '_get_total_amount_in_wizard_currency_to_full_reconcile' method is used. In '_get_total_amount_in_wizard_currency_to_full_reconcile' method, '_get_total_amount_using_same_currency' is used to get total amount. On '_get_total_amount_using_same_currency' method payment_date is passed as an argument for '_is_eligible_for_early_payment_discount' method. See: https://github.com/odoo/odoo/blob/ed2e26633458f1284437286f71eba43c8d1818a7/addons/account/wizard/account_payment_register.py#L490-L498 On '_is_eligible_for_early_payment_discount' method if no reference date, its returning True. which leads to above traceback See: https://github.com/odoo/odoo/blob/ed2e26633458f1284437286f71eba43c8d1818a7/addons/account/models/account_move.py#L1902-L1905 sentry-4337953422 closes odoo/odoo#134721 X-original-commit: a05be50b9cf75fb0226f7b464b3a8f580465d462 Signed-off-by: Laurent Smet (las) <las@odoo.com>
This commit is contained in:
@@ -553,7 +553,9 @@ class AccountPaymentRegister(models.TransientModel):
|
||||
@api.depends('can_edit_wizard', 'source_amount', 'source_amount_currency', 'source_currency_id', 'company_id', 'currency_id', 'payment_date')
|
||||
def _compute_amount(self):
|
||||
for wizard in self:
|
||||
if wizard.source_currency_id and wizard.can_edit_wizard:
|
||||
if not wizard.journal_id or not wizard.currency_id or not wizard.payment_date:
|
||||
wizard.amount = wizard.amount
|
||||
elif wizard.source_currency_id and wizard.can_edit_wizard:
|
||||
batch_result = wizard._get_batches()[0]
|
||||
wizard.amount = wizard._get_total_amount_in_wizard_currency_to_full_reconcile(batch_result)[0]
|
||||
else:
|
||||
@@ -563,7 +565,9 @@ class AccountPaymentRegister(models.TransientModel):
|
||||
@api.depends('can_edit_wizard', 'payment_date', 'currency_id', 'amount')
|
||||
def _compute_early_payment_discount_mode(self):
|
||||
for wizard in self:
|
||||
if wizard.can_edit_wizard and wizard.currency_id:
|
||||
if not wizard.journal_id or not wizard.currency_id or not wizard.payment_date:
|
||||
wizard.early_payment_discount_mode = wizard.early_payment_discount_mode
|
||||
elif wizard.can_edit_wizard:
|
||||
batch_result = wizard._get_batches()[0]
|
||||
total_amount_residual_in_wizard_currency, mode = wizard._get_total_amount_in_wizard_currency_to_full_reconcile(batch_result)
|
||||
wizard.early_payment_discount_mode = \
|
||||
@@ -575,7 +579,7 @@ class AccountPaymentRegister(models.TransientModel):
|
||||
@api.depends('can_edit_wizard', 'amount')
|
||||
def _compute_payment_difference(self):
|
||||
for wizard in self:
|
||||
if wizard.can_edit_wizard:
|
||||
if wizard.can_edit_wizard and wizard.payment_date:
|
||||
batch_result = wizard._get_batches()[0]
|
||||
total_amount_residual_in_wizard_currency = wizard\
|
||||
._get_total_amount_in_wizard_currency_to_full_reconcile(batch_result, early_payment_discount=False)[0]
|
||||
|
||||
Reference in New Issue
Block a user