Blockly integration

This commit is contained in:
jopster
2025-09-22 09:23:28 +02:00
parent 4e32d9ba82
commit d416043bf7
35 changed files with 884 additions and 109 deletions
+15 -2
View File
@@ -30,8 +30,7 @@
'views/dss_geraetetypen.xml',
'views/dss_onlinestate.xml',
'views/dss_texts.xml',
'views/dss_systems.xml',
'views/dss_screendesign.xml',
'views/dss_systems.xml',
'views/dss_eventdays.xml',
'views/dss_trigger_actions.xml',
'views/dss_trigger_action_groups.xml',
@@ -46,6 +45,9 @@
'views/dss_web_contracts.xml',
'views/dss_invoices.xml',
'views/dss_m2mmail_views.xml',
'views/dss_linkmail_views.xml',
'views/dss_binaries_wizard.xml',
'views/dss_binaries.xml',
'views/mainsystem_view.xml',
'views/dss_importinvoicelist.xml',
'views/menu.xml',
@@ -53,6 +55,7 @@
'views/google_map.xml',
'views/dss_report_invoice.xml',
'data/ir_model_data.xml',
#'views/dss_screendesign.xml',
],
'demo': [],
'installable': True,
@@ -70,6 +73,15 @@
'DigitalSignage/static/src/js/dss_screenview_renderer.js',
'DigitalSignage/static/src/js/dss_screenview_register.js',
'DigitalSignage/static/src/js/dss_screenview_model.js',
'DigitalSignage/static/src/xml/dss_trigger_condition_view_controller.xml',
'DigitalSignage/static/src/xml/dss_trigger_condition_view_renderer.xml',
'DigitalSignage/static/src/js/dss_trigger_condition_view_archparser.js',
'DigitalSignage/static/src/js/dss_trigger_condition_view_helper.js',
'DigitalSignage/static/src/js/dss_trigger_condition_view_blocks.js',
'DigitalSignage/static/src/js/dss_trigger_condition_view_controller.js',
'DigitalSignage/static/src/js/dss_trigger_condition_view_renderer.js',
'DigitalSignage/static/src/js/dss_trigger_condition_view_register.js',
'DigitalSignage/static/src/js/dss_trigger_condition_view_model.js',
'DigitalSignage/static/src/scss/dss_nextcloudwidget.scss',
'DigitalSignage/static/src/xml/dss_nextcloudwidget.xml',
'DigitalSignage/static/src/js/dss_nextcloudwidget.js',
@@ -83,6 +95,7 @@
'DigitalSignage/static/src/js/screenDesignerViewReload.js',
'DigitalSignage/static/src/xml/form_button.xml',
'DigitalSignage/static/src/xml/form_label.xml',
'DigitalSignage/static/src/js/test.php',
],
'web.assets_common': [
'DigitalSignage/static/images/**/*',
+2
View File
@@ -28,3 +28,5 @@ from . import dss_importinvoicelist
from . import dss_web_contracts
from . import dss_m2mmail
from . import dsslogger
from . import dss_binaries
from . import dss_linkmail
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+23 -4
View File
@@ -24,8 +24,10 @@ from dateutil.relativedelta import relativedelta
from pyffmpeg import FFmpeg
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
from . import dss_contract
import sys
TUYA_LOGGER.setLevel(logging.DEBUG)
_logger = logging.getLogger(__name__)
@@ -189,11 +191,13 @@ class dssmediatypes(models.Model):
mediatype = fields.Selection([('IMG_J','Bild'),('VID_4','MP4 Video'),('FIL_X','belieb. Datei')])
description = fields.Text('Medien Beschreibung')
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für diese Datei innerhalb des Vertrags-Ordners')
archiv_cloudlink = fields.Char('Archivcloud Verzeichnis',help='Verzeichnis für diese Datei innerhalb des Vertrags-Ordners')
filepartname = fields.Char('Part.Dateiname',help='Teil des Dateinamens. Wird ergaenzt durch KampagnenID und MedienID. Beispiel : PNAME_34_544.jpg')
maxsize_kb = fields.Integer('Maximale Größe KB')
maxsize_w = fields.Integer('Maximale Pixel W')
maxsize_h = fields.Integer('Maximale Pixel H')
standard_image = fields.Image()
default_filename = fields.Char('Default Dateiname', help='Standard-Dateiname für diesen Mediatyp. Wird automatisch aus dem Dateinamen der hochgeladenen Datei abgerufen')
@api.model
def _default_uuid(self):
@@ -205,7 +209,7 @@ class dssmediarelations(models.Model):
_description = "DigitalSignage Kampagne-Medien-Zuordnung"
_inherit = []
_rec_name = "relname"
# _inherit = ['mail.thread', 'mail.activity.mixin']
_inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
# uuid = fields.Char('UUID', required=True, translate=True)
field = fields.Many2one('dss.advertisefields',string='Feld')
@@ -340,7 +344,20 @@ class dssscreendesign(models.Model):
'context' : {'screenlayout': 1},
'tag': 'dss_screenDesigner_js_action'
}
class NewBinaryWizard(models.TransientModel):
_name = 'dss.binaries.wizard.new'
_description = 'New Binary Wizard'
field_ids = fields.Many2one('dss.mediatypes' , string='Partners')
def pyopen_dss_contract_add_binary_form_view_from_wizzard(self):
context = dict(self.env.context or {})
default_contract_id = context.get('active_id', False)
_logger.info('Open Add Binary Form '+str(context)+' - '+str(default_contract_id)+' / '+str(self.field_ids))
contract= self.env['dss.contracts'].browse(default_contract_id)
dss_contract.dsscontracts.pyopen_dss_contract_add_binary_form_view_from_wizzard(contract,self.field_ids)
return context
class View(models.Model):
"""
@@ -349,6 +366,7 @@ class View(models.Model):
"""
_inherit = 'ir.ui.view'
type = fields.Selection(selection_add=[('screenview', "ScreenView")])
type = fields.Selection(selection_add=[('trigger_condition_view', "Trigger_Condition_View")])
class IrActionsActWindowView(models.Model):
"""
@@ -356,5 +374,6 @@ class IrActionsActWindowView(models.Model):
a new view mode called 'grid'.
"""
_inherit = 'ir.actions.act_window.view'
view_mode = fields.Selection(selection_add=[('screenview', "ScreenView")],
ondelete={'screenview': 'cascade'})
view_mode = fields.Selection(selection_add=[('screenview', "ScreenView")],ondelete={'screenview': 'cascade'})
view_mode = fields.Selection(selection_add=[('trigger_condition_view', "Trigger_Condition_View")],ondelete={'trigger_condition_view': 'cascade'})
+1 -1
View File
@@ -99,7 +99,7 @@ class dsscontractads(models.Model):
# uuid = fields.Char('UUID', required=True, translate=True)
adname = fields.Char('Kampagnenname', required=True, tracking=True)
adtype = fields.Selection(
[('MAIN', 'Ersteinrichtung'), ('KCHN', 'Änderung durch Kunde'), ('LCHN', 'Änderung durch Logumedia'),
[('MAIN', 'Ersteinrichtung'), ('KCHN', 'Änderung durch Kunde'), ('LCHN', 'Änderung durch Logumedia'),('VERL', 'Verlängerung des Vertrages'),
('SONS', 'Sonstige Änderung'),('PREA', 'Vorausplanung')], tracking=True)
adpos = fields.Integer('Reihenfolge', default=lambda self: self._default_adpos(),
tracking=True)
+154 -4
View File
@@ -114,6 +114,7 @@ class dsscontracts(models.Model):
provisionspayedpercent = fields.Float('Ausgezahlte Provision % :',compute='_compute_provisionspayedpercent')
grafiker = fields.Many2one('res.partner', domain="['&',('dssinternpartner','=',True),('dssinternpartner_grafik','=',True)]", tracking=True, string="abw. Grafiker",help="Grafiker nur wenn abweichend vom Projektgrafiker")
real_grafiker = fields.Char('Grafiker tatsächlich', tracking=True)
techniker = fields.Many2one('res.partner', domain="['&',('dssinternpartner','=',True),('dssinternpartner_technik','=',True)]", tracking=True, string="abw. Techniker (Einspielung)",help="der Techniker der die Einspielung vornehmen kann")
contract_remark = fields.Html('Vertragshinweise',tracking=True)
@@ -171,7 +172,7 @@ class dsscontracts(models.Model):
shortwerbe_feld_selected = fields.Char(related='werbe_feld_selected.feldname',string='Werbefelder',tracking=True)
cutshortwerbe_feld_selected = fields.Char(string='gekürzte Felder',compute='_compute_cutshort')
werbe_feld_selected_btn_img = fields.Binary(related="werbe_feld_selected.btn_image_bin",string='Buttonbild',tracking=True)
werbe_feld_selected_btn_img = fields.Binary(related="werbe_feld_selected.btn_image_bin",string='Buttonbild')
werbe_feld_selected_btn_img_base64 = fields.Char(related="werbe_feld_selected.btn_image_bin_base64")
werbe_feld_selected_btn_pos_x = fields.Integer(related="werbe_feld_selected.btn_pos_x", tracking=True)
werbe_feld_selected_btn_pos_y = fields.Integer(related="werbe_feld_selected.btn_pos_y", tracking=True)
@@ -275,10 +276,28 @@ class dsscontracts(models.Model):
info_partner_changes = fields.Boolean('Benachrichtigen bei Partneränderungen',tracking=True)
info_partner = fields.Many2one('res.partner','Benachrichtigung an : ',tracking=True)
work_marker_1 = fields.Boolean('Markierung 1 aktiv',tracking=True)
work_marker_1 = fields.Boolean('Markierung 1 aktiv (StartEmail versendet)',tracking=True)
get_marker_1_color_false = fields.Char('Markierung 1 Farbe',compute='_get_marker_1_color_false')
get_marker_1_color_true = fields.Char('Markierung 1 Farbe true',compute='_get_marker_1_color_false')
get_marker_1_color = fields.Char('Markierung 1 Farbe get',compute='_get_marker_1_color_false')
work_marker_2 = fields.Boolean('Markierung 2 aktiv',tracking=True)
get_marker_2_color = fields.Char('Markierung 1 Farbe get',compute='_get_marker_2_color_false')
work_marker_3 = fields.Boolean('Markierung 3 aktiv',tracking=True)
work_marker_3_full = fields.Boolean('Markierung 3 vollmarker',tracking=True)
work_marker_3_value = fields.Char('Markierung 3 Wert',tracking=True)
get_marker_3_color = fields.Char('Markierung 1 Farbe get',compute='_get_marker_3_color_false')
work_marker_3_1 = fields.Boolean('Teil-Markierung 3.1 aktiv',tracking=True)
work_marker_3_1_value = fields.Char('Teil-Markierung 3.1 Wert',tracking=True)
work_marker_3_2 = fields.Boolean('Teil-Markierung 3.2 aktiv',tracking=True)
work_marker_3_2_value = fields.Char('Teil-Markierung 3.2 Wert',tracking=True)
work_marker_4 = fields.Boolean('Markierung 4 aktiv',tracking=True)
work_marker_4_full = fields.Boolean('Markierung 4 vollmarker',tracking=True)
work_marker_4_value = fields.Char('Markierung 4 Wert',tracking=True)
get_marker_4_color = fields.Char('Markierung 1 Farbe get',compute='_get_marker_4_color_false')
work_marker_4_1 = fields.Boolean('Teil-Markierung 4.1 aktiv',tracking=True)
work_marker_4_1_value = fields.Char('Teil-Markierung 4.1 Wert',tracking=True)
work_marker_4_2 = fields.Boolean('Teil-Markierung 4.2 aktiv',tracking=True)
work_marker_4_2_value = fields.Char('Teil-Markierung 4.2 Wert',tracking=True)
marker_list = fields.Many2many('dss.marker', string='vorhandene Marker', tracking=True)
@@ -287,6 +306,8 @@ class dsscontracts(models.Model):
# work_state_text = fields.Char(related='work_state.statusname')
work_state_info = fields.Char('Zusatzinfo',tracking=True)
contract_binaries = fields.Many2many('dss.binaries', string='Vertragsdateien', tracking=True)
# todo_state = fields.Many2one('dss.todostate',default=_default_todo_state,tracking=True)
# todo_state_color = fields.Char(related='todo_state.color')
# todo_state_text = fields.Char(related='todo_state.statusname')
@@ -304,6 +325,58 @@ class dsscontracts(models.Model):
ads_topics = fields.Many2many('dss.contracts_ads_topics', string='Themenliste', tracking=True)
ads_topics_text = fields.Char('Themenliste gesamt',compute='_compute_themenliste')
@api.depends('work_marker_1')
@api.onchange('work_marker_1')
def _get_marker_1_color_false(self):
_logger.info('Contract get Marker 1 Color false')
for record in self:
if not record.work_marker_1:
record.get_marker_1_color = dss_settings.dssSettings._get_settingvalue(self,'marker_1_color_unused')
else:
record.get_marker_1_color = dss_settings.dssSettings._get_settingvalue(self,'marker_1_color_used')
@api.depends('work_marker_2')
@api.onchange('work_marker_2')
def _get_marker_2_color_false(self):
_logger.info('Contract get Marker 2 Color false')
for record in self:
if not record.work_marker_2:
record.get_marker_2_color = dss_settings.dssSettings._get_settingvalue(self,'marker_2_color_unused')
else:
record.get_marker_2_color = dss_settings.dssSettings._get_settingvalue(self,'marker_2_color_used')
@api.depends('work_marker_3')
@api.onchange('work_marker_3')
def _get_marker_3_color_false(self):
_logger.info('Contract get Marker 3 Color false')
for record in self:
if dss_settings.dssSettings._get_settingvalue(self,'marker_3_color_value'):
if record.work_marker_3:
record.get_marker_3_color = record.work_marker_3_value
else:
record.get_marker_3_color = dss_settings.dssSettings._get_settingvalue(self,'marker_3_color_unused')
else:
if not record.work_marker_3:
record.get_marker_3_color = dss_settings.dssSettings._get_settingvalue(self,'marker_3_color_unused')
else:
record.get_marker_3_color = dss_settings.dssSettings._get_settingvalue(self,'marker_3_color_used')
def _get_marker_4_color_false(self):
_logger.info('Contract get Marker 4 Color false')
for record in self:
if dss_settings.dssSettings._get_settingvalue(self,'marker_4_color_value'):
if record.work_marker_4:
record.get_marker_4_color = record.work_marker_4_value
else:
record.get_marker_4_color = dss_settings.dssSettings._get_settingvalue(self,'marker_4_color_unused')
else:
if not record.work_marker_4:
record.get_marker_4_color = dss_settings.dssSettings._get_settingvalue(self,'marker_4_color_unused')
else:
record.get_marker_4_color = dss_settings.dssSettings._get_settingvalue(self,'marker_4_color_used')
@api.depends('ads_topics')
def _compute_themenliste(self):
# _logger.info('Contract Themenliste Berechnung : C_' + str(self.id))
@@ -1042,6 +1115,22 @@ class dsscontracts(models.Model):
return True
def pyaction_create_cloud_structure_client(self):
projectcloudpath = self.project.cloudlink
if not projectcloudpath:
newpath = str(dss_settings.dssSettings.getprojectpath(self,self.project))+str(dss_settings.dssSettings.getClientpath(self,self))
else:
if projectcloudpath[0] != '$':
newpath = str(projectcloudpath)+str(dss_settings.dssSettings.getClientpath(self,self))
else:
newpath = str(dss_settings.dssSettings.getprojectpath(self,self.project))+str(dss_settings.dssSettings.getClientpath(self,self))
action = (self.env["confirmation.wizard"].confirm_message(_("Sind Sie sicher den Cloudordner auf Standard zurück zu setzen und anzulegen ? : Aktuell : "+self.cloudlink+" danach : "+str(newpath)),title="Bitte bestätigen",method="createcontract",records=self,callback_params={"template":self.id})
)
if action:
self.cloudlink=newpath
self.create_cloud_structure_client(self)
def createcontract(self,template):
newid = template
newClient = self.env['dss.contracts'].search([('id','=',newid)])
@@ -1251,12 +1340,73 @@ class dsscontracts(models.Model):
#raise ValidationError((all_contract_text))
return contracts
def pyopen_dss_contract_add_media_form_view(self):
_logger.info('Open Add Media Form')
view = self.env.ref("DigitalSignage.dss_media_add_form")
self._compute_prov()
media = self.env['dss.mediarelations'].create({'contract':self.id,'project':self.project.id,'field_uuid':self.werbe_feld_selected[0].uuid,'ad':self.ads_last_ad.id})
_logger.info('Open Add Media Form '+str(view)+' M_'+str(media))
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_type': 'form' ,
'view_id': view.id,
'res_model': 'dss.mediarelations' ,
'target': 'new' ,
'display_name' : 'Neu Media einfügen',
'views':[(view.id,'form')],
'res_id':media.id,
}
def pyopen_dss_contract_add_binary_form_view(self):
_logger.info('Open Add Binary Form')
view = self.env.ref("DigitalSignage.dss_binaries_view_form_wizard")
_logger.info('Open Wizzard Binary Form '+str(view))
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_type': 'form' ,
'view_id': view.id,
'res_model': 'dss.binaries.wizard.new' ,
'target': 'new' ,
'views':[(view.id,'form')],
'context': {'default_binary_contract':self.id},
}
def pyopen_dss_contract_add_binary_form_view_from_wizzard(self,media):
_logger.info('Open Add Binary Form')
view = self.env.ref("DigitalSignage.dss_binaries_view_form")
self._compute_prov()
binary = self.env['dss.binaries'].create({'binary_contract':self.id,'binary_name':self.contract_name,'binary_mediatype':media.id,'binary_id':str(media.filepartname+'_'+self.contract_auto_id),'binary_binary':media.standard_image})
self.contract_binaries = [(4, binary.id)]
_logger.info('Open Add Binary Form '+str(view)+' B_'+str(binary))
return {
'type': 'ir.actions.act_window',
'view_mode': 'form' ,
'view_type': 'form' ,
'view_id': view.id,
'res_model': 'dss.binaries' ,
'target': 'new' ,
'views':[(view.id,'form')],
'res_id':binary.id,
}
@api.model
def newwizzard(self,id):
project = self.env['dss.projects'].search([('id', '=', id)], limit=1)
_logger.info("Create new Contract Wizard - Project : "+str(project))
action = self.env["ir.actions.actions"]._for_xml_id("DigitalSignage.action_open_create_contract")
action['context'] = {'default_project': project.id}
return action
def get_attachments_by_mediatype(self, mediatype):
_logger.info('Get Attachments for Contract : C_'+str(self.id)+' - Mediatype : '+str(mediatype))
attachment = self.env['dss.binaries'].search([('binary_contract', '=', self.id), ('binary_mediatype', '=', mediatype.id)])
if not attachment:
_logger.info('No Attachments found for Contract : C_'+str(self.id)+' - Mediatype : '+str(mediatype))
return ""
else:
return attachment
+5 -1
View File
@@ -37,4 +37,8 @@ class dssmarker(models.Model):
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
return str(uuid.uuid4())
@api.model
def readmarker(self):
return self.env['dss.marker'].browse()
+4 -2
View File
@@ -115,6 +115,7 @@ class dssprojects(models.Model):
standortpartner = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_standort','=',True)]",tracking=True)
vertriebspartner = fields.Many2many('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',True)]",tracking=True)
project_grafiker = fields.Many2one('res.partner',domain="['&',('dssinternpartner','=',True),('dssinternpartner_grafik','=',True)]",tracking=True)
project_techniker = fields.Many2one('res.partner', domain="['&',('dssinternpartner','=',True),('dssinternpartner_technik','=',True)]", tracking=True, string="Techniker (Einspielung)",help="der Techniker der die Einspielung vornehmen kann")
zeiten_on = fields.Datetime('veraltet',tracking=True)
zeiten_off = fields.Datetime('veraltet',tracking=True)
zeitenf_on = fields.Float('Einschaltzeit',tracking=True)
@@ -285,8 +286,8 @@ class dssprojects(models.Model):
@api.model
def compute_getonlinestate2(self,project):
projekte = self.env['dss.projects'].search([('grundsystem_showonlinestate','=',True)])
for pro in projekte:
projekte = self.env['dss.projects'].search([('grundsystem_showonlinestate','=',True)])
for pro in projekte:
self.compute_getonlinestate_single(pro)
@api.model
@@ -327,6 +328,7 @@ class dssprojects(models.Model):
def compute_getonlinestate_single(self,project):
#proj = self.env['dss.projects'].search([('id',"=",project.id)])
_logger.setLevel(1)
proj = project
colorOn = str(self.env['dss.settings'].search([], limit=1).systemonline_color)
colorOff = str(self.env['dss.settings'].search([], limit=1).systemoffline_color)
+48 -8
View File
@@ -38,9 +38,32 @@ class dssSettings(models.Model):
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_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)
marker_1_color_used = fields.Char('Marker Farbe (benutzt)',default='#00FF00',tracking=True)
marker_1_color_unused = fields.Char('Marker Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_2_color_used = fields.Char('Marker 2 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_2_color_unused = fields.Char('Marker 2 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_3_color_used = fields.Char('Marker 3 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_3_color_unused = fields.Char('Marker 3 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_3_color_value = fields.Boolean('Marker 3 Farbe aus wert ?',tracking=True)
marker_3_1_color_used = fields.Char('Marker 3.1 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_3_1_color_unused = fields.Char('Marker 3.1 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_3_1_color_value = fields.Boolean('Marker 3.1 Farbe aus wert ?',tracking=True)
marker_3_2_color_used = fields.Char('Marker 3.2 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_3_2_color_unused = fields.Char('Marker 3.2 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_3_2_color_value = fields.Boolean('Marker 3.2 Farbe aus wert ?',tracking=True)
marker_4_color_used = fields.Char('Marker 4 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_4_color_unused = fields.Char ('Marker 4 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_4_color_value = fields.Boolean('Marker 4 Farbe aus wert ?',tracking=True)
marker_4_1_color_used = fields.Char('Marker 4.1 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_4_1_color_unused = fields.Char('Marker 4.1 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_4_1_color_value = fields.Boolean('Marker 4.1 Farbe aus wert ?',tracking=True)
marker_4_2_color_used = fields.Char('Marker 4.2 Farbe (benutzt)',default='#00FF00',tracking=True)
marker_4_2_color_unused = fields.Char('Marker 4.2 Farbe (unbenutzt)',default='#FF0000',tracking=True)
marker_4_2_color_value = fields.Boolean('Marker 4.2 Farbe aus wert ?',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)
@@ -77,15 +100,16 @@ class dssSettings(models.Model):
if parts[0] == '$':
fels = parts[1:]
if fels == 'shortwerbe_feld_selected':
if not record.werbe_feld_selected.Field_notinCloud:
parts = ''
else:
parts = record._origin.read([fels])
part= ''
for wf in record.werbe_feld_selected:
if wf.Field_notinCloud: # AChtung NOtinCloud = True ist Name anzeigen
part += wf.feldname + '_'
part = part if parts else ''
else:
parts = record._origin.read([fels])
_logger.info("Get Path - Anfrage-Teil gefunden : " + str(parts))
part = record._origin.read([fels])[0][fels]
_logger.info("Get Path - Anfrage-Teil gefunden : " + str(part))
if parts:
value = str(parts[0][fels])
value = str(part)
else:
value = ''
_logger.info("Get Path - Anfrage-Teil gefunden - setze : " + str(value))
@@ -188,6 +212,22 @@ class dssSettings(models.Model):
_logger.info("Get Client Path - kein Client gefunden")
return ''
@api.model
def readFields(self,tablename):
_logger.info("Project read Fields : "+str(tablename))
model = self.env['ir.model'].search([('model', '=', tablename)])
fields = self.env['ir.model.fields'].search([('model_id', '=', model.id)],order = 'field_description')
_logger.info("Project read Fields - Suche nach Feldern abgeschlossen - "+str(model)+" - "+str(fields))
records = []
for field in fields:
fieldrecord=[]
fieldrecord.append(field.id)
fieldrecord.append(field.field_description)
fieldrecord.append(field.name)
fieldrecord.append(str(field.field_description+' ('+field.name+')'))
records.append(fieldrecord)
return records
class dssSettingsSave(models.Model):
+166 -1
View File
@@ -1,6 +1,8 @@
import uuid
import logging
import datetime
from .dsslogger import OdooCustomLogger
from odoo import api, fields, models, _
from odoo import tools
@@ -8,10 +10,35 @@ from datetime import datetime
from datetime import date
from odoo.exceptions import ValidationError
from dateutil.relativedelta import relativedelta
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
import sys
TUYA_LOGGER.setLevel(logging.DEBUG)
logging.setLoggerClass(OdooCustomLogger)
_logger = logging.getLogger(__name__)
##_logger = logging.getLogger(__name__)
class trigger(models.Model):
dataset = None
@api.model
def GetValue(self,Table,FieldName):
sampletable = self.env['ir.config_parameter'].sudo().get_param('dss.global.trigger_sample_table')
sampleid = self.env['ir.config_parameter'].sudo().get_param('dss.global.trigger_sample_id')
Dataset = self.env[sampletable].search([('id','=',sampleid)])
_logger.info("GetValue called for "+str(Table)+" Fieldname "+str(FieldName)+' -> '+str(self)+' / '+str(Dataset))
Field=self.env['ir.model.fields'].search([('id','=',FieldName)])
_logger.info("GetValue called for "+str(Table)+" Fieldname "+str(Field))
_logger.info("GetValue called for "+str(Table)+" Fieldname "+str(Field)+' -> '+str(Dataset[Field.name]))
return Dataset[Field.name]
class dsstriggerconditions(models.Model):
_name = "dss.triggerconditions"
_description = "DigitalSignage Trigger Bedingungen"
@@ -34,6 +61,8 @@ class dsstriggerconditions(models.Model):
trigger_marker_check = fields.Many2one('dss.marker','Marker',help='Welcher Marker soll eingefügt werden ?',tracking=True)
trigger_value = fields.Char('Fix Wert',tracking=True)
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
@@ -105,6 +134,19 @@ class dsstriggerconditions(models.Model):
dotrigger = Compare
return dotrigger
@api.model
def getconditionbyid(self,conditionid):
_logger.info("Trigger get condition by conditionid !"+str(conditionid))
element = self.env['dss.triggerconditions'].search([('id','=',conditionid)])
_logger.info("Trigger get condition by conditionid !"+str(conditionid)+' - '+str(element))
blocksyntax = {}
if element:
blocksyntax = element.read()[0] if element else {}
else:
blocksyntax = {}
return blocksyntax
return element
class dsstriggergroups(models.Model):
_name = "dss.triggergroups"
@@ -352,7 +394,7 @@ class dsstriggertypes(models.Model):
triggertyp = fields.Selection([('FIELD_A','Feldänderung allgemein'),('FIELD_S','Feldänderung spezifisch'),('FIELD_B','Feldänderung BOOL'),('FIELD_K','Feldwert berechnet'),('COND','Bedingungen prüfen'),('MANUAL','Manuell ausgelösst'),('FILTER','Manuell gefiltert')],'Triggertyp',tracking=True)
trigger_table = fields.Many2one('ir.model','Nutzbar in',help='Für welche Daten ist dieser Tigger gültig ?',tracking=True)
trigger_field = fields.Many2one('ir.model.fields', string="Auslöser Feld",help='Triggerfeldname in der Tabelle - Änderungen an dem Feld lösen den Trigger aus',tracking=True)
trigger_operator = fields.Selection([('NGLEICH','Feld gleich dem Wert'),('GGLEICH','Feld größer/gleich dem Wert'),('KGLEICH','Feld kleiner/gleich dem Wert'),('UGLEICH','Feld ungleich dem Wert'),('ENTHAELT','Feld enthällt dem Wert')],'Feldwertoperator',tracking=True)
trigger_operator = fields.Selection([('NGLEICH','Feld gleich dem Wert'),('GGLEICH','Feld größer/gleich dem Wert'),('KGLEICH','Feld kleiner/gleich dem Wert'),('GROESSER','Feld grösser dem Wert'),('KLEINER','Feld kleiner dem Wert'),('UGLEICH','Feld ungleich dem Wert'),('ENTHAELT','Feld enthällt dem Wert')],'Feldwertoperator',tracking=True)
trigger_time_opperator = fields.Selection([('TAG','Aktueller Tag'),('TIME','Aktuelle Zeit'),('JAHR','Aktuelles Jahr'),('FIX','Feste Zeit')],'Vergleichswert',tracking=True)
trigger_init_trigger = fields.Boolean('Ausl. bei 1. Änderung ?',help='Soll der Trigger bereits beim setzen des 1. Wertes auslösen?',tracking=True)
trigger_onlyinit_trigger = fields.Boolean('Ausl. nur bei 1. Änderung ?',help='Soll der Trigger nur beim setzen des 1. Wertes auslösen?',tracking=True)
@@ -364,6 +406,11 @@ class dsstriggertypes(models.Model):
trigger_aktionen = fields.Many2many('dss.triggeractions',string='Aktionen bei auslösen des Triggers',tracking=True)
trigger_aktionen_groups = fields.Many2many('dss.triggeractions.groups',string='Aktionsgruppen bei auslösen des Triggers',tracking=True)
trigger_raw_condition = fields.Char('Datensatz Auswahl',tracking=True)
trigger_is_block_config = fields.Boolean('Blockly Trigger Design',tracking=True)
trigger_block_config = fields.Char('Blockly Design',tracking=True)
trigger_block_raw_config = fields.Char('Blockly command Design',tracking=True)
trigger_block_command_uptodate = fields.Boolean('Blockly command aktuell',tracking=True)
trigger_block_command = fields.Char('Blockly command',tracking=True)
@api.model
def _default_uuid(self):
@@ -383,6 +430,104 @@ class dsstriggertypes(models.Model):
def _check_trigger(self,DataRecord):
return ""
@api.model
def gettriggerbyname(self,triggername):
_logger.info("Trigger get Triggerbyname !"+str(triggername))
return self.env['dss.triggertypes'].search([('triggername','=',triggername)])
@api.model
def gettriggerblocksyntaxbyname(self,triggername):
_logger.info("Trigger get Trigger Block Syntax by Name !"+str(triggername))
foundtrigger = self.env['dss.triggertypes'].search([('triggername','=',triggername)])
blocksyntax = {}
if foundtrigger:
blocksyntax = foundtrigger.read()[0] if foundtrigger else {}
else:
blocksyntax = {}
return blocksyntax
@api.model
def gettablebyid(self,tableid):
_logger.info("Trigger get tablename by Tableid !"+str(tableid))
return str(self.env['ir.model'].search([('id','=',tableid)]).model)
@api.model
def getfieldbyid(self,fieldid):
_logger.info("Trigger get fieldname-mix by fieldid !"+str(fieldid))
feld = self.env['ir.model.fields'].search([('id','=',fieldid)])
return str(str(feld.field_description+' ('+feld.name+')'))
@api.model
def getbyid(self,modelid,searchfield,searchid):
_logger.info("Trigger get modelid by searchid !"+str(searchid))
foundtrigger = self.env[modelid].search([(searchfield,'=',searchid)])
blocksyntax = {}
if foundtrigger:
blocksyntax = foundtrigger.read()[0] if foundtrigger else {}
else:
blocksyntax = {}
return blocksyntax
@api.model
def getall(self,modelid):
_logger.info("Trigger get all !"+str(modelid))
foundtrigger = self.env[modelid].search([])
_logger.info("Trigger get all !"+str(foundtrigger))
blocksyntax = []
if foundtrigger:
blocksyntax = [record.read()[0] for record in foundtrigger] if foundtrigger else []
else:
blocksyntax = []
_logger.info("Trigger get all !"+str(blocksyntax))
return blocksyntax
def execute_trigger(self):
if self.trigger_block_raw_config:
a=1
else:
a=2
def handleNewClick(self):
return True
def handleSaveClick(self):
return True
def handleGenerateClick(self):
return True
def handleRedrawClick(self):
return True
@api.model
def NewBlockTrigger(self,triggername,triggeraktiv):
_logger.info("Trigger New Block Trigger !"+str(triggername))
newtrigger = self.env['dss.triggertypes'].create({'triggername':triggername,'trigger_is_block_config':True,'trigger_active':triggeraktiv})
return newtrigger
@api.model
def UpdateBlockTrigger(self,triggername,blockcode,triggeraktiv ):
_logger.info("Trigger Update Block Trigger !"+str(triggername))
foundtrigger = self.env['dss.triggertypes'].search([('triggername','=',triggername)])
if foundtrigger:
foundtrigger.write({'trigger_block_raw_config':blockcode,'trigger_active':triggeraktiv,'trigger_block_command_uptodate':False})
return foundtrigger
@api.model
def execTriggerTest(self,sourcecode,sampletable,sampleid):
_logger.info("Trigger Exec Trigger Test !"+str(sourcecode)+' / '+str(sampletable)+' / '+str(sampleid))
try:
Dataset = self.env[sampletable].search([('id','=',sampleid)])
_logger.info("Trigger Exec Trigger Test Dataset !"+str(Dataset))
self.env['ir.config_parameter'].sudo().set_param('dss.global.trigger_sample_table', sampletable)
self.env['ir.config_parameter'].sudo().set_param('dss.global.trigger_sample_id', sampleid)
exec(sourcecode)
return "OK"
except Exception as e:
_logger.error("Trigger Exec Trigger Test Error !"+str(e))
return "Error :"+str(e)
class dsstriggeractions(models.Model):
_name = "dss.triggeractions"
@@ -414,6 +559,8 @@ class dsstriggeractions(models.Model):
email_data_table = fields.Many2one('ir.model','EmailDaten in',help='Für welche Daten ist diese Aktion gültig ?',tracking=True)
email_data_field = fields.Many2one('ir.model.fields','Empfänger Feld', help='Feldname in der Tabelle',tracking=True)
email_template = fields.Many2one('mail.template','Emailvorlage',tracking=True)
email_has_attachments = fields.Boolean('Email mit Anhang',tracking=True,help='Soll die Email mit Anhang versendet werden ?')
email_contract_attachment_types = fields.Many2many('dss.mediatypes',tracking=True,help='Welche Dateitypen aus dem Vertrag sollen als Anhang versendet werden ?')
activity_user = fields.Many2one('res.users','Empfänger der Aufgabe',tracking=True)
activity_type = fields.Many2one('mail.activity.type','Art der Aufgabe',tracking=True)
@@ -503,6 +650,23 @@ 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
if self.email_has_attachments:
_logger.info('Trigger Aktion TRA_' + str(self)+' Sending Email - Anhang : '+str(self.email_contract_attachment_types))
attachments = []
for mediatype in self.email_contract_attachment_types:
_logger.info('Trigger Aktion TRA_' + str(self)+' Sending Email - Anhang : '+str(mediatype))
single_attachment = Dataset.get_attachments_by_mediatype(mediatype)
if single_attachment:
_logger.info('Trigger Aktion TRA_' + str(self)+' Sending Email - Anhang erzeugen : '+str(single_attachment))
if single_attachment.binary_filename:
fname = single_attachment.binary_filename
else:
fname = single_attachment.binary_name
att_id = self.env['ir.attachment'].create({'name': fname,
'datas': single_attachment.binary_binary})
_logger.info('Trigger Aktion TRA_' + str(self)+' Sending Email - Anhang wurde erzeugen : '+str(att_id))
self.email_template.attachment_ids = [(4, att_id.id)]
_logger.info('Trigger Aktion TRA_' + str(self)+' Sending Email - Anhang neu : '+str(self.email_template.attachment_ids))
if not self.email_send_confirm:
self.email_template.send_mail(Dataset.id,force_send=True)
else:
@@ -511,6 +675,7 @@ class dsstriggeractions(models.Model):
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.attachment_ids = [(5,0,0)] # Clear attachments after sending
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))
+4 -1
View File
@@ -49,4 +49,7 @@ DigitalSignage_dss_onlinestate,access.dss.onlinestate,model_dss_onlinestate,base
DigitalSignage_dss_m2mmail,access.dss.m2mmail,model_dss_m2mmail,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_triggeractions_groups_group_user,access.dss.triggeractions.groups,model_dss_triggeractions_groups,base.group_user,1,1,1,1
digitalsignage_dss_screendesign_group_user,access.dss.screendesign,model_dss_screendesign,base.group_user,1,1,1,1
digitalsignage_dss_screendesign_group_user,access.dss.screendesign,model_dss_screendesign,base.group_user,1,1,1,1
digitalsignage_dss_binaries_group_user,access.dss.binaries,model_dss_binaries,base.group_user,1,1,1,1
digitalsignage_dss_binaries_wizard_new_group_user,access.dss.binaries.wizard.new,model_dss_binaries_wizard_new,base.group_user,1,1,1,1
digitalsignage_dss_linkmail_group_user,access.dss.linkmail,model_dss_linkmail,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
49 DigitalSignage_dss_m2mmail access.dss.m2mmail model_dss_m2mmail base.group_user 1 1 1 1
50 digitalsignage_dss_display_templates_group_user access.dss.display.templates model_dss_display_templates base.group_user 1 1 1 1
51 digitalsignage_dss_triggeractions_groups_group_user access.dss.triggeractions.groups model_dss_triggeractions_groups base.group_user 1 1 1 1
52 digitalsignage_dss_screendesign_group_user access.dss.screendesign model_dss_screendesign base.group_user 1 1 1 1
53 digitalsignage_dss_binaries_group_user access.dss.binaries model_dss_binaries base.group_user 1 1 1 1
54 digitalsignage_dss_binaries_wizard_new_group_user access.dss.binaries.wizard.new model_dss_binaries_wizard_new base.group_user 1 1 1 1
55 digitalsignage_dss_linkmail_group_user access.dss.linkmail model_dss_linkmail base.group_user 1 1 1 1
-3
View File
@@ -35,9 +35,6 @@ export class ScreenViewModel {
//The keeplast protect against concurrency call
console.log(this);
await this.keepLast.add(this.loaddata(this)); //this.loaddata(records));
console.log(this);
var element=document.querySelector('.o_dark_panel')
element.remove();;
}
/**
* @protected
+218
View File
@@ -129,3 +129,221 @@
.hidden {
display: none;
}
.trigger_condition_view_main {
background-color:#FFFFFF;
padding:0px;
float:left;
}
.trigger_condition_view_Header_1 {
background-color: #FFFFFF;
color: #202020;
font-weight: bold;
padding: 10px;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
//height:100px;
}
.trigger_condition_view_main_1 {
background-color: #FFFFFF;
color: #202020;
font-weight: bold;
padding: 10px;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
//height:100px;
}
.trigger_condition_view_main_1_blockly {
background-color: #FFFFFF;
color: #202020;
font-weight: bold;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
overflow-y: visible;
height:1000px;
}
.trigger_condition_view_main_1_blockly_code {
background-color: #AFAFAF;
color: #202020;
font-weight: bold;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
overflow-y: visible;
height:750px;
}
.trigger_condition_view_main_1_blockly_code_Result {
background-color: #AFAFAF;
color: #202020;
font-weight: bold;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
overflow-y: visible;
height:150px;
margin-top: 5px;
margin-bottom: 5px;
}
.trigger_condition_view_main_1_blockly_code_cmd {
background-color: #AFAFAF;
color: #202020;
font-weight: bold;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
overflow-y: visible;
height:90px;
}
.trigger_condition_view_content {
background-color: #FFFFFF;
color: #202020;
}
.trigger_condition_item {
background-color: #A0A0D0;
color: #000;
font-weight: normal;
padding: 10px;
margin:2px;
text-align: left;
border-color: #fff;
border-width: 1px;
border-style: solid;
height: 100px;
width: 100px;
}
.section-header {
background-color: #FFFFFF;
color: #202020;
font-weight: bold;
padding: 10px;
margin:2px;
text-align: center;
}
.section-text {
background-color: #FFFFFF;
color: #202020;
font-weight: normal;
padding: 0px;
margin:0px;
text-align: left;
}
.codetextarea {
width: 100%;
height: 100%;
font-family: monospace;
font-size: 10px;
line-height: 1.4;
color: #333;
background-color: #f9f9f9;
border: 1px solid #ccc;
border-radius: 4px;
padding: 10px;
box-sizing: border-box;
resize: vertical;
white-space: nowrap;
overflow: auto;
}
.codeResultArea {
width: 100%;
height: 100%;
font-family: monospace;
font-size: 10px;
line-height: 1.4;
color: #333;
background-color: #f9f9f9;
border: 1px solid #ccc;
border-radius: 4px;
padding: 5px;
margin-top: 5px;
margin-bottom: 5px;
box-sizing: border-box;
resize: vertical;
white-space: nowrap;
overflow: auto;
}
.myBlocklyRow_1 {
background-color: #BFBFBF;
color: #000000;
}
.myBlocklyRow_2 {
background-color: #BFBF3F;
color: #000000;
}
.myBlocklyRow_3 {
background-color: #3FBFBF;
color: #000000;
}
.myBlocklyRow_4 {
background-color: #3F3FBF;
color: #000000;
}
.myBlocklyRow_5 {
background-color: #CF7FBF;
color: #000000;
}
.trigger_condition_view_Header_2 {
background-color: #FFFFFF;
color: #202020;
font-weight: bold;
padding: 10px;
margin:2px;
text-align: center;
border-color: #fff;
border-width: 0px;
border-style: solid;
//height:100px;
text-align: right;
}
.trigger_condition_view_save_button {
margin-right: 10px;
}
.trigger_condition_view_gen_button {
margin-right: 10px;
}
.trigger_condition_vieW_draw_button {
margin-right: 10px;
}
.trigger_condition_view_test_button {
margin-right: 10px;
}
.trigger_condition_view_copy_button {
margin-right: 10px;
}
+1 -1
View File
@@ -3,7 +3,7 @@
<t t-name="dss.screenview" owl="1">
<Layout display="props.display" className="'h-100 overflow-auto'">
<t t-component="props.Renderer" records="model.records" propsYouWant="'Hello world'"/>
<t t-component="props.Renderer" records="model.records" propsYouWant="Selection"/>
</Layout>
<div class="" t-attf-style="height:100px;width:100%">
<p>Scrollraum</p>
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 298 KiB

+3 -3
View File
@@ -218,9 +218,9 @@
</page>
<page name="informations" string="Interne Informationen">
<group>
<field name="contract" string="Vertrag" readonly="1"/>
<field name="contract_id" string="Kunden/Vert.nummer" readonly="1"/>
<field name="id" string="Vertrags Interne Id" readonly="1"/>
<field name="contract" string="Vertrag"/>
<field name="contract_id" string="Kunden/Vert.nummer"/>
<field name="id" string="Vertrags Interne Id"/>
<field name="uuid" string="Datensatz UUID" readonly="1"/>
<field name="adpos" string="Reihenfolge" readonly="1"/>
<field name="ad_is_lastpos" string="ist Letzte" readonly="1"/>
+102 -40
View File
@@ -364,6 +364,7 @@
<field name="contract_name" string="Vertragskennung"/>
</group>
</div>
<div class="row">
<div class="col-8">
<group>
@@ -371,11 +372,14 @@
</group>
<hr></hr>
<group>
<field name="ads_last_work_state_info" string="Aktuelle Hinweise Kampagne" widget="text"/>
<field name="ads_last_work_state_info" string="Hinweise Kampagne" widget="text"/>
</group>
<group>
<field name="work_state_info" string="Aktuelle Hinweise Vertrag" widget="text"/>
<field name="work_state_info" string="Hinweise Vertrag" widget="text"/>
</group>
<group>
<field name="remark" string="Hinweise Allgemein" widget="text"/>
</group>
</div>
</div>
</div>
@@ -549,8 +553,9 @@
<page name="grundsettings" string="Grundeinstellungen">
<div class="row">
<group string="Partnerinformationen">
<field name="contract_writer" string="Vertrags-Schreiber"/>
<field name="contract_writer_mailcc" widget="boolean_toggle"/>
<field name="contract_writer" string="Vertrags-Schreiber"/>
<field name="contract_writer_mailcc" widget="boolean_toggle"/>
<field name="techniker"/>
<field name="grafiker" string="abw. Mitarbeiter Kunden-Grafik :"/>
<field name="project_grafiker" attrs="{'invisible':[('grafiker','=','project_grafiker')]}"/>
<!-- <field name="real_grafiker" string="Tatsächlicher Grafiker: "/> -->
@@ -750,6 +755,11 @@
</page>
</notebook>
</page>
<page name="remarks" string="Anmerkungen/Bemerkungen">
<group>
<field name="remark"/>
</group>
</page>
<page name="tvmarketing" string="TV Marketing">
<group>
<field name="tv_reach_PLZ"/>
@@ -759,11 +769,6 @@
<field name="ads_topics"/>
</group>
</page>
<page name="remarks" string="Anmerkungen/Bemerkungen">
<group>
<field name="remark"/>
</group>
</page>
<page name="contractaccess" string="Zugangsdaten" attrs="{'project.':[('client','!=',False)]}">
<div class="row" >
<div class="col-4">
@@ -837,21 +842,26 @@
</field>
</group>
</page>
<page name="contractmedia" string="letzte Medien">
<page name="contractmedia" string="Fertige Dateien">
<group>
<field name="last_media" string="" readonly="1">
<tree string="kampagnen" editable="none" create="none" >
<field name="field" string="vom Feld"/>
<field name="ad" string="vom Kampagne"/>
<field name="mediatype_name" string="Nutzung"/>
<button name="dload" string="" title="download_1" type="object" icon="fa-download"/>
<field name="mediafile" string="Vorschau" options="{'size':[50]}" widget="image"/>
<field name="secured_ro" string="Gesperrt" widget="boolean_toggle"/>
<field name="used_ro" string="Genutzt" widget="boolean_toggle"/>
</tree>
</field>
<field name="contract_binaries" string="">
<tree string="Dateien zum Kunde" create="False" delete="True" editable="1" class="my_binary_class">
<field name="binary_name" string="Bezeichnung"/>
<field name="binary_mediatype_name" string="Vorlage"/>
<field name="binary_binary" string="Vorschau" widget="image" readonly="False"/>
<field name="binary_description" string="Beschreibung"/>
<field name="binary_filename" string="Dateiname" readonly="1"/>
<field name="binary_issaved" string="in Cloud Gespeichert" widget="boolean_toggle"/>
<field name="binary_secured_ro" string="Gesperrt" widget="boolean_toggle"/>
<field name="binary_used_ro" string="Genutzt" widget="boolean_toggle"/>
<button name="dedit" string="" title="edit" type="object" icon="fa-edit"/>
<button name="dload" string="" title="download_1" type="object" icon="fa-download"/>
</tree>
</field>
</group>
<button string="Datei hinzufügen" name="pyopen_dss_contract_add_binary_form_view" type="object" class="btn-primary o_open_tasks" data-hotkey="m"/>
</page>
<!-- <page name="querprojects" string="Weitere Projekte">
<group>
<field name="client_other_projects" string="Weitere Projekte"/>
@@ -886,10 +896,36 @@
</page>
<page name="grundsettings_mark" string="Markierungen">
<group string="Spezifische Datensatz-Marker">
<field name="work_marker_1" string="Start Email versendet ?" widget="boolean_toggle"/>
<field name="work_marker_2" string="Marker 2" widget="boolean_toggle"/>
<field name="work_marker_3" string="Marker 3" widget="boolean_toggle"/>
<field name="work_marker_4" string="Marker 4" widget="boolean_toggle"/>
<group string="Marker 1 - Startemail versendet">
<field name="work_marker_1" widget="boolean_toggle"/>
</group>
<group string="Marker 2 - Frei">
<field name="work_marker_2" widget="boolean_toggle"/>
</group>
<group string="Marker 3 - Details">
<field name="work_marker_3_full" widget="boolean_toggle"/>
<field name="work_marker_3" widget="boolean_toggle" attrs="{'invisible': [('work_marker_3_full','=',False)]}"/>
<field name="work_marker_3_value" attrs="{'invisible': [('work_marker_3_full','=',False)]}"/>
<field name="work_marker_3_value" attrs="{'invisible': [('work_marker_3_full','=',False)]}" widget="color"/>
<field name="work_marker_3_1" widget="boolean_toggle" attrs="{'invisible': [('work_marker_3_full','!=',False)]}"/>
<field name="work_marker_3_1_value" attrs="{'invisible': [('work_marker_3_full','!=',False)]}"/>
<field name="work_marker_3_1_value" attrs="{'invisible': [('work_marker_3_full','!=',False)]}" widget="color"/>
<field name="work_marker_3_2" widget="boolean_toggle" attrs="{'invisible': [('work_marker_3_full','!=',False)]}"/>
<field name="work_marker_3_2_value" attrs="{'invisible': [('work_marker_3_full','!=',False)]}"/>
<field name="work_marker_3_2_value" attrs="{'invisible': [('work_marker_3_full','!=',False)]}" widget="color"/>
</group>
<group string="Marker 4 - Details - MailAutomatiken (TV)">
<field name="work_marker_4_full" widget="boolean_toggle"/>
<field name="work_marker_4" widget="boolean_toggle" attrs="{'invisible': [('work_marker_4_full','=',False)]}"/>
<field name="work_marker_4_value" attrs="{'invisible': [('work_marker_4_full','=',False)]}"/>
<field name="work_marker_4_value" attrs="{'invisible': [('work_marker_4_full','=',False)]}" widget="color"/>
<field name="work_marker_4_1" widget="boolean_toggle" attrs="{'invisible': [('work_marker_4_full','!=',False)]}"/>
<field name="work_marker_4_1_value" attrs="{'invisible': [('work_marker_4_full','!=',False)]}"/>
<field name="work_marker_4_1_value" attrs="{'invisible': [('work_marker_4_full','!=',False)]}" widget="color"/>
<field name="work_marker_4_2" widget="boolean_toggle" attrs="{'invisible': [('work_marker_4_full','!=',False)]}"/>
<field name="work_marker_4_2_value" attrs="{'invisible': [('work_marker_4_full','!=',False)]}"/>
<field name="work_marker_4_2_value" attrs="{'invisible': [('work_marker_4_full','!=',False)]}" widget="color"/>
</group>
</group>
<group string="allgemeine Datensatz-Marker">
<field name="marker_list" string="">
@@ -900,6 +936,22 @@
</field>
</group>
</page>
<page name="contractmedia" string="zugehörige Dateien">
<group>
<field name="last_media" string="" readonly="1">
<tree string="kampagnen" editable="none" create="1" delete="1" class="my_media_class">
<field name="field" string="vom Feld"/>
<field name="ad" string="vom Kampagne"/>
<field name="mediatype_name" string="Nutzung"/>
<button name="dload" string="" title="download_1" type="object" icon="fa-download"/>
<field name="mediafile" string="Vorschau" options="{'size':[50]}" widget="image"/>
<field name="secured_ro" string="Gesperrt" widget="boolean_toggle"/>
<field name="used_ro" string="Genutzt" widget="boolean_toggle"/>
</tree>
</field>
</group>
<button string="Datei hinzufügen" name="pyopen_dss_contract_add_media_form_view" type="object" class="btn-primary o_open_tasks" data-hotkey="m"/>
</page>
<page name="grundsettings_kd" string="Kundendaten original">
<div class="row" string="Kundendaten Schnellanlage" name="client_short_edit" attrs="{'invisible':[('client','=',False)]}">
<hr></hr>
@@ -976,7 +1028,9 @@
</notebook>
</page>
</notebook>
<field name="scan_vertrag" string='Vertrag PDF Ansicht' widget="pdf_viewer"/>
<group string="Vertrag Schnellansicht">
<field name="scan_vertrag" string='Vertrag PDF Ansicht' widget="pdf_viewer"/>
</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"/>
@@ -1004,7 +1058,7 @@
quick_create_view="dss_contracts_view_form_simplified_footer"
on_create="pyaction_new_contract_kanban"
> -->
<kanban class="o_kanban_mobile oe_background_gray o_emphasize_colors" on_create="quick_create" quick_create_view="DigitalSignage.dss_project_new_contract_kanbanform" action="pyaction_view_contract" type="object" default_group_by="contract_state" default_order="client_id desc">
<kanban class="o_kanban_mobile oe_background_gray o_emphasize_colors" on_create="quick_create" quick_create_view="DigitalSignage.dss_project_new_contract_kanbanform" action="pyaction_view_contract" type="object" default_group_by="contract_state" default_order="contract_auto_id desc">
<!-- <kanban class="o_kanban_mobile oe_background_gray o_emphasize_colors" action="pyaction_view_contract" type="object" default_group_by="contract_state" default_order="client_id">-->
<field name="contract_name"/>
<field name="contract_state"/>
@@ -1017,10 +1071,15 @@
<field name="contract_state_minimal_kanban"/>
<field name="ads_last_date_korrekturfreigabe_ablauf_erfolgt"/>
<field name="korrectur_color"/>
<field name="start_date"/>
<field name="work_marker_1"/>
<field name="get_marker_1_color"/>
<field name="work_marker_2"/>
<field name="get_marker_2_color"/>
<field name="work_marker_3"/>
<field name="get_marker_3_color"/>
<field name="work_marker_4"/>
<field name="get_marker_4_color"/>
<field name="ads_last_date_korrekturfreigabe_ablauf_auto_cancel"/>
<templates>
<t t-name="kanban-box">
@@ -1060,30 +1119,25 @@
<p style="font-size:14px;margin-bottom:0px"><strong><field name="contract_auto_id" string="Kundennummer"/></strong></p>
</div>
<div class="col-1" t-attf-style="background-color:#bbbbbb;height:21px;padding-left:0px !important;width:12px;border-style:none">
<div t-attf-style="background-color:#bbbbbb;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Willkommensemail / Startdatum-EMail wurde versendet (Marker 1)" attrs="{'invisible': [('work_marker_1','=',True)]}">
<div t-attf-style="background-color:{{record.get_marker_1_color.value}};height:10px;width:11px;border-style:none;border-width:0.1px;" title="Willkommensemail / Startdatum-EMail wurde versendet (Marker 1)">
</div>
<div t-attf-style="background-color:#bb0b0b;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Willkommensemail wurde versendet (Marker 1)" attrs="{'invisible': [('work_marker_1','!=',True)]}">
</div>
<div t-attf-style="background-color:#bbbbbb;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Erinnerungen wurde(n) versendet (Marker 2)" attrs="{'invisible': [('work_marker_2','=',True)]}">
</div>
<div t-attf-style="background-color:#bb0b0b;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Erinnerungen wurde(n) versendet (Marker 2)" attrs="{'invisible': [('work_marker_2','!=',True)]}">
<div t-attf-style="background-color:{{record.get_marker_2_color.value}};height:10px;width:11px;border-style:none;border-width:0.1px;" title="Erinnerungen wurde(n) versendet (Marker 2)">
</div>
</div>
<div class="col-1" t-attf-style="background-color:#bbbbbb;height:21px;padding-left:0px !important;width:12px;border-style:none">
<div t-attf-style="background-color:#bbbbbb;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Korrekturabzug(üge) wurde(n) versendet (Marker 3)" attrs="{'invisible': [('work_marker_3','=',True)]}">
<div t-attf-style="background-color:{{record.get_marker_3_color.value}};height:10px;width:11px;border-style:none;border-width:0.1px;" title="Korrekturabzug(üge) wurde(n) versendet (Marker 3)">
</div>
<div t-attf-style="background-color:#bb0b0b;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Korrekturabzug(üge) wurde(n) versendet (Marker 3)" attrs="{'invisible': [('work_marker_3','!=',True)]}">
</div>
<div t-attf-style="background-color:#bbbbbb;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Auslieferung/Aufstellung wurde(n) versendet (Marker 4)" attrs="{'invisible': [('work_marker_4','=',True)]}">
</div>
<div t-attf-style="background-color:#bb0b0b;height:10px;width:11px;border-style:none;border-width:0.1px;" title="Auslieferung/Aufstellung wurde(n) versendet (Marker 4)" attrs="{'invisible': [('work_marker_4','!=',True)]}">
<div t-attf-style="background-color:{{record.get_marker_4_color.value}};height:10px;width:11px;border-style:none;border-width:0.1px;" title="Mailversendet Automatik Ablauf">
</div>
</div>
</div>
<div class="row" style="--gutter-x:10px;margin-bottom:0px" attrs="{'invisible': [('contract_state_minimal_kanban','=',True)]}">
<div class="col-12" t-attf-style="background-color:#BfBfBf;padding-left: 1px;height:13px;border-style:solid;border-width:0px;">
<div class="col-6" t-attf-style="background-color:#BfBfBf;padding-left: 1px;height:13px;border-style:solid;border-width:0px;">
<p style="font-size:10px;margin-bottom:0px">Arbeitsstand letzte Kampagne</p>
</div>
<div class="col-6" t-attf-style="background-color:#BfBfBf;padding-left: 1px;height:13px;border-style:solid;border-width:0px;">
<p style="font-size:10px;margin-bottom:0px;color:#000000;text-align:right;">1. Start : <field name="start_date"/></p>
</div>
</div>
<div class="row" style="--gutter-x:10px;">
<div class="col-4" t-attf-style="background-color:#BfBfBf;padding-left: 1px;height:13px;border-style:solid;border-width:0.2px;">
@@ -1214,6 +1268,14 @@
<field name="state">code</field>
<field name="code">action = records.buildallText()</field>
</record>
<record id="action_create_cloud" model="ir.actions.server">
<field name="name">Cloudstruktur anlegen</field>
<field name="model_id" ref="model_dss_contracts"/>
<field name="binding_model_id" ref="model_dss_contracts"/>
<field name="binding_view_types">form</field>
<field name="state">code</field>
<field name="code">action = records.pyaction_create_cloud_structure_client()</field>
</record>
<record id="action_set_SaveViewState" model="ir.actions.server">
<field name="name">Zum Cloud-Ordner springen</field>
+6 -5
View File
@@ -14,11 +14,12 @@
<field name="description"/>
</group>
<group>
<field name="maxsize_kb"/>
<field name="maxsize_h"/>
<field name="maxsize_w"/>
<field name="cloudlink"/>
<field name="filepartname"/>
<field name="maxsize_kb"/>
<field name="maxsize_h"/>
<field name="maxsize_w"/>
<field name="cloudlink"/>
<field name="archiv_cloudlink"/>
<field name="filepartname"/>
</group>
<notebook>
<page name="informations" string="Informationen">
+50 -12
View File
@@ -27,24 +27,62 @@
<field name="arch" type="xml">
<form>
<sheet>
<group>
<div class="col-md-12">
<group name="basethings">
<field name="relname" string="Relationsname"/>
<field name="project" string="Projekt"/>
<field name="contract" string="Vertrag"/>
<field name="ad" string="Kampagnen-Zuordnung"/>
<field name="field" string="Feld-Zuordnung"/>
<field name="mediatype" string="Medium"/>
<field name="secured_ro" widget="boolean_toggle"/>
<field name="used_ro" widget="boolean_toggle"/>
<field name="mediafile" string="Medium-Inhalt" widget="image"/>
</group>
</group>
<field name="relname" string="Relationsname"/>
<field name="project" string="Projekt"/>
<field name="contract" string="Vertrag"/>
<field name="ad" string="Kampagnen-Zuordnung"/>
<field name="field" string="Feld-Zuordnung"/>
<field name="mediatype" string="Medium"/>
<field name="secured_ro" widget="boolean_toggle"/>
<field name="used_ro" widget="boolean_toggle"/>
<field name="mediafile" string="Medium-Inhalt" widget="image"/>
</group>
</div>
</sheet>
</form>
</field>
</record>
<record id="dss_media_add_form" model="ir.ui.view">
<field name="name">dss_media_add_form</field>
<field name="model">dss.mediarelations</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="basethings">
<field name="project" string="Projekt"/>
<field name="contract" string="Vertrag"/>
<field name="ad" string="Kampagnen-Zuordnung"/>
<field name="mediatype" string="Medium"/>
<field name="field" string="Feld-Zuordnung"/>
<field name="secured_ro" widget="boolean_toggle"/>
<field name="used_ro" widget="boolean_toggle"/>
<field name="mediafile" string="Medium-Inhalt" widget="image"/>
</group>
<notebook>
<page name="informations" string="Interne Informationen">
<group>
<field name="relname" string="Relationsname"/>
<field name="id" string="Interne Id" readonly="1"/>
<field name="uuid" string="Datensatz UUID" readonly="1"/>
</group>
</page>
<page name="chatter" string="Chatter">
<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>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_dss_mediarelations_view" model="ir.actions.act_window">
<field name="name">DigitalSignage mediarelations</field>
<field name="type">ir.actions.act_window</field>
+1
View File
@@ -71,6 +71,7 @@
<field name="standortpartner"/>
<field name="vertriebspartner"/>
<field name="project_grafiker"/>
<field name="project_techniker"/>
</group>
</page>
<page name="projektsettings" string="Projekteinstellungen">
+39 -1
View File
@@ -137,7 +137,45 @@
</group>
</div>
</page>
<page name="webvertragseing" string="Web-Vertragseingänge Abläufe">
<page name="Markersettings" string="Markierungsfarben">
<div class="row">
<div class="col-8">
<group string="Markierungsfarben 1-2">
<field name="marker_1_color_used" widget="color"/>
<field name="marker_1_color_unused" widget="color"/>
<field name="marker_2_color_used" widget="color"/>
<field name="marker_2_color_unused" widget="color"/>
</group>
</div>
<div class="col-8">
<group string="Markierungsfarben 3">
<field name="marker_3_color_used" widget="color"/>
<field name="marker_3_color_unused" widget="color"/>
<field name="marker_3_color_value" widget="boolean_toggle"/>
<field name="marker_3_1_color_used" widget="color"/>
<field name="marker_3_1_color_unused" widget="color"/>
<field name="marker_3_1_color_value" widget="boolean_toggle"/>
<field name="marker_3_2_color_used" widget="color"/>
<field name="marker_3_2_color_unused" widget="color"/>
<field name="marker_3_2_color_value" widget="boolean_toggle"/>
</group>
</div>
<div class="col-8">
<group string="Markierungsfarben 4">
<field name="marker_4_color_used" widget="color"/>
<field name="marker_4_color_unused" widget="color"/>
<field name="marker_4_color_value" widget="boolean_toggle"/>
<field name="marker_4_1_color_used" widget="color"/>
<field name="marker_4_1_color_unused" widget="color"/>
<field name="marker_4_1_color_value" widget="boolean_toggle"/>
<field name="marker_4_2_color_used" widget="color"/>
<field name="marker_4_2_color_unused" widget="color"/>
<field name="marker_4_2_color_value" widget="boolean_toggle"/>
</group>
</div>
</div>
</page>
<page name="webvertragseing" string="Web-Vertragseingänge Abläufe">
<div class="col-6">
<group>
<field name="tv_vertragsankuendigung_actionID"></field>
+8 -1
View File
@@ -12,7 +12,14 @@
<field name="triggeractiongroupname"/>
<field name="trigger_table"/>
<field name="trigger_list" />
<field name="trigger_list">
<tree string="Trigger">
<field name="triggeractionname"/>
<field name="triggeractiontyp"/>
<field name="triggeractionprio"/>
<field name="trigger_aktionen_active" widget="boolean_toogle"/>
</tree>
</field>
</group>
<notebook>
<page name="informations" string="Informationen">
+2
View File
@@ -34,6 +34,8 @@
<field name='email_fix_email' attrs="{'invisible': [('email_getfrom','!=','FIX')]}" />
<field name='email_data_table' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" />
<field name='email_data_field' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" />
<field name='email_has_attachments' widget="boolean_toggle" string="Email mit Anhang"/>
<field name='email_contract_attachment_types' widget="many2many_tags" options="{'no_create': True}" string="Dateitypen aus Vertrag" attrs="{'invisible': [('email_has_attachments','!=',True)]}"/>
</group>
</page>
<page name="InfoAusgaben" string="Info Ausgaben/Channel Posten ">
+4 -4
View File
@@ -51,22 +51,22 @@
</field>
</record>
<record id="dss_triggerconditions_trigger_condition_view" model="ir.ui.view">
<!-- <record id="dss_triggerconditions_trigger_condition_view" model="ir.ui.view">
<field name="name">dss_triggerconditions_tree</field>
<field name="model">dss.triggerconditions</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<trigger_condition_view string="Trigger Aktionen">
<field name="triggerconditionname"/>
</tree>
</trigger_condition_view>
</field>
</record>
-->
<record id="action_dss_triggerconditions_view" model="ir.actions.act_window">
<field name="name">DigitalSignage TriggerBedingungen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.triggerconditions</field>
<field name="view_mode">tree,form,trigger_condition_view</field>
<field name="view_mode">tree,form</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
+1
View File
@@ -53,6 +53,7 @@
</field>
</record>
<record id="action_dss_trigger_groups_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Trigger Gruppen</field>
<field name="type">ir.actions.act_window</field>
+11 -1
View File
@@ -90,11 +90,21 @@
</field>
</record>
<record id="dss_trigger_trigger_condition_view" model="ir.ui.view">
<field name="name">dss_trigger_trigger_condition_view</field>
<field name="model">dss.triggertypes</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<trigger_condition_view string="Trigger Aktionen">
</trigger_condition_view>
</field>
</record>
<record id="action_dss_trigger_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Trigger</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.triggertypes</field>
<field name="view_mode">tree,form</field>
<field name="view_mode">trigger_condition_view,tree,form</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
+16 -14
View File
@@ -207,6 +207,14 @@
action="action_dss_mediarelations_view"
sequence="60"/>
<menuitem
id="menu_dss_binaries_systems"
name="Vertrag Binaries "
parent="menu_dss_div_internsetup"
action="action_dss_binaries_view"
sequence="61"/>
<menuitem
id="menu_dss_hardware_configurationen"
name="Hard.-/Software"
@@ -413,20 +421,7 @@
action="action_dss_import_view"
sequence="10"/>
<menuitem
id="menu_dss_screendesign"
name="Screendesigner Tool"
parent="menu_dss_interntools"
action="dss_screenDesigner_action_dss_screenDesigner"
sequence="20"/>
<menuitem
id="menu_dss_screendesign_view"
name="Screendesigner View"
parent="menu_dss_interntools"
action="action_dss_screenDesigner_view"
sequence="30"/>
<menuitem
id="menu_dss_Nachrichten"
name="Mail Nachrichten"
@@ -454,6 +449,13 @@
action="action_dss_main_m2mmail"
sequence="50"/>
<menuitem
id="menu_dss_linkmaillist"
name="TVLink Emailnachrichten"
parent="menu_dss_interntools"
action="action_dss_main_linkmail"
sequence="60"/>
<menuitem
id="menu_dss_contracts_ads_topics"
name="Werbethemen TV verwalten"