Files
Odoo-Modules/fusion_accounting_followup/models/fusion_followup_run.py
2026-04-19 20:44:39 -04:00

55 lines
1.7 KiB
Python

"""Audit record of one follow-up execution (per partner per level)."""
from odoo import _, api, fields, models
STATE_SELECTION = [
('draft', 'Draft'),
('sent', 'Sent'),
('manual_review', 'Manual Review'),
('skipped', 'Skipped'),
('failed', 'Failed'),
]
class FusionFollowupRun(models.Model):
_name = "fusion.followup.run"
_description = "Fusion Follow-up Run (Per-Partner Audit)"
_order = "execution_date desc, id desc"
partner_id = fields.Many2one('res.partner', required=True, ondelete='cascade')
company_id = fields.Many2one('res.company', required=True,
default=lambda self: self.env.company)
level_id = fields.Many2one('fusion.followup.level', ondelete='restrict')
execution_date = fields.Datetime(default=fields.Datetime.now, required=True)
state = fields.Selection(STATE_SELECTION, default='draft', required=True)
overdue_amount = fields.Float()
longest_overdue_days = fields.Integer()
risk_score = fields.Integer()
risk_band = fields.Selection([
('low', 'Low'), ('medium', 'Medium'),
('high', 'High'), ('critical', 'Critical'),
])
subject = fields.Char()
body = fields.Text()
tone_used = fields.Selection([
('gentle', 'Gentle'), ('firm', 'Firm'), ('legal', 'Legal'),
])
sent_to_email = fields.Char()
text_was_ai_generated = fields.Boolean(default=False)
ai_provider = fields.Char(help="LLM provider name (openai, claude, etc.) if AI was used.")
notes = fields.Text()
error_message = fields.Text()
def action_mark_sent(self):
self.write({'state': 'sent'})
def action_mark_failed(self, error: str = ''):
self.write({'state': 'failed', 'error_message': error})