55 lines
1.7 KiB
Python
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})
|