account_custom_internal_tra.../models/bank_rec_widget.py

50 lines
2.3 KiB
Python

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,
})