DigitalSignage/models/dss_trigger.py

143 lines
7.7 KiB
Python

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())