Files
Odoo-Modules/fusion_api/models/api_consumer.py
gsinghpal e56974d46f update
2026-03-16 08:14:56 -04:00

55 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
from odoo import models, fields, api
class FusionApiConsumer(models.Model):
_name = 'fusion.api.consumer'
_description = 'API Consumer (Fusion Module)'
_order = 'name'
name = fields.Char(required=True, string='Display Name')
technical_name = fields.Char(required=True, index=True)
module_id = fields.Many2one('ir.module.module', string='Odoo Module', readonly=True)
module_state = fields.Selection(
related='module_id.state', string='Module Status', readonly=True,
)
is_active = fields.Boolean(default=True, string='API Access Enabled', tracking=True)
auto_detected = fields.Boolean(default=False, readonly=True)
first_seen_at = fields.Datetime(readonly=True)
access_ids = fields.One2many('fusion.api.access', 'consumer_id', string='Access Rules')
total_month_cost = fields.Float(
compute='_compute_usage_stats', string='Month Cost (USD)',
)
total_month_requests = fields.Integer(
compute='_compute_usage_stats', string='Month Requests',
)
company_id = fields.Many2one('res.company', default=lambda self: self.env.company)
_sql_constraints = [
('technical_name_company_uniq', 'unique(technical_name, company_id)',
'Consumer technical name must be unique per company.'),
]
def _compute_usage_stats(self):
today = fields.Date.today()
month_start = today.replace(day=1)
for rec in self:
usages = self.env['fusion.api.usage'].sudo().search([
('consumer_id', '=', rec.id),
('create_date', '>=', fields.Datetime.to_string(month_start)),
('status', '=', 'success'),
])
rec.total_month_cost = sum(u.estimated_cost_usd for u in usages)
rec.total_month_requests = len(usages)
def action_toggle_access(self):
for rec in self:
rec.is_active = not rec.is_active