Aufräumen, System Standorte
This commit is contained in:
parent
b9522c8706
commit
13f556bf62
|
|
@ -1 +1,2 @@
|
|||
from . import models
|
||||
from . import controllers
|
||||
|
|
|
|||
|
|
@ -25,24 +25,31 @@
|
|||
'views/dss_geraetetypen.xml',
|
||||
'views/dss_texts.xml',
|
||||
'views/dss_systems.xml',
|
||||
'views/dss_screendesign.xml',
|
||||
'views/dss_trigger_actions.xml',
|
||||
'views/dss_eventdays.xml',
|
||||
'views/dss_triggertypes.xml',
|
||||
'views/mainsystem_view.xml',
|
||||
'views/menu.xml',
|
||||
'views/company_view.xml',
|
||||
'views/google_map_templates.xml'
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'images': ['static/description/banner.gif'],
|
||||
'auto_install': False,
|
||||
'css': ['static/src/css/dss.css'],
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'DigitalSignage/static/src/**/*',
|
||||
'DigitalSignage/static/src/xml/screenDesignerView.xml',
|
||||
],
|
||||
'web.assets_common': [
|
||||
'DigitalSignage/static/images/**/*',
|
||||
'DigitalSignage/static/images/**/*',
|
||||
'DigitalSignage/static/src/css/dss.css',
|
||||
],
|
||||
'web.assets_backend': [
|
||||
],
|
||||
'web.assets_qweb': [
|
||||
'DigitalSignage/static/src/xml/*',
|
||||
],
|
||||
},
|
||||
'license': 'LGPL-3',
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
curl https://upload.diebesorger.com/f.php?h=1DWnJR2Q&d=1
|
||||
436
models/dss.py
436
models/dss.py
|
|
@ -18,7 +18,11 @@ from odoo import tools
|
|||
from odoo.exceptions import ValidationError
|
||||
from datetime import date
|
||||
from pyffmpeg import FFmpeg
|
||||
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
|
||||
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
|
||||
import sys
|
||||
|
||||
TUYA_LOGGER.setLevel(logging.DEBUG)
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
def _generate_preview_from_binary(self, videofile_file):
|
||||
|
|
@ -54,6 +58,7 @@ class dssimport(models.Model):
|
|||
return action
|
||||
|
||||
class dssSettings(models.Model):
|
||||
|
||||
_name = "dss.settings"
|
||||
_description = "DigitalSignage Einstellungen"
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
|
|
@ -63,6 +68,13 @@ class dssSettings(models.Model):
|
|||
def_contract_cloudpath_sample = fields.Char('Projekt Beispiel :')
|
||||
def_ad_cloudpath = fields.Char('Standard Kampagnen Pfad')
|
||||
def_ad_cloudpath_sample = fields.Char('Kampagnen Beispiel :')
|
||||
tuya_access_id = fields.Char('Tuya Access ID')
|
||||
tuya_access_key = fields.Char('Tuya Access KEY')
|
||||
tuya_endpoint = fields.Char('Tuya Access Endpoint')
|
||||
def _get_settingvalue(self,valuename):
|
||||
settings = (self.env['dss.settings'].search([],limit=1))
|
||||
wert = settings._origin.read([valuename])[0][valuename]
|
||||
return wert
|
||||
|
||||
def _get_path_converted(self,path,record):
|
||||
alls = ''
|
||||
|
|
@ -161,8 +173,8 @@ class dsscontracts(models.Model):
|
|||
contract_name = fields.Char('Kurzbezeichnung', required=True,tracking=True)
|
||||
contract_state = fields.Many2one('dss.contractstate',group_expand='_read_group_stage_ids',tracking=True)
|
||||
contract_state_order = fields.Integer(related='contract_state.order',store=True)
|
||||
contract_auto_id = fields.Char("Kundennummer",tracking=True)
|
||||
contract_auto_name = fields.Char('Vertragskennug',tracking=True)
|
||||
contract_auto_id = fields.Char("Kundennummer",tracking=True,help="Wird berechnet aus Projektnummer + Kunden ID")
|
||||
contract_auto_name = fields.Char('Vertragskennug',tracking=True,help="Wird berechnet aus Kundennummer + Vertragskennung")
|
||||
|
||||
contract_remark = fields.Html('Vertragshinweise',tracking=True)
|
||||
|
||||
|
|
@ -171,8 +183,8 @@ class dsscontracts(models.Model):
|
|||
projectIid = fields.Integer('Project IID',tracking=True)
|
||||
project_ad_structure = fields.Many2one(related='project.grundsystem_default_adstructure', string='Aufbau')
|
||||
|
||||
client = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]",tracking=True)
|
||||
client_id = fields.Char("Kundenid",tracking=True)
|
||||
client = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]",tracking=True,help="Nur zu Benutzen wenn Kunden als Kontakt angelegt wurde")
|
||||
client_id = fields.Char("Kundenid",tracking=True,help="Nur der 2 stellige letzte Teil der Kundennummer")
|
||||
client_uuid = fields.Char(related="client.dss_uuid")
|
||||
parent_id = fields.Many2one('dss.contracts', string='Parent Task', index=True,tracking=True)
|
||||
|
||||
|
|
@ -211,7 +223,8 @@ class dsscontracts(models.Model):
|
|||
runtime_t = fields.Integer('Laufzeit',tracking=True)
|
||||
runtime_events = fields.Many2many('dss.eventdays',tracking=True)
|
||||
runtime_divers = fields.Char('Laufzeit',tracking=True)
|
||||
|
||||
runtime_finish = fields.Date('LaufzeitEnde',tracking=True)
|
||||
|
||||
paymentsystems = fields.Many2one('dss.paysystems',tracking=True)
|
||||
intern_info_payment_off = fields.Boolean('Keine Zahl-Benachrichtigungen',tracking=True)
|
||||
|
||||
|
|
@ -283,11 +296,15 @@ class dsscontracts(models.Model):
|
|||
cname = record.contract_name
|
||||
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
||||
cidstr = "%s%s" % (record.project_id,record.client_id)
|
||||
if resstr is None :
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.debug(resstr)
|
||||
self.contract_auto_name = resstr
|
||||
self.contract_auto_id = cidstr
|
||||
if resstr is None :
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.info('Contract_client_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
|
||||
if not self.contract_auto_name:
|
||||
self.contract_auto_name = resstr
|
||||
if not self.contract_auto_id:
|
||||
self.contract_auto_id = cidstr
|
||||
if self.contract_auto_id == "":
|
||||
self.contract_auto_id = cidstr
|
||||
|
||||
@api.onchange('project_id')
|
||||
def _onchange_project_id(self):
|
||||
|
|
@ -298,11 +315,15 @@ class dsscontracts(models.Model):
|
|||
cname = record.contract_name
|
||||
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
||||
cidstr = "%s%s" % (record.project_id,record.client_id)
|
||||
if resstr is None :
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.debug(resstr)
|
||||
self.contract_auto_name = resstr
|
||||
self.contract_auto_id = cidstr
|
||||
if resstr is None :
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.info('project_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
|
||||
if not self.contract_auto_name:
|
||||
self.contract_auto_name = resstr
|
||||
if not self.contract_auto_id:
|
||||
self.contract_auto_id = cidstr
|
||||
if self.contract_auto_id == "":
|
||||
self.contract_auto_id = cidstr
|
||||
|
||||
@api.onchange('contract_name')
|
||||
def _onchange_contract_name(self):
|
||||
|
|
@ -312,10 +333,34 @@ class dsscontracts(models.Model):
|
|||
else:
|
||||
cname = record.contract_name
|
||||
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
||||
if resstr is None :
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.debug(resstr)
|
||||
self.contract_auto_name = resstr
|
||||
cidstr = "%s%s" % (record.project_id, record.client_id)
|
||||
if resstr is None :
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.info('Contract_Name_Change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
|
||||
if not self.contract_auto_name:
|
||||
self.contract_auto_name = resstr
|
||||
if not self.contract_auto_id:
|
||||
self.contract_auto_id = cidstr
|
||||
if self.contract_auto_id == "":
|
||||
self.contract_auto_id = cidstr
|
||||
@api.onchange('contract_auto_id')
|
||||
def _onchange_contract_auto_id(self):
|
||||
for record in self :
|
||||
if record.contract_name == '' :
|
||||
cname = 'unbekannter Kunden'
|
||||
else:
|
||||
cname = record.contract_name
|
||||
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
||||
cidstr = "%s%s" % (record.project_id, record.client_id)
|
||||
if resstr is None:
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.info('Contract_auto_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
|
||||
if not self.contract_auto_name:
|
||||
self.contract_auto_name = resstr
|
||||
if not self.contract_auto_id:
|
||||
self.contract_auto_id = cidstr
|
||||
if self.contract_auto_id == "":
|
||||
self.contract_auto_id = cidstr
|
||||
|
||||
# @api.model
|
||||
# def create(self,vals):
|
||||
|
|
@ -368,6 +413,20 @@ class dsscontracts(models.Model):
|
|||
else:
|
||||
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Kampagne gefunden ')
|
||||
self.ads_last_ad = ds
|
||||
# prüfen ob Contract_autoname
|
||||
resstr = ''
|
||||
if not self.contract_auto_name:
|
||||
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Kein Contract_autoname ')
|
||||
if self.contract_name == '':
|
||||
cname = 'unbekannter Kunden'
|
||||
else:
|
||||
cname = self.contract_name
|
||||
resstr = "%s%s %s" % (self.project_id, self.client_id, cname)
|
||||
if not resstr:
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.debug(resstr)
|
||||
self.contract_auto_name = resstr
|
||||
_logger.info('Click auf Werbekampagne : C_' + str(self.id) + 'A_' + str(ds.id) + ' - Contract_autoname gesetzt '+ str(resstr)+'/'+str(cidstr))
|
||||
# prüfen ob LetzteKampagne medien hat
|
||||
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Suche evtl Medien der Kampagne ')
|
||||
medias = self.env['dss.mediarelations'].search(['&',('contract','=',self.id),('ad','=',ds.id)])
|
||||
|
|
@ -445,12 +504,12 @@ class dsscontracts(models.Model):
|
|||
{ 'field': feld.id, 'contract': self.id, 'project': self.project.id,
|
||||
'field_uuid': feld.uuid, 'ad': kamp.id, 'relname':media.medianame,'mediatype':media.id})
|
||||
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Erstelle Medium : M_'+str(media.id)+' -> '+str(newmedi.id))
|
||||
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Medien evtl erstellt ! NM_'+str(newmedi.id))
|
||||
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Medien evtl erstellt ! ')
|
||||
medias = self.env['dss.mediarelations'].search([('ad','=',kamp.id)])
|
||||
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(kamp.id)+' neue Media '+str(mediaids))
|
||||
kamp.write({'need_media': [(6,0,medias.ids)]})
|
||||
# self.write({'need_media': [(5,0,0)]})
|
||||
# _logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' setze Media '+str(kamp.need_media))
|
||||
# self.write({'need_media': [(5,0,0)]})
|
||||
# _logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' setze Media '+str(kamp.need_media))
|
||||
else:
|
||||
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Medien gefunden !')
|
||||
if not self.werbe_feld_selected:
|
||||
|
|
@ -505,10 +564,51 @@ class dsscontracts(models.Model):
|
|||
'res_id':kampagne.id,
|
||||
'display_name' : 'Änderung zur Werbekampagne '+kampagne.parent_ad.adname,
|
||||
'domain':'[("id","=","context[kampagne_id]")]'
|
||||
}
|
||||
}
|
||||
def setFirstKampagne(self):
|
||||
for record in self:
|
||||
if record.contract_auto_id:
|
||||
record.tokampagne()
|
||||
def setTreeStandardValues(self):
|
||||
for record in self:
|
||||
if record.contract_name == '':
|
||||
cname = 'unbekannter Kunden'
|
||||
else:
|
||||
cname = record.contract_name
|
||||
resstr = "%s%s %s" % (record.project_id, record.client_id, cname)
|
||||
cidstr = "%s%s" % (record.project_id, record.client_id)
|
||||
if resstr is None:
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.info('Set Standard Values : C_' + str(record.id) + ' - ' + str(cidstr) + ' vs. ' + str(
|
||||
record.contract_auto_id) + '/' + str(resstr) + ' vs ' + str(record.contract_auto_name));
|
||||
if not record.contract_auto_name:
|
||||
record.contract_auto_name = resstr
|
||||
if not record.contract_auto_id:
|
||||
record.contract_auto_id = cidstr
|
||||
if record.contract_auto_id == "":
|
||||
record.contract_auto_id = cidstr
|
||||
|
||||
|
||||
def pyaction_view_contract(self):
|
||||
def setStandardValues(self):
|
||||
for record in self:
|
||||
if record.contract_name == '':
|
||||
cname = 'unbekannter Kunden'
|
||||
else:
|
||||
cname = record.contract_name
|
||||
resstr = "%s%s %s" % (record.project_id, record.client_id, cname)
|
||||
cidstr = "%s%s" % (record.project_id, record.client_id)
|
||||
if resstr is None:
|
||||
resstr = 'nicht ermittelbar'
|
||||
_logger.info('Set Standard Values : C_' + str(self.id) + ' - ' + str(cidstr) + ' vs. ' + str(
|
||||
self.contract_auto_id) + '/' + str(resstr) + ' vs ' + str(self.contract_auto_name));
|
||||
if not self.contract_auto_name:
|
||||
self.contract_auto_name = resstr
|
||||
if not self.contract_auto_id:
|
||||
self.contract_auto_id = cidstr
|
||||
if self.contract_auto_id == "":
|
||||
self.contract_auto_id = cidstr
|
||||
|
||||
def pyaction_view_contract(self):
|
||||
view = self.env.ref('DigitalSignage.dss_main_contracts_form')
|
||||
_logger.debug('Click auf Vertrag : '+str(self.id))
|
||||
return {
|
||||
|
|
@ -542,7 +642,7 @@ class dsscontracts(models.Model):
|
|||
|
||||
|
||||
|
||||
class dssmain(models.Model):
|
||||
class dssprojects(models.Model):
|
||||
_name = "dss.projects"
|
||||
_description = "DigitalSignage Projekte"
|
||||
_rec_name = "projektname"
|
||||
|
|
@ -552,6 +652,7 @@ class dssmain(models.Model):
|
|||
projectid = fields.Integer('Projekt ID',tracking=True)
|
||||
color = fields.Char('Color Index',tracking=True)
|
||||
active = fields.Boolean('Active', default=True,tracking=True)
|
||||
invisible = fields.Boolean('Ausgeblendet', default=False,tracking=True)
|
||||
name = fields.Char('Interner Name', required=True,tracking=True)
|
||||
aktstatus = fields.Many2one('dss.projectstate',string='Aktueller Status:',tracking=True)
|
||||
aktstatus_typ = fields.Selection(related='aktstatus.typ')
|
||||
|
|
@ -564,12 +665,22 @@ class dssmain(models.Model):
|
|||
grundsystem_default_adstructure = fields.Many2one(related='grundsystemname.default_adstructure',tracking=True)
|
||||
grundsystemicon5050 = fields.Image(related='grundsystemname.icon_5050')
|
||||
grundsystem_ordner = fields.Char(related='grundsystemname.default_cloud_path')
|
||||
standort = fields.Char('Hauptstandort des Projektes',tracking=True)
|
||||
standort = fields.Char('Beschreibung des Standortes')
|
||||
standort_strasse = fields.Char('Strasse des Projektes',tracking=True)
|
||||
standort_plz = fields.Char('PLZ des Projektes',tracking=True)
|
||||
standort_ort = fields.Char('Ort des Projektes',tracking=True)
|
||||
standort_bundesland = fields.Many2one('res.country.state',string='Bundesland des Projektes',tracking=True)
|
||||
standort_land = fields.Many2one('res.country',string='Land des Projektes',tracking=True)
|
||||
standort_long = fields.Char('Standort Long des Projektes',tracking=True)
|
||||
standort_lati = fields.Char('Standort Lat des Projektes',tracking=True)
|
||||
standort_visible = fields.Boolean('Auf Projekt-Karte sichtbar',tracking=True)
|
||||
vertragsschreiber = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',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)
|
||||
zeiten_on = fields.Datetime('Einschaltzeit',tracking=True)
|
||||
zeiten_off = fields.Datetime('Ausschaltzeit',tracking=True)
|
||||
zeiten_on = fields.Datetime('veraltet',tracking=True)
|
||||
zeiten_off = fields.Datetime('veraltet',tracking=True)
|
||||
zeitenf_on = fields.Float('Einschaltzeit',tracking=True)
|
||||
zeitenf_off = fields.Float('Ausschaltzeit',tracking=True)
|
||||
errichtet_am = fields.Datetime('Errichtungstag',tracking=True)
|
||||
standort_inout = fields.Selection([('indoor','im Gebäude'), ('outdoor','Aussenbereich'), ('semiindoor','Überdachter Aussenbereich'),('Divers','Andere Art')],tracking=True);
|
||||
|
||||
|
|
@ -612,6 +723,45 @@ class dssmain(models.Model):
|
|||
_logger.info("Project " + str(self.id) + " deleted - using standard path")
|
||||
self.cloudlink = dssSettings._get_path_converted(self,self.env['dss.settings'].search([],limit=1).def_project_cloudpath,self)
|
||||
|
||||
def switch_invislbe(self):
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type':'kanban',
|
||||
'view_mode':'kanban,tree',
|
||||
'res_model':'dss.contracts',
|
||||
'target':'current',
|
||||
'context':'{"default_project":'+str(self.id)+',"show_project_update":True}',
|
||||
'res_id':self.id,
|
||||
'display_name' : self.projektname,
|
||||
'domain':'[("project","=",'+str(self.id)+')]'
|
||||
}
|
||||
|
||||
@api.model
|
||||
def _geo_localize(self, street='', zip='', city='', state='', country=''):
|
||||
geo_obj = self.env['base.geocoder']
|
||||
search = geo_obj.geo_query_address(street=street, zip=zip, city=city, state=state, country=country)
|
||||
result = geo_obj.geo_find(search, force_country=country)
|
||||
if result is None:
|
||||
search = geo_obj.geo_query_address(city=city, state=state, country=country)
|
||||
result = geo_obj.geo_find(search, force_country=country)
|
||||
return result
|
||||
|
||||
def dss_geo_localize(self):
|
||||
# We need country names in English below
|
||||
result = self._geo_localize(self.standort_strasse,
|
||||
self.standort_plz,
|
||||
self.standort_ort,
|
||||
self.standort_bundesland.name,
|
||||
self.standort_land.name)
|
||||
|
||||
if result:
|
||||
self.write({
|
||||
'standort_lati': result[0],
|
||||
'standort_long': result[1]
|
||||
})
|
||||
else:
|
||||
partners_not_geo_localized |= partner
|
||||
return True
|
||||
|
||||
class dssgeraetetypen(models.Model):
|
||||
_name = "dss.geraetetypen"
|
||||
|
|
@ -632,6 +782,7 @@ class dssgeraetetypen(models.Model):
|
|||
has_heizung = fields.Boolean('Mit Heizsystem',tracking=True)
|
||||
has_klima = fields.Boolean('Mit Klimasystem',tracking=True)
|
||||
has_fan = fields.Boolean('Mit Ventiltorensystem',tracking=True)
|
||||
has_tuya = fields.Boolean('Mit Tuyasteuerung',tracking=True)
|
||||
|
||||
stromzaehler = fields.Many2one('dss.geraetetypen',tracking=True)
|
||||
stromverbrauch_avg = fields.Integer('Stromverbrauch AVG in W',tracking=True)
|
||||
|
|
@ -681,6 +832,15 @@ class dssgeraetetypen(models.Model):
|
|||
zusatz_integrationen = fields.Many2one('dss.geraetetypen',tracking=True)
|
||||
zusatz_zubehoer = fields.Char('Sonstiges Zubehör',tracking=True)
|
||||
|
||||
tuya_Geraete_uid = fields.Char('Tuya Geräte UID',tracking=True)
|
||||
tuya_Geraete_id = fields.Char('Tuya Geräte ID', tracking=True)
|
||||
|
||||
tuya_can_switch = fields.Boolean('Tuya mit Schalter',tracking=True)
|
||||
tuya_has_powervalue = fields.Boolean('Tuya mit Stromzähler',tracking=True)
|
||||
|
||||
tuya_last_totalpower = fields.Char('Stromzähler Gesamt',tracking=True,readonly=True)
|
||||
tuya_last_lastpower = fields.Char('Stromzähler Aktuell',tracking=True,readonly=True)
|
||||
tuya_last_switchstate = fields.Char('Schalter Aktuell ',tracking=True,readonly=True)
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
|
|
@ -692,6 +852,57 @@ class dssgeraetetypen(models.Model):
|
|||
if syst.grundsystem:
|
||||
syst.grundsystem_kennung = syst.grundsystem.kennung
|
||||
|
||||
def get_value_from_tuyaresult(self,dataset,valuename):
|
||||
result=''
|
||||
_logger.info('Resultanfrage:' + str(dataset)+' Feld : '+str(valuename))
|
||||
for singlepart in dataset:
|
||||
if singlepart:
|
||||
if (singlepart['code'] == valuename):
|
||||
result = singlepart['value']
|
||||
break
|
||||
return result
|
||||
|
||||
def pyaction_tuya_readout(self):
|
||||
_logger.info('Tuya Schaltanfrage : Endpoint - ' + str(dssSettings._get_settingvalue(self,'tuya_endpoint')) + ' AccessID ' + str(dssSettings._get_settingvalue(self,'tuya_access_id')) + ' AccessKEY ' + str(dssSettings._get_settingvalue(self,'tuya_access_key')))
|
||||
openapi = TuyaOpenAPI(dssSettings._get_settingvalue(self,'tuya_endpoint'),dssSettings._get_settingvalue(self,'tuya_access_id'),dssSettings._get_settingvalue(self,'tuya_access_key'))
|
||||
openapi.connect()
|
||||
switchcode = eval('True')
|
||||
commands = {'commands':[{'code':'switch','value': switchcode}]}
|
||||
# result = openapi.post('/v1.0/iot-03/devices/{}/commands'.format(self.tuya_Geraete_id),commands)
|
||||
result = openapi.get('/v1.0/iot-03/devices/{}/status'.format(self.tuya_Geraete_id))
|
||||
_logger.info('Erfolg ? :' + str(result['success']))
|
||||
success = result['success']
|
||||
if success:
|
||||
_logger.info('Erfolgreiche Anfrage :' + str(result['result']))
|
||||
if self.tuya_has_powervalue:
|
||||
self.tuya_last_totalpower = self.get_value_from_tuyaresult(result['result'],'forward_energy_total')
|
||||
self.tuya_last_lastpower = self.get_value_from_tuyaresult(result['result'],'phase_a')
|
||||
if self.tuya_can_switch:
|
||||
self.tuya_last_switchstate = self.get_value_from_tuyaresult(result['result'],'switch')
|
||||
else:
|
||||
_logger.info('Fehlerhafte Anfrage :' + str(result['msg']))
|
||||
|
||||
def pyaction_tuya_switch(self):
|
||||
_logger.info('Tuya Schaltanfrage : Endpoint - ' + str(
|
||||
dssSettings._get_settingvalue(self, 'tuya_endpoint')) + ' AccessID ' + str(
|
||||
dssSettings._get_settingvalue(self, 'tuya_access_id')) + ' AccessKEY ' + str(
|
||||
dssSettings._get_settingvalue(self, 'tuya_access_key')))
|
||||
openapi = TuyaOpenAPI(dssSettings._get_settingvalue(self, 'tuya_endpoint'),
|
||||
dssSettings._get_settingvalue(self, 'tuya_access_id'),
|
||||
dssSettings._get_settingvalue(self, 'tuya_access_key'))
|
||||
openapi.connect()
|
||||
commands = {'commands': [{'code': 'switch', 'value': not self.tuya_last_switchstate}]}
|
||||
# result = openapi.post('/v1.0/iot-03/devices/{}/commands'.format(self.tuya_Geraete_id),commands)
|
||||
result = openapi.post('/v1.0/iot-03/devices/{}/commands'.format(self.tuya_Geraete_id),commands)
|
||||
_logger.info('Erfolg ? :' + str(result['success']))
|
||||
success = result['success']
|
||||
if success:
|
||||
_logger.info('Erfolgreiche Anfrage :' + str(result['result']))
|
||||
self.pyaction_tuya_readout()
|
||||
else:
|
||||
_logger.info('Fehlerhafte Anfrage :' + str(result['msg']))
|
||||
|
||||
|
||||
class dsssystemtypen(models.Model):
|
||||
|
||||
|
||||
|
|
@ -756,6 +967,7 @@ class dsssystems(models.Model):
|
|||
|
||||
grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für")
|
||||
grundsystem_kennung = fields.Char(string='Kennung', related='grundsystem.kennung')
|
||||
standort = fields.Char('Hauptstandort des Systems',tracking=True)
|
||||
|
||||
|
||||
farbe = fields.Integer('Grundfarbe')
|
||||
|
|
@ -879,13 +1091,35 @@ class dsseventdays(models.Model):
|
|||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
eventname = fields.Char('Eventname', required=True)
|
||||
description = fields.Text('EventBeschreibung')
|
||||
eventdate = fields.Date('EventDatum', required=True)
|
||||
eventstartdate = fields.Datetime('EventDatum', required=True)
|
||||
eventenddate = fields.Datetime('EventDatum', required=True)
|
||||
color = fields.Char(string='Color Index')
|
||||
username = fields.Many2one('res.users',string="Kalendercontact")
|
||||
calendarevent = fields.Many2one('calendar.event')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
@api.model
|
||||
def create(self,vals):
|
||||
result = super().create(vals)
|
||||
return result
|
||||
|
||||
def pydocalendarEntry(self):
|
||||
event = {
|
||||
'start': self.eventstartdate.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'stop': self.eventenddate.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'duration': 24,
|
||||
'allday': False,
|
||||
'partner_ids': (4,self.username.partner_id.id),
|
||||
'name': self.eventname,
|
||||
'description': self.description,
|
||||
'user_id': self.username.id,
|
||||
}
|
||||
_logger.debug('linking new event ' + str(event) + ' ' + str(self.uuid))
|
||||
self.calendarevent=self.env['calendar.event'].create(event)
|
||||
|
||||
|
||||
|
||||
class dsstodostatus(models.Model):
|
||||
|
|
@ -920,7 +1154,7 @@ class dssadvertisefields(models.Model):
|
|||
_name = "dss.advertisefields"
|
||||
_description = "DigitalSignage Werbefelder"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "feldname"
|
||||
_rec_name = "auto_feldname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date())
|
||||
|
|
@ -928,11 +1162,15 @@ class dssadvertisefields(models.Model):
|
|||
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
|
||||
user_lastedit = fields.Char('Änderungsuser')
|
||||
issaved = fields.Boolean('ist gespeichert')
|
||||
|
||||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
auto_feldname = fields.Char('Projekt_Feldname', required=True)
|
||||
display = fields.Char('Designname')
|
||||
feldname = fields.Char('Feldname', required=True)
|
||||
project = fields.Many2one('dss.projects' , string='Project', store=True)
|
||||
project_id = fields.Integer(related='project.projectid', string='Project ID')
|
||||
contract = fields.Many2one('dss.contracts' , string='Vertrag', store=True)
|
||||
contract_project_id = fields.Integer(related='contract.project_id', string='Project ID')
|
||||
color_used = fields.Char(string='Color Index')
|
||||
color_unused = fields.Char(string='Color Index')
|
||||
mediastructure = fields.Many2one('dss.adstructures',string='Feldaufbau',tracking=True)
|
||||
|
|
@ -947,6 +1185,23 @@ class dssadvertisefields(models.Model):
|
|||
return str(self.env.user.name)
|
||||
|
||||
|
||||
@api.onchange('project')
|
||||
def _onchange_project(self):
|
||||
autoid = ""
|
||||
autoid = str(self.project_id)+"_"+str(self.feldname)
|
||||
self.auto_feldname =autoid
|
||||
|
||||
@api.onchange('contract')
|
||||
def _onchange_contract(self):
|
||||
autoid = ""
|
||||
_logger.info('Contract Änderung prüfe Projekte !' + str(self.project_id) + ' / ' + str(self.contract_project_id))
|
||||
if not self.project_id == self.contract_project_id:
|
||||
_logger.info('Contract Änderung unterschiedliche Projekte !'+str(self.project_id)+' / '+str(self.contract_project_id))
|
||||
raise ValidationError(_("Gewähltes Projekt und Projekt des Vertrages sind unterschiedlich !"))
|
||||
else:
|
||||
autoid = str(self.project_id)+"_"+str(self.feldname)
|
||||
self.auto_feldname =autoid
|
||||
|
||||
@api.onchange('mediastructure')
|
||||
def _onchange_mediastructure_id(self):
|
||||
restr = 'keine'
|
||||
|
|
@ -1232,8 +1487,8 @@ class dsscontractads(models.Model):
|
|||
parent_ad = fields.Many2one('dss.ads' , string='UrsprungsWerbung', store=True)
|
||||
parent_ad_uuid = fields.Char(related='parent_ad.uuid')
|
||||
description = fields.Text('Beschreibung',track_visibility='onchange')
|
||||
amount = fields.Float('Extrakosten')
|
||||
order = fields.Integer('Reihenfolge')
|
||||
amount = fields.Float('Extrakosten',track_visibility='onchange',tracking=True)
|
||||
order = fields.Integer('Reihenfolge',track_visibility='onchange',tracking=True)
|
||||
|
||||
# need_media = fields.Many2many('dss.mediarelations','ad',string='Medien')
|
||||
need_media = fields.One2many('dss.mediarelations','ad',string='Medien')
|
||||
|
|
@ -1405,3 +1660,120 @@ class dsscontractads(models.Model):
|
|||
text = self.env['dss.texts'].search([('text_id','=',tid)], limit=1)
|
||||
if text:
|
||||
self.write({'description':text.description})
|
||||
|
||||
|
||||
class dssscreendesign(models.Model):
|
||||
_name = "dss.screendesign"
|
||||
_description = "DigitalSignage Screen Designer"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "screenname"
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date())
|
||||
date_lastedit = fields.Date('Änderungsdatum')
|
||||
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
|
||||
user_lastedit = fields.Char('Änderungsuser')
|
||||
|
||||
screenname = fields.Char('Bildschirmname',track_visibility='onchange',tracking=True)
|
||||
fields = fields.One2many('dss.advertisefields','display',string='Werbefelder',tracking=True)
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
def _default_create_date(self):
|
||||
return str(date.today())
|
||||
|
||||
def _default_create_user(self):
|
||||
return str(self.env.user.name)
|
||||
|
||||
@api.model
|
||||
def get_data(self):
|
||||
outlist = {'uuid' : 2222}
|
||||
return outlist
|
||||
|
||||
class dsstriggertypes(models.Model):
|
||||
_name = "dss.triggertypes"
|
||||
_description = "DigitalSignage Trigger Typen"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "triggername"
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date())
|
||||
date_lastedit = fields.Date('Änderungsdatum')
|
||||
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
|
||||
user_lastedit = fields.Char('Änderungsuser')
|
||||
|
||||
triggername = fields.Char('Triggername',track_visibility='onchange',tracking=True)
|
||||
triggertyp = fields.Selection([('FIELD_A','Feldänderung allgemein'),('FIELD_S','Feldänderung spezifisch'),('FIELD_K','Feldwert berechnet'),('MANUAL','Menuell ausgelösst')],'Triggertyp',track_visibility='onchange',tracking=True)
|
||||
trigger_table = fields.Many2one('ir.model','Nutzbar in',help='Für welche Daten ist dieser Tigger gültig ?',track_visibility='onchange',tracking=True)
|
||||
trigger_field = fields.Many2one('ir.model.fields', help='Feldname in der Tabelle',track_visibility='onchange',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',track_visibility='onchange',tracking=True)
|
||||
trigger_value = fields.Char('Feldwert für Trigger',track_visibility='onchange',tracking=True)
|
||||
trigger_Aktionen = fields.Many2many('dss.triggeractions',string='Aktionen bei auslösen des Triggers',track_visibility='onchange',tracking=True)
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
def _default_create_date(self):
|
||||
return str(date.today())
|
||||
|
||||
def _default_create_user(self):
|
||||
return str(self.env.user.name)
|
||||
|
||||
class dsstriggertypes(models.Model):
|
||||
_name = "dss.triggeractions"
|
||||
_description = "DigitalSignage Trigger Aktionen"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "triggeractionname"
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date())
|
||||
date_lastedit = fields.Date('Änderungsdatum')
|
||||
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
|
||||
user_lastedit = fields.Char('Änderungsuser')
|
||||
|
||||
triggeractionname = fields.Char('Triggeraktionname',track_visibility='onchange',tracking=True)
|
||||
triggeractiontyp = fields.Selection([('EMAIL','EMail senden'),('ACTIV','Aufgabe erzeugen'),('DSEDIT','Datensatz ändern'),('TUYA','Tuya Aktion auslössen')],'Aktionstyp',track_visibility='onchange',tracking=True)
|
||||
email_getfrom = fields.Selection([('FIX','Email fest hinterlegt'),('DATA','Email in Feld hinterlegt')],'Emailadresse von',track_visibility='onchange',tracking=True)
|
||||
email_fix_email_sender = fields.Many2one('res.partner','Absender',help='Email Sender Adresse der Aktion',track_visibility='onchange',tracking=True)
|
||||
email_fix_email = fields.Many2one('res.partner','Empfänger',help='Email Emüfänger Adresse für Benachrichtigung/Triggeraktion',track_visibility='onchange',tracking=True)
|
||||
email_data_table = fields.Many2one('ir.model','Nutzbar in',help='Für welche Daten ist diese Aktion gültig ?',track_visibility='onchange',tracking=True)
|
||||
email_data_field = fields.Many2one('ir.model.fields', help='Feldname in der Tabelle',track_visibility='onchange',tracking=True)
|
||||
email_template = fields.Many2one('mail.template','Emailvorlage',track_visibility='onchange',tracking=True)
|
||||
|
||||
field = fields.Char('Feldname',help='Feldname in o.g. Tebelle.',track_visibility='onchange',tracking=True)
|
||||
type_s = fields.Char('Feldwertoperator',track_visibility='onchange',tracking=True)
|
||||
value_s = fields.Char('Feldwert für Trigger',track_visibility='onchange',tracking=True)
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
def _default_create_date(self):
|
||||
return str(date.today())
|
||||
|
||||
def _default_create_user(self):
|
||||
return str(self.env.user.name)
|
||||
|
||||
class dsstriggertypes(models.Model):
|
||||
_name = "dss.triggergroups"
|
||||
_description = "DigitalSignage Trigger Gruppen"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "triggergroupname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date())
|
||||
date_lastedit = fields.Date('Änderungsdatum')
|
||||
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
|
||||
user_lastedit = fields.Char('Änderungsuser')
|
||||
|
||||
triggergroupname = fields.Char('Trigger Gruppenname',track_visibility='onchange',tracking=True)
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
def _default_create_date(self):
|
||||
return str(date.today())
|
||||
|
||||
def _default_create_user(self):
|
||||
return str(self.env.user.name)
|
||||
|
|
|
|||
|
|
@ -17,4 +17,9 @@
|
|||
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_tuya_user" model="res.groups">
|
||||
<field name="name">Standarduser mit Tuya Berechtigung</field>
|
||||
<field name="category_id" ref="DigitalSignage.dss_module"/>
|
||||
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -21,3 +21,7 @@ digitalsignage_dss_mediarelations_group_user,access.dss.mediarelations,model_dss
|
|||
digitalsignage_dss_advertisefields_group_user,access.dss.advertisefields,model_dss_advertisefields,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_import_group_user,access.dss.import,model_dss_import,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_settings_group_user,access.dss.settings,model_dss_settings,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_screendesign_group_user,access.dss.screendesign,model_dss_screendesign,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_triggertypes_group_user,access.dss.triggertypes,model_dss_triggertypes,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_triggeractions_group_user,access.dss.triggeractions,model_dss_triggeractions,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_triggergroups_group_user,access.dss.triggergroups,model_dss_triggergroups,base.group_user,1,1,1,1
|
||||
|
|
|
|||
|
|
|
@ -16,4 +16,9 @@
|
|||
.openerp .system_icon_small >img {
|
||||
height:90px;
|
||||
width:90px;
|
||||
}
|
||||
|
||||
.dss-smallbutton >img {
|
||||
height:20px;
|
||||
width:20px;
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
#rcorners1 {
|
||||
border-radius: 25px;
|
||||
background: #73AD21;
|
||||
padding: 20px;
|
||||
width: 200px;
|
||||
height: 150px;
|
||||
}
|
||||
.bottom-bar {
|
||||
padding: 10px;
|
||||
position: fixed;
|
||||
top: 100px;
|
||||
left: 0;
|
||||
width: 20%;
|
||||
height: 90%;
|
||||
background: #333333;
|
||||
color: #ffffff;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.25);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.bottom-bar__header {
|
||||
max-width: 500px;
|
||||
height:50px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.bottom-bar__header > * {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.bottom-bar__text {
|
||||
font-family:arial;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.bottom-bar__close {
|
||||
background: none;
|
||||
border: none;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.bottom-bar__content_2 {
|
||||
background-color:#BBB;
|
||||
margin: 0 auto;
|
||||
padding: 0 auto;
|
||||
max-width: 500px;
|
||||
height:80%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.bottom-bar__content_2 > * {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
odoo.define('dss.screenDesigner', function (require) {
|
||||
"use strict";
|
||||
|
||||
var AbstractAction = require('web.AbstractAction');
|
||||
var core = require('web.core');
|
||||
var field_utils = require('web.field_utils');
|
||||
var QWeb = core.qweb;
|
||||
var web_client = require('web.web_client');
|
||||
var ajax = require('web.ajax');
|
||||
var _t = core._t;
|
||||
var rpc = require('web.rpc');
|
||||
var self = this;
|
||||
var session = require('web.session');
|
||||
|
||||
var screenDesigner = AbstractAction.extend({
|
||||
contentTemplate: 'dssscreenDesignerView',
|
||||
init: function(parent, context) {
|
||||
this._super(parent, context);
|
||||
this.dashboard_templates = ['MainSection'];
|
||||
},
|
||||
start: function() {
|
||||
var self = this;
|
||||
this.set("title", 'Dashboard');
|
||||
return this._super().then(function() {
|
||||
self.render_dashboards();
|
||||
});
|
||||
},
|
||||
willStart: function(){
|
||||
var self = this;
|
||||
return this._super()
|
||||
},
|
||||
render_dashboards: function() {
|
||||
var self = this;
|
||||
this.fetch_data()
|
||||
var templates = []
|
||||
var templates = ['MainSection'];
|
||||
_.each(templates, function(template) {
|
||||
self.$('.o_hr_dashboard').append(QWeb.render(template, {widget: self}))
|
||||
});
|
||||
},
|
||||
fetch_data: function() {
|
||||
var self = this
|
||||
// fetch data to the tiles
|
||||
var def1 = this._rpc({
|
||||
model: 'dss.screendesign',
|
||||
method: "get_data",
|
||||
})
|
||||
.then(function (result) {
|
||||
$('#product_templates').append('<span>' + result.uuid + '</span>');
|
||||
$('#variants_count').append('<span>' + result.uuid + '</span>');
|
||||
$('#products_storable').append('<span>' + result.uuid + '</span>');
|
||||
$('#product_consumable').append('<span>' + result.uuid + '</span>');
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
core.action_registry.add('dss_screenDesigner_js_action', screenDesigner);
|
||||
|
||||
return screenDesigner;
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="dssscreenDesignerView">
|
||||
<div class="o_action o_view_controller o_kanban_view o_hr_dashboard">
|
||||
<div class="bottom-bar ms-4" data-bottombar="cookieMessage" id="rcorner1">
|
||||
<div class="bottom-bar__header">
|
||||
<div class="bottom-bar__text">
|
||||
<p class="bottom-bar__text">Feldübersicht</p>
|
||||
</div>
|
||||
<button class="bottom-bar__close" type="button" data-bottombar-close="cookieMessage">×</button>
|
||||
</div>
|
||||
<div class="bottom-bar__content_2">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="MainSection">
|
||||
<section class="ScreenDesigner_Main" id="main_section">
|
||||
<div class="col-sm-12 mb-4">
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-12 col-md-8 ms-4 mt-4">
|
||||
<h2 class="section-header">Feld - Designer</h2>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Tiles -->
|
||||
<span id="templates">
|
||||
<div id="product_templates"/>
|
||||
</span>
|
||||
</div>
|
||||
</section>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
379
views/.mc.menu
379
views/.mc.menu
|
|
@ -1,379 +0,0 @@
|
|||
shell_patterns=0
|
||||
|
||||
##############################################################################
|
||||
# %% The % character
|
||||
# %f The current file (if non-local vfs, file will be copied locally and
|
||||
# %f will be full path to it)
|
||||
# %p The current file
|
||||
# %d The current working directory
|
||||
# %s "Selected files"; the tagged files if any, otherwise the current file
|
||||
# %t Tagged files
|
||||
# %u Tagged files (and they are untagged on return from expand_format)
|
||||
# %view Runs the commands and pipes standard output to the view command
|
||||
# If %view is immediately followed by '{', recognize keywords
|
||||
# ascii, hex, nroff and unform
|
||||
#
|
||||
# If the format letter is in uppercase, it refers to the other panel
|
||||
#
|
||||
# With a number followed the % character you can turn quoting on (default)
|
||||
# and off. For example:
|
||||
# %f quote expanded macro
|
||||
# %1f ditto
|
||||
# %0f don't quote expanded macro
|
||||
##############################################################################
|
||||
|
||||
+ ! t t
|
||||
@ Do something on the current file
|
||||
CMD=%{Enter command}
|
||||
$CMD %f
|
||||
|
||||
+ t t
|
||||
@ Do something on the tagged files
|
||||
CMD=%{Enter command}
|
||||
for i in %t ; do
|
||||
$CMD "$i"
|
||||
done
|
||||
|
||||
0 Edit a bug report and send it to root
|
||||
I=`mktemp "${MC_TMPDIR:-/tmp}/mail.XXXXXX"` || exit 1
|
||||
${EDITOR-vi} "$I"
|
||||
test -r "$I" && mail root < "$I"
|
||||
rm -f "$I"
|
||||
|
||||
=+ f \.1$ | f \.3$ | f \.4$ | f \.5$ | f \.6$ | f \.7$ | f \.8$ | f \.man$ & t r
|
||||
1 Display the file with roff -man
|
||||
%view{ascii,nroff} roff -c -Tlatin1 -mandoc %f
|
||||
|
||||
2 Call the info hypertext browser
|
||||
info
|
||||
|
||||
= t d
|
||||
3 Compress the current subdirectory (tar.gz)
|
||||
Pwd=`basename %d /`
|
||||
echo -n "Name of the compressed file (without extension) [$Pwd]: "
|
||||
read tar
|
||||
[ "$tar"x = x ] && tar="$Pwd"
|
||||
cd .. && \
|
||||
tar cf - "$Pwd" | gzip -f9 > "$tar.tar.gz" && \
|
||||
echo "../$tar.tar.gz created."
|
||||
|
||||
4 Compress the current subdirectory (tar.bz2)
|
||||
Pwd=`basename %d /`
|
||||
echo -n "Name of the compressed file (without extension) [$Pwd]: "
|
||||
read tar
|
||||
[ "$tar"x = x ] && tar="$Pwd"
|
||||
cd .. && \
|
||||
tar cf - "$Pwd" | bzip2 -f > "$tar.tar.bz2" && \
|
||||
echo "../$tar.tar.bz2 created."
|
||||
|
||||
5 Compress the current subdirectory (tar.7z)
|
||||
Pwd=`basename %d /`
|
||||
echo -n "Name of the compressed file (without extension) [$Pwd]: "
|
||||
read tar
|
||||
[ "$tar"x = x ] && tar="$Pwd"
|
||||
cd .. && \
|
||||
tar cf - "$Pwd" | 7za a -si "$tar.tar.7z" && \
|
||||
echo "../$tar.tar.7z created."
|
||||
|
||||
6 Compress the current subdirectory (tar.xz)
|
||||
Pwd=`basename %d /`
|
||||
echo -n "Name of the compressed file (without extension) [$Pwd]: "
|
||||
read tar
|
||||
[ "$tar"x = x ] && tar="$Pwd"
|
||||
cd .. && \
|
||||
tar cf - "$Pwd" | xz -f > "$tar.tar.xz" && \
|
||||
echo "../$tar.tar.xz created."
|
||||
|
||||
7 Compress the current subdirectory (tar.zst)
|
||||
Pwd=`basename %d /`
|
||||
echo -n "Name of the compressed file (without extension) [$Pwd]: "
|
||||
read tar
|
||||
[ "$tar"x = x ] && tar="$Pwd"
|
||||
cd .. && \
|
||||
tar cf - "$Pwd" | zstd -f > "$tar.tar.zst" && \
|
||||
echo "../$tar.tar.zst created."
|
||||
|
||||
= f \.c$ & t r
|
||||
+ f \.c$ & t r & ! t t
|
||||
c Compile and link current .c file
|
||||
make "`basename %f .c`" 2>/dev/null || cc -O -o "`basename %f .c`" %f
|
||||
|
||||
+ t r & ! t t
|
||||
a Append file to opposite
|
||||
cat %f >> %D/%f
|
||||
|
||||
+ t t
|
||||
A Append files to opposite files
|
||||
for i in %t ; do
|
||||
cat "$i" >> %D/"$i"
|
||||
done
|
||||
|
||||
+ t r & ! t t
|
||||
d Delete file if a copy exists in the other directory.
|
||||
if [ %d = %D ]; then
|
||||
echo "The two directories must be different."
|
||||
exit 1
|
||||
fi
|
||||
if [ -f %D/%f ]; then # if two of them, then
|
||||
if cmp -s %D/%f %f; then
|
||||
rm %f && echo %f": DELETED."
|
||||
else
|
||||
echo %f" and "%D/%f" differ: NOT deleted."
|
||||
echo -n "Press RETURN "
|
||||
read key
|
||||
fi
|
||||
else
|
||||
echo %f": No copy in "%D/%f": NOT deleted."
|
||||
fi
|
||||
|
||||
+ t t
|
||||
D Delete tagged files if a copy exists in the other directory.
|
||||
if [ %d = %D ]; then
|
||||
echo "The two directores must be different."
|
||||
exit 1
|
||||
fi
|
||||
for i in %t ; do
|
||||
if [ -f %D/"$i" ]; then
|
||||
SUM1=`sum "$i"`
|
||||
SUM2=`sum %D/"$i"`
|
||||
if [ "$SUM1" = "$SUM2" ]; then
|
||||
rm "$i" && echo "${i}: DELETED."
|
||||
else
|
||||
echo "$i and "%D"/$i differ: NOT deleted."
|
||||
fi
|
||||
else
|
||||
echo "$i has no copy in "%D": NOT deleted."
|
||||
fi
|
||||
done
|
||||
|
||||
m View manual page
|
||||
MAN=%{Enter manual name}
|
||||
%view{ascii,nroff} MANROFFOPT='-c -Tlatin1' MAN_KEEP_FORMATTING=1 man -P cat "$MAN"
|
||||
|
||||
= f \.gz$ & t r
|
||||
+ ! t t
|
||||
n Inspect gzip'ed newsbatch file
|
||||
dd if=%f bs=1 skip=12 | zcat | ${PAGER-more}
|
||||
# assuming the cunbatch header is 12 bytes long.
|
||||
|
||||
= t r &
|
||||
+ ! t t
|
||||
h Strip headers from current newsarticle
|
||||
CHECK=`awk '{print $1 ; exit}' %f` 2>/dev/null
|
||||
case "$CHECK" in
|
||||
Newsgroups:|Path:)
|
||||
I=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1
|
||||
cp %f "$I" && sed '/^'"$CHECK"' /,/^$/d' "$I" > %f
|
||||
[ "$?" = "0" ] && rm "$I"
|
||||
echo %f": header removed."
|
||||
;;
|
||||
*)
|
||||
echo %f" is not a news article."
|
||||
;;
|
||||
esac
|
||||
|
||||
+ t t
|
||||
H Strip headers from the marked newsarticles
|
||||
for i in %t ; do
|
||||
CHECK=`awk '{print $1 ; exit}' "$i"` 2>/dev/null
|
||||
WFILE=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1
|
||||
case "$CHECK" in
|
||||
Newsgroups:|Path:)
|
||||
cp "$i" "$WFILE" && sed '/^'"$CHECK"' /,/^$/d' "$WFILE" > "$i"
|
||||
if [ "$?" = "0" ]; then
|
||||
rm "$WFILE"; echo "$i header removed. OK."
|
||||
else
|
||||
echo "Oops! Please check $i against $WFILE."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "$i skipped: Not a news article."
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
= t r
|
||||
+ ! t t
|
||||
r Copy file to remote host
|
||||
echo -n "To which host?: "
|
||||
read Host
|
||||
echo -n "To which directory on $Host?: "
|
||||
read Dir
|
||||
rcp -p %f "${Host}:${Dir}"
|
||||
|
||||
+ t t
|
||||
R Copy files to remote host (no error checking)
|
||||
echo -n "Copy files to which host?: "
|
||||
read Host
|
||||
echo -n "To which directory on $Host? :"
|
||||
read Dir
|
||||
rcp -pr %u "${Host}:${Dir}"
|
||||
|
||||
= f \.tex$ & t r
|
||||
+ f \.tex$ & t r & ! t t
|
||||
t Run latex on file and show it with xdvi
|
||||
latex %f && xdvi "`basename %f .tex`".dvi
|
||||
|
||||
=+ f ^part | f ^Part | f uue & t r
|
||||
+ t t
|
||||
U Uudecode marked news articles (needs work)
|
||||
(
|
||||
for i in %t ; do # strip headers
|
||||
FIRST=`awk '{print $1 ; exit}' "$i"`
|
||||
cat "$i" | sed '/^'"$FIRST"' /,/^$/d'
|
||||
done
|
||||
) | sed '/^$/d' | sed -n '/^begin 6/,/^end$/p' | uudecode
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "Cannot decode "%t"."
|
||||
fi
|
||||
echo "Please test the output file before deleting anything."
|
||||
|
||||
=+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.zst | f \.tar\.Z$ | f \.tar\.bz2$ & t rl
|
||||
x Extract the contents of a compressed tar file
|
||||
unset PRG
|
||||
case %f in
|
||||
*.tar.7z) PRG="7za e -so";;
|
||||
*.tar.bz2) PRG="bunzip2 -c";;
|
||||
*.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z) PRG="gzip -dc";;
|
||||
*.tar.lz) PRG="lzip -dc";;
|
||||
*.tar.lz4) PRG="lz4 -dc";;
|
||||
*.tar.lzma) PRG="lzma -dc";;
|
||||
*.tar.xz) PRG="xz -dc";;
|
||||
*.tar.zst) PRG="zstd -dc";;
|
||||
*) exit 1;;
|
||||
esac
|
||||
$PRG %f | tar xvf -
|
||||
|
||||
= t r
|
||||
+ ! t t
|
||||
y Gzip or gunzip current file
|
||||
unset DECOMP
|
||||
case %f in
|
||||
*.gz|*.[zZ]) DECOMP=-d;;
|
||||
esac
|
||||
# Do *not* add quotes around $DECOMP!
|
||||
gzip $DECOMP -v %f
|
||||
|
||||
+ t t
|
||||
Y Gzip or gunzip tagged files
|
||||
for i in %t ; do
|
||||
unset DECOMP
|
||||
case "$i" in
|
||||
*.gz|*.[zZ]) DECOMP=-d;;
|
||||
esac
|
||||
gzip $DECOMP -v "$i"
|
||||
done
|
||||
|
||||
+ ! t t
|
||||
b Bzip2 or bunzip2 current file
|
||||
unset DECOMP
|
||||
case %f in
|
||||
*.bz2) DECOMP=-d;;
|
||||
esac
|
||||
bzip2 $DECOMP -v %f
|
||||
|
||||
+ t t
|
||||
B Bzip2 or bunzip2 tagged files
|
||||
for i in %t ; do
|
||||
unset DECOMP
|
||||
case "$i" in
|
||||
*.bz2) DECOMP=-d;;
|
||||
esac
|
||||
bzip2 $DECOMP -v "$i"
|
||||
done
|
||||
|
||||
+ f \.tar.gz$ | f \.tgz$ | f \.tpz$ | f \.tar.Z$ | f \.tar.z$ | f \.tar.bz2$ | f \.tar.F$ & t r & ! t t
|
||||
z Extract compressed tar file to subdirectory
|
||||
unset D
|
||||
set gzip -cd
|
||||
case %f in
|
||||
*.tar.F) D=`basename %f .tar.F`; set freeze -dc;;
|
||||
*.tar.Z) D=`basename %f .tar.Z`;;
|
||||
*.tar.bz2) D=`basename %f .tar.bz2`; set bunzip2 -c;;
|
||||
*.tar.gz) D=`basename %f .tar.gz`;;
|
||||
*.tar.z) D=`basename %f .tar.z`;;
|
||||
*.tgz) D=`basename %f .tgz`;;
|
||||
*.tpz) D=`basename %f .tpz`;;
|
||||
esac
|
||||
mkdir "$D"; cd "$D" && ("$1" "$2" ../%f | tar xvf -)
|
||||
|
||||
+ t t
|
||||
Z Extract compressed tar files to subdirectories
|
||||
for i in %t ; do
|
||||
set gzip -dc
|
||||
unset D
|
||||
case "$i" in
|
||||
*.tar.F) D=`basename "$i" .tar.F`; set freeze -dc;;
|
||||
*.tar.Z) D=`basename "$i" .tar.Z`;;
|
||||
*.tar.bz2) D=`basename "$i" .tar.bz2`; set bunzip2 -c;;
|
||||
*.tar.gz) D=`basename "$i" .tar.gz`;;
|
||||
*.tar.z) D=`basename "$i" .tar.z`;;
|
||||
*.tgz) D=`basename "$i" .tgz`;;
|
||||
*.tpz) D=`basename "$i" .tpz`;;
|
||||
esac
|
||||
mkdir "$D"; (cd "$D" && "$1" "$2" "../$i" | tar xvf -)
|
||||
done
|
||||
|
||||
+ f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & ! t t
|
||||
c Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2
|
||||
unset D
|
||||
unset EXT
|
||||
case %f in
|
||||
*.Z) EXT=Z;;
|
||||
*.bz2) EXT=bz2;;
|
||||
*.gz) EXT=gz;;
|
||||
*.tgz) EXT=tgz;;
|
||||
*.tpz) EXT=tpz;;
|
||||
*.z) EXT=z;;
|
||||
esac
|
||||
case "$EXT" in
|
||||
bz2|Z|gz|z) D=`basename %f ."$EXT"`;;
|
||||
tgz|tpz) D=`basename %f ."$EXT"`.tar;;
|
||||
esac
|
||||
if [ "$EXT" = "bz2" ]; then
|
||||
bunzip2 -v %f
|
||||
gzip -f9 -v "$D"
|
||||
else
|
||||
gunzip -v %f
|
||||
bzip2 -v "$D"
|
||||
fi
|
||||
|
||||
+ t t
|
||||
C Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2
|
||||
for i in %t ; do
|
||||
unset D
|
||||
unset EXT
|
||||
case "$i" in
|
||||
*.Z) EXT=Z;;
|
||||
*.bz2) EXT=bz2;;
|
||||
*.gz) EXT=gz;;
|
||||
*.tgz) EXT=tgz;;
|
||||
*.tpz) EXT=tpz;;
|
||||
*.z) EXT=z;;
|
||||
esac
|
||||
case "$EXT" in
|
||||
bz2|Z|gz|z) D=`basename "$i" ."$EXT"`;;
|
||||
tgz|tpz) D=`basename "$i" ."$EXT"`.tar;;
|
||||
esac
|
||||
if [ "$EXT" = "bz2" ]; then
|
||||
bunzip2 -v "$i"
|
||||
gzip -f9 -v "$D"
|
||||
else
|
||||
gunzip -v "$i"
|
||||
bzip2 -v "$D"
|
||||
fi
|
||||
done
|
||||
|
||||
+ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh
|
||||
o Open next a free console
|
||||
open -s -- sh
|
||||
|
||||
+ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh
|
||||
O Odoo Refresh
|
||||
sh /root/refresh_odoo.sh
|
||||
|
||||
+ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh
|
||||
G git push
|
||||
git push -u origin main
|
||||
|
||||
|
||||
|
|
@ -27,8 +27,9 @@
|
|||
<group name="basethings">
|
||||
<field name="feldname" string="Feldname"/>
|
||||
<field name="project" string="Projekt"/>
|
||||
<field name="auto_feldname" string="Projekt_Feld" readonly="1"/>
|
||||
<field name="contract" string="Vertrag"/>
|
||||
<div colspan="2" style="font-color:#E00000;"><p>Die Struktur kann erst nach Speichern der Grunddaten eingerichtet werden !</p></div>
|
||||
<div colspan="2" style="font-color:#E00000;"><p>Die Struktur kann erst nach Speichern der Grunddaten eingerichtet werden !</p></div>
|
||||
<field name="mediastructure" attrs="{'invisible': [('issaved','!=',True)]}" />
|
||||
<field name="color_used" widget="color"/>
|
||||
<field name="color_unused" widget="color"/>
|
||||
|
|
@ -36,6 +37,7 @@
|
|||
</group>
|
||||
<notebook>
|
||||
<page name="informations" string="Aufbau">
|
||||
<group>
|
||||
<field name="mediastructure"/>
|
||||
<field name="mediastructure_medias">
|
||||
<tree string="Struktur" editable="False" create="False">
|
||||
|
|
@ -44,11 +46,16 @@
|
|||
<field name="description"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</page>
|
||||
<page name="informations" string="Aufbau">
|
||||
<field name="issaved" string="gespeichert"/>
|
||||
<field name="date_create" string="Erstellt am"/>
|
||||
<field name="user_create" string="Erstellt am"/>
|
||||
<group>
|
||||
<field name="issaved" string="gespeichert"/>
|
||||
<field name="date_create" string="Erstellt am"/>
|
||||
<field name="user_create" string="Erstellt am"/>
|
||||
<field name="auto_feldname"/>
|
||||
<field name="display"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
|
|
|
|||
|
|
@ -23,8 +23,28 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_project_contracts_tree" model="ir.ui.view">
|
||||
<field name="name">dss_project_contracts_tree</field>
|
||||
<field name="model">dss.contracts</field>
|
||||
<field name="priority" eval="17"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Vertragsuebersicht" editable="bottom" multi_edit="1" edit="1" default_order="contract_id">
|
||||
<field name="contract_auto_name"/>
|
||||
<field name="contract_auto_id"/>
|
||||
<field name="client_id"/>
|
||||
<field name="contract_name"/>
|
||||
<field name="contract_state"/>
|
||||
<field name="project"/>
|
||||
<field name="project_id"/>
|
||||
<field name="client_short_vorname"/>
|
||||
<field name="client_short_name"/>
|
||||
<field name="werbe_feld_selected"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_project_new_contract_kanban" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage Projekt Vertraeg</field>
|
||||
<field name="name">DigitalSignage Projekt Vertraege</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.contracts</field>
|
||||
<field name="view_mode">form</field>
|
||||
|
|
@ -84,7 +104,8 @@
|
|||
<field name="context">{"default_allow_billable": 1}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_main_contracts" model="ir.actions.act_window">
|
||||
|
||||
<record id="action_dss_main_contracts" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage Alle Vertraege</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.contracts</field>
|
||||
|
|
@ -104,14 +125,14 @@
|
|||
<record id="dss_main_contracts_tree" model="ir.ui.view">
|
||||
<field name="name">dss_contracts_tree</field>
|
||||
<field name="model">dss.contracts</field>
|
||||
<field eval="1" name="priority"/>
|
||||
<field name="priority" eval="17"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Vertragsuebersicht" editable="bottom" multi_edit="1" edit="1" default_order="contract_id">
|
||||
<field name="contract_state"/>
|
||||
<field name="contract_id"/>
|
||||
<tree string="Vertragsuebersicht">
|
||||
<field name="contract_state"/>
|
||||
<field name="contract_id"/>
|
||||
<field name="contract_name"/>
|
||||
<field name="project"/>
|
||||
</tree>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -293,8 +314,8 @@
|
|||
<field name="client_short_website"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<button string="Kunde anlegen" name="pyaction_dss_contract_make_partner" type="object" class="btn-primary o_open_tasks" data-hotkey="m"/>
|
||||
<button string="Kunde anlegen" name="pyaction_dss_contract_make_partner" type="object" class="btn-primary o_open_tasks" data-hotkey="m"/>
|
||||
<div class="col-2">
|
||||
</div>
|
||||
</div>
|
||||
<hr></hr>
|
||||
|
|
@ -320,14 +341,14 @@
|
|||
</page>
|
||||
<page name="contractsettings" string="Vertragsdaten">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<group>
|
||||
<div class="col-4">
|
||||
<group>
|
||||
<field name="contract_date" string="Vertragsdatum"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<group>
|
||||
<field name="start_date" string="Ausstahlungsdatum"/>
|
||||
<field name="start_date"/>
|
||||
</group>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -354,6 +375,14 @@
|
|||
</group>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" >
|
||||
<div class="col-8">
|
||||
<group>
|
||||
<field name="runtime_finish" string="Laufzeit Ende"/>
|
||||
<button icon="DigitalSignage/static/src/img/dsscalc.png" name="pyaction_dss_contract_make_partner" type="object" class="dss-smallbutton" data-hotkey="c"/>
|
||||
</group>
|
||||
</div>
|
||||
</div>
|
||||
<hr>></hr>
|
||||
<div class="row" >
|
||||
<div class="col-8">
|
||||
|
|
@ -407,6 +436,7 @@
|
|||
<field name="contract_id" string="Kunden/Vert.nummer" readonly="1"/>
|
||||
<field name="id" string="Vertrags Interne Id" readonly="1"/>
|
||||
<field name="ads_last_state" string="letzter Vorgang" readonly="1"/>
|
||||
<field name="contract_auto_name" string="Autoname"/>
|
||||
<field name="projectIid" string="Project IId" readonly="1"/>
|
||||
<field name="uuid" string="Datensatz UUID"/>
|
||||
<field name="project_ad_structure" string="Project Aufbau" readonly="1"/>
|
||||
|
|
@ -510,4 +540,33 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_set_standard_values" model="ir.actions.server">
|
||||
<field name="name">Standard Vertragsdaten setzen</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.setStandardValues()
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_set_standard_values" model="ir.actions.server">
|
||||
<field name="name">1. Standard Vertragsdaten setzen (ID, NAME usw.)</field>
|
||||
<field name="model_id" ref="model_dss_contracts"/>
|
||||
<field name="binding_model_id" ref="model_dss_contracts"/>
|
||||
<field name="binding_view_types">tree</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.setTreeStandardValues()</field>
|
||||
</record>
|
||||
|
||||
<record id="action_set_firstkampagne" model="ir.actions.server">
|
||||
<field name="name">2. Erstkampagnen erzeugen</field>
|
||||
<field name="model_id" ref="model_dss_contracts"/>
|
||||
<field name="binding_model_id" ref="model_dss_contracts"/>
|
||||
<field name="binding_view_types">tree</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.setFirstKampagne()</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="dss_eventdays_view_tree" model="ir.ui.view">
|
||||
<field name="name">dss_eventdays_tree</field>
|
||||
<field name="model">dss.eventdays</field>
|
||||
<field name="priority" eval="16"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Spieltage">
|
||||
<field name="eventname"/>
|
||||
<field name="eventstartdate"/>
|
||||
<field name="eventenddate"/>
|
||||
<field name="description"/>
|
||||
<field name="color" widget="color"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_eventdays_view_form" model="ir.ui.view">
|
||||
<field name="name">dss_eventdays_form</field>
|
||||
<field name="model">dss.eventdays</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<button name="pydocalendarEntry" string="Event in Kalender " type="object" class="oe_hightlight"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="eventname" string="Name des Events"/>
|
||||
<field name="eventstartdate" string="Start des Events"/>
|
||||
<field name="eventenddate" string="Ende des Events"/>
|
||||
<field name="description" string="Beschreibung"/>
|
||||
<field name="color" widget="color"/>
|
||||
<field name="username" string="Benutzer in dessen Kalender Event einzutragen ist"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="informations" string="Informationen">
|
||||
<group>
|
||||
<field name="uuid" string="Datensatz UUID"/>
|
||||
<field name="calendarevent" string="Kalendereintrag"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_eventdays_view" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage EventSpieltage</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.eventdays</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="'o_view_nocontent_smiling_face">
|
||||
Neuen Spieltag erstellen
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</odoo>
|
||||
|
|
@ -6,6 +6,12 @@
|
|||
<field name="model">dss.geraetetypen</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<button name="pyaction_tuya_readout" string="Tuya auslesen" type="object" class="oe_highlight"
|
||||
attrs="{'invisible': [('has_tuya','!=',True)]}" data-hotkey="t"/>
|
||||
<button name="pyaction_tuya_switch" string="Tuya Schalten" type="object" class="oe_highlight"
|
||||
attrs="{'invisible': ['|',('has_tuya','!=',True),('tuya_can_switch','!=',True)]}" data-hotkey="t"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<group name="basesettings" >
|
||||
|
|
@ -16,9 +22,25 @@
|
|||
<field name="grundsystem_kennung" invisible="1"/>
|
||||
<field name="led_geraetetyp" string="Gerätetyp" attrs="{'invisible': [('geraetetyp','!=','STE')]}"/>
|
||||
</group>
|
||||
<group name="settings" >
|
||||
<field name="has_tuya" string="Gerät hat Tuya Anbindung" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="osssetings" string="LCDSystem Daten" attrs="{'invisible': ['|',('geraetetyp','!=','TOP'),('grundsystem_kennung','!=','LCD')]}" >
|
||||
<page name="tuyasettings" string="Tuya Daten" attrs="{'invisible': [('has_tuya','!=',True)]}" >
|
||||
<div class="col-4">
|
||||
<group name="tuyadetailsettings">
|
||||
<field name="tuya_Geraete_uid"/>
|
||||
<field name="tuya_Geraete_id"/>
|
||||
<field name="tuya_can_switch" widget="boolean_toggle"/>
|
||||
<field name="tuya_has_powervalue" widget="boolean_toggle"/>
|
||||
<field name="tuya_last_totalpower" attrs="{'invisible': [('tuya_has_powervalue','!=',True)]}"/>
|
||||
<field name="tuya_last_lastpower" attrs="{'invisible': [('tuya_has_powervalue','!=',True)]}"/>
|
||||
<field name="tuya_last_switchstate" attrs="{'invisible': [('tuya_can_switch','!=',True)]}"/>
|
||||
</group>
|
||||
</div>
|
||||
</page>
|
||||
<page name="osssettings" string="LCDSystem Daten" attrs="{'invisible': ['|',('geraetetyp','!=','TOP'),('grundsystem_kennung','!=','LCD')]}" >
|
||||
<group name="lcdsettings">
|
||||
<field name="lcd_size"/>
|
||||
<field name="lcd_size_sonstige" attrs="{'invisible': [('lcd_size','!=','00')]}"/>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="dss_main_view_search" model="ir.ui.view">
|
||||
<field name="name">dss_projects_form</field>
|
||||
<field name="model">dss.projects</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Projects">
|
||||
<filter string="Aktuelle Projekte Alle (Kein Archiv)" name="actual_projects" domain="[('aktstatus_typ','!=','ARCHIV')]"/>
|
||||
<filter string="Aktuelle Projekte Neu" name="actual_Newprojects" domain="[('aktstatus_typ','=','NEU')]"/>
|
||||
<filter string="Aktuelle Projekte Laufend" name="actual_runprojects" domain="[('aktstatus_typ','=','WORK')]"/>
|
||||
<filter string="Aktuelle Projekte Problematisch" name="actual_Errorprojects" domain="[('aktstatus_typ','=','ERROR')]"/>
|
||||
<filter string="Archivierte Projekte" name="archived_projects" domain="[('aktstatus_typ','=','ARCHIV')]"/>
|
||||
<filter string="Inaktive Projekte" name="inactive_projects" domain="[('active','=',False)]"/>
|
||||
<group expand="0" string="Systeme">
|
||||
<filter string="Nach Systemtyp" name="grundsystemname" context="{'group_by' : 'grundsystemname'}"/>
|
||||
<filter string="Nach Projektstatus" name="aktstatus" context="{'group_by' : 'aktstatus'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="dss_main_view_form" model="ir.ui.view">
|
||||
<field name="name">dss_projects_form</field>
|
||||
<field name="model">dss.projects</field>
|
||||
|
|
@ -8,32 +28,78 @@
|
|||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="invisible" widget="boolean_toggle"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
<field name="aktstatus"/>
|
||||
<field name="projektname"/>
|
||||
<field name="projectid"/>
|
||||
<field name="name"/>
|
||||
<field name="active"/>
|
||||
<field name="standort_inout"/>
|
||||
<field name="standort_inout"/>
|
||||
<field name="grundsystemname" string="Kategorie"/>
|
||||
<field name="errichtet_am"/>
|
||||
<field name="aktstatus_color" widget="color"/>
|
||||
<field name="errichtet_am"/>
|
||||
<field name="aktstatus_color" widget="color"/>
|
||||
<field name="cloudlink"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="partnersettings" string="Partner/Adressen">
|
||||
<group>
|
||||
<field name="vertragsschreiber"/>
|
||||
<field name="standortpartner"/>
|
||||
<field name="vertriebspartner"/>
|
||||
</group>
|
||||
</page>
|
||||
<page name="basesettings" string="Details (Zeiten,Standort)">
|
||||
<group>
|
||||
<field name="standort"/>
|
||||
<field name="zeiten_on"/>
|
||||
<field name="zeiten_off"/>
|
||||
<field name="vertragsschreiber"/>
|
||||
<field name="standortpartner"/>
|
||||
<field name="vertriebspartner"/>
|
||||
</group>
|
||||
</page>
|
||||
<page name="partnersettings" string="Adressen/Standort">
|
||||
<group string="Geolocation">
|
||||
<label class="o_form_label" string="Genaue Adresse" for="standort"/>
|
||||
<div class="col6">
|
||||
<field name="standort" invisible="1"/>
|
||||
<group>
|
||||
<field name="standort_strasse"/>
|
||||
<field name="standort_plz"/>
|
||||
<field name="standort_ort"/>
|
||||
<field name="standort_bundesland"/>
|
||||
<field name="standort_land"/>
|
||||
</group>
|
||||
</div>
|
||||
<label class="o_form_label" string="Geo Location" for="standort"/>
|
||||
<div class="col6">
|
||||
<field name="standort" invisible="1"/>
|
||||
<group>
|
||||
<label string="Standort in Karte anzeigen ?" for="standort_visible"/>
|
||||
<div class="col6">
|
||||
<field name="standort_visible" widget="boolean_toggle"/>
|
||||
<span>Lat : <field name="standort_lati" nolabel="1" class="oe_inline"/></span>
|
||||
<br/>
|
||||
<span>Long: <field name="standort_long" nolabel="1" class="oe_inline"/></span>
|
||||
<br/>
|
||||
</div>
|
||||
</group>
|
||||
<button attrs="{'invisible': ['|', ('standort_lati', '!=', 0), ('standort_lati', '!=', 0)]}" icon="fa-gear" string="Compute based on address" title="Compute Localization" name="dss_geo_localize" type="object" class="btn btn-link p-0"/>
|
||||
<button attrs="{'invisible': [('standort_long', '=', 0), ('standort_long', '=', 0)]}" icon="fa-refresh" string="Refresh" title="Refresh Localization" name="dss_geo_localize" type="object" class="btn btn-link p-0"/>
|
||||
</div>
|
||||
</group>
|
||||
</page>
|
||||
<page name="basesettings" string="Details (Zeiten,Standort)">
|
||||
<div class="row">
|
||||
<div class="col10">
|
||||
<group>
|
||||
<field name="standort"/>
|
||||
</group>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<group>
|
||||
<field name="zeitenf_on" widget="float_time"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<group>
|
||||
<field name="zeitenf_off" widget="float_time"/>
|
||||
</group>
|
||||
</div>
|
||||
</div>
|
||||
</page>
|
||||
<page name="geraetesettings" string="Systeme">
|
||||
<group>
|
||||
<field name="systemname" string="Abspiel/Controlsystem"/>
|
||||
|
|
@ -60,7 +126,7 @@
|
|||
<field name="model">dss.projects</field>
|
||||
<field name="priority" eval="16"/>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile" action="pyaction_view_contracts" type="object">
|
||||
<kanban class="o_kanban_mobile" action="pyaction_view_contracts" type="object" default_group_by="grundsystemname">
|
||||
<field name="projektname"/>
|
||||
<field name="aktstatus_color"/>
|
||||
<templates>
|
||||
|
|
@ -100,7 +166,8 @@
|
|||
<span class="fa fa-ellipsis-h"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a t-if="widget.editable" role="menuitem" type="set_cover" class="dropdown-item" data-field="displayed_image_id">Cloud Ordner öffnen</a>
|
||||
<a name="switch_invisible" role="menuitem" type="action" class="dropdown-item">Sichtbarkeit</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<a name="%(portal.portal_share_action)d" role="menuitem" type="action" class="dropdown-item">Projekt teilen</a>
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Bearbeiten</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
|
|
@ -124,7 +191,7 @@
|
|||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -140,13 +207,15 @@
|
|||
<field name="name"/>
|
||||
<field name="aktstatus"/>
|
||||
<field name="grundsystemname"/>
|
||||
</tree>
|
||||
<search>
|
||||
<filter string="Archivierte Projekte" name="archived" domain="[('aktstatus_typ','=','ARCHIV')]"/>
|
||||
<group expand="0" string="Gruppierung">
|
||||
<filter string="Nach Systemtyp" name="systemtyp" context="{'group_by' : 'grundsystemname'}"/>
|
||||
</group>
|
||||
</search>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
<field name="invisible" widget="boolean_toggle"/>
|
||||
</tree>
|
||||
<search>
|
||||
<filter string="Archivierte Projekte" name="archived" domain="[('aktstatus_typ','=','ARCHIV')]"/>
|
||||
<group expand="0" string="Gruppierung">
|
||||
<filter string="Nach Systemtyp" name="systemtyp" context="{'group_by' : 'grundsystemname'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -155,7 +224,8 @@
|
|||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.projects</field>
|
||||
<field name="view_mode">kanban,form,tree</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="domain"></field>
|
||||
<field name="context">{'search_default_actual_projects': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="'o_view_nocontent_smiling_face">
|
||||
Fuege ein System ein !
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="dss_screenDesigner_action_dss_screenDesigner" model="ir.actions.client">
|
||||
<field name="name">Attendance</field>
|
||||
<field name="tag">dss_screenDesigner_js_action</field>
|
||||
</record>
|
||||
|
||||
|
||||
</odoo>
|
||||
|
|
@ -39,6 +39,13 @@
|
|||
<field name="def_ad_cloudpath_sample"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
<field name="tuya_access_id"/>
|
||||
<field name="tuya_access_key"/>
|
||||
<field name="tuya_endpoint"/>
|
||||
</group>
|
||||
</div>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="dss_triggeractions_form" model="ir.ui.view">
|
||||
<field name="name">dss_triggeractions_form</field>
|
||||
<field name="model">dss.triggeractions</field>
|
||||
<field eval="2" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="triggeractionname"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="triggeractiontyp"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="E-Mail" string="Email Daten" attrs="{'invisible': [('triggeractiontyp','!=','EMAIL')]}" >
|
||||
<group>
|
||||
<field name="email_getfrom"/>
|
||||
<field name='email_template'/>
|
||||
<field name='email_fix_email_sender'/>
|
||||
<field name='email_fix_email' attrs="{'invisible': [('email_getfrom','!=','FIX')]}" />
|
||||
<field name='email_data_table' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" />
|
||||
<field name='email_data_field' attrs="{'invisible': [('email_getfrom','!=','DATA')]}" />
|
||||
</group>
|
||||
</page>
|
||||
<page name="Aufgabe" string="Aufgaben erzeugen" attrs="{'invisible': [('triggeractiontyp','!=','ACTIV')]}" >
|
||||
<group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="Daten" string="Datensatz ändern" attrs="{'invisible': [('triggeractiontyp','!=','DSEDIT')]}" >
|
||||
<group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="Tuya" string="Tuya Aktion" attrs="{'invisible': [('triggeractiontyp','!=','TUYA')]}" >
|
||||
<group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="informations" string="Informationen">
|
||||
<group>
|
||||
<field name="uuid" string="Datensatz UUID" readonly="1"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_triggeractions_tree" model="ir.ui.view">
|
||||
<field name="name">dss_triggeractions_tree</field>
|
||||
<field name="model">dss.triggeractions</field>
|
||||
<field name="priority" eval="16"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Trigger Aktionen">
|
||||
<field name="triggeractionname"/>
|
||||
<field name="triggeractiontyp"/>
|
||||
<field name="email_getfrom"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_triggeractions_view" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage Trigger Aktionen</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.triggeractions</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="'o_view_nocontent_smiling_face">
|
||||
Neuen Standardtext erstellen
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="dss_trigger_form" model="ir.ui.view">
|
||||
<field name="name">dss_trigger_form</field>
|
||||
<field name="model">dss.triggertypes</field>
|
||||
<field eval="2" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="triggername"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="triggertyp"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="Ausloeser" string="Auslösende Aktion - Feld" attrs="{'invisible': [('triggertyp','!=','FIELD_A'),('triggertyp','!=','FIELD_S'),('triggertyp','!=','FIELD_K')]}" >
|
||||
<group>
|
||||
<field name='trigger_table'/>
|
||||
<field name='trigger_field'/>
|
||||
<field name='trigger_operator' attrs="{'invisible': [('triggertyp','!=','FIELD_S'),('triggertyp','!=','FIELD_K')]}"/>
|
||||
<field name='trigger_value' attrs="{'invisible': [('triggertyp','!=','FIELD_S'),('triggertyp','!=','FIELD_K')]}"/>
|
||||
</group>
|
||||
</page>
|
||||
<page name="Aktionen" string="Aktionen">
|
||||
<group>
|
||||
<field name="trigger_Aktionen" string="Aktionen"/>
|
||||
</group>
|
||||
</page>
|
||||
<page name="informations" string="Informationen">
|
||||
<group>
|
||||
<field name="uuid" string="Datensatz UUID" readonly="1"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_trigger_tree" model="ir.ui.view">
|
||||
<field name="name">dss_trigger_tree</field>
|
||||
<field name="model">dss.triggertypes</field>
|
||||
<field name="priority" eval="16"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Trigger Aktionen">
|
||||
<field name="triggername"/>
|
||||
<field name="triggertyp"/>
|
||||
</tree>
|
||||
</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="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="'o_view_nocontent_smiling_face">
|
||||
Neuen Standardtext erstellen
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -194,45 +194,6 @@
|
|||
</record>
|
||||
|
||||
|
||||
|
||||
<record id="dss_eventdays_view_tree" model="ir.ui.view">
|
||||
<field name="name">dss_eventdays_tree</field>
|
||||
<field name="model">dss.eventdays</field>
|
||||
<field name="priority" eval="16"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Spieltage">
|
||||
<field name="eventname"/>
|
||||
<field name="eventdate"/>
|
||||
<field name="description"/>
|
||||
<field name="color" widget="color"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_eventdays_view_form" model="ir.ui.view">
|
||||
<field name="name">dss_eventdays_form</field>
|
||||
<field name="model">dss.eventdays</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<group name="basethings">
|
||||
<field name="eventname" string="Name des Events"/>
|
||||
<field name="eventdate" string="Datum des Events"/>
|
||||
<field name="description" string="Beschreibung"/>
|
||||
<field name="color" widget="color"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_paysystem_fields_view_tree" model="ir.ui.view">
|
||||
<field name="name">dss_paysystem_fields_tree</field>
|
||||
<field name="model">dss.paysystem_fields</field>
|
||||
|
|
@ -396,19 +357,6 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_eventdays_view" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage EventSpieltage</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.eventdays</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="'o_view_nocontent_smiling_face">
|
||||
Neuen Spieltag erstellen
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_paysystem_fields_view" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage Zahlungsfelder</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
|
|
|
|||
|
|
@ -203,7 +203,23 @@
|
|||
<menuitem id="menu_dss_email_templates"
|
||||
parent="menu_dss_configurationen_system"
|
||||
action="action_dss_email_template_tree_all"
|
||||
sequence="130"/>
|
||||
sequence="140"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_dss_trg_internsetup"
|
||||
name="Trigger/Aktionen"
|
||||
parent="menu_dss_internsetup"
|
||||
sequence="50"/>
|
||||
|
||||
<menuitem id="menu_dss_triggeractions_setup"
|
||||
parent="menu_dss_trg_internsetup"
|
||||
action="action_dss_triggeractions_view"
|
||||
sequence="51"/>
|
||||
|
||||
<menuitem id="menu_dss_trigger_setup"
|
||||
parent="menu_dss_trg_internsetup"
|
||||
action="action_dss_trigger_view"
|
||||
sequence="52"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_dss_openprojectimport"
|
||||
|
|
@ -212,5 +228,12 @@
|
|||
action="action_dss_import_view"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_dss_dcreendesign"
|
||||
name="Screendesigner Tool"
|
||||
parent="menu_dss_interntools"
|
||||
action="dss_screenDesigner_action_dss_screenDesigner"
|
||||
sequence="20"/>
|
||||
|
||||
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue