# -*- coding: utf-8 -*- from odoo import models, fields, api class SkeenConfigAudit(models.Model): """Bitácora de cambios en la configuración sensible de la clínica. Se escribe desde los endpoints de configuración del frontend (comisiones, tipo de cambio, metas, horarios, roles/permisos, usuarios, catálogos) y registra quién, qué entidad, qué campo y los valores anterior/nuevo. """ _name = 'skeen.config.audit' _description = 'Auditoría de configuración SKEEN' _order = 'date desc, id desc' date = fields.Datetime(string='Fecha', default=fields.Datetime.now, index=True) user_login = fields.Char(string='Usuario', index=True) user_name = fields.Char(string='Nombre del usuario') user_role = fields.Char(string='Rol') module = fields.Selection([ ('comisiones', 'Comisiones'), ('tipo_cambio', 'Tipo de cambio'), ('metas', 'Metas'), ('horarios', 'Horarios'), ('roles', 'Roles y permisos'), ('usuarios', 'Usuarios'), ('catalogos', 'Catálogos'), ('clinica', 'Clínica'), ], string='Módulo', required=True, index=True) entity = fields.Char(string='Entidad', index=True, help='Identificador de lo modificado (p. ej. doctor:24, usuario:5)') entity_label = fields.Char(string='Descripción') field = fields.Char(string='Campo') old_value = fields.Text(string='Valor anterior') new_value = fields.Text(string='Valor nuevo') notes = fields.Char(string='Nota') @api.model def log_change(self, module, entity, field, old_value=None, new_value=None, entity_label='', notes='', user=None): """Registra un cambio. `user` es el skeen.frontend.user que lo hizo.""" vals = { 'module': module, 'entity': entity or '', 'entity_label': entity_label or '', 'field': field or '', 'old_value': '' if old_value is None else str(old_value), 'new_value': '' if new_value is None else str(new_value), 'notes': notes or '', } if user is not None: vals.update({ 'user_login': getattr(user, 'login', '') or '', 'user_name': getattr(user, 'name', '') or '', 'user_role': getattr(user, 'role', '') or '', }) return self.sudo().create(vals)