kleine Änderungen - vor Screendesigner

This commit is contained in:
jopster 2025-03-24 08:17:39 +01:00
parent 16b4c248d4
commit 285777451a
32 changed files with 897 additions and 68 deletions

View File

@ -18,6 +18,8 @@
'views/dss_projectstate.xml',
'views/dss_systemtypen.xml',
'views/dss_mediarelations.xml',
'views/dss_display_templates.xml',
'views/dss_advertisementfields_templates.xml',
'views/dss_advertisementfields.xml',
'views/dss_projects.xml',
'views/dss_import.xml',
@ -26,6 +28,7 @@
'views/dss_mediafiles.xml',
'views/dss_addstructures.xml',
'views/dss_geraetetypen.xml',
'views/dss_onlinestate.xml',
'views/dss_texts.xml',
'views/dss_systems.xml',
'views/dss_screendesign.xml',

View File

@ -1,5 +1,6 @@
from . import dss_activity_mixin
from . import dss_marker
from . import dss_onlinestate
from . import dss_settings
from . import dss_trigger
from . import dss_ads
@ -10,6 +11,8 @@ from . import dss_systemtypen
from . import dss_software
from . import dss_systems
from . import dss_eventdays
from . import dss_display_templates
from . import dss_advertisefields_templates
from . import dss_advertisefields
from . import dss_trigger
from . import dss_triggerexecute
@ -24,4 +27,3 @@ from . import dss_invoices
from . import dss_importinvoicelist
from . import dss_web_contracts

Binary file not shown.

View File

