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
+14 -1
View File
@@ -31,7 +31,6 @@
'views/dss_onlinestate.xml', 'views/dss_onlinestate.xml',
'views/dss_texts.xml', 'views/dss_texts.xml',
'views/dss_systems.xml', 'views/dss_systems.xml',
'views/dss_screendesign.xml',
'views/dss_eventdays.xml', 'views/dss_eventdays.xml',
'views/dss_trigger_actions.xml', 'views/dss_trigger_actions.xml',
'views/dss_trigger_action_groups.xml', 'views/dss_trigger_action_groups.xml',
@@ -46,6 +45,9 @@
'views/dss_web_contracts.xml', 'views/dss_web_contracts.xml',
'views/dss_invoices.xml', 'views/dss_invoices.xml',
'views/dss_m2mmail_views.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/mainsystem_view.xml',
'views/dss_importinvoicelist.xml', 'views/dss_importinvoicelist.xml',
'views/menu.xml', 'views/menu.xml',
@@ -53,6 +55,7 @@
'views/google_map.xml', 'views/google_map.xml',
'views/dss_report_invoice.xml', 'views/dss_report_invoice.xml',
'data/ir_model_data.xml', 'data/ir_model_data.xml',
#'views/dss_screendesign.xml',
], ],
'demo': [], 'demo': [],
'installable': True, 'installable': True,
@@ -70,6 +73,15 @@
'DigitalSignage/static/src/js/dss_screenview_renderer.js', 'DigitalSignage/static/src/js/dss_screenview_renderer.js',
'DigitalSignage/static/src/js/dss_screenview_register.js', 'DigitalSignage/static/src/js/dss_screenview_register.js',
'DigitalSignage/static/src/js/dss_screenview_model.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/scss/dss_nextcloudwidget.scss',
'DigitalSignage/static/src/xml/dss_nextcloudwidget.xml', 'DigitalSignage/static/src/xml/dss_nextcloudwidget.xml',
'DigitalSignage/static/src/js/dss_nextcloudwidget.js', 'DigitalSignage/static/src/js/dss_nextcloudwidget.js',
@@ -83,6 +95,7 @@
'DigitalSignage/static/src/js/screenDesignerViewReload.js', 'DigitalSignage/static/src/js/screenDesignerViewReload.js',
'DigitalSignage/static/src/xml/form_button.xml', 'DigitalSignage/static/src/xml/form_button.xml',
'DigitalSignage/static/src/xml/form_label.xml', 'DigitalSignage/static/src/xml/form_label.xml',
'DigitalSignage/static/src/js/test.php',
], ],
'web.assets_common': [ 'web.assets_common': [
'DigitalSignage/static/images/**/*', 'DigitalSignage/static/images/**/*',
+2
View File
@@ -28,3 +28,5 @@ from . import dss_importinvoicelist
from . import dss_web_contracts from . import dss_web_contracts
from . import dss_m2mmail from . import dss_m2mmail
from . import dsslogger 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.
+22 -3
View File
@@ -24,8 +24,10 @@ from dateutil.relativedelta import relativedelta
from pyffmpeg import FFmpeg from pyffmpeg import FFmpeg
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
from . import dss_contract
import sys import sys
TUYA_LOGGER.setLevel(logging.DEBUG) TUYA_LOGGER.setLevel(logging.DEBUG)
_logger = logging.getLogger(__name__) _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')]) mediatype = fields.Selection([('IMG_J','Bild'),('VID_4','MP4 Video'),('FIL_X','belieb. Datei')])
description = fields.Text('Medien Beschreibung') description = fields.Text('Medien Beschreibung')
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für diese Datei innerhalb des Vertrags-Ordners') 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') 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_kb = fields.Integer('Maximale Größe KB')
maxsize_w = fields.Integer('Maximale Pixel W') maxsize_w = fields.Integer('Maximale Pixel W')
maxsize_h = fields.Integer('Maximale Pixel H') maxsize_h = fields.Integer('Maximale Pixel H')
standard_image = fields.Image() 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 @api.model
def _default_uuid(self): def _default_uuid(self):
@@ -205,7 +209,7 @@ class dssmediarelations(models.Model):
_description = "DigitalSignage Kampagne-Medien-Zuordnung" _description = "DigitalSignage Kampagne-Medien-Zuordnung"
_inherit = [] _inherit = []
_rec_name = "relname" _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(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
# uuid = fields.Char('UUID', required=True, translate=True) # uuid = fields.Char('UUID', required=True, translate=True)
field = fields.Many2one('dss.advertisefields',string='Feld') field = fields.Many2one('dss.advertisefields',string='Feld')
@@ -341,6 +345,19 @@ class dssscreendesign(models.Model):
'tag': 'dss_screenDesigner_js_action' '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): class View(models.Model):
""" """
@@ -349,6 +366,7 @@ class View(models.Model):
""" """
_inherit = 'ir.ui.view' _inherit = 'ir.ui.view'
type = fields.Selection(selection_add=[('screenview', "ScreenView")]) type = fields.Selection(selection_add=[('screenview', "ScreenView")])
type = fields.Selection(selection_add=[('trigger_condition_view', "Trigger_Condition_View")])
class IrActionsActWindowView(models.Model): class IrActionsActWindowView(models.Model):
""" """
@@ -356,5 +374,6 @@ class IrActionsActWindowView(models.Model):
a new view mode called 'grid'. a new view mode called 'grid'.
""" """
_inherit = 'ir.actions.act_window.view' _inherit = 'ir.actions.act_window.view'
view_mode = fields.Selection(selection_add=[('screenview', "ScreenView")], view_mode = fields.Selection(selection_add=[('screenview', "ScreenView")],ondelete={'screenview': 'cascade'})
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) # uuid = fields.Char('UUID', required=True, translate=True)
adname = fields.Char('Kampagnenname', required=True, tracking=True) adname = fields.Char('Kampagnenname', required=True, tracking=True)
adtype = fields.Selection( 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) ('SONS', 'Sonstige Änderung'),('PREA', 'Vorausplanung')], tracking=True)
adpos = fields.Integer('Reihenfolge', default=lambda self: self._default_adpos(), adpos = fields.Integer('Reihenfolge', default=lambda self: self._default_adpos(),
tracking=True) tracking=True)
+154 -4
View File
@@ -114,6 +114,7 @@ class dsscontracts(models.Model):
provisionspayedpercent = fields.Float('Ausgezahlte Provision % :',compute='_compute_provisionspayedpercent') 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") 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) 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) 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) 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') 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_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_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) 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_changes = fields.Boolean('Benachrichtigen bei Partneränderungen',tracking=True)
info_partner = fields.Many2one('res.partner','Benachrichtigung an : ',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) 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 = 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 = 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) 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_text = fields.Char(related='work_state.statusname')
work_state_info = fields.Char('Zusatzinfo',tracking=True) 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 = fields.Many2one('dss.todostate',default=_default_todo_state,tracking=True)
# todo_state_color = fields.Char(related='todo_state.color') # todo_state_color = fields.Char(related='todo_state.color')
# todo_state_text = fields.Char(related='todo_state.statusname') # 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 = fields.Many2many('dss.contracts_ads_topics', string='Themenliste', tracking=True)
ads_topics_text = fields.Char('Themenliste gesamt',compute='_compute_themenliste') 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') @api.depends('ads_topics')
def _compute_themenliste(self): def _compute_themenliste(self):
# _logger.info('Contract Themenliste Berechnung : C_' + str(self.id)) # _logger.info('Contract Themenliste Berechnung : C_' + str(self.id))
@@ -1042,6 +1115,22 @@ class dsscontracts(models.Model):
return True 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): def createcontract(self,template):
newid = template newid = template
newClient = self.env['dss.contracts'].search([('id','=',newid)]) newClient = self.env['dss.contracts'].search([('id','=',newid)])
@@ -1251,12 +1340,73 @@ class dsscontracts(models.Model):
#raise ValidationError((all_contract_text)) #raise ValidationError((all_contract_text))
return contracts 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 @api.model
def newwizzard(self,id): def newwizzard(self,id):
project = self.env['dss.projects'].search([('id', '=', id)], limit=1) project = self.env['dss.projects'].search([('id', '=', id)], limit=1)
_logger.info("Create new Contract Wizard - Project : "+str(project)) _logger.info("Create new Contract Wizard - Project : "+str(project))
action = self.env["ir.actions.actions"]._for_xml_id("DigitalSignage.action_open_create_contract") action = self.env["ir.actions.actions"]._for_xml_id("DigitalSignage.action_open_create_contract")
action['context'] = {'default_project': project.id} action['context'] = {'default_project': project.id}
return action 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
+4
View File
@@ -38,3 +38,7 @@ class dssmarker(models.Model):
@api.model @api.model
def _default_uuid(self): def _default_uuid(self):
return str(uuid.uuid4()) return str(uuid.uuid4())
@api.model
def readmarker(self):
return self.env['dss.marker'].browse()
+2
View File
@@ -115,6 +115,7 @@ class dssprojects(models.Model):
standortpartner = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_standort','=',True)]",tracking=True) 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) 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_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_on = fields.Datetime('veraltet',tracking=True)
zeiten_off = fields.Datetime('veraltet',tracking=True) zeiten_off = fields.Datetime('veraltet',tracking=True)
zeitenf_on = fields.Float('Einschaltzeit',tracking=True) zeitenf_on = fields.Float('Einschaltzeit',tracking=True)
@@ -327,6 +328,7 @@ class dssprojects(models.Model):
def compute_getonlinestate_single(self,project): def compute_getonlinestate_single(self,project):
#proj = self.env['dss.projects'].search([('id',"=",project.id)]) #proj = self.env['dss.projects'].search([('id',"=",project.id)])
_logger.setLevel(1)
proj = project proj = project
colorOn = str(self.env['dss.settings'].search([], limit=1).systemonline_color) colorOn = str(self.env['dss.settings'].search([], limit=1).systemonline_color)
colorOff = str(self.env['dss.settings'].search([], limit=1).systemoffline_color) colorOff = str(self.env['dss.settings'].search([], limit=1).systemoffline_color)
+47 -7
View File
@@ -41,6 +41,29 @@ class dssSettings(models.Model):
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 = fields.Char('Standard Kampagnen Pfad',tracking=True)
def_ad_cloudpath_sample = fields.Char('Kampagnen Beispiel :',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_id = fields.Char('Tuya Access ID',tracking=True)
tuya_access_key = fields.Char('Tuya Access KEY',tracking=True) tuya_access_key = fields.Char('Tuya Access KEY',tracking=True)
tuya_endpoint = fields.Char('Tuya Access Endpoint',tracking=True) tuya_endpoint = fields.Char('Tuya Access Endpoint',tracking=True)
@@ -77,15 +100,16 @@ class dssSettings(models.Model):
if parts[0] == '$': if parts[0] == '$':
fels = parts[1:] fels = parts[1:]
if fels == 'shortwerbe_feld_selected': if fels == 'shortwerbe_feld_selected':
if not record.werbe_feld_selected.Field_notinCloud: part= ''
parts = '' for wf in record.werbe_feld_selected:
else: if wf.Field_notinCloud: # AChtung NOtinCloud = True ist Name anzeigen
parts = record._origin.read([fels]) part += wf.feldname + '_'
part = part if parts else ''
else: else:
parts = record._origin.read([fels]) part = record._origin.read([fels])[0][fels]
_logger.info("Get Path - Anfrage-Teil gefunden : " + str(parts)) _logger.info("Get Path - Anfrage-Teil gefunden : " + str(part))
if parts: if parts:
value = str(parts[0][fels]) value = str(part)
else: else:
value = '' value = ''
_logger.info("Get Path - Anfrage-Teil gefunden - setze : " + str(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") _logger.info("Get Client Path - kein Client gefunden")
return '' 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): class dssSettingsSave(models.Model):
+166 -1
View File
@@ -1,6 +1,8 @@
import uuid import uuid
import logging import logging
import datetime import datetime
from .dsslogger import OdooCustomLogger
from odoo import api, fields, models, _ from odoo import api, fields, models, _
from odoo import tools from odoo import tools
@@ -8,10 +10,35 @@ from datetime import datetime
from datetime import date from datetime import date
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
import sys import sys
TUYA_LOGGER.setLevel(logging.DEBUG)
logging.setLoggerClass(OdooCustomLogger)
_logger = logging.getLogger(__name__) _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): class dsstriggerconditions(models.Model):
_name = "dss.triggerconditions" _name = "dss.triggerconditions"
_description = "DigitalSignage Trigger Bedingungen" _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_marker_check = fields.Many2one('dss.marker','Marker',help='Welcher Marker soll eingefügt werden ?',tracking=True)
trigger_value = fields.Char('Fix Wert',tracking=True) trigger_value = fields.Char('Fix Wert',tracking=True)
@api.model @api.model
def _default_uuid(self): def _default_uuid(self):
return str(uuid.uuid4()) return str(uuid.uuid4())
@@ -105,6 +134,19 @@ class dsstriggerconditions(models.Model):
dotrigger = Compare dotrigger = Compare
return dotrigger 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): class dsstriggergroups(models.Model):
_name = "dss.triggergroups" _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) 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_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_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_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_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) 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 = 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_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_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 @api.model
def _default_uuid(self): def _default_uuid(self):
@@ -384,6 +431,104 @@ class dsstriggertypes(models.Model):
def _check_trigger(self,DataRecord): def _check_trigger(self,DataRecord):
return "" 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): class dsstriggeractions(models.Model):
_name = "dss.triggeractions" _name = "dss.triggeractions"
_description = "DigitalSignage Trigger Aktionen" _description = "DigitalSignage Trigger Aktionen"
@@ -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_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_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_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_user = fields.Many2one('res.users','Empfänger der Aufgabe',tracking=True)
activity_type = fields.Many2one('mail.activity.type','Art 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)) _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_to = mailto
self.email_template.email_cc = ccmailto 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: if not self.email_send_confirm:
self.email_template.send_mail(Dataset.id,force_send=True) self.email_template.send_mail(Dataset.id,force_send=True)
else: else:
@@ -511,6 +675,7 @@ class dsstriggeractions(models.Model):
title="Bestätigen",method="Email senden ",callback_params={"Email": mailto})) title="Bestätigen",method="Email senden ",callback_params={"Email": mailto}))
if action: if action:
self.email_template.send_mail(Dataset.id,force_send=True) 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 self.email_template.email_cc = ccmailto_org
elif (self.triggeractiontyp == 'DSEDIT'): 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)) _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))
+3
View File
@@ -50,3 +50,6 @@ DigitalSignage_dss_m2mmail,access.dss.m2mmail,model_dss_m2mmail,base.group_user,
digitalsignage_dss_display_templates_group_user,access.dss.display.templates,model_dss_display_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_triggeractions_groups_group_user,access.dss.triggeractions.groups,model_dss_triggeractions_groups,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
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 //The keeplast protect against concurrency call
console.log(this); console.log(this);
await this.keepLast.add(this.loaddata(this)); //this.loaddata(records)); await this.keepLast.add(this.loaddata(this)); //this.loaddata(records));
console.log(this);
var element=document.querySelector('.o_dark_panel')
element.remove();;
} }
/** /**
* @protected * @protected
+218
View File
@@ -129,3 +129,221 @@
.hidden { .hidden {
display: none; 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"> <t t-name="dss.screenview" owl="1">
<Layout display="props.display" className="'h-100 overflow-auto'"> <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> </Layout>
<div class="" t-attf-style="height:100px;width:100%"> <div class="" t-attf-style="height:100px;width:100%">
<p>Scrollraum</p> <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>
<page name="informations" string="Interne Informationen"> <page name="informations" string="Interne Informationen">
<group> <group>
<field name="contract" string="Vertrag" readonly="1"/> <field name="contract" string="Vertrag"/>
<field name="contract_id" string="Kunden/Vert.nummer" readonly="1"/> <field name="contract_id" string="Kunden/Vert.nummer"/>
<field name="id" string="Vertrags Interne Id" readonly="1"/> <field name="id" string="Vertrags Interne Id"/>
<field name="uuid" string="Datensatz UUID" readonly="1"/> <field name="uuid" string="Datensatz UUID" readonly="1"/>
<field name="adpos" string="Reihenfolge" readonly="1"/> <field name="adpos" string="Reihenfolge" readonly="1"/>
<field name="ad_is_lastpos" string="ist Letzte" readonly="1"/> <field name="ad_is_lastpos" string="ist Letzte" readonly="1"/>
+100 -38
View File
@@ -364,6 +364,7 @@
<field name="contract_name" string="Vertragskennung"/> <field name="contract_name" string="Vertragskennung"/>
</group> </group>
</div> </div>
<div class="row"> <div class="row">
<div class="col-8"> <div class="col-8">
<group> <group>
@@ -371,10 +372,13 @@
</group> </group>
<hr></hr> <hr></hr>
<group> <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>
<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> </group>
</div> </div>
</div> </div>
@@ -551,6 +555,7 @@
<group string="Partnerinformationen"> <group string="Partnerinformationen">
<field name="contract_writer" string="Vertrags-Schreiber"/> <field name="contract_writer" string="Vertrags-Schreiber"/>
<field name="contract_writer_mailcc" widget="boolean_toggle"/> <field name="contract_writer_mailcc" widget="boolean_toggle"/>
<field name="techniker"/>
<field name="grafiker" string="abw. Mitarbeiter Kunden-Grafik :"/> <field name="grafiker" string="abw. Mitarbeiter Kunden-Grafik :"/>
<field name="project_grafiker" attrs="{'invisible':[('grafiker','=','project_grafiker')]}"/> <field name="project_grafiker" attrs="{'invisible':[('grafiker','=','project_grafiker')]}"/>
<!-- <field name="real_grafiker" string="Tatsächlicher Grafiker: "/> --> <!-- <field name="real_grafiker" string="Tatsächlicher Grafiker: "/> -->
@@ -750,6 +755,11 @@
</page> </page>
</notebook> </notebook>
</page> </page>
<page name="remarks" string="Anmerkungen/Bemerkungen">
<group>
<field name="remark"/>
</group>
</page>
<page name="tvmarketing" string="TV Marketing"> <page name="tvmarketing" string="TV Marketing">
<group> <group>
<field name="tv_reach_PLZ"/> <field name="tv_reach_PLZ"/>
@@ -759,11 +769,6 @@
<field name="ads_topics"/> <field name="ads_topics"/>
</group> </group>
</page> </page>
<page name="remarks" string="Anmerkungen/Bemerkungen">
<group>
<field name="remark"/>
</group>
</page>
<page name="contractaccess" string="Zugangsdaten" attrs="{'project.':[('client','!=',False)]}"> <page name="contractaccess" string="Zugangsdaten" attrs="{'project.':[('client','!=',False)]}">
<div class="row" > <div class="row" >
<div class="col-4"> <div class="col-4">
@@ -837,21 +842,26 @@
</field> </field>
</group> </group>
</page> </page>
<page name="contractmedia" string="letzte Medien"> <page name="contractmedia" string="Fertige Dateien">
<group> <group>
<field name="last_media" string="" readonly="1"> <field name="contract_binaries" string="">
<tree string="kampagnen" editable="none" create="none" > <tree string="Dateien zum Kunde" create="False" delete="True" editable="1" class="my_binary_class">
<field name="field" string="vom Feld"/> <field name="binary_name" string="Bezeichnung"/>
<field name="ad" string="vom Kampagne"/> <field name="binary_mediatype_name" string="Vorlage"/>
<field name="mediatype_name" string="Nutzung"/> <field name="binary_binary" string="Vorschau" widget="image" readonly="False"/>
<button name="dload" string="" title="download_1" type="object" icon="fa-download"/> <field name="binary_description" string="Beschreibung"/>
<field name="mediafile" string="Vorschau" options="{'size':[50]}" widget="image"/> <field name="binary_filename" string="Dateiname" readonly="1"/>
<field name="secured_ro" string="Gesperrt" widget="boolean_toggle"/> <field name="binary_issaved" string="in Cloud Gespeichert" widget="boolean_toggle"/>
<field name="used_ro" string="Genutzt" widget="boolean_toggle"/> <field name="binary_secured_ro" string="Gesperrt" widget="boolean_toggle"/>
</tree> <field name="binary_used_ro" string="Genutzt" widget="boolean_toggle"/>
</field> <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> </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>
<!-- <page name="querprojects" string="Weitere Projekte"> <!-- <page name="querprojects" string="Weitere Projekte">
<group> <group>
<field name="client_other_projects" string="Weitere Projekte"/> <field name="client_other_projects" string="Weitere Projekte"/>
@@ -886,10 +896,36 @@
</page> </page>
<page name="grundsettings_mark" string="Markierungen"> <page name="grundsettings_mark" string="Markierungen">
<group string="Spezifische Datensatz-Marker"> <group string="Spezifische Datensatz-Marker">
<field name="work_marker_1" string="Start Email versendet ?" widget="boolean_toggle"/> <group string="Marker 1 - Startemail versendet">
<field name="work_marker_2" string="Marker 2" widget="boolean_toggle"/> <field name="work_marker_1" widget="boolean_toggle"/>
<field name="work_marker_3" string="Marker 3" widget="boolean_toggle"/> </group>
<field name="work_marker_4" string="Marker 4" widget="boolean_toggle"/> <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>
<group string="allgemeine Datensatz-Marker"> <group string="allgemeine Datensatz-Marker">
<field name="marker_list" string=""> <field name="marker_list" string="">
@@ -900,6 +936,22 @@
</field> </field>
</group> </group>
</page> </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"> <page name="grundsettings_kd" string="Kundendaten original">
<div class="row" string="Kundendaten Schnellanlage" name="client_short_edit" attrs="{'invisible':[('client','=',False)]}"> <div class="row" string="Kundendaten Schnellanlage" name="client_short_edit" attrs="{'invisible':[('client','=',False)]}">
<hr></hr> <hr></hr>
@@ -976,7 +1028,9 @@
</notebook> </notebook>
</page> </page>
</notebook> </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> </sheet>
<div class="oe_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="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" quick_create_view="dss_contracts_view_form_simplified_footer"
on_create="pyaction_new_contract_kanban" 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">--> <!-- <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_name"/>
<field name="contract_state"/> <field name="contract_state"/>
@@ -1017,10 +1071,15 @@
<field name="contract_state_minimal_kanban"/> <field name="contract_state_minimal_kanban"/>
<field name="ads_last_date_korrekturfreigabe_ablauf_erfolgt"/> <field name="ads_last_date_korrekturfreigabe_ablauf_erfolgt"/>
<field name="korrectur_color"/> <field name="korrectur_color"/>
<field name="start_date"/>
<field name="work_marker_1"/> <field name="work_marker_1"/>
<field name="get_marker_1_color"/>
<field name="work_marker_2"/> <field name="work_marker_2"/>
<field name="get_marker_2_color"/>
<field name="work_marker_3"/> <field name="work_marker_3"/>
<field name="get_marker_3_color"/>
<field name="work_marker_4"/> <field name="work_marker_4"/>
<field name="get_marker_4_color"/>
<field name="ads_last_date_korrekturfreigabe_ablauf_auto_cancel"/> <field name="ads_last_date_korrekturfreigabe_ablauf_auto_cancel"/>
<templates> <templates>
<t t-name="kanban-box"> <t t-name="kanban-box">
@@ -1060,29 +1119,24 @@
<p style="font-size:14px;margin-bottom:0px"><strong><field name="contract_auto_id" string="Kundennummer"/></strong></p> <p style="font-size:14px;margin-bottom:0px"><strong><field name="contract_auto_id" string="Kundennummer"/></strong></p>
</div> </div>
<div class="col-1" t-attf-style="background-color:#bbbbbb;height:21px;padding-left:0px !important;width:12px;border-style:none"> <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>
<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 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 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> </div>
</div> </div>
<div class="col-1" t-attf-style="background-color:#bbbbbb;height:21px;padding-left:0px !important;width:12px;border-style:none"> <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>
<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 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 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> </div>
</div> </div>
</div> </div>
<div class="row" style="--gutter-x:10px;margin-bottom:0px" attrs="{'invisible': [('contract_state_minimal_kanban','=',True)]}"> <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> <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> </div>
<div class="row" style="--gutter-x:10px;"> <div class="row" style="--gutter-x:10px;">
@@ -1214,6 +1268,14 @@
<field name="state">code</field> <field name="state">code</field>
<field name="code">action = records.buildallText()</field> <field name="code">action = records.buildallText()</field>
</record> </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"> <record id="action_set_SaveViewState" model="ir.actions.server">
<field name="name">Zum Cloud-Ordner springen</field> <field name="name">Zum Cloud-Ordner springen</field>
+6 -5
View File
@@ -14,11 +14,12 @@
<field name="description"/> <field name="description"/>
</group> </group>
<group> <group>
<field name="maxsize_kb"/> <field name="maxsize_kb"/>
<field name="maxsize_h"/> <field name="maxsize_h"/>
<field name="maxsize_w"/> <field name="maxsize_w"/>
<field name="cloudlink"/> <field name="cloudlink"/>
<field name="filepartname"/> <field name="archiv_cloudlink"/>
<field name="filepartname"/>
</group> </group>
<notebook> <notebook>
<page name="informations" string="Informationen"> <page name="informations" string="Informationen">
+50 -12
View File
@@ -27,24 +27,62 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<sheet> <sheet>
<group> <div class="col-md-12">
<group name="basethings"> <group name="basethings">
<field name="relname" string="Relationsname"/> <field name="relname" string="Relationsname"/>
<field name="project" string="Projekt"/> <field name="project" string="Projekt"/>
<field name="contract" string="Vertrag"/> <field name="contract" string="Vertrag"/>
<field name="ad" string="Kampagnen-Zuordnung"/> <field name="ad" string="Kampagnen-Zuordnung"/>
<field name="field" string="Feld-Zuordnung"/> <field name="field" string="Feld-Zuordnung"/>
<field name="mediatype" string="Medium"/> <field name="mediatype" string="Medium"/>
<field name="secured_ro" widget="boolean_toggle"/> <field name="secured_ro" widget="boolean_toggle"/>
<field name="used_ro" widget="boolean_toggle"/> <field name="used_ro" widget="boolean_toggle"/>
<field name="mediafile" string="Medium-Inhalt" widget="image"/> <field name="mediafile" string="Medium-Inhalt" widget="image"/>
</group> </group>
</group> </div>
</sheet> </sheet>
</form> </form>
</field> </field>
</record> </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"> <record id="action_dss_mediarelations_view" model="ir.actions.act_window">
<field name="name">DigitalSignage mediarelations</field> <field name="name">DigitalSignage mediarelations</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
+1
View File
@@ -71,6 +71,7 @@
<field name="standortpartner"/> <field name="standortpartner"/>
<field name="vertriebspartner"/> <field name="vertriebspartner"/>
<field name="project_grafiker"/> <field name="project_grafiker"/>
<field name="project_techniker"/>
</group> </group>
</page> </page>
<page name="projektsettings" string="Projekteinstellungen"> <page name="projektsettings" string="Projekteinstellungen">
+39 -1
View File
@@ -137,7 +137,45 @@
</group> </group>
</div> </div>
</page> </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"> <div class="col-6">
<group> <group>
<field name="tv_vertragsankuendigung_actionID"></field> <field name="tv_vertragsankuendigung_actionID"></field>
+8 -1
View File
@@ -12,7 +12,14 @@
<field name="triggeractiongroupname"/> <field name="triggeractiongroupname"/>
<field name="trigger_table"/> <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> </group>
<notebook> <notebook>
<page name="informations" string="Informationen"> <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_fix_email' attrs="{'invisible': [('email_getfrom','!=','FIX')]}" />
<field name='email_data_table' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" /> <field name='email_data_table' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" />
<field name='email_data_field' 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> </group>
</page> </page>
<page name="InfoAusgaben" string="Info Ausgaben/Channel Posten "> <page name="InfoAusgaben" string="Info Ausgaben/Channel Posten ">
+4 -4
View File
@@ -51,22 +51,22 @@
</field> </field>
</record> </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="name">dss_triggerconditions_tree</field>
<field name="model">dss.triggerconditions</field> <field name="model">dss.triggerconditions</field>
<field name="priority" eval="16"/> <field name="priority" eval="16"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<trigger_condition_view string="Trigger Aktionen"> <trigger_condition_view string="Trigger Aktionen">
<field name="triggerconditionname"/> <field name="triggerconditionname"/>
</tree> </trigger_condition_view>
</field> </field>
</record> </record>
-->
<record id="action_dss_triggerconditions_view" model="ir.actions.act_window"> <record id="action_dss_triggerconditions_view" model="ir.actions.act_window">
<field name="name">DigitalSignage TriggerBedingungen</field> <field name="name">DigitalSignage TriggerBedingungen</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">dss.triggerconditions</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="context">{}</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="'o_view_nocontent_smiling_face"> <p class="'o_view_nocontent_smiling_face">
+1
View File
@@ -53,6 +53,7 @@
</field> </field>
</record> </record>
<record id="action_dss_trigger_groups_view" model="ir.actions.act_window"> <record id="action_dss_trigger_groups_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Trigger Gruppen</field> <field name="name">DigitalSignage Trigger Gruppen</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
+11 -1
View File
@@ -90,11 +90,21 @@
</field> </field>
</record> </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"> <record id="action_dss_trigger_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Trigger</field> <field name="name">DigitalSignage Trigger</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">dss.triggertypes</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="context">{}</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="'o_view_nocontent_smiling_face"> <p class="'o_view_nocontent_smiling_face">
+15 -13
View File
@@ -207,6 +207,14 @@
action="action_dss_mediarelations_view" action="action_dss_mediarelations_view"
sequence="60"/> sequence="60"/>
<menuitem
id="menu_dss_binaries_systems"
name="Vertrag Binaries "
parent="menu_dss_div_internsetup"
action="action_dss_binaries_view"
sequence="61"/>
<menuitem <menuitem
id="menu_dss_hardware_configurationen" id="menu_dss_hardware_configurationen"
name="Hard.-/Software" name="Hard.-/Software"
@@ -413,19 +421,6 @@
action="action_dss_import_view" action="action_dss_import_view"
sequence="10"/> 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 <menuitem
id="menu_dss_Nachrichten" id="menu_dss_Nachrichten"
@@ -454,6 +449,13 @@
action="action_dss_main_m2mmail" action="action_dss_main_m2mmail"
sequence="50"/> sequence="50"/>
<menuitem
id="menu_dss_linkmaillist"
name="TVLink Emailnachrichten"
parent="menu_dss_interntools"
action="action_dss_main_linkmail"
sequence="60"/>
<menuitem <menuitem
id="menu_dss_contracts_ads_topics" id="menu_dss_contracts_ads_topics"
name="Werbethemen TV verwalten" name="Werbethemen TV verwalten"