214 lines
10 KiB
Python
Executable File
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
|
|
|
|
|