@ -50,18 +50,74 @@ class dssadvertisefields(models.Model):
# uuid = fields.Char('UUID', required=True, translate=True)
auto_feldname = fields.Char('Projekt_Feldname', default=lambda self: self._default_projektfeld(), required=True)
display = fields.Char('Designname')
feldname = fields.Char('Feldname', required=True)
project = fields.Many2one('dss.projects' , string='Project', store=True)
project_id = fields.Integer(related='project.projectid', string='Project ID')
contract = fields.Many2many('dss.contracts' , string='Vertrag', store=True)
contract_save = fields.Many2one('dss.contracts' , string='Vertrag', store=True)
contract_project_id = fields.Integer(related='contract.project_id', string='Project ID')
color_used = fields.Char(string='Color Index')
color_unused = fields.Char(string='Color Index')
display = fields.Char('Designname',tracking=True)
feldname = fields.Char('Feldname', required=True,tracking=True)
project = fields.Many2one('dss.projects' , string='Project', store=True,tracking=True)
project_id = fields.Integer(related='project.projectid', string='Project ID',tracking=True)
contract = fields.Many2many('dss.contracts' , string='Vertrag', store=True,tracking=True)
contract_save = fields.Many2one('dss.contracts' , string='Vertrag', store=True,tracking=True)
contract_project_id = fields.Integer(related='contract.project_id', string='Project ID',tracking=True)
color_used = fields.Char(string='Color Index',tracking=True)
color_unused = fields.Char(string='Color Index',tracking=True)
mediastructure = fields.Many2one('dss.adstructures',string='Feldaufbau',tracking=True)
mediastructure_medias = fields.Many2many(related='mediastructure.medias',string='Inhalt')
mediarelations = fields.One2many('dss.mediarelations','relname',tracking=True)
is_btn = fields.Boolean('Feld ist Button',help="Feld hat einen Button auf eineen TSS System ?",tracking=True, default=True)
btn_fromtemplate = fields.Many2one('dss.advertisefields.templates',tracking=True)
btn_pos_x = fields.Integer('Position im Display X (px)', tracking=True)
btn_pos_y = fields.Integer('Position im Display Y (px)', tracking=True)
btn_pos_w = fields.Integer('Breite des Feldes (px)', tracking=True)
btn_pos_h = fields.Integer('Höhe des Feldes (px)', tracking=True)
btn_name = fields.Char('Button name',tracking=True)
btn_fieldname = fields.Char('Feldname',tracking=True)
btn_visible = fields.Boolean('Feld wird angezeigt',tracking=True, default=True)
btn_active = fields.Boolean('Feld ist bedienbar/aktiv',tracking=True, default=True)
btn_action_inactive = fields.Integer('Inaktiv Klickaktion',help='Aktion die ausgeführt wird bei click auf inaktiven Button - >0 und nicht activ = Baustellenbild bringen', tracking=True)
btn_action_active = fields.Selection([('9','Spezialfenster'),('16','Internetfenster'),('3','Storry ausführen'),('2','Gallerie anzeigen'),('5','normales Verhalten'),('12','im Specialfenster das Fenster schliessen'),('14','im Specialfenster ein Bild anzeigen')],string='Aktive Klickaktion',help='Aktion die ausgeführt wird bei click auf Aktiven Button', tracking=True)
btn_playlist_filename = fields.Char('Playlistendatei',help='Bei Aktion-Story = Storrydatei', tracking=True)
btn_playlist_zuordnung = fields.Selection([('1','Standard Zuordnung - Pfad+SchemaID+File'),('20','Kunden Zuordnung - Pfad+KundenID+File'),('50','Gallerie Zuordnung - Pfad+GallerieID+File')], tracking=True)
btn_gallery_filename = fields.Char('Galleriedatei',help="Gallerie Datei - Ohne Pfad, und Ohne .GAL",tracking=True)
btn_gallery_id = fields.Char('Gallerie ID', tracking=True)
btn_gallery_rows = fields.Integer('Zeilen der Gallery', tracking=True)
btn_gallery_cols = fields.Integer('Spalten der Gallery', tracking=True)
btn_gallery_prv_w = fields.Integer('Gallery Bildpreview Breite', tracking=True)
btn_gallery_pev_h = fields.Integer('Gallery Bildpreview Höhe', tracking=True)
btn_has_timer = fields.Boolean('Button Timeout',tracking=True, default=True)
btn_has_timer_time = fields.Integer('Button Timer-Zeit', tracking=True)
btn_editable = fields.Boolean('Button Editierbar',tracking=True, default=True)
btn_special_actionimage = fields.Char('Anzeigebild Spezialform ', tracking=True)
btn_special_actionimage_x = fields.Integer('X-Position Anzeigebild', tracking=True)
btn_special_actionimage_y = fields.Integer('Y-Position Anzeigebild', tracking=True)
btn_special_actionimage_w = fields.Integer('Breite Anzeigebild', tracking=True)
btn_special_actionimage_h = fields.Integer('Hoehe Anzeigebild', tracking=True)
btn_special_actionimage_time = fields.Integer('Anzeigezeit Anzeigebild', tracking=True)
btn_center_video_1 = fields.Char('Zentralvideo 1', tracking=True)
btn_center_video_2 = fields.Char('Zentralvideo 1', tracking=True)
btn_center_video_3 = fields.Char('Zentralvideo 1', tracking=True)
btn_center_video_4 = fields.Char('Zentralvideo 1', tracking=True)
btn_text_1 = fields.Char('Textzeile 1', tracking=True)
btn_text_2 = fields.Char('Textzeile 2', tracking=True)
btn_text_3 = fields.Char('Textzeile 3', tracking=True)
btn_text_4 = fields.Char('Textzeile 4', tracking=True)
btn_text_1_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_2_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_3_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_4_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_1_pos_x = fields.Integer('Textzeile 1 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_1_pos_y = fields.Integer('Textzeile 1 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_2_pos_x = fields.Integer('Textzeile 2 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_2_pos_y = fields.Integer('Textzeile 2 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_3_pos_x = fields.Integer('Textzeile 3 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_3_pos_y = fields.Integer('Textzeile 3 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_4_pos_x = fields.Integer('Textzeile 4 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_4_pos_y = fields.Integer('Textzeile 4 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_1_font = fields.Char('Textzeile 1 Schriftart', tracking=True)
btn_text_2_font = fields.Char('Textzeile 2 Schriftart', tracking=True)
btn_text_3_font = fields.Char('Textzeile 3 Schriftart', tracking=True)
btn_text_4_font = fields.Char('Textzeile 4 Schriftart', tracking=True)
def _default_projektfeld(self):
return "000_unbekannt"
@ -78,7 +134,7 @@ class dssadvertisefields(models.Model):
def _onchange_project(self):
autoid = ""
autoid = str(self.project_id)+"_"+str(self.feldname)
self.auto_feldname =autoid
self.auto_feldname = autoid
@api.onchange('contract')
def _onchange_contract(self):
@ -116,3 +172,51 @@ class dssadvertisefields(models.Model):
for record in self:
if not record.contract:
record.contract = record.contract_save
def pyactiontaketemplate(self):
action = (self.env["confirmation.wizard"].confirm_message(_("Das Template wirklich übernehmen ?"),title="Bitte bestätigen",method="taketemplate",records=self,callback_params={"template":self.id})
)
if action:
return action
def taketemplate(self,template):
self.btn_pos_x = self.btn_fromtemplate.btn_pos_x
self.btn_pos_y = self.btn_fromtemplate.btn_pos_y
self.btn_pos_w = self.btn_fromtemplate.btn_pos_w
self.btn_pos_h = self.btn_fromtemplate.btn_pos_h
self.btn_name = self.btn_fromtemplate.btn_name
self.btn_fieldname = self.btn_fromtemplate.btn_fieldname
self.btn_visible = self.btn_fromtemplate.btn_visible
self.btn_active = self.btn_fromtemplate.btn_active
self.btn_action_inactive = self.btn_fromtemplate.btn_action_inactive
self.btn_action_active = self.btn_fromtemplate.btn_action_active
self.btn_playlist_zuordnung = self.btn_fromtemplate.btn_playlist_zuordnung
self.btn_gallery_rows = self.btn_fromtemplate.btn_gallery_rows
self.btn_gallery_cols = self.btn_fromtemplate.btn_gallery_cols
self.btn_gallery_prv_w = self.btn_fromtemplate.btn_gallery_pev_w
self.btn_gallery_pev_h = self.btn_fromtemplate.btn_gallery_pev_h
self.btn_has_timer = self.btn_fromtemplate.btn_has_timer
self.btn_has_timer_time = self.btn_fromtemplate.btn_has_timer_time
self.btn_editable = self.btn_fromtemplate.btn_editable
self.btn_special_actionimage = self.btn_fromtemplate.btn_special_actionimage
self.btn_special_actionimage_x = self.btn_fromtemplate.btn_special_actionimage_x
self.btn_special_actionimage_y = self.btn_fromtemplate.btn_special_actionimage_y
self.btn_special_actionimage_w = self.btn_fromtemplate.btn_special_actionimage_w
self.btn_special_actionimage_h = self.btn_fromtemplate.btn_special_actionimage_h
self.btn_special_actionimage_time = self.btn_fromtemplate.btn_special_actionimage_time
self.btn_text_1_visible = self.btn_fromtemplate.btn_text_1_visible
self.btn_text_2_visible = self.btn_fromtemplate.btn_text_2_visible
self.btn_text_3_visible = self.btn_fromtemplate.btn_text_3_visible
self.btn_text_4_visible = self.btn_fromtemplate.btn_text_4_visible
self.btn_text_1_pos_x = self.btn_fromtemplate.self.btn_text_1_pos_x
self.btn_text_1_pos_y = self.btn_fromtemplate.self.btn_text_1_pos_y
self.btn_text_2_pos_x = self.btn_fromtemplate.self.btn_text_2_pos_x
self.btn_text_2_pos_y = self.btn_fromtemplate.self.btn_text_2_pos_y
self.btn_text_3_pos_x = self.btn_fromtemplate.self.btn_text_3_pos_x
self.btn_text_3_pos_y = self.btn_fromtemplate.self.btn_text_3_pos_y
self.btn_text_4_pos_x = self.btn_fromtemplate.self.btn_text_4_pos_x
self.btn_text_4_pos_y = self.btn_fromtemplate.self.btn_text_4_pos_y
self.btn_text_1_font = self.btn_fromtemplate.btn_text_1_font
self.btn_text_2_font = self.btn_fromtemplate.btn_text_2_font
self.btn_text_3_font = self.btn_fromtemplate.btn_text_3_font
self.btn_text_4_font = self.btn_fromtemplate.btn_text_4_font

View File

@ -0,0 +1,108 @@
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 dssadvertisefields(models.Model):
@api.model
def create(self,vals):
result = super().create(vals)
return result
_name = "dss.advertisefields.templates"
_description = "DigitalSignage Werbefeldvorlage"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "templatefeldname"
# _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')
# uuid = fields.Char('UUID', required=True, translate=True)
templatefeldname = fields.Char('Template Feldname', required=True,tracking=True)
display = fields.Char('Ziel Feldname',tracking=True)
displaytemplate = fields.Many2one('dss.display.templates',String="Display Vorlage",tracking=True)
feldname = fields.Char('Ziel Feldname', required=True,tracking=True)
color_used = fields.Char(string='Color Index',tracking=True)
color_unused = fields.Char(string='Color Index',tracking=True)
mediastructure = fields.Many2one('dss.adstructures',string='Feldaufbau',tracking=True)
btn_pos_x = fields.Integer('Position im Display X (px)', tracking=True)
btn_pos_y = fields.Integer('Position im Display Y (px)', tracking=True)
btn_pos_w = fields.Integer('Breite des Feldes (px)', tracking=True)
btn_pos_h = fields.Integer('Höhe des Feldes (px)', tracking=True)
btn_name = fields.Char('Button name',tracking=True)
btn_fieldname = fields.Char('Feldname am Display',tracking=True)
btn_visible = fields.Boolean('Feld wird angezeigt',tracking=True, default=True)
btn_active = fields.Boolean('Feld ist bedienbar/aktiv',tracking=True, default=True)
btn_action_inactive = fields.Integer('Inaktiv Klickaktion',help='Aktion die ausgeführt wird bei click auf inaktiven Button - >0 und nicht activ = Baustellenbild bringen', tracking=True)
btn_action_active = fields.Selection([('9','Spezialfenster'),('16','Internetfenster'),('3','Storry ausführen'),('2','Gallerie anzeigen'),('5','normales Verhalten'),('12','im Specialfenster das Fenster schliessen'),('14','im Specialfenster ein Bild anzeigen')],string='Aktive Klickaktion',help='Aktion die ausgeführt wird bei click auf Aktiven Button', tracking=True)
btn_playlist_zuordnung = fields.Selection([('','Standard Zuordnung - Pfad+SchemaID+File'),('20','Kunden Zuordnung - Pfad+KundenID+File'),('50','Gallerie Zuordnung - Pfad+GallerieID+File')], tracking=True)
btn_gallery_rows = fields.Integer('Zeilen der Gallery', tracking=True)
btn_gallery_cols = fields.Integer('Spalten der Gallery', tracking=True)
btn_gallery_prv_w = fields.Integer('Gallery Bildpreview Breite', tracking=True)
btn_gallery_pev_h = fields.Integer('Gallery Bildpreview Höhe', tracking=True)
btn_has_timer = fields.Boolean('Button Timeout',tracking=True, default=False)
btn_has_timer_time = fields.Integer('Button Timer-Zeit', tracking=True)
btn_editable = fields.Boolean('Button Editierbar',tracking=True, default=True)
btn_special_actionimage = fields.Char('Anzeigebild Spezialform ', tracking=True)
btn_special_actionimage_x = fields.Integer('X-Position Anzeigebild', tracking=True)
btn_special_actionimage_y = fields.Integer('Y-Position Anzeigebild', tracking=True)
btn_special_actionimage_w = fields.Integer('Breite Anzeigebild', tracking=True)
btn_special_actionimage_h = fields.Integer('Hoehe Anzeigebild', tracking=True)
btn_special_actionimage_time = fields.Integer('Anzeigezeit Anzeigebild', tracking=True)
btn_text_1_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_2_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_3_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_4_visible = fields.Boolean('Textzeile 1 anzeigen',tracking=True, default=False)
btn_text_1_pos_x = fields.Integer('Textzeile 1 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button",tracking=True)
btn_text_1_pos_y = fields.Integer('Textzeile 1 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_2_pos_x = fields.Integer('Textzeile 2 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_2_pos_y = fields.Integer('Textzeile 2 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_3_pos_x = fields.Integer('Textzeile 3 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_3_pos_y = fields.Integer('Textzeile 3 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_4_pos_x = fields.Integer('Textzeile 4 X-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_4_pos_y = fields.Integer('Textzeile 4 Y-Pos',help="xxxx direkter Zahlenwert , +/-xxxx relativ zu Button", tracking=True)
btn_text_1_font = fields.Char('Textzeile 1 Schriftart', tracking=True)
btn_text_2_font = fields.Char('Textzeile 2 Schriftart', tracking=True)
btn_text_3_font = fields.Char('Textzeile 3 Schriftart', tracking=True)
btn_text_4_font = fields.Char('Textzeile 4 Schriftart', tracking=True)
def _default_create_date(self):
return str(date.today())
def _default_create_user(self):
return str(self.env.user.name)
@api.model
def _default_uuid(self):
return str(uuid.uuid4())

61
models/dss_display_templates.py Executable file
View File

@ -0,0 +1,61 @@
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 dssadvertisefields(models.Model):
@api.model
def create(self,vals):
result = super().create(vals)
return result
_name = "dss.display.templates"
_description = "DigitalSignage Displayvorlage"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "displayname"
# _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')
# uuid = fields.Char('UUID', required=True, translate=True)
displayname = fields.Char('Template Feldname', required=True,tracking=True)
feldtemplates = fields.Many2many('dss.advertisefields.templates' , string='Vertrag', store=True,tracking=True)
def _default_create_date(self):
return str(date.today())
def _default_create_user(self):
return str(self.env.user.name)
@api.model
def _default_uuid(self):
return str(uuid.uuid4())

38
models/dss_onlinestate.py Normal file
View File

@ -0,0 +1,38 @@
import uuid
import logging
import datetime
from odoo import api, fields, models, _
from odoo import tools
from odoo.exceptions import ValidationError
from dateutil.relativedelta import relativedelta
import sys
_logger = logging.getLogger(__name__)
class dssonlinestate(models.Model):
_name = "dss.onlinestate"
_description = "DigitalSignage Onlinestati"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "uuid"
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
date_create = fields.Datetime('Erstellungsdatum',default=lambda self: self._default_create_date())
date_lastedit = fields.Datetime('Änderungsdatum')
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
user_lastedit = fields.Char('Änderungsuser')
project = fields.Many2one('dss.projects',string='Projekt des Systems',tracking=True)
number = fields.Integer('Player/System Nr',tracking=True)
online = fields.Boolean('Online',tracking=True)
datavolume = fields.Boolean('Leeres Datenvolumen',tracking=True)
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
def _default_create_date(self):
return datetime.datetime.now()
def _default_create_user(self):
return str(self.env.user.name)

View File

@ -12,6 +12,7 @@ import requests
import json
from types import SimpleNamespace
import easywebdav
import os
import os.path
@ -112,8 +113,31 @@ class dssprojects(models.Model):
marker_list = fields.Many2many('dss.marker', string='vorhandene Marker', tracking=True)
onlinestate = fields.Char('OnlineColor',compute='_compute_getonlinestate')
playername = fields.Char('Name des Players', tracking=True)
onlinestate_1 = fields.Char('OnlineColor_1')
playername_1 = fields.Char('Name des Players_1', tracking=True)
onlinestate_2 = fields.Char('OnlineColor_2')
playername_2 = fields.Char('Name des Players_2', tracking=True)
onlinestate_3 = fields.Char('OnlineColor_3')
playername_3 = fields.Char('Name des Players_3', tracking=True)
Rportid_1 = fields.Char('RPort ID 1', tracking=True)
Rportid_2 = fields.Char('RPort ID 2', tracking=True)
Rportid_3 = fields.Char('RPort ID 3', tracking=True)
issim = fields.Boolean('Sim Karte genutzt ?', tracking=True)
simid_1 = fields.Char('Simkarte Nr 1', tracking=True)
simstart_1 = fields.Char('Simkarte 1 Vertr.start', tracking=True)
simstart_DVEmpty_1 = fields.Boolean('Simkarte 1 DV leer', tracking=True)
simstart_DVEmpty_1_lastdate = fields.Date('Simkarte 1 Leerdatum', tracking=True)
simid_2 = fields.Char('Simkarte Nr 2', tracking=True)
simstart_2 = fields.Char('Simkarte 2 Vertr.start', tracking=True)
simstart_DVEmpty_2 = fields.Boolean('Simkarte 2 DV leer', tracking=True)
simstart_DVEmpty_2_lastdate = fields.Date('Simkarte 2 Leerdatum', tracking=True)
simid_3 = fields.Char('Simkarte Nr 3', tracking=True)
simstart_3 = fields.Char('Simkarte 3 Vertr.start', tracking=True)
simstart_DVEmpty_3 = fields.Boolean('Simkarte 3 DV leer', tracking=True)
simstart_DVEmpty_3_lastdate = fields.Date('Simkarte 3 Leerdatum', tracking=True)
@api.model
def _read_group_system_ids(self, stages, domain, order):
@ -236,38 +260,114 @@ class dssprojects(models.Model):
@api.model
def compute_getonlinestate2(self,project):
proj = self.env['dss.projects'].search([('id',"=",project)])
projekte = self.env['dss.projects'].search([('grundsystem_showonlinestate','=',True)])
for pro in projekte:
self.compute_getonlinestate_single(pro)
def compute_getonlinestate_single(self,project):
#proj = self.env['dss.projects'].search([('id',"=",project.id)])
proj = project
colorOn = str(self.env['dss.settings'].search([], limit=1).systemonline_color)
colorOff = str(self.env['dss.settings'].search([], limit=1).systemoffline_color)
_logger.info("Projekt Online Settings Check "+str(proj.grundsystem_showonlinestate_type)+' '+str(self)+' '+str(project))
if (proj.grundsystem_showonlinestate_type == 'RPORT'):
_logger.info("Projekt RPORT Settings ")
colorval = colorOff
playername = proj["Rportid_1"]
_logger.info("Projekt RPORT Settings "+str(playername) )
if playername!=False:
rporturl = str(self.env['dss.settings'].search([], limit=1).rporturl)+'/api/v1/clients/'
rportusername = str(self.env['dss.settings'].search([], limit=1).rportusername)
rporttoken = str(self.env['dss.settings'].search([], limit=1).rporttoken)
auth = (rportusername, rporttoken)
for plnr in range(1,4):
playername = proj["Rportid_"+str(plnr)]
if playername:
_logger.info("RPORT request :"+str(rporturl)+str(playername))
r = requests.get(str(rporturl)+str(playername), auth=auth, verify=False)
_logger.info("RPORT answere :"+str(r.status_code)+' - '+str(r.content))
if (str(r.status_code) == "200"):
content = str(r.json())
index = content.find("connection_state")
content = content[index+20:]
index = content.find("',")
token = content[:index]
if (self.env['dss.onlinestate'].search([("project","=",proj.id),("number","=",plnr)], order="date_create desc", limit=1) == False):
self.env['dss.onlinestate'].create({'project':proj.id,'number':plnr,'online':False})
laststate = self.env['dss.onlinestate'].search([("project","=",proj.id),("number","=",plnr)], order="date_create desc", limit=1).online
_logger.info("RPORT answere :"+str(token)+"/"+str(laststate))
if token == 'connected':
colorval = colorOn
if not laststate:
self.env['dss.onlinestate'].create({'project':proj.id,'number':plnr,'online':True})
else:
colorval = colorOff
if laststate:
self.env['dss.onlinestate'].create({'project':proj.id,'number':plnr,'online':False})
else:
colorval = colorOff
else:
colorval = 0
proj['onlinestate_'+str(plnr)]=colorval
else:
colorval = 0
proj['onlinestate_1']=colorval
elif (proj.grundsystem_showonlinestate_type == 'VNNOX'):
vnurl = str(self.env['dss.settings'].search([], limit=1).vnnoxurl)+'/Rest/Logon'
vnusername = str(self.env['dss.settings'].search([], limit=1).vnnoxusername)
vnpassword = str(self.env['dss.settings'].search([], limit=1).vnnoxpassword)
_logger.info("Projekt VNNOX Settings " + str(vnurl))
# _logger.info("Projekt VNNOX Settings " + str(vnurl))
r = requests.post(vnurl, json={"password": vnpassword,"username": vnusername})
_logger.info("Projekt VNNOX Settings Result " + str(r.status_code))
if (str(r.status_code) == "200"):
content = str(r.json())
index = content.find("token")
content = content[index+9:]
index = content.find("',")
token = content[:index]
_logger.info("Projekt VNNOX Settings Token : /" + str(token)+"/")
vnurl_getPlayer = str(self.env['dss.settings'].search([], limit=1).vnnoxurl)+'/Rest/Player?offset=0&limit=10&sort=name&sortType=asc&search='+str(proj.playername)
headers = {'token': token}
r = requests.get(vnurl_getPlayer, headers=headers)
if (str(r.status_code) == "200"):
content = str(r.json())
_logger.info("Projekt VNNOX Settings Data : /" + str(content)+"/")
else:
colorval = "#a0a0a0"
colorval = colorOff
for plnr in range(1,4):
playername = proj["playername_"+str(plnr)]
if playername!=False:
# _logger.info("Projekt VNNOX Settings Token : /" + str(token)+"/")
vnurl_getPlayer = str(self.env['dss.settings'].search([], limit=1).vnnoxurl)+'/Rest/Player?offset=0&limit=10&sort=name&sortType=asc&search='+str(playername)
headers = {'token': token}
r = requests.get(vnurl_getPlayer, headers=headers)
if (str(r.status_code) == "200"):
_logger.info("Projekt VNNOX Settings Data : /" + str(r.content)+"/")
resj = json.loads(r.content)
if resj["data"]["count"] == "1":
if (self.env['dss.onlinestate'].search([("project","=",proj.id),("number","=",plnr)], order="date_create desc", limit=1) == False):
self.env['dss.onlinestate'].create({'project':proj.id,'number':plnr,'online':False})
laststate = self.env['dss.onlinestate'].search([("project","=",proj.id),("number","=",plnr)], order="date_create desc", limit=1).online
_logger.info("Projekt VNNOX Settings Data : /" + str(resj["data"]["playerInfo"][0]["online"])+"/"+str(laststate))
if resj["data"]["playerInfo"][0]["online"] == "1":
colorval = colorOn
if not laststate:
self.env['dss.onlinestate'].create({'project':proj.id,'number':plnr,'online':True})
else:
colorval = colorOff
if laststate:
self.env['dss.onlinestate'].create({'project':proj.id,'number':plnr,'online':False})
else:
colorval = "#a0a0a0"
else:
colorval = "#a0a0a0"
proj['onlinestate_'+str(plnr)]=colorval
else:
colorval = "0"
proj['onlinestate_'+str(plnr)]=colorval
else:
colorval = "#a0a0a0"
proj['onlinestate_1']=colorval
else:
colorval = "#a0a0a0"
proj.onlinestate = colorval
proj['onlinestate_1']=colorval
def method(self):
return (
self.env["confirmation.wizard"]
.with_context(hide_cancel=True)
.confirm_no_action_message(
message="Message",
title="Notification"
)
)

View File

@ -60,7 +60,7 @@ class dssSettings(models.Model):
vnnoxpassword = fields.Char('VNNox Password',tracking=True)
rporturl = fields.Char('RPort URL',tracking=True)
rportusername = fields.Char('RPort Username',tracking=True)
rportpassword = fields.Char('RPort Password',tracking=True)
rporttoken = fields.Char('RPort API Token',tracking=True)
def _get_settingvalue(self,valuename):

View File

@ -407,6 +407,7 @@ class dsstriggeractions(models.Model):
triggeractionname = fields.Char('Triggeraktionname',tracking=True)
triggeractiontyp = fields.Selection([('EMAIL','EMail an senden'),('NOTIZ','Notitz erstellen'),('MESSA','Message an Follower senden'),('CHANNEL','Message an Channel senden'),('ACTIV','Aufgabe erzeugen'),('MARKER','Marker eintragen'),('DSEDIT','Akt. Datensatz ändern'),('TUYA','Tuya Aktion auslössen'),('PRUEF','Wert prüfen')],'Aktionstyp',tracking=True)
email_getfrom = fields.Selection([('FIX','Email fest hinterlegt'),('DATA','Email in Feld hinterlegt')],'Emailadresse von',tracking=True)
email_send_confirm = fields.Boolean('Email Bestätigen vor senden',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 fix',help='Email Emüfänger Adresse für Benachrichtigung/Triggeraktion',tracking=True)
email_data_table = fields.Many2one('ir.model','EmailDaten in',help='Für welche Daten ist diese Aktion gültig ?',tracking=True)
@ -501,7 +502,14 @@ class dsstriggeractions(models.Model):
_logger.info('Trigger Aktion TRA_' + str(self)+' Sending Email - Template : '+str(self.email_template)+" Empfänger :"+str(mailto)+'/'+str(ccmailto)+' -> '+str(Dataset))
self.email_template.email_to = mailto
self.email_template.email_cc = ccmailto
self.email_template.send_mail(Dataset.id,force_send=True)
if not self.email_send_confirm:
self.email_template.send_mail(Dataset.id,force_send=True)
else:
action = (self.env["confirmation.wizard"].confirm_message(
_("Möchten Sie die EMail versenden ?"),self.email_template, # One or more records
title="Bestätigen",method="Email senden ",callback_params={"Email": mailto}))
if action:
self.email_template.send_mail(Dataset.id,force_send=True)
self.email_template.email_cc = ccmailto_org
elif (self.triggeractiontyp == 'DSEDIT'):
_logger.info('Trigger Aktion TRA_' + str(self)+' Setze Wert für DS_'+str(Dataset)+' FLD_'+str(self.action_field.name)+' - Typ : '+str(self.action_value_type)+' -> '+str(self.action_value_bool))

View File

@ -140,6 +140,8 @@ class dsscontracts(models.Model):
_logger.info("create new partner...")
fullname = str(self.client_short_vorname) + ' ' +str(self.client_short_name)
newcontact = self.env['res.partner'].create({'name': fullname,
'dsspartner_vorname': self.client_short_vorname,
'dsspartner_name': self.client_short_name,
'email': self.client_short_email,
'phone': self.client_short_telefon,
'mobile': self.client_short_mobil,
@ -149,7 +151,7 @@ class dsscontracts(models.Model):
'country_id': self.env['res.country'].search([('code', '=', 'DE')], limit=1).id,
'company_type': 'person', # 'company' oder 'person',
'website': self.client_short_website,
'commercial_company_name': self.client_short_company,
'company_name': self.client_short_company,
'dsspartner': True,
'dsspartner_werbung': True
})
@ -188,6 +190,7 @@ class dsscontracts(models.Model):
'ads_topics': self.ads_topics,
'contract_auto_extend': self.contract_auto_extend,
'contract_date': self.contract_date,
'work_state_info': self.remark,
'scan_vertrag': self.scan_vertrag
})
_logger.info("create new Werbekampagne...")
@ -198,7 +201,7 @@ class dsscontracts(models.Model):
'date_start_planed': self.date_start_planed,
'date_remove_planed': self.date_remove_planed,
#'work_state_info': 'ZA bis: '+str(self.grafik_zuarbeitBis)+' / '+self.remark
'work_state_info': 'ZA bis: '+format_date(self.grafik_zuarbeitBis,format='dd.MM.yy',locale='de_DE')+' / '+self.remark
'work_state_info': 'ZA bis: '+format_date(self.grafik_zuarbeitBis,format='dd.MM.yy',locale='de_DE')
})
self.erfasst_in_odoo = True

View File

@ -19,6 +19,8 @@ digitalsignage_dss_mediatypes_group_user,access.dss.mediatypes,model_dss_mediaty
digitalsignage_dss_texts_group_user,access.dss.texts,model_dss_texts,base.group_user,1,1,1,1
digitalsignage_dss_mediarelations_group_user,access.dss.mediarelations,model_dss_mediarelations,base.group_user,1,1,1,1
digitalsignage_dss_advertisefields_group_user,access.dss.advertisefields,model_dss_advertisefields,base.group_user,1,1,1,1
digitalsignage_dss_advertisefields_templates_group_user,access.dss.advertisefields.templates,model_dss_advertisefields_templates,base.group_user,1,1,1,1
digitalsignage_dss_display_templates_group_user,access.dss.display.templates,model_dss_display_templates,base.group_user,1,1,1,1
digitalsignage_dss_import_group_user,access.dss.import,model_dss_import,base.group_user,1,1,1,1
digitalsignage_dss_settings_group_user,access.dss.settings,model_dss_settings,base.group_user,1,1,1,1
digitalsignage_dss_viewsettings_group_user,access.dss.viewsettings,model_dss_viewsettings,base.group_user,1,1,1,1
@ -42,3 +44,4 @@ DigitalSignage_dss_statesave,access.dss.statesave,DigitalSignage.model_dss_state
DigitalSignage_dss_activity_mixin,access.dss.activity_mixin,DigitalSignage.model_dss_activity_mixin,base.group_user,1,0,0,0
DigitalSignage_dss_triggermodel,access.dss.triggermodel,DigitalSignage.model_dss_triggermodel,base.group_user,1,0,0,0
DigitalSignage_dss_invoices,access.dss.invoices,DigitalSignage.model_dss_invoices,base.group_user,1,1,1,1
DigitalSignage_dss_onlinestate,access.dss.onlinestate,DigitalSignage.model_dss_onlinestate,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
19 digitalsignage_dss_texts_group_user access.dss.texts model_dss_texts base.group_user 1 1 1 1
20 digitalsignage_dss_mediarelations_group_user access.dss.mediarelations model_dss_mediarelations base.group_user 1 1 1 1
21 digitalsignage_dss_advertisefields_group_user access.dss.advertisefields model_dss_advertisefields base.group_user 1 1 1 1
22 digitalsignage_dss_advertisefields_templates_group_user access.dss.advertisefields.templates model_dss_advertisefields_templates base.group_user 1 1 1 1
23 digitalsignage_dss_display_templates_group_user access.dss.display.templates model_dss_display_templates base.group_user 1 1 1 1
24 digitalsignage_dss_import_group_user access.dss.import model_dss_import base.group_user 1 1 1 1
25 digitalsignage_dss_settings_group_user access.dss.settings model_dss_settings base.group_user 1 1 1 1
26 digitalsignage_dss_viewsettings_group_user access.dss.viewsettings model_dss_viewsettings base.group_user 1 1 1 1
44 DigitalSignage_dss_activity_mixin access.dss.activity_mixin DigitalSignage.model_dss_activity_mixin base.group_user 1 0 0 0
45 DigitalSignage_dss_triggermodel access.dss.triggermodel DigitalSignage.model_dss_triggermodel base.group_user 1 0 0 0
46 DigitalSignage_dss_invoices access.dss.invoices DigitalSignage.model_dss_invoices base.group_user 1 1 1 1
47 DigitalSignage_dss_onlinestate access.dss.onlinestate DigitalSignage.model_dss_onlinestate base.group_user 1 1 1 1

View File

@ -40,6 +40,25 @@ export class configKanbanController extends KanbanController {
});
alert("Einstellungen gespeichert !")
}
Getonlinestate() {
const queryString = window.location.hash;
const urlParams = new URLSearchParams(queryString);
var TableInfo = [urlParams.get('id'),urlParams.get('model'),urlParams.get('view_type')];
var Fields = [];
TableInfo.push(Fields);
rpc.query({
model: 'dss.projects',
method: 'compute_getonlinestate2',
args: [TableInfo],
});
}
Getmethod() {
rpc.query({
model: 'dss.projects',
method: 'method',
args: [],
});
}
}
registry.category("views").add("button_in_kanban", {

View File

@ -11,6 +11,8 @@
<xpath expr="//*[@class='btn btn-primary o-kanban-button-new']" position="after">
<button type="button" class="btn btn-secondary fa fa-save" id="history_btn" t-on-click="SaveButtonClicked" t-att-data-model-name="props.modelName" data-tooltip="Ansichteinstellungen speichern" />
<button type="button" class="btn btn-secondary fa fa-mail-reply" id="history_btn" t-on-click="ResetButtonClicked" t-att-data-model-name="props.modelName" data-tooltip="Ansichteinstellungen zurücksetzen" />
<button name="Onlinestatus" title="OnlineStatus" type="button" class="btn btn-primary o_open_tasks" id="history_btn" t-on-click="Getonlinestate" t-att-data-model-name="props.modelName" data-tooltip="Status abfragen" />
<button name="Onlinestatus" title="OnlineStatus" type="button" class="btn btn-primary o_open_tasks" id="method" t-on-click="Getmethod" t-att-data-model-name="props.modelName" data-tooltip="Status abfragen" />
</xpath>
</t>

View File

@ -4,7 +4,7 @@
<t t-inherit="web.FormLabel" t-name="dss.webFormLabel" owl="1" t-inherit-mode="extension">
<xpath expr="//sup[hasclass('text-info')]" positio="after">
<t t-name="DigitalSignage.dssFormLabel" owl="1">
<t t-if="hasTooltip" t-esc="props.string2">!</t>
<t t-if="hasTooltip" t-esc="props.string2"></t>
<t t-esc="this.status"/>
</t>
</xpath>

View File

@ -41,31 +41,106 @@
<field name="color_used" widget="color"/>
<field name="color_unused" widget="color"/>
<field name="isblocked" widget="boolean_toggle"/>
</group>
<field name="is_btn"/>
</group>
</group>
<notebook>
<page name="informations" string="Aufbau">
<group>
<field name="mediastructure"/>
<field name="mediastructure_medias">
<tree string="Struktur" editable="False" create="False">
<field name="medianame"/>
<field name="mediatype"/>
<field name="description"/>
</tree>
</field>
</group>
</page>
<page name="informations" string="Aufbau">
<group>
<field name="issaved" string="gespeichert"/>
<field name="date_create" string="Erstellt am"/>
<field name="user_create" string="Erstellt am"/>
<field name="auto_feldname"/>
<field name="display"/>
<notebook>
<page name="informations" string="Aufbau der Dateien">
<group>
<field name="mediastructure"/>
<field name="mediastructure_medias">
<tree string="Struktur" editable="False" create="False">
<field name="medianame"/>
<field name="mediatype"/>
<field name="description"/>
</tree>
</field>
</group>
</page>
<page name="button" string="Button Informationen" attrs="{'invisible': [('is_btn','!=',True)]}">
<field name="btn_fromtemplate" string="Button Template"/>
<button string="Template übernehmen" name="pyactiontaketemplate" type="object" class="btn-primary o_open_tasks" data-hotkey="t"/>
<notebook>
<page name="basesettings" string="Grundeinstellungen">
<group>
<field name="btn_name"/>
<field name="btn_fieldname"/>
<field name="btn_visible" widget="boolean_toggle"/>
<field name="btn_active" widget="boolean_toggle"/>
</group>
</page>
<page name="basepositions" string="Buttonpositionen">
<group>
<field name="btn_pos_x"/>
<field name="btn_pos_y"/>
<field name="btn_pos_w"/>
<field name="btn_pos_h"/>
</group>
</page>
<page name="baseactions" string="Aktionen">
<group>
<field name="btn_action_inactive"/>
<field name="btn_action_active"/>
<field name="btn_playlist_zuordnung"/>
</group>
<group name="gallery" attrs="{'invisible': [('btn_action_active', '!=', '2')]}">
<field name="btn_gallery_rows"/>
<field name="btn_gallery_cols"/>
<field name="btn_gallery_prv_w"/>
<field name="btn_gallery_pev_h"/>
<field name="btn_gallery_cols"/>
</group>
<group name="specialcontent" attrs="{'invisible': [('btn_action_active', '!=', '14'),('btn_action_active', '!=', '9'),('btn_action_active', '!=', '12')]}">
<field name="btn_has_timer" widget="boolean_toggle"/>
<field name="btn_has_timer_time"/>
<field name="btn_special_actionimage"/>
<field name="btn_special_actionimage_x"/>
<field name="btn_special_actionimage_y"/>
<field name="btn_special_actionimage_w"/>
<field name="btn_special_actionimage_h"/>
<field name="btn_special_actionimage_time"/>
</group>
</page>
<page name="basetextsettings" string="Texteinstellungen">
<group>
<field name="btn_text_1_visible" widget="boolean_toggle"/>
<field name="btn_text_2_visible" widget="boolean_toggle"/>
<field name="btn_text_3_visible" widget="boolean_toggle"/>
<field name="btn_text_4_visible" widget="boolean_toggle"/>
<field name="btn_text_1_pos_x" attrs="{'invisible': [('btn_text_1_visible', '!=', True)]}"/>
<field name="btn_text_1_pos_y" attrs="{'invisible': [('btn_text_1_visible', '!=', True)]}"/>
<field name="btn_text_2_pos_x" attrs="{'invisible': [('btn_text_2_visible', '!=', True)]}"/>
<field name="btn_text_2_pos_y" attrs="{'invisible': [('btn_text_2_visible', '!=', True)]}"/>
<field name="btn_text_3_pos_x" attrs="{'invisible': [('btn_text_3_visible', '!=', True)]}"/>
<field name="btn_text_3_pos_y" attrs="{'invisible': [('btn_text_3_visible', '!=', True)]}"/>
<field name="btn_text_4_pos_x" attrs="{'invisible': [('btn_text_4_visible', '!=', True)]}"/>
<field name="btn_text_4_pos_y" attrs="{'invisible': [('btn_text_4_visible', '!=', True)]}"/>
<field name="btn_text_1_font" attrs="{'invisible': [('btn_text_1_visible', '!=', True)]}"/>
<field name="btn_text_2_font" attrs="{'invisible': [('btn_text_2_visible', '!=', True)]}"/>
<field name="btn_text_3_font" attrs="{'invisible': [('btn_text_3_visible', '!=', True)]}"/>
<field name="btn_text_4_font" attrs="{'invisible': [('btn_text_4_visible', '!=', True)]}"/>
</group>
</page>
<page name="content" string="Inhalte">
<group>
<field name="btn_center_video_1"/>
<field name="btn_center_video_2"/>
<field name="btn_center_video_3"/>
<field name="btn_center_video_4"/>
</group>
</page>
</notebook>
</page>
<page name="informations" string="Interne Informationen">
<group>
<field name="issaved" string="gespeichert"/>
<field name="date_create" string="Erstellt am"/>
<field name="user_create" string="Erstellt am"/>
<field name="auto_feldname"/>
<field name="display"/>
</group>
</page>
</notebook>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_advertisefields_templates_view_tree" model="ir.ui.view">
<field name="name">dss_advertisefields_templates_tree</field>
<field name="model">dss.advertisefields.templates</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Werbefeld Templates" multi_edit="1" edit="1">
<field name="templatefeldname"/>
<field name="displaytemplate"/>
<field name="feldname"/>
</tree>
</field>
</record>
<record id="dss_advertisefields_templates_view_form" model="ir.ui.view">
<field name="name">dss_advertisefields_templates_form</field>
<field name="model">dss.advertisefields.templates</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="basethings">
<field name="templatefeldname"/>
<field name="displaytemplate"/>
<field name="feldname" />
</group>
<notebook>
<page name="basesettings" string="Grundeinstellungen">
<group>
<field name="btn_name"/>
<field name="btn_fieldname"/>
<field name="btn_visible" widget="boolean_toggle"/>
<field name="btn_active" widget="boolean_toggle"/>
</group>
</page>
<page name="basepositions" string="Buttonpositionen">
<group>
<field name="btn_pos_x"/>
<field name="btn_pos_y"/>
<field name="btn_pos_w"/>
<field name="btn_pos_h"/>
</group>
</page>
<page name="baseactions" string="Aktionen">
<group>
<field name="btn_action_inactive"/>
<field name="btn_action_active"/>
<field name="btn_playlist_zuordnung"/>
</group>
<group name="gallery" attrs="{'invisible': [('btn_action_active', '!=', '2')]}">
<field name="btn_gallery_rows"/>
<field name="btn_gallery_cols"/>
<field name="btn_gallery_prv_w"/>
<field name="btn_gallery_pev_h"/>
<field name="btn_gallery_cols"/>
</group>
<group name="specialcontent" attrs="{'invisible': [('btn_action_active', '!=', '14'),('btn_action_active', '!=', '9'),('btn_action_active', '!=', '12')]}">
<field name="btn_has_timer" widget="boolean_toggle"/>
<field name="btn_has_timer_time"/>
<field name="btn_special_actionimage"/>
<field name="btn_special_actionimage_x"/>
<field name="btn_special_actionimage_y"/>
<field name="btn_special_actionimage_w"/>
<field name="btn_special_actionimage_h"/>
<field name="btn_special_actionimage_time"/>
</group>
</page>
<page name="basetextsettings" string="Texteinstellungen">
<group>
<field name="btn_text_1_visible" widget="boolean_toggle"/>
<field name="btn_text_2_visible" widget="boolean_toggle"/>
<field name="btn_text_3_visible" widget="boolean_toggle"/>
<field name="btn_text_4_visible" widget="boolean_toggle"/>
<field name="btn_text_1_pos_x" attrs="{'invisible': [('btn_text_1_visible', '!=', True)]}"/>
<field name="btn_text_1_pos_y" attrs="{'invisible': [('btn_text_1_visible', '!=', True)]}"/>
<field name="btn_text_2_pos_x" attrs="{'invisible': [('btn_text_2_visible', '!=', True)]}"/>
<field name="btn_text_2_pos_y" attrs="{'invisible': [('btn_text_2_visible', '!=', True)]}"/>
<field name="btn_text_3_pos_x" attrs="{'invisible': [('btn_text_3_visible', '!=', True)]}"/>
<field name="btn_text_3_pos_y" attrs="{'invisible': [('btn_text_3_visible', '!=', True)]}"/>
<field name="btn_text_4_pos_x" attrs="{'invisible': [('btn_text_4_visible', '!=', True)]}"/>
<field name="btn_text_4_pos_y" attrs="{'invisible': [('btn_text_4_visible', '!=', True)]}"/>
<field name="btn_text_1_font" attrs="{'invisible': [('btn_text_1_visible', '!=', True)]}"/>
<field name="btn_text_2_font" attrs="{'invisible': [('btn_text_2_visible', '!=', True)]}"/>
<field name="btn_text_3_font" attrs="{'invisible': [('btn_text_3_visible', '!=', True)]}"/>
<field name="btn_text_4_font" attrs="{'invisible': [('btn_text_4_visible', '!=', True)]}"/>
</group>
</page>
<page name="informations" string="Interne Informationen">
<group>
<field name="uuid"/>
<field name="date_create" string="Erstellt am"/>
<field name="user_create" string="Erstellt am"/>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="action_dss_advertisefields_templates_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Werbefelder</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.advertisefields.templates</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Neues Werbefeld erstellen
</p>
</field>
</record>
</odoo>

View File

@ -320,9 +320,12 @@
<group>
<field name="werbe_feld_selected" string="Werbefeld" widget="many2many_tags" option="{'not_delete': True}" domain="[('project','=',project),'|',('contract','=',False),('isblocked','=',False)]"/>
</group>
<hl/>
<hr></hr>
<group>
<field name="work_state_info" string="Aktuelle Hinweise" widget="text"/>
<field name="ads_last_work_state_info" string="Aktuelle Hinweise Kampagne" widget="text"/>
</group>
<group>
<field name="work_state_info" string="Aktuelle Hinweise Vertrag" widget="text"/>
</group>
</div>
</div>
@ -644,14 +647,16 @@
</page>
<page name="contractviewpdf" string="Vertrag PDF">
<field name="scan_vertrag" widget="pdf_view"/>
<!--
<field name="scan_vertrag" widget="binary" filename="pdf_filename"/>
<xpath expr="//form" position="inside">
<a t-if="record.scan_vertrag.raw_value"
t-att-href="'/web/content/%s/%s/scan_vertrag?download=true' % (record.id, record.scan_vertrag_filename.raw_value)"
target="_blank">
📄 PDF anzeigen
PDF anzeigen
</a>
</xpath>
-->
<field name="scan_vertrag" string='Vertrag PDF Ansicht' widget="pdf_viewer"/>
</page>
<page name="invoiceview" string="Rechnungsübersicht">

47
views/dss_display_templates.xml Executable file
View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_display_templates_view_tree" model="ir.ui.view">
<field name="name">dss_display_templates_tree</field>
<field name="model">dss.display.templates</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Werbefeld Templates" multi_edit="1" edit="1">
<field name="displayname"/>
</tree>
</field>
</record>
<record id="dss_display_templates_view_form" model="ir.ui.view">
<field name="name">dss_display_templates_form</field>
<field name="model">dss.display.templates</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="basethings">
<field name="displayname"/>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="action_dss_display_templates_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Display vorlagen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.display.templates</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Neues Werbefeld erstellen
</p>
</field>
</record>
</odoo>

70
views/dss_onlinestate.xml Normal file
View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_onlinestate_form" model="ir.ui.view">
<field name="name">dss_onlinestate_form</field>
<field name="model">dss.onlinestate</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="uuid"/>
<field name="date_create"/>
<field name="project"/>
<field name="number"/>
<field name="online"/>
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="dss_onlinestate_tree" model="ir.ui.view">
<field name="name">dss_onlinestate_tree</field>
<field name="model">dss.onlinestate</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Trigger Aktionen">
<field name="uuid"/>
<field name="date_create"/>
<field name="project"/>
<field name="number"/>
<field name="online"/>
</tree>
</field>
</record>
<record id="dss_onlinestate_graph" model="ir.ui.view">
<field name="name">dss_onlinestate_graph</field>
<field name="model">dss.onlinestate</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Example" type="line">
<field name="online"/>
<!-- type="measure" operator="+"-->
<field name="date_create" type="col"/>
</graph>
</field>
</record>
<record id="action_dss_onlinestate_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Onlinestate History</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.onlinestate</field>
<field name="view_mode">tree,form,graph</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Neuen Standardtext erstellen
</p>
</field>
</record>
</odoo>

View File

@ -32,13 +32,12 @@
<field name="model">dss.projects</field>
<field name="arch" type="xml">
<form>
<header>
<button name="compute_getonlinestate2" string="Test nicht klicken" type="object" class="oe_hightlight"/>
</header>
<field name="grundsystem_showonlinestate_type"/>
<sheet>
<group>
<field name="invisible" widget="boolean_toggle"/>
<field name="active" widget="boolean_toggle"/>
<field name="issim" widget="boolean_toggle"/>
<field name="aktstatus"/>
<field name="projektname"/>
<field name="projectid"/>
@ -180,6 +179,22 @@
</tree>
</field>
</page>
<page name="simsettings" string="Sim Verwaltung" attrs="{'invisible': [('issim', '!=', True)]}">
<group>
<field name="simid_1"/>
<field name="simstart_1"/>
<field name="simstart_DVEmpty_1" widget="boolean_toggle"/>
<field name="simstart_DVEmpty_1_lastdate"/>
<field name="simid_2"/>
<field name="simstart_2"/>
<field name="simstart_DVEmpty_2" widget="boolean_toggle"/>
<field name="simstart_DVEmpty_2_lastdate"/>
<field name="simid_3"/>
<field name="simstart_3"/>
<field name="simstart_DVEmpty_3" widget="boolean_toggle"/>
<field name="simstart_DVEmpty_3_lastdate"/>
</group>
</page>
<page name="trigger" string="Aktionen/Trigger">
<group>
<field name="run_trigger" string="Trigger aktiv ?" widget="Boolean_toggle"/>
@ -192,8 +207,18 @@
<group>
<field name="id" string="Iid" readonly="1"/>
<field name="uuid" string="UUID" readonly="1"/>
<field name="onlinestate" string="Onlinecolor aus Settings" widget="color"/>
<field name="playername"/>
<field name="onlinestate_1" string="Onlinecolor aus Settings" widget="color"/>
<field name="playername_1" string="Player 1 Name" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'VNNOX')]}"/>
<field name="Rportid_1" string="RPort 1 ID" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'RPORT')]}"/>
<field name="playername_1" string="Bezeichung 1" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'RPORT')]}"/>
<field name="onlinestate_1" string="Onlinecolor aus Settings" widget="color"/>
<field name="playername_2" string="Player 2 Name" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'VNNOX')]}"/>
<field name="Rportid_2" string="RPort 2 ID" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'RPORT')]}"/>
<field name="playername_2" string="Bezeichung 2" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'RPORT')]}"/>
<field name="onlinestate_3" string="Onlinecolor aus Settings" widget="color"/>
<field name="playername_3" string="Player 3 Name" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'VNNOX')]}"/>
<field name="Rportid_3" string="RPort 3 ID" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'RPORT')]}"/>
<field name="playername_3" string="Bezeichung 3" attrs="{'invisible': [('grundsystem_showonlinestate_type', '!=', 'RPORT')]}"/>
</group>
</page>
</notebook>
@ -217,7 +242,12 @@
<field name="projektname"/>
<field name="aktstatus_color"/>
<field name="grundsystem_showonlinestate"/>
<field name="onlinestate"/>
<field name="onlinestate_1"/>
<field name="onlinestate_2"/>
<field name="onlinestate_3"/>
<field name="playername_1"/>
<field name="playername_2"/>
<field name="playername_3"/>
<templates>
<t t-name="kanban-box">
<t t-set="colonr" t-value="aktstatus_color"/>
@ -277,7 +307,19 @@
<div class="col-10" style="padding-left: 20px">
<span style="font-size:9px"><field name="projectid"/> <field name="systemname" string="Project Name"/></span>
</div>
<div class="col-1" t-attf-style="background-color:{{record.onlinestate.value}};margin-left:10pxpadding-left:10px;width: 10px;padding-left: 0px;margin-left: 25px;margin-top: 10px;height: 10px;padding-bottom: -5;padding-bottom: -5;padding-right: 0px;" attrs="{'invisible': [('grundsystem_showonlinestate','!=',True)]}">
</div>
<div class="row">
<div class="col-7" style="padding-left: 20px">
</div>
<div class="text-info col-1" t-attf-style="background-color:{{record.onlinestate_3.value}};margin-left:10pxpadding-left:10px;width: 10px;padding-left: 0px;margin-left: 25px;margin-top: 10px;height: 10px;padding-bottom: -5;padding-bottom: -5;padding-right: 0px;width: 3.33333333%" t-attf-data-tooltip="{{record.playername_3.value}}" data-tooltip-touch-tap-to-show="true" attrs="{'invisible': ['|',('grundsystem_showonlinestate','!=',True),('onlinestate_3','=','0'),('playername_3','=',False)]}">
</div>
<div class="text-info col-1" t-attf-style="background-color:#ffffff;margin-left:10pxpadding-left:10px;width: 10px;padding-left: 0px;margin-left: 25px;margin-top: 10px;height: 10px;padding-bottom: -5;padding-bottom: -5;padding-right: 0px;width: 3.33333333%" attrs="{'invisible': ['|',('grundsystem_showonlinestate','!=',True),('onlinestate_3','!=','0')]}">
</div>
<div class="text-info col-1" t-attf-style="background-color:{{record.onlinestate_2.value}};margin-left:10pxpadding-left:10px;width: 10px;padding-left: 0px;margin-left: 25px;margin-top: 10px;height: 10px;padding-bottom: -5;padding-bottom: -5;padding-right: 0px;width: 3.33333333%" t-attf-data-tooltip="{{record.playername_2.value}}" data-tooltip-touch-tap-to-show="true" attrs="{'invisible': ['|',('grundsystem_showonlinestate','!=',True),('onlinestate_2','=','0'),('playername_2','=',False)]}">
</div>
<div class="text-info col-1" t-attf-style="background-color:#ffffff;margin-left:10pxpadding-left:10px;width: 10px;padding-left: 0px;margin-left: 25px;margin-top: 10px;height: 10px;padding-bottom: -5;padding-bottom: -5;padding-right: 0px;width: 3.33333333%" attrs="{'invisible': ['|',('grundsystem_showonlinestate','!=',True),('onlinestate_2','!=','0')]}">
</div>
<div class="text-info col-1" t-attf-style="background-color:{{record.onlinestate_1.value}};margin-left:10pxpadding-left:10px;width: 10px;padding-left: 0px;margin-left: 25px;margin-top: 10px;height: 10px;padding-bottom: -5;padding-bottom: -5;padding-right: 0px;width: 3.33333333%" t-attf-data-tooltip="{{record.playername_1.value}}" data-tooltip-touch-tap-to-show="true" attrs="{'invisible': ['|',('grundsystem_showonlinestate','!=',True),('onlinestate_1','=','0'),('playername_1','=',False)]}">
</div>
</div>
</div>

View File

@ -120,6 +120,11 @@
<field name="vnnoxusername"/>
<field name="vnnoxpassword"/>
</group>
<group string="RPort Zugangsdaten">
<field name="rporturl"/>
<field name="rportusername"/>
<field name="rporttoken"/>
</group>
</div>
</page>
<page name="webvertragseing" string="Web-Vertragseingänge Abläufe">

View File

@ -29,6 +29,7 @@
<group>
<field name="email_getfrom"/>
<field name='email_template'/>
<field name="email_send_confirm" widget="boolean_toogle"/>
<field name='email_fix_email_sender'/>
<field name='email_fix_email' attrs="{'invisible': [('email_getfrom','!=','FIX')]}" />
<field name='email_data_table' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" />

View File

@ -186,6 +186,12 @@
action="action_dss_invoice"
sequence="42"/>
<menuitem id="menu_dss_onlinestate_view"
name="Alle Displays/LED On/Offline Info anzeigen"
parent="menu_dss_intern_contracts_seperator"
action="action_dss_onlinestate_view"
sequence="43"/>
<menuitem
id="menu_dss_mediafiles"
name="Medientypen managen"
@ -290,6 +296,13 @@
action="action_dss_advertisefields_view"
sequence="90"/>
<menuitem
id="menu_dss_configuration_advertisefields_templates"
name="Werbefelder Vorlagen verwalten"
parent="menu_dss_configurationen"
action="action_dss_advertisefields_templates_view"
sequence="91"/>
<menuitem
id="menu_dss_configuration_eventdays"
name="Eventtage verwalten"