50 lines
2.3 KiB
Python
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,
|
|
})
|