import uuid import logging from odoo import api, fields, models, _ from odoo import tools from odoo.exceptions import ValidationError import sys _logger = logging.getLogger(__name__) class dsstriggergroups(models.Model): _name = "dss.triggergroups" _description = "DigitalSignage Trigger Gruppen" _inherit = ['mail.thread','mail.activity.mixin'] _rec_name = "triggergroupname" # _inherit = ['mail.thread', 'mail.activity.mixin'] uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date()) date_lastedit = fields.Date('Änderungsdatum') user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user()) user_lastedit = fields.Char('Änderungsuser') triggergroupname = fields.Char('Trigger Gruppenname',tracking=True) trigger_table = fields.Many2one('ir.model','Nutzbar in',help='Für welche Daten ist dieser Tigger gültig ?',track_visibility='onchange',tracking=True) triggers = fields.Many2many('dss.triggertypes',string='Enthaltene Trigger',tracking=True) @api.model def _default_uuid(self): return str(uuid.uuid4()) def _default_create_date(self): return str(date.today()) def _default_create_user(self): return str(self.env.user.name) class dsstriggertypes(models.Model): _name = "dss.triggertypes" _description = "DigitalSignage Trigger Typen" _inherit = ['mail.thread','mail.activity.mixin'] _rec_name = "triggername" uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date()) date_lastedit = fields.Date('Änderungsdatum') user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user()) user_lastedit = fields.Char('Änderungsuser') triggername = fields.Char('Triggername',tracking=True) trigger_active = fields.Boolean('Trigger Aktiv ?',tracking=True) triggertyp = fields.Selection([('FIELD_A','Feldänderung allgemein'),('FIELD_S','Feldänderung spezifisch'),('FIELD_K','Feldwert berechnet'),('MANUAL','Menuell ausgelösst')],'Triggertyp',tracking=True) trigger_table = fields.Many2one('ir.model','Nutzbar in',help='Für welche Daten ist dieser Tigger gültig ?',tracking=True) trigger_field = fields.Many2one('ir.model.fields', help='Feldname in der Tabelle',tracking=True) trigger_operator = fields.Selection([('NGLEICH','Feld gleich dem Wert'),('GGLEICH','Feld größer/gleich dem Wert'),('KGLEICH','Feld kleiner/gleich dem Wert'),('UGLEICH','Feld ungleich dem Wert'),('ENTHAELT','Feld enthällt dem Wert')],'Feldwertoperator',tracking=True) trigger_init_trigger = fields.Boolean('Ausl. bei 1. Änderung ?',help='Soll der Trigger bereits beim setzen des 1. Wertes auslösen?',tracking=True) trigger_value = fields.Char('Feldwert für Trigger',tracking=True) trigger_old_value = fields.Char('Letzter-Feldwert für Trigger',tracking=True) trigger_aktionen = fields.Many2many('ir.actions.server',string='Aktionen bei auslösen des Triggers',tracking=True) @api.model def _default_uuid(self): return str(uuid.uuid4()) def _default_create_date(self): return str(date.today()) def _default_create_user(self): return str(self.env.user.name) def getfield(self,model,field_name): value = model for part in field_name.split('.'): value = getattr(value,part) return value def _check_trigger(self): for record in self: _logger.info('Trigger Check TR_' + str(record)+' Begin') if record.trigger_active: _logger.info('Trigger Check TR_' + str(record) + ' Check Field F_'+str(record.trigger_field.name)+' of model M_'+str(record.trigger_table.model)+' Feld-Typ :'+str(record.trigger_field.ttype)) if record.trigger_field.ttype in ['char','text','html']: val = self.env[record.trigger_table.model]._origin.read([record.trigger_field.name]) elif record.trigger_field.ttype in ['selection']: val = self.env[record.trigger_table.model]._origin.read([record.trigger_field.name])[0] elif record.trigger_field.ttype in ['one2many']: val = self.env[record.trigger_table.model]._origin.read([record.trigger_field.name]).ids elif record.trigger_field.ttype in ['many2one']: # val = self.getfield(self.env[record.trigger_table.model],record.trigger_field.name+'.uuid') val = self.env[record.trigger_table.model]._fields[record.trigger_field.name].string else: val = False record.trigger_old_value = str(val) _logger.info('Trigger Check TR_' + str(record)+' oldValue '+str(record.trigger_old_value)+' newValue '+str(val)) _logger.info('Trigger Check TR_' + str(record)+' Ende') return "" class dsstriggeractions(models.Model): _name = "dss.triggeractions" _description = "DigitalSignage Trigger Aktionen" _inherit = ['mail.thread','mail.activity.mixin'] _rec_name = "triggeractionname" uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date()) date_lastedit = fields.Date('Änderungsdatum') user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user()) user_lastedit = fields.Char('Änderungsuser') triggeractionname = fields.Char('Triggeraktionname',track_visibility='onchange',tracking=True) triggeractiontyp = fields.Selection([('EMAIL','EMail senden'),('ACTIV','Aufgabe erzeugen'),('DSEDIT','Datensatz ändern'),('TUYA','Tuya Aktion auslössen')],'Aktionstyp',tracking=True) email_getfrom = fields.Selection([('FIX','Email fest hinterlegt'),('DATA','Email in Feld hinterlegt')],'Emailadresse von',tracking=True) email_fix_email_sender = fields.Many2one('res.partner','Absender',help='Email Sender Adresse der Aktion',tracking=True) email_fix_email = fields.Many2one('res.partner','Empfänger',help='Email Emüfänger Adresse für Benachrichtigung/Triggeraktion',tracking=True) email_data_table = fields.Many2one('ir.model','Nutzbar in',help='Für welche Daten ist diese Aktion gültig ?',tracking=True) email_data_field = fields.Many2one('ir.model.fields', help='Feldname in der Tabelle',tracking=True) email_template = fields.Many2one('mail.template','Emailvorlage',tracking=True) field = fields.Char('Feldname',help='Feldname in o.g. Tebelle.',tracking=True) type_s = fields.Char('Feldwertoperator',tracking=True) value_s = fields.Char('Feldwert für Trigger',tracking=True) @api.model def _default_uuid(self): return str(uuid.uuid4()) def _default_create_date(self): return str(date.today()) def _default_create_user(self): return str(self.env.user.name) class dsstriggermodel(models.Model): _name = "dss.triggermodel" _description = "DigitalSignage Trigger Model für Inherit" _rec_name = "trigger_uuid" trigger_uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') run_trigger = fields.Boolean('Trigger aktiv',tracking=True) triggergroup = fields.Many2one('dss.triggergroups',string='Triggergruppe',tracking=True,default=True) @api.model def _default_uuid(self): return str(uuid.uuid4())