89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
|
|
from odoo import api, fields, models, _
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
STATUS_DOMAINS = {
|
|
'all': [],
|
|
'sent': [('state', '=', 'sent')],
|
|
'failed': [('state', '=', 'failed')],
|
|
'draft': [('state', '=', 'draft')],
|
|
'received': [('state', '=', 'received')],
|
|
}
|
|
|
|
|
|
class FusionFaxDashboard(models.TransientModel):
|
|
_name = 'fusion.fax.dashboard'
|
|
_description = 'Fusion Fax Dashboard'
|
|
_rec_name = 'name'
|
|
|
|
name = fields.Char(default='Fax Dashboard', readonly=True)
|
|
|
|
# KPI stat fields
|
|
total_count = fields.Integer(compute='_compute_stats')
|
|
sent_count = fields.Integer(compute='_compute_stats')
|
|
received_count = fields.Integer(compute='_compute_stats')
|
|
failed_count = fields.Integer(compute='_compute_stats')
|
|
draft_count = fields.Integer(compute='_compute_stats')
|
|
|
|
# Recent faxes as a proper relational field for embedded list
|
|
recent_fax_ids = fields.Many2many(
|
|
'fusion.fax',
|
|
compute='_compute_recent_faxes',
|
|
)
|
|
|
|
def _compute_stats(self):
|
|
Fax = self.env['fusion.fax'].sudo()
|
|
for rec in self:
|
|
rec.total_count = Fax.search_count([])
|
|
rec.sent_count = Fax.search_count(STATUS_DOMAINS['sent'])
|
|
rec.received_count = Fax.search_count(STATUS_DOMAINS['received'])
|
|
rec.failed_count = Fax.search_count(STATUS_DOMAINS['failed'])
|
|
rec.draft_count = Fax.search_count(STATUS_DOMAINS['draft'])
|
|
|
|
def _compute_recent_faxes(self):
|
|
Fax = self.env['fusion.fax'].sudo()
|
|
for rec in self:
|
|
rec.recent_fax_ids = Fax.search([], order='create_date desc', limit=20)
|
|
|
|
# ------------------------------------------------------------------
|
|
# Actions
|
|
# ------------------------------------------------------------------
|
|
|
|
def action_open_all(self):
|
|
return self._open_fax_list('All Faxes', STATUS_DOMAINS['all'])
|
|
|
|
def action_open_sent(self):
|
|
return self._open_fax_list('Sent Faxes', STATUS_DOMAINS['sent'])
|
|
|
|
def action_open_received(self):
|
|
return self._open_fax_list('Received Faxes', STATUS_DOMAINS['received'])
|
|
|
|
def action_open_failed(self):
|
|
return self._open_fax_list('Failed Faxes', STATUS_DOMAINS['failed'])
|
|
|
|
def action_open_draft(self):
|
|
return self._open_fax_list('Draft Faxes', STATUS_DOMAINS['draft'])
|
|
|
|
def _open_fax_list(self, name, domain):
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': name,
|
|
'res_model': 'fusion.fax',
|
|
'view_mode': 'list,form',
|
|
'domain': domain,
|
|
}
|
|
|
|
def action_send_fax(self):
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': 'Send Fax',
|
|
'res_model': 'fusion_faxes.send.fax.wizard',
|
|
'view_mode': 'form',
|
|
'target': 'new',
|
|
}
|