From b37b1d461863ae59d685f7221b333b7478a5fb23 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Sun, 19 Apr 2026 10:22:39 -0400 Subject: [PATCH] feat(fusion_accounting_bank_rec): transient model for widget round-trip data Made-with: Cursor --- fusion_accounting_bank_rec/__manifest__.py | 2 +- fusion_accounting_bank_rec/models/__init__.py | 1 + .../models/fusion_bank_rec_widget.py | 33 +++++++++++++++++++ .../security/ir.model.access.csv | 1 + 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 fusion_accounting_bank_rec/models/fusion_bank_rec_widget.py diff --git a/fusion_accounting_bank_rec/__manifest__.py b/fusion_accounting_bank_rec/__manifest__.py index df5fc272..9b64e374 100644 --- a/fusion_accounting_bank_rec/__manifest__.py +++ b/fusion_accounting_bank_rec/__manifest__.py @@ -1,6 +1,6 @@ { 'name': 'Fusion Accounting — Bank Reconciliation', - 'version': '19.0.1.0.2', + 'version': '19.0.1.0.3', 'category': 'Accounting/Accounting', 'sequence': 28, 'summary': 'Native V19 bank reconciliation widget with AI confidence scoring + behavioural learning.', diff --git a/fusion_accounting_bank_rec/models/__init__.py b/fusion_accounting_bank_rec/models/__init__.py index 07f30a4a..89320e0e 100644 --- a/fusion_accounting_bank_rec/models/__init__.py +++ b/fusion_accounting_bank_rec/models/__init__.py @@ -1,3 +1,4 @@ from . import fusion_reconcile_pattern from . import fusion_reconcile_precedent from . import fusion_reconcile_suggestion +from . import fusion_bank_rec_widget diff --git a/fusion_accounting_bank_rec/models/fusion_bank_rec_widget.py b/fusion_accounting_bank_rec/models/fusion_bank_rec_widget.py new file mode 100644 index 00000000..9a9e0fcb --- /dev/null +++ b/fusion_accounting_bank_rec/models/fusion_bank_rec_widget.py @@ -0,0 +1,33 @@ +"""Per-request widget state. Holds the kanban-load response shape so the +controller can return one well-typed object. + +This is a TransientModel (no DB persistence beyond the request). The OWL +widget reads pre-computed fusion.reconcile.suggestion rows directly via +the controller; this model is just a typed envelope for the kanban-open +action.""" + +from odoo import api, fields, models + + +class FusionBankRecWidget(models.TransientModel): + _name = "fusion.bank.rec.widget" + _description = "Bank reconciliation widget state (transient)" + + journal_id = fields.Many2one('account.journal', + domain="[('type', '=', 'bank')]") + statement_line_ids = fields.Many2many('account.bank.statement.line') + summary_count = fields.Integer( + help="Number of unreconciled lines visible in this widget") + summary_unreconciled_balance = fields.Monetary(currency_field='currency_id') + currency_id = fields.Many2one('res.currency', + related='journal_id.currency_id', + store=False, readonly=True) + + def action_open_kanban(self): + """Return a window action opening the OWL kanban for this journal.""" + self.ensure_one() + return { + 'type': 'ir.actions.client', + 'tag': 'fusion_bank_rec_kanban', + 'params': {'journal_id': self.journal_id.id}, + } diff --git a/fusion_accounting_bank_rec/security/ir.model.access.csv b/fusion_accounting_bank_rec/security/ir.model.access.csv index 86831cac..de092300 100644 --- a/fusion_accounting_bank_rec/security/ir.model.access.csv +++ b/fusion_accounting_bank_rec/security/ir.model.access.csv @@ -5,3 +5,4 @@ access_fusion_reconcile_precedent_user,precedent user,model_fusion_reconcile_pre access_fusion_reconcile_precedent_admin,precedent admin,model_fusion_reconcile_precedent,fusion_accounting_core.group_fusion_accounting_admin,1,1,1,1 access_fusion_reconcile_suggestion_user,suggestion user,model_fusion_reconcile_suggestion,fusion_accounting_core.group_fusion_accounting_user,1,0,0,0 access_fusion_reconcile_suggestion_admin,suggestion admin,model_fusion_reconcile_suggestion,fusion_accounting_core.group_fusion_accounting_admin,1,1,1,1 +access_fusion_bank_rec_widget_user,bank rec widget user,model_fusion_bank_rec_widget,fusion_accounting_core.group_fusion_accounting_user,1,1,1,1