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('Projekt 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) def _get_settingvalue(self,valuename): settings = (self.env['dss.settings'].search([],limit=1)) wert = settings._origin.read([valuename])[0][valuename] return wert 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,savemodel,activefields): _logger.info("Config speichern "+str(savemodel)+" / "+str(activefields)) for field in activefields: feldwerte = activefields.get(field) for wert in feldwerte: _logger.info("Config speichern : "+str(field)+" / "+str(wert)+" -> "+str(feldwerte.get(wert))) return 0 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') model = fields.Many2one('ir.model',string='Ansichtsmodel') viewtype = fields.Char('Ansichtstyp') user = fields.Char('User') column = fields.Char('Spalte') 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)