feat(fusion_accounting_bank_rec): auto-reconcile wizard

TransientModel that filters unreconciled bank lines by journal +
date range + strategy and runs engine.reconcile_batch. Shows
reconciled_count / skipped_count / error_summary in result view.

Made-with: Cursor
This commit is contained in:
gsinghpal
2026-04-19 13:16:06 -04:00
parent 6cbb5f85fe
commit 75850aad73
7 changed files with 172 additions and 1 deletions

View File

@@ -16,3 +16,4 @@ from . import test_legacy_tools_refactor
from . import test_mv_unreconciled
from . import test_cron_methods
from . import test_controller
from . import test_auto_reconcile_wizard

View File

@@ -0,0 +1,50 @@
"""Tests for fusion.auto.reconcile.wizard."""
from odoo.tests.common import TransactionCase, tagged
from . import _factories as f
@tagged('post_install', '-at_install')
class TestAutoReconcileWizard(TransactionCase):
def setUp(self):
super().setUp()
self.partner = self.env['res.partner'].create({'name': 'Auto Wizard Partner'})
self.journal = f.make_bank_journal(self.env, name='Auto Bank', code='AUBK')
def test_wizard_runs_and_reconciles_matchable_lines(self):
statement = f.make_bank_statement(self.env, journal=self.journal)
for amount in [100.00, 200.00]:
f.make_invoice(self.env, partner=self.partner, amount=amount)
f.make_bank_line(
self.env, statement=statement, amount=amount, partner=self.partner)
wizard = self.env['fusion.auto.reconcile.wizard'].create({
'journal_id': self.journal.id,
'strategy': 'auto',
'only_with_partner': True,
})
wizard.action_run()
self.assertEqual(wizard.state, 'done')
self.assertGreaterEqual(wizard.reconciled_count, 2)
def test_wizard_filters_by_date_range(self):
wizard = self.env['fusion.auto.reconcile.wizard'].create({
'journal_id': self.journal.id,
'date_from': '2099-01-01',
'date_to': '2099-12-31',
'strategy': 'auto',
})
wizard.action_run()
self.assertEqual(wizard.reconciled_count, 0)
def test_wizard_skips_when_only_with_partner_excludes_orphans(self):
statement = f.make_bank_statement(self.env, journal=self.journal)
f.make_bank_line(self.env, statement=statement, amount=999, partner=None)
wizard = self.env['fusion.auto.reconcile.wizard'].create({
'journal_id': self.journal.id,
'strategy': 'auto',
'only_with_partner': True,
})
wizard.action_run()
self.assertEqual(wizard.reconciled_count, 0)