from odoo import models import logging _logger = logging.getLogger(__name__) class BankRecWidget(models.Model): _inherit = 'bank.rec.widget' def _action_validate(self): # Save the statement line before super() clears or processes it st_line = self.st_line_id # Call the original validate method super()._action_validate() # Check if this was the source statement line of our internal transfer if st_line and st_line.bank_internal_transfer_id: transfer = st_line.bank_internal_transfer_id if transfer.source_statement_line_id == st_line and not transfer.destination_statement_line_id: # 1. Create Destination Bank Statement Line dest_line = self.env['account.bank.statement.line'].create({ 'journal_id': transfer.destination_journal_id.id, 'date': transfer.date, 'payment_ref': transfer.memo or transfer.name, 'amount': transfer.amount, # Incoming money 'bank_internal_transfer_id': transfer.id, }) transfer.destination_statement_line_id = dest_line # 2. Auto-reconcile Destination Line # Find the account to use: Source Journal's Outgoing Payment account OR 218401 transit_account = transfer.source_journal_id.outbound_payment_method_line_ids.filtered( lambda l: l.code == 'manual' ).mapped('payment_account_id') if not transit_account: transit_account = self.env['account.account'].search([ ('code', '=', '218401'), ('company_id', '=', transfer.company_id.id) ], limit=1) if transit_account: suspense_account = dest_line.journal_id.suspense_account_id suspense_line = dest_line.move_id.line_ids.filtered(lambda l: l.account_id == suspense_account) if suspense_line: suspense_line.with_context(check_move_validity=False).write({ 'account_id': transit_account.id, })