DigitalSignage/models/dss_settings.py

214 lines
10 KiB
Python
Executable File

import ast
import datetime
import json
import re
import uuid
import logging
import base64
import subprocess
import tempfile
import easywebdav
import os
import os.path
from odoo import api, fields, models, _
from odoo import tools
from odoo.exceptions import ValidationError
from datetime import date
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pyffmpeg import FFmpeg
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
import sys
TUYA_LOGGER.setLevel(logging.DEBUG)
_logger = logging.getLogger(__name__)
class dssSettings(models.Model):
_name = "dss.settings"
_description = "DigitalSignage Einstellungen"
_inherit = ['mail.thread','mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
def_cloud_url_base = fields.Char('Cloud URL Basis',help='https://xyxxxxxx.de/cccccccc/ bis zum vorkommen des des Grundsystem URL Teils',tracking=True)
def_project_cloudpath = fields.Char('Standard Projekt Pfad',tracking=True)
def_project_cloudpath_sample = fields.Char('Projekt Beispiel :',store=True,tracking=True)
def_contract_cloudpath = fields.Char('Standard Kunden Pfad',tracking=True)
def_contract_cloudpath_sample = fields.Char('Vertrags Beispiel :',tracking=True)
def_contract_cloudpath_V2 = fields.Char('Standard Kunden Pfad V2',tracking=True)
def_contract_cloudpath_sample_V2 = fields.Char('Projekt Beispiel V2 :',tracking=True)
def_ad_cloudpath = fields.Char('Standard Kampagnen Pfad',tracking=True)
def_ad_cloudpath_sample = fields.Char('Kampagnen Beispiel :',tracking=True)
tuya_access_id = fields.Char('Tuya Access ID',tracking=True)
tuya_access_key = fields.Char('Tuya Access KEY',tracking=True)
tuya_endpoint = fields.Char('Tuya Access Endpoint',tracking=True)
google_maps_key = fields.Char('Google API Key (Maps)',tracking=True)
os_webimg_path = fields.Char('Verzeichnis für Bilder im Odooweb',tracking=True)
contact_runtime_user = fields.Many2one('res.users',string="Kalenderkontact",help="Kalenderkontakt für Ablauf von Verträgen")
runtime_auto_calandar_entry = fields.Boolean('Autom. Vertragsende Kalendereintrag ?',help='Jeden berechneten Vertrag-Ablaufzeitpunkt automatisch in Kalender eintragen ?',tracking=True)
show_expand_contract_group_ad_state = fields.Boolean('Jeden Kampagnen-Status anzeigen ?',help='im Groupierungsmodus der Verträge nach Kampagnenstatus alle (auch unbenutzte) Statusspalten anzeigen ?',tracking=True)
show_expand_contract_group_ad_work_state = fields.Boolean('Jeden Kampagnen-Arbeitsstatus anzeigen ?',help='im Groupierungsmodus der Verträge nach Kampagnen-Arbeitsstatus alle (auch unbenutzte) Statusspalten anzeigen ?',tracking=True)
show_expand_contract_group_ad_todo_state = fields.Boolean('Jeden Kampagnen-Aufgabenschritt anzeigen ?',help='im Groupierungsmodus der Verträge nach Kampagnen-Aufgabenschritt alle (auch unbenutzte) Aufgabenspalten anzeigen ?',tracking=True)
freigabe_auto_time = fields.Integer('Auto Freigabetage',help='Automatische Freigabe nach x Tagen',tracking=True)
tv_vertragsankuendigung_actionID = fields.Integer('TV Vertragsankündigung ActionID',help="Aktion die ausgeführt wird, wenn im Web-Vertragseingang der Button Vertragsankündigung geklickt wird.",tracking=True)
systemonline_color = fields.Char('Farbe Online',tracking=True)
systemoffline_color = fields.Char('Farbe Offline',tracking=True)
vnnoxurl = fields.Char('VNNox URL',tracking=True)
vnnoxusername = fields.Char('VNNox Username',tracking=True)
vnnoxpassword = fields.Char('VNNox Password',tracking=True)
rporturl = fields.Char('RPort URL',tracking=True)
rportusername = fields.Char('RPort Username',tracking=True)
rporttoken = fields.Char('RPort API Token',tracking=True)
showdebug = fields.Boolean('Debug',help='Debug Informationen aktivieren ',tracking=True)
m2mcron = fields.Many2one('ir.cron',string='M2M Cron',tracking=True)
def _get_settingvalue(self,valuename):
settings = (self.env['dss.settings'].search([],limit=1))
wert = settings._origin.read([valuename])[0][valuename]
return wert
@api.model
def _get_path_converted(self,path,record):
alls = ''
_logger.info("GetPath with " + str(path)+ " and Record : "+str(record.id))
if path:
for parts in path.split(','):
if parts[0] == '$':
fels = parts[1:]
parts = record._origin.read([fels])
_logger.info("Get Path - Anfrage-Teil gefunden : " + str(parts))
if parts:
value = str(parts[0][fels])
else:
value = ''
_logger.info("Get Path - Anfrage-Teil gefunden - setze : " + str(value))
alls = alls + value
else:
alls = alls + str(parts)
return alls
@api.onchange('def_project_cloudpath')
def _onchange_def_project_cloudpath(self):
_logger.info("Default Project Cloudpath Setzen")
project_1 = self.env['dss.projects'].search([('uuid','=ilike','%')],limit=1)
if not project_1:
_logger.info("Default Cloudpath Setzen - kein MusterProjekt gefunden")
else:
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden "+str(project_1.id))
alls = self._get_path_converted(self.def_project_cloudpath,project_1)
self.def_project_cloudpath_sample = alls
@api.onchange('def_contract_cloudpath')
def _onchange_def_contract_cloudpath(self):
_logger.info("Default Contract Cloudpath Setzen")
contract_1 = self.env['dss.contracts'].search([('uuid','=ilike','%')],limit=1)
if not contract_1:
_logger.info("Default Cloudpath Setzen - kein MusterProjekt gefunden")
else:
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden "+str(contract_1.id))
alls = self._get_path_converted(self.def_contract_cloudpath,contract_1)
self.def_contract_cloudpath_sample = alls
@api.onchange('def_ad_cloudpath')
def _onchange_def_ad_cloudpath(self):
_logger.info("Default ad Cloudpath Setzen")
ad_1 = self.env['dss.ads'].search([('uuid','=ilike','%')],limit=1)
if not ad_1:
_logger.info("Default Cloudpath Setzen - kein MusterProjekt gefunden")
else:
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden "+str(ad_1.id))
alls = self._get_path_converted(self.def_ad_cloudpath,ad_1)
self.def_ad_cloudpath_sample = alls
def _default_uuid(self):
return str(uuid.uuid4())
@api.model
def saveConfig(self,tableInfo):
_logger.info("Config speichern "+str(tableInfo))
activefields = tableInfo[3]
for field in activefields:
_logger.info("Config speichern : "+str(field)+" / "+str(tableInfo[0])+" -> "+str(tableInfo[1])+" "+str(tableInfo[2]))
myview = self.env['dss.viewsettings'].search(['&',("user","=",self.env.user.name),("model_view","=",tableInfo[1]),("model_datensatz","=",tableInfo[0]),("viewtype","=",tableInfo[2]),("column","=",field[0])])
if not myview:
_logger.info("Config speichern : noch keine gespeicherten Daten")
else:
myview.unlink()
self.env['dss.viewsettings'].create({
'model_view':tableInfo[1],
'model_datensatz':tableInfo[0],
'viewtype':tableInfo[2],
'user':self.env.user.name,
'user_id':self.env.user.id,
'column':field[0],
'column_size':field[1],
'state_visible':field[2],
'state_collapse':field[3]
})
return 0
@api.model
def resetConfig(self,tableInfo):
_logger.info("Config reset "+str(tableInfo))
myview = self.env['dss.viewsettings'].search(['&',("user","=",self.env.user.name),("model_view","=",tableInfo[1]),("model_datensatz","=",tableInfo[0]),("viewtype","=",tableInfo[2])])
if not myview:
_logger.info("Config Reset : noch keine gespeicherten Daten")
else:
myview.unlink()
return 0
@api.model
def getprojectpath(self,project):
_logger.info("Get Project Path for "+str(project.id))
if project:
settings = (self.env['dss.settings'].search([],limit=1))
alls = dssSettings._get_path_converted(self,settings.def_project_cloudpath,project)
_logger.info("Get Project Path - Ergebnis : " + str(alls))
return alls
else:
_logger.info("Get Project Path - kein Projekt gefunden")
return ''
@api.model
def getClientpath(self,client):
_logger.info("Get Client Path for "+str(client.id))
if client:
settings = (self.env['dss.settings'].search([],limit=1))
alls = dssSettings._get_path_converted(self,settings.def_contract_cloudpath,client)
_logger.info("Get Client Path - Ergebnis : " + str(alls))
return alls
else:
_logger.info("Get Client Path - kein Client gefunden")
return ''
class dssSettingsSave(models.Model):
_name = "dss.viewsettings"
_description = "DigitalSignage Ansicht Einstellungen"
_inherit = []
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
user = fields.Char('User')
user_id = fields.Many2one('res.users',string='User_id')
model_view = fields.Char('Model')
model_datensatz = fields.Char('Datensatz')
viewtype = fields.Char('Ansichtstyp')
column = fields.Char('Spalte')
column_size = fields.Char('Spalten Grösse')
state_visible = fields.Char('Status sichtbar')
state_collapse = fields.Char('Status zusammengeklappt')
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
def _default_create_user(self):
return str(self.env.user.name)
def _default_create_user_id(self):
return self.env.user.id