diff --git a/models/account_payment.py b/models/account_payment.py index aed736c..be57fe4 100644 --- a/models/account_payment.py +++ b/models/account_payment.py @@ -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: