Initial commit
This commit is contained in:
88
fusion_faxes/models/dashboard.py
Normal file
88
fusion_faxes/models/dashboard.py
Normal file
@@ -0,0 +1,88 @@
|
||||
# -*- 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',
|
||||
}
|
||||
Reference in New Issue
Block a user