fix: Allow multiple liquidity lines for POS payments and safely retrieve payment details.

This commit is contained in:
Suherdy Yacob 2026-03-06 15:42:44 +07:00
parent 85ade7855b
commit 2cde9d3c45

View File

@ -129,7 +129,10 @@ class AccountPayment(models.Model):
# This module creates additional lines that don't fit the standard pattern
has_substract = hasattr(pay, 'amount_substract') and pay.amount_substract and pay.amount_substract > 0
if not has_substract:
# POS Combination Payments can have multiple liquidity lines
is_pos_payment = pay._context.get('pos_payment')
if not has_substract and not is_pos_payment:
if len(liquidity_lines) != 1:
raise UserError(_(
"Journal Entry %s is not valid. In order to proceed, the journal items must "
@ -161,24 +164,32 @@ class AccountPayment(models.Model):
move.display_name,
))
if counterpart_lines.account_id.account_type == 'asset_receivable':
partner_type = 'customer'
if counterpart_lines:
if counterpart_lines[0].account_id.account_type == 'asset_receivable':
partner_type = 'customer'
else:
partner_type = 'supplier'
else:
partner_type = 'supplier'
partner_type = 'customer'
liquidity_amount = liquidity_lines.amount_currency
liquidity_amount = sum(liquidity_lines.mapped('amount_currency')) if len(liquidity_lines) > 1 else liquidity_lines.amount_currency
# Use the first line for currency and partner if multiple
first_liquidity_line = liquidity_lines[0] if len(liquidity_lines) > 0 else liquidity_lines
if first_liquidity_line:
move_vals_to_write.update({
'currency_id': first_liquidity_line.currency_id.id,
'partner_id': first_liquidity_line.partner_id.id,
})
payment_vals_to_write.update({
'amount': abs(liquidity_amount),
'partner_type': partner_type,
'currency_id': first_liquidity_line.currency_id.id,
'destination_account_id': counterpart_lines[0].account_id.id if counterpart_lines else False,
'partner_id': first_liquidity_line.partner_id.id,
})
move_vals_to_write.update({
'currency_id': liquidity_lines.currency_id.id,
'partner_id': liquidity_lines.partner_id.id,
})
payment_vals_to_write.update({
'amount': abs(liquidity_amount),
'partner_type': partner_type,
'currency_id': liquidity_lines.currency_id.id,
'destination_account_id': counterpart_lines.account_id.id,
'partner_id': liquidity_lines.partner_id.id,
})
if liquidity_amount > 0.0:
payment_vals_to_write.update({'payment_type': 'inbound'})
elif liquidity_amount < 0.0: