Vor DoppelTeam
This commit is contained in:
parent
3a396eceb5
commit
9b2da96cd5
|
|
@ -35,6 +35,7 @@
|
|||
'views/dss_maintains.xml',
|
||||
'views/dss_provisionstypen.xml',
|
||||
'views/dss_provision.xml',
|
||||
'views/dss_zahlungen.xml',
|
||||
'views/mainsystem_view.xml',
|
||||
'views/menu.xml',
|
||||
'views/company_view.xml',
|
||||
|
|
@ -50,6 +51,9 @@
|
|||
'web.assets_backend': [
|
||||
'DigitalSignage/static/src/img/*',
|
||||
'DigitalSignage/static/src/xml/screenDesignerView.xml',
|
||||
'DigitalSignage/static/src/js/form_button.js',
|
||||
'DigitalSignage/static/src/js/kanban_button.js',
|
||||
'DigitalSignage/static/src/xml/form_button.xml',
|
||||
],
|
||||
'web.assets_common': [
|
||||
'DigitalSignage/static/images/**/*',
|
||||
|
|
|
|||
|
|
@ -53,6 +53,28 @@ class GoogleMap(http.Controller):
|
|||
maps_image_url="/DigitalSignage/static/src/img/img_"+str(project.id)+"_b.jpg";
|
||||
else:
|
||||
maps_image_url=""
|
||||
if project.maps_image_2:
|
||||
fname=settings.os_webimg_path+'/img_'+str(project.id)+'_b_2.jpg';
|
||||
if os.path.isfile(fname):
|
||||
os.remove(fname)
|
||||
fileobj = open(fname, "xb")
|
||||
fileobj.write(base64.decodebytes(project.maps_image_2))
|
||||
fileobj.close()
|
||||
|
||||
maps_image_url_2="/DigitalSignage/static/src/img/img_"+str(project.id)+"_b_2.jpg";
|
||||
else:
|
||||
maps_image_url_2=""
|
||||
if project.maps_image_3:
|
||||
fname=settings.os_webimg_path+'/img_'+str(project.id)+'_b_3.jpg';
|
||||
if os.path.isfile(fname):
|
||||
os.remove(fname)
|
||||
fileobj = open(fname, "xb")
|
||||
fileobj.write(base64.decodebytes(project.maps_image_3))
|
||||
fileobj.close()
|
||||
|
||||
maps_image_url_3="/DigitalSignage/static/src/img/img_"+str(project.id)+"_b_3.jpg";
|
||||
else:
|
||||
maps_image_url_3=""
|
||||
projects_data["projects"].append({
|
||||
'id': project.id,
|
||||
'name': project.projektname,
|
||||
|
|
@ -60,7 +82,21 @@ class GoogleMap(http.Controller):
|
|||
'google_typ':project.maps_type,
|
||||
'google_marker': project.maps_marker,
|
||||
'google_image':maps_image_url,
|
||||
'google_image_2':maps_image_url_2,
|
||||
'google_image_3':maps_image_url_3,
|
||||
'google_text':project.maps_text,
|
||||
'google_typ_interactive': "ja" if project.maps_typ_interactive else "Nein",
|
||||
'google_visitors':project.maps_visitors,
|
||||
'google_id':project.projectid,
|
||||
'google_displaytyp':project.maps_displaytyp,
|
||||
'google_displaysize':project.maps_displaysize,
|
||||
'google_displayflaechen_a_free': "ja" if project.maps_werbeflaechen_a_free else "Nein",
|
||||
'google_displayflaechen_a':project.maps_werbeflaechen_a,
|
||||
'google_displayflaechen_b_free': "ja" if project.maps_werbeflaechen_b_free else "Nein",
|
||||
'google_displayflaechen_b':project.maps_werbeflaechen_b,
|
||||
'google_freiflaechen_b_show':project.maps_freespaces_b_show,
|
||||
'google_freiflaechen_b':project.maps_freespaces_b,
|
||||
'google_displayfiles':project.maps_werbemedien,
|
||||
'latitude': str(project.standort_lati) if project.standort_lati else False,
|
||||
'longitude': str(project.standort_long) if project.standort_long else False,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ from . import dss_eventdays
|
|||
from . import dss_advertisefields
|
||||
from . import dss_trigger
|
||||
from . import dss_triggervalues
|
||||
from . import dss_zahlungen
|
||||
from . import dss
|
||||
from . import dss_maintains
|
||||
from . import dss_provisionstypen
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ class dsspprojektstatus(models.Model):
|
|||
color = fields.Char(string='Color Index')
|
||||
typ = fields.Selection([('NEU','In Bearbeitung'),('WORK','fertig/laufend'),('ERROR','Fehlerhaft/Defekt'),('ARCHIV','veraltet/archiviert')],'Systemzuordnung')
|
||||
icon = fields.Image()
|
||||
order = fields.Integer('Reihenfolge')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
|
|
@ -127,6 +128,7 @@ class dssworkstatus(models.Model):
|
|||
statusname = fields.Char('Statusname', required=True)
|
||||
color = fields.Char(string='Color Index')
|
||||
icon = fields.Image()
|
||||
order = fields.Integer('Reihenfolge')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
|
|
@ -144,6 +146,7 @@ class dsstodostatus(models.Model):
|
|||
statusnr = fields.Integer(default=lambda self: self._default_statusnr(),string='Listenpostion', required=True)
|
||||
color = fields.Char(string='Color Index')
|
||||
icon = fields.Image()
|
||||
order = fields.Integer('Reihenfolge')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
|
|
@ -169,25 +172,6 @@ class dsstexts(models.Model):
|
|||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
class dsspaysystemfields(models.Model):
|
||||
_name = "dss.paysystem_fields"
|
||||
_description = "DigitalSignage Abrechnungsarten_felder"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "feldname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
feldname = fields.Char('Abrechnungs_Feldname', required=True)
|
||||
payonfieldset = fields.Selection([('VE','Vertragseingang'),('KA','Korrekturabzug'),('ES','Einspielung'),('CH','Jede Änderung'),('XH','X, Änderung')])
|
||||
changecount = fields.Integer('Änderungsnummer')
|
||||
description = fields.Text('EventBeschreibung')
|
||||
amount = fields.Float('Kosten')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
|
||||
class dssmediatypes(models.Model):
|
||||
_name = "dss.mediatypes"
|
||||
_description = "DigitalSignage Datei-Medientypen"
|
||||
|
|
@ -314,29 +298,6 @@ class dssadstructures(models.Model):
|
|||
return str(uuid.uuid4())
|
||||
|
||||
|
||||
class dsspaysystems(models.Model):
|
||||
_name = "dss.paysystems"
|
||||
_description = "DigitalSignage Abrechnungsarten"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "payname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
payname = fields.Char('Abrechnungsname', required=True)
|
||||
payonset = fields.Many2many('dss.paysystem_fields')
|
||||
description = fields.Text('EventBeschreibung')
|
||||
send_info = fields.Boolean('Informationsemail senden ?')
|
||||
send_info_to = fields.Many2one('res.users')
|
||||
send_info_template = fields.Many2one('mail.template')
|
||||
amount = fields.Float('Kosten')
|
||||
icon = fields.Image()
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
|
||||
|
||||
class dssscreendesign(models.Model):
|
||||
_name = "dss.screendesign"
|
||||
_description = "DigitalSignage Screen Designer"
|
||||
|
|
@ -723,17 +684,17 @@ 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')
|
||||
description = fields.Text('Beschreibung', tracking=True)
|
||||
amount = fields.Float('Extrakosten', tracking=True)
|
||||
order = fields.Integer('Reihenfolge', tracking=True)
|
||||
|
||||
# need_media = fields.Many2many('dss.mediarelations','ad',string='Medien')
|
||||
need_media = fields.One2many('dss.mediarelations', 'ad', string='Medien')
|
||||
need_media = fields.One2many('dss.mediarelations', 'ad', string='Medien', tracking=True)
|
||||
|
||||
work_state = fields.Many2one('dss.workstate', default=_default_work_state, tracking=True)
|
||||
work_state_color = fields.Char(related='work_state.color')
|
||||
work_state_text = fields.Char(related='work_state.statusname')
|
||||
work_state_info = fields.Char('Zusatzinfo')
|
||||
work_state_info = fields.Char('Zusatzinfo',tracking=True)
|
||||
|
||||
ad_state = fields.Many2one('dss.adstate', tracking=True)
|
||||
ad_state_color = fields.Char(related='ad_state.color')
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
# -*- coding: utf-8 -*
|
||||
|
||||
import ast
|
||||
import datetime
|
||||
import json
|
||||
|
|
@ -74,9 +73,16 @@ class dsscontracts(models.Model):
|
|||
contract_state_order = fields.Integer(related='contract_state.order',store=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_payment_done = fields.Boolean('Zahlungeingang erfolgt',tracking=True)
|
||||
contract_payment_done_date = fields.Date('Zahlungeingang Datum',tracking=True)
|
||||
|
||||
contract_receipt_done_multi = fields.Boolean('Mehrere Rechnungen nötig ?', tracking=True)
|
||||
contract_receipt_done = fields.Boolean('Rechnungstellung erfolgt',tracking=True)
|
||||
contract_receipt_number = fields.Char("Rechnungsnummer",tracking=True)
|
||||
contract_receipt_done_date = fields.Date('Rechnungsdatum',tracking=True)
|
||||
contract_receipt_done_until_date = fields.Date('Zahlungsziel', tracking=True)
|
||||
|
||||
remark = fields.Html('Bemerkung',tracking=True)
|
||||
|
||||
contract_writer = fields.Many2one('res.partner', tracking=True)
|
||||
|
|
@ -163,7 +169,8 @@ class dsscontracts(models.Model):
|
|||
runtime_finish = fields.Date('LaufzeitEnde',tracking=True)
|
||||
runtime_calendar_event = fields.Integer('Kalendereintrag ID',tracking=True)
|
||||
|
||||
paymentsystems = fields.Many2one('dss.paysystems',tracking=True)
|
||||
paymentsystems = fields.Many2one('dss.paysystems',string='Abrechnungsart',tracking=True)
|
||||
paymentinterval = fields.Many2one('dss.payintervals',string='Abrechnungsinterval',tracking=True)
|
||||
intern_info_payment_off = fields.Boolean('Keine Zahl-Benachrichtigungen',tracking=True)
|
||||
|
||||
base_ad = fields.Many2one('dss.ads',tracking=True)
|
||||
|
|
@ -219,6 +226,7 @@ class dsscontracts(models.Model):
|
|||
|
||||
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für den Kunde innerhalb des Projekt Ordners')
|
||||
|
||||
|
||||
@api.depends('vertragssumme')
|
||||
def _compute_prov(self):
|
||||
_logger.info('contract Provision Berechnung : C_' + str(self.id));
|
||||
|
|
@ -327,6 +335,23 @@ class dsscontracts(models.Model):
|
|||
self.contract_auto_id = cidstr
|
||||
if self.contract_auto_id == "":
|
||||
self.contract_auto_id = cidstr
|
||||
|
||||
|
||||
def jumpcloud(self):
|
||||
urlbase=str(self.env['dss.settings'].search([], limit=1).def_cloud_url_base)
|
||||
_logger.info("Cloud Open Link Urlbase DB " + str(urlbase))
|
||||
if not urlbase:
|
||||
urlbase = 'https://cloud.logumedia.de/index.php/apps/files/?dir=';
|
||||
_logger.info("Cloud Open Link Urlbase Used " + str(urlbase))
|
||||
url=str(urlbase)+str(dss_settings.dssSettings._get_path_converted(self,self.project.cloudlink,self.project))+str(dss_settings.dssSettings._get_path_converted(self,self.cloudlink,self))
|
||||
_logger.info("Cloud Open Link " + str(url))
|
||||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'url': str(url),
|
||||
'target': 'new',
|
||||
}
|
||||
|
||||
|
||||
@api.onchange('contract_auto_id')
|
||||
def _onchange_contract_auto_id(self):
|
||||
for record in self :
|
||||
|
|
@ -423,15 +448,15 @@ class dsscontracts(models.Model):
|
|||
def _getdefwscolor(self):
|
||||
return str('#ffffff')
|
||||
|
||||
@api.model
|
||||
def _default_client_id(self):
|
||||
return str("00")
|
||||
|
||||
@api.model
|
||||
def _read_group_stage_ids(self,stages,domain,order):
|
||||
contract_state_ids = self.env['dss.contractstate'].search([],order='order')
|
||||
return contract_state_ids
|
||||
|
||||
@api.model
|
||||
def _default_client_id(self):
|
||||
return str("00")
|
||||
|
||||
def pyaction_dss_contract_goto_partner(self):
|
||||
fullname = str(self.client_short_vorname) + ' ' +str(self.client_short_name)
|
||||
|
||||
|
|
@ -856,22 +881,23 @@ class dsscontracts(models.Model):
|
|||
def trigger_action_init(self):
|
||||
_logger.info('Contract Cron Running - Start '+str(self)+' start searching')
|
||||
jobcontracts = self.env['dss.contracts'].search([('run_trigger', '=', True)])
|
||||
_logger.info('Contract Cron Running - Start '+str(self)+' Found '+str(len(jobcontracts))+' Trigger')
|
||||
_logger.info('Contract Cron Running - Start '+str(self)+' '+str(len(jobcontracts))+' Triggergruppen gefunden')
|
||||
for record in jobcontracts:
|
||||
if not record:
|
||||
_logger.info('Contract Cron Running No Contracts Delivered - searching')
|
||||
else:
|
||||
_logger.info('Contract Cron Running C_' + str(record.id) + ' Check Trigger')
|
||||
_logger.info('Contract Cron Running C_' + str(record.id) + ' Starte Triggerprüfung')
|
||||
if record.run_trigger:
|
||||
_logger.info('Contract Cron Running C_' + str(record.id) + ' Prüfe Triggergruppe TG_' + str(record.triggergroup.id))
|
||||
triggergroup = record.triggergroup
|
||||
if not triggergroup:
|
||||
_logger.info('Contract Cron Running C_' + str(record.id) + ' Triggergruppe TG_' + str(record.triggergroup.id)+' not found')
|
||||
_logger.info('Contract Cron Running C_' + str(record.id) + ' Triggergruppe TG_' + str(record.triggergroup.id)+' nicht gefunden !')
|
||||
pass
|
||||
else:
|
||||
for trigger in triggergroup.triggers:
|
||||
if not trigger:
|
||||
pass
|
||||
_logger.info('Contract Cron Running C_' + str(record.id) + ' Triggerprüfung : Keine Trigger in Gruppe !')
|
||||
else:
|
||||
_logger.info('Contract Cron Running C_' + str(record) + ' in Triggergruppe TG_' + str(record.triggergroup)+' Prüfe Trigger T_'+str(trigger))
|
||||
if trigger._check_trigger():
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import os.path
|
|||
from odoo import api, fields, models, _
|
||||
from odoo import tools
|
||||
from odoo.exceptions import ValidationError
|
||||
from .dss_settings import dssSettings
|
||||
from datetime import date
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
|
@ -88,6 +89,9 @@ class dssgeraetetypen(models.Model):
|
|||
lcd_montage = fields.Selection([('WAN','Wandmontage'), ('FUS','Standfuss rollbar'), ('FI1','Boden verankert 1 Fuss'),('FI2','Boden verankert 2 Füsse'),('FIX','Bodenverankert Blockfuss'),('XXX','Sonstige')],'Montage/Befestigung',tracking=True);
|
||||
lcd_montage_sonstige = fields.Char('Sonstige Montageart',tracking=True)
|
||||
|
||||
ledcab_module_breite = fields.Integer('Module in Breite',tracking=True)
|
||||
ledcab_module_hoehe = fields.Integer('Module in Hoehe',tracking=True)
|
||||
ledcab_module = fields.Many2one('dss.geraetetypen','Module',tracking=True,domain="['|',('geraetetyp','=','MOD'),('geraetetyp','=','LED')]")
|
||||
|
||||
hw_anzeige = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','ANZ')]",tracking=True)
|
||||
hw_steuerung = fields.Many2one('dss.geraetetypen',domain="['&',('geraetetyp','=','STE'),('grundsystem_kennung','=','LED')]",tracking=True)
|
||||
|
|
@ -118,7 +122,7 @@ class dssgeraetetypen(models.Model):
|
|||
syst.grundsystem_kennung = syst.grundsystem.kennung
|
||||
|
||||
def get_value_from_tuyaresult(self,dataset,valuename):
|
||||
result=''
|
||||
result='0'
|
||||
_logger.info('Resultanfrage:' + str(dataset)+' Feld : '+str(valuename))
|
||||
for singlepart in dataset:
|
||||
if singlepart:
|
||||
|
|
@ -141,20 +145,26 @@ class dssgeraetetypen(models.Model):
|
|||
_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')
|
||||
if self.tuya_last_totalpower == '0':
|
||||
self.tuya_last_totalpower = str(int(self.get_value_from_tuyaresult(result['result'], 'add_ele'))/1000)
|
||||
self.tuya_last_lastpower = self.get_value_from_tuyaresult(result['result'],'phase_a')
|
||||
if self.tuya_last_lastpower == '0':
|
||||
self.tuya_last_lastpower = str(int(self.get_value_from_tuyaresult(result['result'], 'cur_power')) / 10)
|
||||
if self.tuya_can_switch:
|
||||
self.tuya_last_switchstate = self.get_value_from_tuyaresult(result['result'],'switch')
|
||||
if self.tuya_last_switchstate == '0':
|
||||
self.tuya_last_switchstate = self.get_value_from_tuyaresult(result['result'], 'switch_1')
|
||||
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'))
|
||||
dss_settings.dssSettings._get_settingvalue(self, 'tuya_endpoint')) + ' AccessID ' + str(
|
||||
dss_settings.dssSettings._get_settingvalue(self, 'tuya_access_id')) + ' AccessKEY ' + str(
|
||||
dss_settings.dssSettings._get_settingvalue(self, 'tuya_access_key')))
|
||||
openapi = TuyaOpenAPI(dss_settings.dssSettings._get_settingvalue(self, 'tuya_endpoint'),
|
||||
dss_settings.dssSettings._get_settingvalue(self, 'tuya_access_id'),
|
||||
dss_settings.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)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from openerp import models, api, fields
|
||||
|
||||
|
||||
class MailThread(models.AbstractModel):
|
||||
_inherit = 'mail.thread'
|
||||
|
||||
@api.model
|
||||
def _get_tracked_fields(self, updated_fields):
|
||||
super(MailThread, self)._get_tracked_fields(updated_fields)
|
||||
tracked_fields = []
|
||||
Model = self.env['ir.model']
|
||||
if Model.search([('model', '=', str(self._model))]).track_all_fields:
|
||||
for name, field in self._fields.items():
|
||||
if name not in ['write_date', '__last_update']:
|
||||
tracked_fields.append(name)
|
||||
else:
|
||||
for name, field in self._fields.items():
|
||||
if getattr(field, 'track_visibility', False):
|
||||
tracked_fields.append(name)
|
||||
|
||||
if tracked_fields:
|
||||
return self.fields_get(tracked_fields)
|
||||
return {}
|
||||
|
||||
|
||||
class IrModel(models.Model):
|
||||
_inherit = 'ir.model'
|
||||
|
||||
track_all_fields = fields.Boolean(string="Track all fields")
|
||||
|
|
@ -48,7 +48,7 @@ class dssprojects(models.Model):
|
|||
aktstatus_icon = fields.Image(related='aktstatus.icon')
|
||||
description = fields.Text('Beschreibung',tracking=True)
|
||||
systemname = fields.Many2one('dss.systems',tracking=True)
|
||||
grundsystemname = fields.Many2one('dss.systemtypen',tracking=True)
|
||||
grundsystemname = fields.Many2one('dss.systemtypen',group_expand='_read_group_system_ids',tracking=True)
|
||||
grundsystem_typ = fields.Char(related='grundsystemname.kennung',tracking=True)
|
||||
grundsystemicon = fields.Image(related='grundsystemname.icon',tracking=True)
|
||||
grundsystem_default_adstructure = fields.Many2one(related='grundsystemname.default_adstructure',tracking=True)
|
||||
|
|
@ -67,7 +67,20 @@ class dssprojects(models.Model):
|
|||
maps_type = fields.Char('Type in Google',tracking=True)
|
||||
maps_marker = fields.Selection([('m1.png','Marker 1'),('m2.png','Marker 2'),('m3.png','Marker 3'),('m4.png','Marker 4'),('m5.png','Marker 5'),('pin.png','Marker Pin'),('pin2.png','3D Marker Pin'),('pin_display.png','Displpay Pin'),('pin_display_touch.png','TouchDisplpay Pin'),('pin_led.png','LEDWand Pin')],'Marker in Google',tracking=True)
|
||||
maps_image = fields.Binary('Google Bild',tracking=True)
|
||||
maps_image_2 = fields.Binary('Google Bild 2',tracking=True)
|
||||
maps_image_3 = fields.Binary('Google Bild 3',tracking=True)
|
||||
maps_text = fields.Html('Google Beschreibung',tracking=True)
|
||||
maps_typ_interactive = fields.Boolean('Ist Interactive ?', tracking=True)
|
||||
maps_visitors = fields.Integer('Besucher pro Tag', tracking=True)
|
||||
maps_displaytyp = fields.Char('Anzeigetyp in Google', tracking=True)
|
||||
maps_displaysize = fields.Char('Anzeigegroesse in Google',tracking=True)
|
||||
maps_werbeflaechen_a_free = fields.Boolean('Werbeflächen 1 Frei', tracking=True)
|
||||
maps_werbeflaechen_a = fields.Char('Werbeflächenbeschreibung 1',tracking=True)
|
||||
maps_werbeflaechen_b_free = fields.Boolean('Werbeflächen 2 Frei', tracking=True)
|
||||
maps_werbeflaechen_b = fields.Char('Werbeflächenbeschreibung 2',tracking=True)
|
||||
maps_werbemedien = fields.Char('Werbeflächen-Dateien',tracking=True)
|
||||
maps_freespaces_b_show = fields.Boolean('Freie Flächen zeigen ?', tracking=True)
|
||||
maps_freespaces_b = fields.Char('Freie Werbeflächen',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)
|
||||
|
|
@ -84,6 +97,25 @@ class dssprojects(models.Model):
|
|||
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für das Project innerhalb des Cloud Struktur')
|
||||
maintains = fields.Many2many('dss.maintaintask',string="Einsätze am Projekt")
|
||||
|
||||
@api.model
|
||||
def _read_group_system_ids(self, stages, domain, order):
|
||||
project_system_ids = self.env['dss.systemtypen'].search([('open_close_standard_state','=',False)], order='order')
|
||||
return project_system_ids
|
||||
|
||||
def jumpcloud(self):
|
||||
urlbase=str(self.env['dss.settings'].search([], limit=1).def_cloud_url_base)
|
||||
_logger.info("Cloud Open Link Urlbase DB " + str(urlbase))
|
||||
if not urlbase:
|
||||
urlbase = 'https://cloud.logumedia.de/index.php/apps/files/?dir=';
|
||||
_logger.info("Cloud Open Link Urlbase Used " + str(urlbase))
|
||||
url=str(urlbase)+str(dss_settings.dssSettings._get_path_converted(self,self.cloudlink,self))
|
||||
_logger.info("Cloud Open Link " + str(url))
|
||||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'url': str(url),
|
||||
'target': 'new',
|
||||
}
|
||||
|
||||
@api.model
|
||||
def _compute_calendar_start(self):
|
||||
self.date_start_compute=date.today()
|
||||
|
|
@ -164,3 +196,7 @@ class dssprojects(models.Model):
|
|||
else:
|
||||
partners_not_geo_localized |= partner
|
||||
return True
|
||||
|
||||
def pyaction_dss_project_set_def_cloud(self):
|
||||
self.cloudlink = str(self.env['dss.settings'].search([], limit=1).def_project_cloudpath)
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -32,10 +32,13 @@ class dssSettings(models.Model):
|
|||
_description = "DigitalSignage Einstellungen"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
def_cloud_url_base = fields.Char('Cloud URL Basis',help='https://xyxxxxxx.de/cccccccc/ bis zum vorkommen des des Grundsystem URL Teils',tracking=True)
|
||||
def_project_cloudpath = fields.Char('Standard Projekt Pfad',tracking=True)
|
||||
def_project_cloudpath_sample = fields.Char('Projekt Beispiel :',store=True,tracking=True)
|
||||
def_contract_cloudpath = fields.Char('Standard Kunden Pfad',tracking=True)
|
||||
def_contract_cloudpath_sample = fields.Char('Projekt Beispiel :',tracking=True)
|
||||
def_contract_cloudpath_V2 = fields.Char('Standard Kunden Pfad V2',tracking=True)
|
||||
def_contract_cloudpath_sample_V2 = fields.Char('Projekt Beispiel V2 :',tracking=True)
|
||||
def_ad_cloudpath = fields.Char('Standard Kampagnen Pfad',tracking=True)
|
||||
def_ad_cloudpath_sample = fields.Char('Kampagnen Beispiel :',tracking=True)
|
||||
tuya_access_id = fields.Char('Tuya Access ID',tracking=True)
|
||||
|
|
@ -50,6 +53,7 @@ class dssSettings(models.Model):
|
|||
show_expand_contract_group_ad_todo_state = fields.Boolean('Jeden Kampagnen-Aufgabenschritt anzeigen ?',help='im Groupierungsmodus der Verträge nach Kampagnen-Aufgabenschritt alle (auch unbenutzte) Aufgabenspalten anzeigen ?',tracking=True)
|
||||
freigabe_auto_time = fields.Integer('Auto Freigabetage',help='Automatische Freigabe nach x Tagen',tracking=True)
|
||||
|
||||
|
||||
def _get_settingvalue(self,valuename):
|
||||
settings = (self.env['dss.settings'].search([],limit=1))
|
||||
wert = settings._origin.read([valuename])[0][valuename]
|
||||
|
|
@ -63,12 +67,12 @@ class dssSettings(models.Model):
|
|||
if parts[0] == '$':
|
||||
fels = parts[1:]
|
||||
parts = record._origin.read([fels])
|
||||
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden " + str(parts))
|
||||
_logger.info("Get Path - Anfrage-Teil gefunden : " + str(parts))
|
||||
if parts:
|
||||
value = str(parts[0][fels])
|
||||
else:
|
||||
value = ''
|
||||
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden " + str(value))
|
||||
_logger.info("Get Path - Anfrage-Teil gefunden - setze : " + str(value))
|
||||
alls = alls + value
|
||||
else:
|
||||
alls = alls + str(parts)
|
||||
|
|
@ -110,3 +114,36 @@ class dssSettings(models.Model):
|
|||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
@api.model
|
||||
def saveConfig(self,savemodel,activefields):
|
||||
_logger.info("Config speichern "+str(savemodel)+" / "+str(activefields))
|
||||
for field in activefields:
|
||||
feldwerte = activefields.get(field)
|
||||
for wert in feldwerte:
|
||||
_logger.info("Config speichern : "+str(field)+" / "+str(wert)+" -> "+str(feldwerte.get(wert)))
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
class dssSettingsSave(models.Model):
|
||||
|
||||
_name = "dss.viewsettings"
|
||||
_description = "DigitalSignage Ansicht Einstellungen"
|
||||
_inherit = []
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
model = fields.Many2one('ir.model',string='Ansichtsmodel')
|
||||
viewtype = fields.Char('Ansichtstyp')
|
||||
user = fields.Char('User')
|
||||
column = fields.Char('Spalte')
|
||||
state_visible = fields.Char('Status sichtbar')
|
||||
state_collapse = fields.Char('Status zusammengeklappt')
|
||||
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
def _default_create_user(self):
|
||||
return str(self.env.user.name)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ class dsssystems(models.Model):
|
|||
led_hoehe = fields.Integer('LED Hoehe mm')
|
||||
led_pixel_breite = fields.Integer('LED Breite px')
|
||||
led_pixel_hoehe = fields.Integer('LED Hoehe px')
|
||||
led_cab_in_breite = fields.Integer('LED Cabinets Breite Stck')
|
||||
led_cab_in_hoehe = fields.Integer('LED Cabinets Hoehe Stck')
|
||||
|
||||
led_receivingcard = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LED'),('led_geraetetyp','=','REC')]")
|
||||
led_netzteile = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LED'),('led_geraetetyp','=','NET')]")
|
||||
|
|
@ -78,7 +80,9 @@ class dsssystems(models.Model):
|
|||
led_montage = fields.Selection([('WAN','Wandmontage'), ('FUS','1 standFuss zentral'), ('FU2','2 Standfüsse Aussen'),('FU3','1 Standfuss dezentral'),('MO1','manuell Mobil bewegbar'),('MO2','Mobil bewegbar Container'),('XXX','Sonstige')],'Montage/Befestigung');
|
||||
led_montage_sonstige = fields.Char('Sonstige Montageart')
|
||||
|
||||
zusatz_integrationen = fields.Many2many('dss.geraetetypen')
|
||||
led_cabinets_sonstige = fields.Many2many('dss.geraetetypen','led_cabinet_typen','uuid',domain="['&',('grundsystem_kennung','=','LED'),('geraetetyp','=','ANZ')]",string="Cabinets im Verbund")
|
||||
|
||||
zusatz_integrationen = fields.Many2many('dss.geraetetypen','zusatz_typen','uuid')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
|
|
|
|||
|
|
@ -46,6 +46,11 @@ class dsssystemtypen(models.Model):
|
|||
email_template_zuarbeit = fields.Many2one('mail.template',string='Mailvorlage für Zuarbeiterrinnerung', tracking=True)
|
||||
email_template_abzug = fields.Many2one('mail.template',string='Mailvorlage für Korrekturabzug', tracking=True)
|
||||
email_template_start = fields.Many2one('mail.template',string='Mailvorlage für Auslieferung', tracking=True)
|
||||
open_close_standard_state = fields.Boolean('Wenn Leer geschlossen ? ', tracking=True)
|
||||
open_close_user_state = fields.Boolean('Leer-Verhalten user',compute='_get_user_openstate',tracking=True)
|
||||
order = fields.Integer('Reihenfolge')
|
||||
|
||||
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
|
|
@ -67,3 +72,20 @@ class dsssystemtypen(models.Model):
|
|||
rec.icon_5050 = rec.icon
|
||||
return
|
||||
|
||||
def _get_user_openstate(self):
|
||||
state=self.open_close_standard_state
|
||||
self.open_close_user_state=state
|
||||
return state
|
||||
|
||||
|
||||
|
||||
class dssstatesave(models.Model):
|
||||
|
||||
|
||||
_name = "dss.statesave"
|
||||
_description = "DigitalSignage Systemtypen StatusPerUser"
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
stategroup = fields.Selection([('SYSTYP','Systemtypen'),('CONTYP','Vertragsstatus')],'Status Gruppe', required=True)
|
||||
state = fields.Char('Status', required=True)
|
||||
user = fields.Char('Benutzer', required=True)
|
||||
state_open = fields.Boolean('Verhalten ', tracking=True)
|
||||
|
|
|
|||
|
|
@ -67,6 +67,12 @@ class dsstriggertypes(models.Model):
|
|||
def _default_create_user(self):
|
||||
return str(self.env.user.name)
|
||||
|
||||
def getfield(self,model,field_name):
|
||||
value = model
|
||||
for part in field_name.split('.'):
|
||||
value = getattr(value,part)
|
||||
return value
|
||||
|
||||
def _check_trigger(self):
|
||||
for record in self:
|
||||
_logger.info('Trigger Check TR_' + str(record)+' Begin')
|
||||
|
|
@ -79,11 +85,12 @@ class dsstriggertypes(models.Model):
|
|||
elif record.trigger_field.ttype in ['one2many']:
|
||||
val = self.env[record.trigger_table.model]._origin.read([record.trigger_field.name]).ids
|
||||
elif record.trigger_field.ttype in ['many2one']:
|
||||
val = self.env[record.trigger_table.model]._origin.read([record.trigger_field.name])
|
||||
# val = self.getfield(self.env[record.trigger_table.model],record.trigger_field.name+'.uuid')
|
||||
val = self.env[record.trigger_table.model]._fields[record.trigger_field.name].string
|
||||
else:
|
||||
val = False
|
||||
record.trigger_old_value = str(val)
|
||||
_logger.info('Trigger Check TR_' + str(record)+' oldValue '+str(val))
|
||||
_logger.info('Trigger Check TR_' + str(record)+' oldValue '+str(record.trigger_old_value)+' newValue '+str(val))
|
||||
_logger.info('Trigger Check TR_' + str(record)+' Ende')
|
||||
return ""
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
|
||||
# -*- coding: utf-8 -*
|
||||
|
||||
import ast
|
||||
import datetime
|
||||
import json
|
||||
import re
|
||||
import uuid
|
||||
import logging
|
||||
import base64
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
import easywebdav
|
||||
import os
|
||||
import os.path
|
||||
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo import tools
|
||||
from odoo.exceptions import ValidationError
|
||||
from datetime import date
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from pyffmpeg import FFmpeg
|
||||
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
|
||||
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
|
||||
import sys
|
||||
|
||||
TUYA_LOGGER.setLevel(logging.DEBUG)
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class dsspayintervals(models.Model):
|
||||
_name = "dss.payintervals"
|
||||
_description = "DigitalSignage Abrechnungsintervalle"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "payintervalname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
payintervalname = fields.Char('Interval Name', required=True)
|
||||
description = fields.Text('Interval Beschreibung')
|
||||
monate = fields.Float('Interval in Monaten')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
class dsspaysystems(models.Model):
|
||||
_name = "dss.paysystems"
|
||||
_description = "DigitalSignage Abrechnungsarten"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "payname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
payname = fields.Char('Abrechnungsname', required=True)
|
||||
payonset = fields.Many2many('dss.paysystem_fields')
|
||||
description = fields.Text('EventBeschreibung')
|
||||
send_info = fields.Boolean('Informationsemail senden ?')
|
||||
send_info_to = fields.Many2one('res.users')
|
||||
send_info_template = fields.Many2one('mail.template')
|
||||
amount = fields.Float('Kosten')
|
||||
icon = fields.Image()
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
|
||||
|
||||
class dsspaysystemfields(models.Model):
|
||||
_name = "dss.paysystem_fields"
|
||||
_description = "DigitalSignage Abrechnungsarten_felder"
|
||||
_inherit = ['mail.thread','mail.activity.mixin']
|
||||
_rec_name = "feldname"
|
||||
# _inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
||||
# uuid = fields.Char('UUID', required=True, translate=True)
|
||||
feldname = fields.Char('Abrechnungs_Feldname', required=True)
|
||||
payonfieldset = fields.Selection([('VE','Vertragseingang'),('KA','Korrekturabzug'),('ES','Einspielung'),('CH','Jede Änderung'),('XH','X, Änderung')])
|
||||
changecount = fields.Integer('Änderungsnummer')
|
||||
description = fields.Text('EventBeschreibung')
|
||||
amount = fields.Float('Kosten')
|
||||
|
||||
@api.model
|
||||
def _default_uuid(self):
|
||||
return str(uuid.uuid4())
|
||||
|
||||
|
||||
|
|
@ -28,3 +28,4 @@ digitalsignage_dss_triggergroups_group_user,access.dss.triggergroups,model_dss_t
|
|||
digitalsignage_dss_maintaintask_group_user,access.dss.maintaintask,model_dss_maintaintask,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_provision_group_user,access.dss.provision,model_dss_provision,base.group_user,1,1,1,1
|
||||
digitalsignage_dss_provisionstypen_group_user,access.dss.provisionstypen,model_dss_provisionstypen,DigitalSignage.group_prov_user,1,1,1,1
|
||||
digitalsignage_dss_payintervals_group_user,access.dss.payintervals,model_dss_payintervals,base.group_user,1,1,1,1
|
||||
|
|
|
|||
|
|
|
@ -26,3 +26,104 @@ body {
|
|||
margin-bottom: 0;
|
||||
font-family: sans-serif !important;
|
||||
}
|
||||
|
||||
.marker_content {
|
||||
font-size: 13px !important;
|
||||
width:100%;
|
||||
float:left;
|
||||
}
|
||||
|
||||
.marker_content tr {
|
||||
line-height: 7px;
|
||||
}
|
||||
|
||||
|
||||
.data_property{
|
||||
width:40%;
|
||||
}
|
||||
|
||||
.data_value{
|
||||
width:60%;
|
||||
}
|
||||
|
||||
.marker_top {
|
||||
font-size: 16px !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.marker_bottom {
|
||||
font-size: 12px !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.marker_image {
|
||||
font-size: 12px !important;
|
||||
text-align: center;
|
||||
float:left;
|
||||
}
|
||||
|
||||
.marker_table {
|
||||
width:100%;
|
||||
}
|
||||
|
||||
.slider-wrapper {
|
||||
margin: 1rem;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.slides-container {
|
||||
#height: calc(100vh - 2rem);
|
||||
height: 200px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: scroll;
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
.slides-container {
|
||||
scrollbar-width: none; /* Firefox */
|
||||
-ms-overflow-style: none; /* Internet Explorer 10+ */
|
||||
}
|
||||
/* WebKit */
|
||||
.slides-container::-webkit-scrollbar {
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
.slide {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
flex: 1 0 100%;
|
||||
}
|
||||
|
||||
.slide-arrow {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
height: 4rem;
|
||||
background-color: white;
|
||||
border: none;
|
||||
width: 2rem;
|
||||
font-size: 3rem;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
opacity: 0.5;
|
||||
transition: opacity 100ms;
|
||||
}
|
||||
.slide-arrow:hover,
|
||||
.slide-arrow:focus {
|
||||
opacity: 1;
|
||||
}
|
||||
#slide-arrow-prev {
|
||||
left: 0;
|
||||
padding-left: 0.25rem;
|
||||
border-radius: 0 2rem 2rem 0;
|
||||
}
|
||||
#slide-arrow-next {
|
||||
right: 0;
|
||||
padding-left: 0.75rem;
|
||||
border-radius: 2rem 0 0 2rem;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,32 +21,161 @@ function initialize_map() {
|
|||
imagePath: '/DigitalSignage/static/src/img/m'
|
||||
};
|
||||
|
||||
google.maps.event.addListener(map, 'click', function() {
|
||||
google.maps.event.addListener(map, 'click', function () {
|
||||
infoWindow.close();
|
||||
});
|
||||
|
||||
// Display the bubble once clicked
|
||||
var onMarkerClick = function() {
|
||||
var onMarkerClick = function () {
|
||||
var marker = this;
|
||||
var p = marker.project;
|
||||
if (p.google_freiflaechen_b_show == true) {
|
||||
var FFS = '<tr>' +
|
||||
'<td class="data_property">Freie Flächen</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_freiflaechen_b ? ' </br><b>' + p.google_freiflaechen_b + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>';
|
||||
} else {
|
||||
var FFS = '';
|
||||
}
|
||||
|
||||
infoWindow.setContent(
|
||||
'<div class="marker">'+
|
||||
(partner_url.length ? '<a target="_top" href="'+partner_url+'?id='+p.id+'"><b>'+p.google_name +'</b></a>' : '<b>'+p.google_name+'</b></br> : ' )+
|
||||
(p.google_typ ? ' </br><b>' + p.google_typ + '</b></br></br>' : '')+
|
||||
(p.google_image ? ' </br><img src="'+ p.google_image + '" width="200px"/></br></br>' : '')+
|
||||
(p.google_text ? ' </br><span> ' + p.google_text + '</span>' : '')+
|
||||
'<div class="marker">' +
|
||||
'<div class="marker_top">' +
|
||||
(partner_url.length ? '<a target="_top" href="' + partner_url + '?id=' + p.id + '"><b>' + p.google_name + '</b></a>' : '<b>' + p.google_name + '</b></br> : ') +
|
||||
'</div>' +
|
||||
'<section class="slider-wrapper">' +
|
||||
'<button class="slide-arrow" id="slide-arrow-prev">' +
|
||||
'‹' +
|
||||
'</button>' +
|
||||
'<button class="slide-arrow" id="slide-arrow-next">' +
|
||||
'›' +
|
||||
'</button>' +
|
||||
'<ul class="slides-container" id="slides-container">' +
|
||||
'<li class="slide" id="slide_1">' +
|
||||
'<div class="marker_image">' +
|
||||
(p.google_image ? ' </br><img src="' + p.google_image + '" width="200px"/></br></br>' : '') +
|
||||
'</div>' +
|
||||
'</li>'+
|
||||
'<li class="slide" id="slide_2">' +
|
||||
'<div class="marker_image">' +
|
||||
(p.google_image_2 ? ' </br><img src="' + p.google_image_2 + '" width="200px"/></br></br>' : '') +
|
||||
'</div>' +
|
||||
'</li>'+
|
||||
'<li class="slide" id="slide_3"></li>' +
|
||||
'</ul>' +
|
||||
'</section>' +
|
||||
'<div class="marker_content">' +
|
||||
'<table class="marker_table">' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Anzeigesystem</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_typ ? ' </br><b>' + p.google_typ + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Interaktiv</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_typ_interactive ? ' </br><b>' + p.google_typ_interactive + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Besucherzahl</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_visitors ? ' </br><b>' + p.google_visitors + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Anzeigetyp</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displaytyp ? ' </br><b>' + p.google_displaytyp + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Anzeigegrösse</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displaysize ? ' </br><b>' + p.google_displaysize + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Mögliche Werbeart 1 </td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displayflaechen_a ? ' </br><b>' + p.google_displayflaechen_a + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Werbeart 1 Verfügbar ?</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displayflaechen_a_free ? ' </br><b>' + p.google_displayflaechen_a_free + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Mögliche Werbeart 2</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displayflaechen_b ? ' </br><b>' + p.google_displayflaechen_b + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Werbeart 2 Verfügbar ?</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displayflaechen_b_free ? ' </br><b>' + p.google_displayflaechen_b_free + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' + FFS +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Nötige Werbemittel</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_displayfiles ? ' </br><b>' + p.google_displayfiles + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'<tr>' +
|
||||
'<td class="data_property">Buchungscode</td>' +
|
||||
'<td class="data_value">' +
|
||||
(p.google_id ? ' </br><b>' + p.google_id + '</b>' : '') +
|
||||
'</td>' +
|
||||
'</tr>' +
|
||||
'</table>' +
|
||||
'</div>' +
|
||||
'<div class="marker_bottom">' +
|
||||
(p.google_text ? ' </br><span> ' + p.google_text + '</span>' : '') +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
infoWindow.open(map, marker);
|
||||
const slidesContainer = document.getElementById("slides-container");
|
||||
const slide = document.querySelector(".slide");
|
||||
const prevButton = document.getElementById("slide-arrow-prev");
|
||||
const nextButton = document.getElementById("slide-arrow-next");
|
||||
console.log("imScript")
|
||||
google.maps.event.addListener(infoWindow, 'domready', function () {
|
||||
$('#slide-arrow-prev').click(function () {
|
||||
const slideWidth = $(".slide").width();
|
||||
$('#slides-container').scrollLeft(0);
|
||||
console.log("leftClick "+slideWidth)
|
||||
});
|
||||
$('#slide-arrow-next').click(function () {
|
||||
const slideWidth = $(".slide").width();
|
||||
$('#slides-container').scrollLeft(slideWidth);
|
||||
console.log("RightClick "+slideWidth)
|
||||
});
|
||||
});
|
||||
// var yourFunction = new YourFunction()
|
||||
|
||||
};
|
||||
|
||||
var YourFunction = function () {
|
||||
this.init = function () {
|
||||
|
||||
};
|
||||
this.init();
|
||||
}
|
||||
|
||||
// Create a bubble for a partner
|
||||
var set_marker = function(project) {
|
||||
var set_marker = function (project) {
|
||||
// If no lat & long, geocode address
|
||||
// TODO: a server cronjob that will store these coordinates in database instead of resolving them on-the-fly
|
||||
if (project.latitude && project.longitude) {
|
||||
var latLng = new google.maps.LatLng(project.latitude, project.longitude);
|
||||
var partners = new google.maps.MarkerImage('/DigitalSignage/static/src/img/'+project.google_marker, new google.maps.Size(55, 55));
|
||||
var partners = new google.maps.MarkerImage('/DigitalSignage/static/src/img/' + project.google_marker, new google.maps.Size(55, 55));
|
||||
var marker = new google.maps.Marker({
|
||||
project: project,
|
||||
icon: partners,
|
||||
|
|
@ -60,7 +189,7 @@ function initialize_map() {
|
|||
|
||||
/* eslint-disable no-undef */
|
||||
// Create the markers and cluster them on the map
|
||||
if (odoo_projects_data){ /* odoo_partner_data special variable should have been defined in google_map.xml */
|
||||
if (odoo_projects_data) { /* odoo_partner_data special variable should have been defined in google_map.xml */
|
||||
for (var i = 0; i < odoo_projects_data.counter; i++) {
|
||||
set_marker(odoo_projects_data.projects[i]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
/** @odoo-module */
|
||||
import { ListController } from "@web/views/list/list_controller";
|
||||
import { registry } from '@web/core/registry';
|
||||
import { listView } from '@web/views/list/list_view';
|
||||
import { useService } from "@web/core/utils/hooks";
|
||||
|
||||
var rpc = require('web.rpc')
|
||||
|
||||
export class configListController extends ListController {
|
||||
setup() {
|
||||
super.setup();
|
||||
|
||||
}
|
||||
SaveButtonClicked() {
|
||||
alert(this.archInfo.activeFields)
|
||||
rpc.query({
|
||||
model: 'dss.settings',
|
||||
method: 'saveConfig',
|
||||
args: [this.props.resModel,this.archInfo.activeFields],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
registry.category("views").add("button_in_tree", {
|
||||
...listView,
|
||||
Controller: configListController,
|
||||
buttonTemplate: "button_config.ListView.Buttons",
|
||||
});
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
/** @odoo-module */
|
||||
import { KanbanController } from "@web/views/kanban/kanban_controller";
|
||||
import { registry } from '@web/core/registry';
|
||||
import { kanbanView } from '@web/views/kanban/kanban_view';
|
||||
import { useService } from "@web/core/utils/hooks";
|
||||
|
||||
var rpc = require('web.rpc')
|
||||
|
||||
export class configKanbanController extends KanbanController {
|
||||
setup() {
|
||||
super.setup();
|
||||
}
|
||||
SaveButtonClicked() {
|
||||
rpc.query({
|
||||
model: 'dss.settings',
|
||||
method: 'saveConfig',
|
||||
args: [this.props,""],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
registry.category("views").add("button_in_kanban", {
|
||||
...kanbanView,
|
||||
Controller: configKanbanController,
|
||||
buttonTemplate: "button_config.KanbanView.Buttons",
|
||||
});
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-inherit="web.ListView.Buttons" t-name="button_config.ListView.Buttons">
|
||||
<xpath expr="//*[@class='btn btn-secondary fa fa-download o_list_export_xlsx']" position="before">
|
||||
<button type="button" class="btn btn-secondary fa fa-save" id="history_btn" t-on-click="SaveButtonClicked" t-att-data-model-name="props.modelName" />
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-inherit="web.KanbanView.Buttons" t-name="button_config.KanbanView.Buttons">
|
||||
<xpath expr="//*[@class='btn btn-primary o-kanban-button-new']" position="after">
|
||||
<button type="button" class="btn btn-secondary fa fa-save" id="history_btn" t-on-click="SaveButtonClicked" t-att-data-model-name="props.modelName" />
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
|
|
@ -111,30 +111,43 @@
|
|||
</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="contract_auto_name" optional="show"/>
|
||||
<field name="project_id" optional="hide"/>
|
||||
<field name="client_short_email" optional="hide"/>
|
||||
<field name="client_short_vorname" optional="hide"/>
|
||||
<field name="client_short_name"/>
|
||||
<field name="werbe_feld_selected" widget="many2many_tags"/>
|
||||
<field name="ads_last_state"/>
|
||||
<field name="ads_last_work_state"/>
|
||||
<field name="ads_last_todo_state"/>
|
||||
<field name="client_short_name" optional="hide"/>
|
||||
<field name="contract_name" optional="show"/>
|
||||
<field name="contract_state" optional="show"/>
|
||||
<field name="project" optional="hide"/>
|
||||
<field name="werbe_feld_selected" widget="many2many_tags" optional="show"/>
|
||||
<field name="ads_last_state" optional="show"/>
|
||||
<field name="ads_last_work_state" optional="show"/>
|
||||
<field name="ads_last_todo_state" optional="show"/>
|
||||
<field name="contract_writer" optional="hide"/>
|
||||
<!-- <field name="contract_auto_id" optional="show"/>
|
||||
<field name="client_id" optional="show"/>
|
||||
-->
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_project_contracts_tree_inherit_js_class" model="ir.ui.view">
|
||||
<field name="name">dss_project_contracts_tree_inherit</field>
|
||||
<field name="model">dss.contracts</field>
|
||||
<field name="inherit_id" ref="DigitalSignage.dss_project_contracts_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//tree" position="attributes">
|
||||
<attribute name="js_class">button_in_tree</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dss_project_new_contract_kanban" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage Projekt Vertraege</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
|
|
@ -213,8 +226,7 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="dss_main_contracts_tree" model="ir.ui.view">
|
||||
<!-- <record id="dss_main_contracts_tree" model="ir.ui.view">
|
||||
<field name="name">dss_contracts_tree</field>
|
||||
<field name="model">dss.contracts</field>
|
||||
<field name="priority" eval="17"/>
|
||||
|
|
@ -224,9 +236,12 @@
|
|||
<field name="contract_id"/>
|
||||
<field name="contract_name"/>
|
||||
<field name="project"/>
|
||||
<field name="contract_writer" optional="show"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
-->
|
||||
|
||||
|
||||
<record id="dss_main_contracts_form" model="ir.ui.view">
|
||||
<field name="name">dss_main_contracts_form</field>
|
||||
|
|
@ -309,12 +324,13 @@
|
|||
</group>
|
||||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
<field name="ads_last_ad" invisible="1"/>
|
||||
<group attrs="{'invisible': [('ads_last_ad','=',False)]}" >
|
||||
<field name="ads_last_state" string="Zuständigkeit (letzte Kamp.)"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
<group attrs="{'invisible': [('ads_last_ad','=',False)]}" >
|
||||
<field name="ads_last_work_state" string="Arbeitsstand (letzte Kamp.)"/>
|
||||
</group>
|
||||
</div>
|
||||
|
|
@ -325,12 +341,12 @@
|
|||
</group>
|
||||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
<group attrs="{'invisible': [('ads_last_ad','=',False)]}" >
|
||||
<field name="ads_last_todo_state" string="nächste Aufgabe (letzte Kamp.)"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
<group attrs="{'invisible': [('ads_last_ad','=',False)]}" >
|
||||
<field name="ads_last_todo_state_until" string="Aufgabe bis"/>
|
||||
</group>
|
||||
</div>
|
||||
|
|
@ -542,7 +558,7 @@
|
|||
<div class="col-2">
|
||||
<br></br>
|
||||
<br></br>
|
||||
<button icon="DigitalSignage/static/src/img/dsscalc.png" name="pyaction_dss_contract_calc_runtime_end" type="object" class="dss-smallbutton" data-hotkey="c" help="Berechnet das Laufzeitende des Vertrages und trägt diesen in einen Kalender ein !"/>
|
||||
<button icon="DigitalSignage/static/src/img/dsscalc.png" name="pyaction_dss_contract_calc_runtime_end" type="object" class="dss-smallbutton" data-hotkey="c" help="Berechnet das Laufzeitende des Vertrages und trägt diesen in einen Kalender ein !" attrs="{'invisible':[('contract_cancel_mon','=',0)]}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" >
|
||||
|
|
@ -561,9 +577,23 @@
|
|||
<div class="row" >
|
||||
<div class="col-8">
|
||||
<group string="Abrechnungsmodus">
|
||||
<field name="paymentsystems" string="Abrechnung"/>
|
||||
<field name="paymentsystems" string="Abrechnungmodus"/>
|
||||
<field name="paymentinterval" string="Abrechnungsinterval"/>
|
||||
<field name="intern_info_payment_off"/>
|
||||
</group>
|
||||
<group col="2" string="Zahlungsausgang">
|
||||
<group>
|
||||
<group colspan="2">
|
||||
<field name="contract_receipt_done"/>
|
||||
<field name="contract_receipt_number" placeholder="XXXXXXXX Rechnungsnummer"/>
|
||||
<field name="contract_receipt_done_date"/>
|
||||
<field name="contract_receipt_done_until_date"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="contract_receipt_done_multi"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Zahlungseingang">
|
||||
<field name="contract_payment_done"/>
|
||||
<field name="contract_payment_done_date"/>
|
||||
|
|
@ -583,19 +613,19 @@
|
|||
<field name="vnnox_zugang_erstellt" widget="boolean_toggle"/>
|
||||
<field name="vnnox_zugang_gesendet" widget="boolean_toggle"/>
|
||||
<field name="vnnox_zugang_username"/>
|
||||
<field name="vnnox_zugang_password" password="True"/>
|
||||
<field name="vnnox_zugang_password"/>
|
||||
</group>
|
||||
<group string="XIBO Anmeldung für Displays">
|
||||
<field name="xibo_zugang_erstellt" widget="boolean_toggle"/>
|
||||
<field name="xibo_zugang_gesendet" widget="boolean_toggle"/>
|
||||
<field name="xibo_zugang_username"/>
|
||||
<field name="xibo_zugang_password" password="True"/>
|
||||
<field name="xibo_zugang_password" />
|
||||
</group>
|
||||
<group string="LMW Anmeldung für Kunden allgemein">
|
||||
<field name="lmw_zugang_erstellt" widget="boolean_toggle"/>
|
||||
<field name="lmw_zugang_gesendet" widget="boolean_toggle"/>
|
||||
<field name="lmw_zugang_username"/>
|
||||
<field name="lmw_zugang_password" password="True" widget='password'/>
|
||||
<field name="lmw_zugang_password" />
|
||||
</group>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -853,12 +883,12 @@
|
|||
</record>
|
||||
|
||||
<record id="action_set_SaveViewState" model="ir.actions.server">
|
||||
<field name="name">Einstellung der Ansicht speichern</field>
|
||||
<field name="name">Zum Cloud-Ordner springen</field>
|
||||
<field name="model_id" ref="model_dss_contracts"/>
|
||||
<field name="binding_model_id" ref="model_dss_contracts"/>
|
||||
<field name="binding_view_types">kanban</field>
|
||||
<field name="binding_view_types">form</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.setFirstKampagne()</field>
|
||||
<field name="code">action = records.jumpcloud()</field>
|
||||
</record>
|
||||
|
||||
<data noupdate="1">
|
||||
|
|
|
|||
|
|
@ -66,6 +66,17 @@
|
|||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="ledsetings" string="LEDCabinet Daten" attrs="{'invisible': ['|',('geraetetyp','!=','ANZ'),('grundsystem_kennung','!=','LED')]}" >
|
||||
<group name="ledsettings_hw" string="LED Cabinet Daten" colspan="2">
|
||||
<group name="ledsettings" string="LED Cabinet Grunddaten" colspan="2">
|
||||
<field name="ledcab_module_breite"/>
|
||||
<field name="ledcab_module_hoehe"/>
|
||||
</group>
|
||||
<group name="ledsettings" string="LED Modul" colspan="2">
|
||||
<field name="ledcab_module"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="receivingssetings" string="Receivingcard Daten" attrs="{'invisible': ['|',('led_geraetetyp','!=','REC'),('grundsystem_kennung','!=','LED')]}" >
|
||||
<group name="ledsettings_hw" string="LED Receivingcard Daten" colspan="2">
|
||||
<field name="led_receivingcard_kennung" colspan="2"/>
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@
|
|||
<field name="maintainname"/>
|
||||
<field name="maintaintyp"/>
|
||||
<field name="project"/>
|
||||
<field name="maintain_tag"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -61,9 +62,9 @@
|
|||
<field name="name">DigitalSignage Einsätze</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.maintaintask</field>
|
||||
<field name="view_mode">form,tree</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain"></field>
|
||||
<field name="context">{'search_default_actual_projects': 1}</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="'o_view_nocontent_smiling_face">
|
||||
Fuege ein System ein !
|
||||
|
|
|
|||
|
|
@ -44,8 +44,17 @@
|
|||
<field name="grundsystemname" string="Kategorie"/>
|
||||
<field name="errichtet_am"/>
|
||||
<field name="aktstatus_color" widget="color"/>
|
||||
</group>
|
||||
<div class="row" >
|
||||
<div class="col-6">
|
||||
<group>
|
||||
<field name="cloudlink"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<button name="pyaction_dss_project_set_def_cloud" type="object" class="dss-smallbutton fa fa-chain" data-hotkey="c" help="Läd Standard Einstellungen für Projekt Cloud Ordner"/>
|
||||
</div>
|
||||
</div>
|
||||
<notebook>
|
||||
<page name="partnersettings" string="Partner/Adressen">
|
||||
<group>
|
||||
|
|
@ -115,6 +124,19 @@
|
|||
<field name="maps_type"/>
|
||||
<field name="maps_marker"/>
|
||||
<field name="maps_image" widget="Binary"/>
|
||||
<field name="maps_image_2" widget="Binary"/>
|
||||
<field name="maps_image_3" widget="Binary"/>
|
||||
<field name="maps_typ_interactive" widget="boolean_toggle"/>
|
||||
<field name="maps_visitors"/>
|
||||
<field name="maps_displaytyp"/>
|
||||
<field name="maps_displaysize"/>
|
||||
<field name="maps_werbeflaechen_a_free" widget="boolean_toggle"/>
|
||||
<field name="maps_werbeflaechen_a"/>
|
||||
<field name="maps_werbeflaechen_b_free" widget="boolean_toggle"/>
|
||||
<field name="maps_werbeflaechen_b"/>
|
||||
<field name="maps_freespaces_b_show" widget="boolean_toggle"/>
|
||||
<field name="maps_freespaces_b"/>
|
||||
<field name="maps_werbemedien"/>
|
||||
<field name="maps_text" widget="html_frame"/>
|
||||
</group>
|
||||
</div>
|
||||
|
|
@ -131,6 +153,7 @@
|
|||
<field name="maintainname"/>
|
||||
<field name="maintaintyp"/>
|
||||
<field name="project"/>
|
||||
<field name="maintain_tag"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
|
@ -200,6 +223,8 @@
|
|||
<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>
|
||||
<a name="jumpcloud" role="menuitem" type="object" class="dropdown-item">Cloud Ordner öffnen</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -237,6 +262,18 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_main_view_kanban_inherit_js_class" model="ir.ui.view">
|
||||
<field name="name">dss_project_contracts_tree_inherit</field>
|
||||
<field name="model">dss.projects</field>
|
||||
<field name="inherit_id" ref="DigitalSignage.dss_main_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//kanban" position="attributes">
|
||||
<attribute name="js_class">button_in_kanban</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="dss_main_view_tree" model="ir.ui.view">
|
||||
<field name="name">dss_projects_tree</field>
|
||||
<field name="model">dss.projects</field>
|
||||
|
|
@ -279,4 +316,13 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_set_prjumpcloud" model="ir.actions.server">
|
||||
<field name="name">Zum Cloud-Ordner springen</field>
|
||||
<field name="model_id" ref="model_dss_projects"/>
|
||||
<field name="binding_model_id" ref="model_dss_projects"/>
|
||||
<field name="binding_view_types">form,tree,kanban</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.jumpcloud()</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
<field name="statusname"/>
|
||||
<field name="typ" string="Zuordnung"/>
|
||||
<field name="icon" widget="image"/>
|
||||
<field name="order" widget="handle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -29,9 +29,16 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
<field name="def_cloud_url_base"/>
|
||||
</group>
|
||||
<group string="Vertragspfad" help="vom Projektordner aus">
|
||||
<field name="def_contract_cloudpath"/>
|
||||
<field name="def_contract_cloudpath_sample"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="def_contract_cloudpath_V2"/>
|
||||
<field name="def_contract_cloudpath_sample_V2"/>
|
||||
</group>
|
||||
</div>
|
||||
<div class="row">
|
||||
<group>
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
<field name="lcd_netzteil"/>
|
||||
</group>
|
||||
</page>
|
||||
|
||||
<page name="osssetings" string="LEDSystem Daten" attrs="{'invisible': [('grundsystem_kennung','!=','LED')]}" >
|
||||
<group name="ledsettings" string="LED Grunddaten">
|
||||
<field name="led_pixelpitch" colspan="2"/>
|
||||
|
|
@ -44,6 +45,10 @@
|
|||
<field name="led_pixel_breite"/>
|
||||
<field name="led_pixel_hoehe"/>
|
||||
</group>
|
||||
<group name="ledsettings_2" string="LEDWand Aufbau">
|
||||
<field name="led_cab_in_breite"/>
|
||||
<field name="led_cab_in_hoehe"/>
|
||||
</group>
|
||||
<group name="ledsettings_hw" string="LED Hardware">
|
||||
<field name="led_module"/>
|
||||
<field name="led_receivingcard"/>
|
||||
|
|
@ -62,6 +67,9 @@
|
|||
<field name="led_montage"/>
|
||||
<field name="led_montage_sonstige" attrs="{'invisible': [('grundsystem_kennung','!=','XXX')]}"/>
|
||||
</group>
|
||||
<group name="Bauart_Cabinets" string="Cabinets" attrs="{'invisible': [('grundsystem_kennung','!=','LED')]}">
|
||||
<field name="led_cabinets_sonstige" widget="many2many"/>
|
||||
</group>
|
||||
</page>
|
||||
<page name="energie" string="Ausstatung">
|
||||
<group name="energie" string="Austattung">
|
||||
|
|
|
|||
|
|
@ -10,9 +10,11 @@
|
|||
<field name="systemname"/>
|
||||
<field name="kennung"/>
|
||||
<field name="default_adstructure"/>
|
||||
<field name="open_close_standard_state" widget="boolean_toggle"/>
|
||||
<field name="farbe" string="Farbindex" widget="color"/>
|
||||
<field name="icon" />
|
||||
<field name="icon_5050" />
|
||||
<field name="order" widget="handle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -28,6 +30,7 @@
|
|||
<field name="kennung" string="Kurzkennung (XXX)"/>
|
||||
<field name="default_adstructure"/>
|
||||
<field name="default_cloud_path"/>
|
||||
<field name="open_close_standard_state" widget="boolean_toggle"/>
|
||||
</group>
|
||||
<group name="erscheinung" string="Aussehen">
|
||||
<field name="farbe" string="Farbkennung" widget="color"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="action_dss_main_payintervals" model="ir.actions.act_window">
|
||||
<field name="name">DigitalSignage Alle Abrechnungs-Intervalle</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">dss.payintervals</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No Contracts/Clients found. Let's create one!
|
||||
</p>
|
||||
<p>
|
||||
Keep track of the progress of your contracts from creation to completion.<br/>
|
||||
Collaborate efficiently by chatting in real-time or via email.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="dss_main_payintervals_tree" model="ir.ui.view">
|
||||
<field name="name">dss_payintervals_tree</field>
|
||||
<field name="model">dss.payintervals</field>
|
||||
<field name="priority" eval="17"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Vertragsuebersicht">
|
||||
<field name="payintervalname"/>
|
||||
<field name="description"/>
|
||||
<field name="monate"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="dss_main_payintervals_form" model="ir.ui.view">
|
||||
<field name="name">dss_main_payintervals_form</field>
|
||||
<field name="model">dss.payintervals</field>
|
||||
<field eval="2" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group name="interval" string="Intervaldaten">
|
||||
<field name="payintervalname"/>
|
||||
<field name="description"/>
|
||||
<field name="monate"/>
|
||||
</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>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -8,6 +8,9 @@
|
|||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
|
||||
<title>World Map</title>
|
||||
<link rel="stylesheet" type="text/css" href="/DigitalSignage/static/src/css/website_google_map.css"/>
|
||||
<script src="//code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
</head>
|
||||
<body t-att-data-partner-url="project_url or None">
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
<field name="color" widget="color"/>
|
||||
<field name="statusname"/>
|
||||
<field name="icon"/>
|
||||
<field name="order"/>
|
||||
<field name="order" widget="handle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
<field name="statusname"/>
|
||||
<field name="func" string="Funktion"/>
|
||||
<field name="icon"/>
|
||||
<field name="order"/>
|
||||
<field name="order" widget="handle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -126,6 +126,7 @@
|
|||
<field name="color" widget="color"/>
|
||||
<field name="statusname"/>
|
||||
<field name="icon"/>
|
||||
<field name="order" widget="handle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -164,6 +165,7 @@
|
|||
<field name="statusname"/>
|
||||
<field name="statusnr" string="Statusposition"/>
|
||||
<field name="icon"/>
|
||||
<field name="order" widget="handle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,13 @@
|
|||
action="action_dss_paysystems_view"
|
||||
sequence="120"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_dss_configuration_payintervals"
|
||||
name="Zahlungsintervalle verwalten"
|
||||
parent="menu_dss_div_internsetup"
|
||||
action="action_dss_main_payintervals"
|
||||
sequence="130"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_dss_configuration_provisionstypen"
|
||||
name="Provisionsarten verwalten"
|
||||
|
|
|
|||
Loading…
Reference in New Issue