import logging from odoo import models, fields, api _logger = logging.getLogger(__name__) class FusionAccountingMatchHistory(models.Model): _name = 'fusion.accounting.match.history' _description = 'Fusion Accounting Match History' _order = 'proposed_at desc' session_id = fields.Many2one( 'fusion.accounting.session', string='Session', index=True, ondelete='cascade', ) tool_name = fields.Char(string='Tool Name', required=True, index=True) tool_params = fields.Text(string='Tool Parameters (JSON)') tool_result = fields.Text(string='Tool Result (JSON)') ai_reasoning = fields.Text(string='AI Reasoning') ai_confidence = fields.Float(string='AI Confidence', digits=(3, 2)) rule_id = fields.Many2one( 'fusion.accounting.rule', string='Applied Rule', ondelete='set null', ) proposed_at = fields.Datetime( string='Proposed At', default=fields.Datetime.now, required=True, ) decision = fields.Selection( selection=[ ('approved', 'Approved'), ('rejected', 'Rejected'), ('pending', 'Pending'), ('auto', 'Auto-Executed'), ], string='Decision', default='pending', index=True, ) decided_at = fields.Datetime(string='Decided At') decided_by = fields.Many2one('res.users', string='Decided By') rejection_reason = fields.Text(string='Rejection Reason') correct_action = fields.Text(string='Correct Action (JSON)') bank_statement_line_id = fields.Many2one( 'account.bank.statement.line', string='Bank Statement Line', ondelete='set null', ) move_line_ids = fields.Many2many( 'account.move.line', string='Journal Items', ) amount = fields.Monetary(string='Amount', currency_field='currency_id') currency_id = fields.Many2one( 'res.currency', string='Currency', default=lambda self: self.env.company.currency_id, ) partner_id = fields.Many2one('res.partner', string='Partner') company_id = fields.Many2one( 'res.company', string='Company', default=lambda self: self.env.company, ) def action_approve(self): self.write({ 'decision': 'approved', 'decided_at': fields.Datetime.now(), 'decided_by': self.env.user.id, }) for rec in self: if rec.rule_id: rec.rule_id._record_decision(approved=True) def action_reject(self): self.write({ 'decision': 'rejected', 'decided_at': fields.Datetime.now(), 'decided_by': self.env.user.id, }) for rec in self: if rec.rule_id: rec.rule_id._record_decision(approved=False)