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 dsssystemtypen(models.Model): _name = "dss.systemtypen" _inherit = ['mail.thread'] _description = "DigitalSignage Systemtypen" _rec_name = "systemname" uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') systemname = fields.Char('Systemname', required=True) kennung = fields.Char('Kurzkennung', required=True) farbe = fields.Char('Grundfarbe') icon = fields.Image() icon_5050 = fields.Image("Icon 50",compute='_compute_icon_5050') default_adstructure = fields.Many2one('dss.adstructures',string='Standard-Werbeaufbau', tracking=True) default_cloud_path = fields.Char('Standard Cloud Pfad', tracking=True) default_cloud_structure_project = fields.Char('Standard Cloud Projekt-Struktur (Pfad)', tracking=True) default_cloud_structure_contract = fields.Char('Standard Cloud Kunden-Struktur (Pfad)', tracking=True) email_template_welcome = fields.Many2one('mail.template',string='Mailvorlage für Willkommen', tracking=True) email_template_zuarbeit = fields.Many2one('mail.template',string='Mailvorlage für Zuarbeiterrinnerung', tracking=True) email_template_abzug = fields.Many2one('mail.template',string='Mailvorlage für Korrekturabzug', tracking=True) email_template_start = fields.Many2one('mail.template',string='Mailvorlage für Auslieferung', tracking=True) open_close_standard_state = fields.Boolean('Wenn Leer geschlossen ? ', tracking=True) open_close_user_state = fields.Boolean('Leer-Verhalten user',compute='_get_user_openstate',tracking=True) order = fields.Integer('Reihenfolge') showonlinestate = fields.Boolean('OnlineStatus zeigen') showonlinestate_type = fields.Selection([('RPORT','RPort Status'),('VNNOX','Vnnox System')]) @api.model def _default_uuid(self): return str(uuid.uuid4()) @api.depends('icon') def _compute_icon_5050(self): for rec in self: if rec.icon != False: _logger.info('compute 50x50 icon for '+rec.uuid) # rec.mediafile_preview = self._generate_preview_from_binary(base64.decodebytes(rec.mediafile)) # rec.icon_5050 = tools.image_resize_image(rec.icon,size=(50,50),avoid_if_small=True) rec.icon_5050 = rec.icon # if rec.mediafile != False: # rec.mediafile_preview = self._generate_preview_from_binary(base64.decodebytes(rec.mediafile)) # rec.mediafile_preview = None else: _logger.info('alternative compute '+rec.uuid) rec.icon_5050 = rec.icon return def _get_user_openstate(self): state=self.open_close_standard_state self.open_close_user_state=state return state class dssstatesave(models.Model): _name = "dss.statesave" _description = "DigitalSignage Systemtypen StatusPerUser" uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') stategroup = fields.Selection([('SYSTYP','Systemtypen'),('CONTYP','Vertragsstatus')],'Status Gruppe', required=True) state = fields.Char('Status', required=True) user = fields.Char('Benutzer', required=True) state_open = fields.Boolean('Verhalten ')