Commit b015a671 authored by Jérome Perrin's avatar Jérome Perrin

bank_reconciliation: review sanity check assertion

It did not support reconciled internal transactions
parent ffa3ad0a
......@@ -5,17 +5,32 @@ portal = context.getPortalObject()
portal.portal_selections.updateSelectionCheckedUidList(list_selection_name, listbox_uid, uids)
selection_uid_list = portal.portal_selections.getSelectionCheckedUidsFor(list_selection_name)
reconciled_bank_account = context.getSourcePayment()
if mode == 'reconcile':
for line in portal.portal_catalog(uid=selection_uid_list or -1):
line = line.getObject()
if line.getAggregate(portal_type='Bank Reconciliation'):
return context.Base_redirect(dialog_id,
abort_transaction=True,
keep_items={'portal_status_message': translateString("Line Already Reconciled"),
'reset': 1,
'cancel_url': cancel_url,
'mode': mode,
'field_your_mode': mode})
# Sanity check: line should not already be reconciled.
# But what can happen is that this line is an internal transaction line that was
# reconciled for payment on one side but not yet on the other side (ex. reconciled
# for the bank account used as source_payment, not not bank account used at
# destination_payment). So we can accept if the line is already reconciled with a
# bank reconciliation, if that bank reconciliation is using another bank account
# that the one on this bank reconciliation.
# To prevent unauthorized errors, we only consider bank reconciliation users can access.
for existing_bank_reconciliation in line.getAggregateValueList(
portal_type='Bank Reconciliation',
checked_permission='Access contents information'):
if existing_bank_reconciliation.getSourcePayment() == reconciled_bank_account:
return context.Base_redirect(
dialog_id,
abort_transaction=True,
keep_items={
'portal_status_message': translateString("Line Already Reconciled"),
'reset': 1,
'cancel_url': cancel_url,
'mode': mode,
'field_your_mode': mode})
line.AccountingTransactionLine_setBankReconciliation(context,
message=translateString("Reconciling Bank Line"))
return context.Base_redirect(dialog_id, keep_items={
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment