Aufteilung & Logging

This commit is contained in:
jopster 2024-04-04 20:07:36 +02:00
parent 55ca69d691
commit f6dde36a63
17 changed files with 2225 additions and 474 deletions

View File

@ -14,7 +14,14 @@
'security/groups.xml', 'security/groups.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'views/menu.xml', 'views/menu.xml',
'views/dss.xml', 'views/dss_projectstate.xml',
'views/dss_systemtypen.xml',
'views/dss_projects.xml',
'views/dss_ads.xml',
'views/dss_contracts.xml',
'views/dss_mediafiles.xml',
'views/dss_addstructures.xml',
'views/dss_texts.xml',
'views/mainsystem_view.xml', 'views/mainsystem_view.xml',
'views/company_view.xml', 'views/company_view.xml',
], ],

View File

@ -1,15 +1,33 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import ast import ast
import json import json
import re import re
import uuid import uuid
import logging import logging
import base64
import subprocess
import tempfile
import easywebdav
import os
import os.path
from odoo import api, fields, models, _ from odoo import api, fields, models, _
from odoo import tools
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from datetime import date
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
def _generate_preview_from_binary(self, videofile_file):
cmd = ['ffmpeg', '-i','-','-ss','00:00:01','-vframes','1','-f','image2','-']
p = subprocess.Popen(cmd,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = p.communicate(videofile_file)
if p.returncode != 0:
pass
return base64.b64encode(out)
class dsscontracts(models.Model): class dsscontracts(models.Model):
@api.model @api.model
@ -39,69 +57,94 @@ class dsscontracts(models.Model):
_name = "dss.contracts" _name = "dss.contracts"
_description = "DigitalSignage Vertraege" _description = "DigitalSignage Vertraege"
_rec_name = "contract_auto_name" _rec_name = "contract_auto_name"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
contract_id = fields.Char("Kundennummer",store=True) contract_id = fields.Char("Kundennummer",store=True,tracking=True)
contract_name = fields.Char('Kurzbezeichnung', required=True) contract_name = fields.Char('Kurzbezeichnung', required=True,tracking=True)
contract_state = fields.Many2one('dss.contractstate',group_expand='_read_group_stage_ids') 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_state_order = fields.Integer(related='contract_state.order',store=True)
contract_auto_id = fields.Char("Kundennummer") contract_auto_id = fields.Char("Kundennummer",tracking=True)
contract_auto_name = fields.Char('Vertragskennug') contract_auto_name = fields.Char('Vertragskennug',tracking=True)
project = fields.Many2one('dss.projects' , string='Project', store=True) project = fields.Many2one('dss.projects' , string='Project', store=True,tracking=True)
project_id = fields.Integer(related='project.projectid', string='Project ID') project_id = fields.Integer(related='project.projectid', string='Project ID')
projectIid = fields.Integer('Project IID') projectIid = fields.Integer('Project IID',tracking=True)
client = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]") client = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]",tracking=True)
client_id = fields.Char("Kundenid") client_id = fields.Char("Kundenid",tracking=True)
client_uuid = fields.Char(related="client.dss_uuid") client_uuid = fields.Char(related="client.dss_uuid")
parent_id = fields.Many2one('dss.contracts', string='Parent Task', index=True) parent_id = fields.Many2one('dss.contracts', string='Parent Task', index=True,tracking=True)
client_short_company = fields.Char('Firmenname Kunde') client_short_company = fields.Char('Firmenname Kunde',tracking=True)
client_short_vorname = fields.Char('Vorname Kunde') client_short_vorname = fields.Char('Vorname Kunde',tracking=True)
client_short_name = fields.Char('Name Kunde') client_short_name = fields.Char('Name Kunde',tracking=True)
client_short_strasse = fields.Char('Strasse Kunde') client_short_strasse = fields.Char('Strasse Kunde',tracking=True)
client_short_plz = fields.Char('PLZ Kunde') client_short_plz = fields.Char('PLZ Kunde',tracking=True)
client_short_ort = fields.Char('Ort Kunde') client_short_ort = fields.Char('Ort Kunde',tracking=True)
client_short_land = fields.Many2one('res.country','Land Kunde') client_short_land = fields.Many2one('res.country','Land Kunde',tracking=True)
client_short_email = fields.Char('Email Kunde') client_short_email = fields.Char('Email Kunde',tracking=True)
client_short_telefon = fields.Char('Telefon Kunde') client_short_telefon = fields.Char('Telefon Kunde',tracking=True)
client_short_mobil = fields.Char('Mobilfunk Kunde') client_short_mobil = fields.Char('Mobilfunk Kunde',tracking=True)
client_short_website = fields.Char('Webseite Kunde') client_short_website = fields.Char('Webseite Kunde',tracking=True)
client_other_projects = fields.Many2many('dss.projects',string='Weitere Projekte') client_other_projects = fields.Many2many('dss.projects',string='Weitere Projekte',tracking=True)
werbe_feld_selected = fields.Many2many('dss.advertisefields',string='Werbefelder') werbe_feld_selected = fields.Many2many('dss.advertisefields',string='Werbefelder',tracking=True)
main_runtime = fields.Integer('Gesamtlaufzeit') main_runtime = fields.Integer('Gesamtlaufzeit',tracking=True)
split_runtime_count = fields.Integer('Laufzeit Teilungen') split_runtime_count = fields.Integer('Laufzeit Teilungen',tracking=True)
split_runtime_time = fields.Integer('Laufzeit Sekunden') split_runtime_time = fields.Integer('Laufzeit Sekunden',tracking=True)
contract_date = fields.Date('Vertragsdatum') contract_date = fields.Date('Vertragsdatum',tracking=True)
start_date = fields.Date('Ausstrahlungsdatum') start_date = fields.Date('Ausstrahlungsdatum',tracking=True)
runtimesystem = fields.Selection([('M','Monatslaufzeit'),('T','Tagelaufzeit'), ('E','Eventlaufzeit'), ('S','Sonderlaufzeit')]) runtimesystem = fields.Selection([('M','Monatslaufzeit'),('T','Tagelaufzeit'), ('E','Eventlaufzeit'), ('S','Sonderlaufzeit')],tracking=True)
runtime_m = fields.Integer('Laufzeit') runtime_m = fields.Integer('Laufzeit',tracking=True)
runtime_t = fields.Integer('Laufzeit') runtime_t = fields.Integer('Laufzeit',tracking=True)
runtime_events = fields.Many2many('dss.eventdays') runtime_events = fields.Many2many('dss.eventdays',tracking=True)
runtime_divers = fields.Char('Laufzeit') runtime_divers = fields.Char('Laufzeit',tracking=True)
paymentsystems = fields.Many2one('dss.paysystems',tracking=True)
info_account_changes = fields.Boolean('Benarichtigen bei Accountänderungen') intern_info_payment_off = fields.Boolean('Keine Zahl-Benachrichtigungen',tracking=True)
info_spot_changes = fields.Boolean('Benarichtigen bei Spotänderungen')
info_contract_changes = fields.Boolean('Benarichtigen bei Vertragsänderungen')
info_partner_changes = fields.Boolean('Benarichtigen bei Partneränderungen')
info_partner = fields.Many2one('res.partner','Benarichtigung an : ')
work_state = fields.Many2one('dss.workstate',default=_default_work_state) base_ad = fields.Many2one('dss.ads',tracking=True)
ads = fields.One2many('dss.ads','contract',tracking=True)
vnnox_zugang_erstellt = fields.Boolean('Vnnox Zugang ?',tracking=True)
vnnox_zugang_username = fields.Char('Vnnox Username',tracking=True)
vnnox_zugang_password = fields.Char('Vnnox Passwort',tracking=True)
vnnox_zugang_gesendet = fields.Boolean('Vnnox Zugang gesendet?',tracking=True)
xibo_zugang_erstellt = fields.Boolean('Xibo Zugang ?',tracking=True)
xibo_zugang_username = fields.Char('Xibo Username',tracking=True)
xibo_zugang_password = fields.Char('Xibo Passwort',tracking=True)
vnnox_zugang_gesendet = fields.Boolean('Xibo Zugang gesendet?',tracking=True)
lmw_zugang_erstellt = fields.Boolean('LMW Zugang ?',tracking=True)
lmw_zugang_username = fields.Char('LMW Username',tracking=True)
lmw_zugang_password = fields.Char('LMW Passwort',tracking=True)
lmw_zugang_gesendet = fields.Boolean('LMW Zugang gesendet?',tracking=True)
wflow_korrekturabzug = fields.Boolean('Korekturabzug gesendet ?',tracking=True)
wflow_ausstahlung = fields.Boolean('Eingespielt/Ausgestahlt ?',tracking=True)
wflow_aenderung = fields.Boolean('Änderung durchgeführt ?',tracking=True)
info_account_changes = fields.Boolean('Benachrichtigen bei Accountänderungen',tracking=True)
info_spot_changes = fields.Boolean('Benachrichtigen bei Spotänderungen',tracking=True)
info_contract_changes = fields.Boolean('Benachrichtigen bei Vertragsänderungen',tracking=True)
info_partner_changes = fields.Boolean('Benachrichtigen bei Partneränderungen',tracking=True)
info_partner = fields.Many2one('res.partner','Benachrichtigung an : ',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_color = fields.Char(related='work_state.color')
work_state_text = fields.Char(related='work_state.statusname') work_state_text = fields.Char(related='work_state.statusname')
work_state_info = fields.Char('Zusatzinfo') work_state_info = fields.Char('Zusatzinfo',tracking=True)
todo_state = fields.Many2one('dss.todostate',default=_default_todo_state) todo_state = fields.Many2one('dss.todostate',default=_default_todo_state,tracking=True)
todo_state_color = fields.Char(related='todo_state.color') todo_state_color = fields.Char(related='todo_state.color')
todo_state_text = fields.Char(related='todo_state.statusname') todo_state_text = fields.Char(related='todo_state.statusname')
todo_state_info = fields.Char('Zusatzinfo') todo_state_info = fields.Char('Zusatzinfo',tracking=True)
todo_state_until = fields.Date('Abarbeiten bis') todo_state_until = fields.Date('Abarbeiten bis',tracking=True)
cloud_contract_directory = fields.Char('Cloud Kunden Ordner',tracking=True)
@api.constrains('client_id') @api.constrains('client_id')
def _check_client_id(self) : def _check_client_id(self) :
@ -192,6 +235,28 @@ class dsscontracts(models.Model):
# action['context'] = context # action['context'] = context
return action return action
def tokampagne(self):
action = self.env['ir.actions.act_window'].with_context({'default_contractid': self.id})._for_xml_id('DigitalSignage.action_dss_ads_view')
context = action['context']
kampagne=self.env['dss.ads'].search([('contract','=',self.id)],limit=1)
if not kampagne :
defadstate = self.env['dss.adstate'].search([('default','=',True)],limit=1).id
if not defadstate :
defadstate == 1
kampagne = self.env['dss.ads'].create({'contract': self.id, 'project': self.project.id, 'adname': 'WK '+self.contract_auto_name,'adtype':'MAIN','ad_state':defadstate})
kampagne.parent_ad = kampagne.id
return {
'type': 'ir.actions.act_window',
'view_type':'form',
'view_mode':'form,tree',
'res_model':'dss.ads',
'target':'current',
'context':'',
'res_id':kampagne.id,
'display_name' : 'Änderung zur Werbekampagne '+kampagne.parent_ad.adname,
'domain':'[("id","=","context[kampagne.id]")]'
}
@api.model @api.model
def pyaction_view_contract(self): def pyaction_view_contract(self):
@ -231,28 +296,31 @@ class dssmain(models.Model):
_name = "dss.projects" _name = "dss.projects"
_description = "DigitalSignage Projekte" _description = "DigitalSignage Projekte"
_rec_name = "projektname" _rec_name = "projektname"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
projektname = fields.Char('Projektname', required=True) projektname = fields.Char('Projektname', required=True)
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
projectid = fields.Integer('Projekt ID') projectid = fields.Integer('Projekt ID',tracking=True)
color = fields.Integer('Color Index') color = fields.Char('Color Index',tracking=True)
active = fields.Boolean('Active', default=True) active = fields.Boolean('Active', default=True,tracking=True)
name = fields.Char('Interner Name', required=True) name = fields.Char('Interner Name', required=True,tracking=True)
aktstatus = fields.Many2one('dss.projectstate',string='Aktueller Status:') aktstatus = fields.Many2one('dss.projectstate',string='Aktueller Status:',tracking=True)
aktstatus_color = fields.Integer(related='aktstatus.color') aktstatus_typ = fields.Selection(related='aktstatus.typ')
aktstatus_color = fields.Char(related='aktstatus.color')
aktstatus_icon = fields.Image(related='aktstatus.icon') aktstatus_icon = fields.Image(related='aktstatus.icon')
description = fields.Text('Beschreibung') description = fields.Text('Beschreibung',tracking=True)
systemname = fields.Many2one('dss.systems') systemname = fields.Many2one('dss.systems',tracking=True)
grundsystemname = fields.Many2one('dss.systemtypen') grundsystemname = fields.Many2one('dss.systemtypen',tracking=True)
grundsystemicon = fields.Image(related='grundsystemname.icon') grundsystemicon = fields.Image(related='grundsystemname.icon',tracking=True)
grundsystemicon5050 = fields.Image(related='grundsystemname.icon_5050') grundsystemicon5050 = fields.Image(related='grundsystemname.icon_5050')
vertragsschreiber = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',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)]") standortpartner = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_standort','=',True)]",tracking=True)
vertriebspartner = fields.Many2many('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',True)]") vertriebspartner = fields.Many2many('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',True)]",tracking=True)
zeiten_on = fields.Datetime('Einschaltzeit') zeiten_on = fields.Datetime('Einschaltzeit',tracking=True)
zeiten_off = fields.Datetime('Ausschaltzeit') zeiten_off = fields.Datetime('Ausschaltzeit',tracking=True)
errichtet_am = fields.Datetime('Errichtungstag') errichtet_am = fields.Datetime('Errichtungstag',tracking=True)
standort_inout = fields.Selection([('indoor','im Gebäude'), ('outdoor','Aussenbereich'), ('semiindoor','Überdachter Aussenbereich'),('Divers','Andere Art')]); standort_inout = fields.Selection([('indoor','im Gebäude'), ('outdoor','Aussenbereich'), ('semiindoor','Überdachter Aussenbereich'),('Divers','Andere Art')],tracking=True);
cloud_main_directory = fields.Char('Cloud Projekt Ordner',tracking=True)
@api.model @api.model
def _default_uuid(self): def _default_uuid(self):
@ -277,66 +345,66 @@ class dssmain(models.Model):
class dssgeraetetypen(models.Model): class dssgeraetetypen(models.Model):
_name = "dss.geraetetypen" _name = "dss.geraetetypen"
_description = "DigitalSignage Geraetetypen" _description = "DigitalSignage Geraetetypen"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "geraetename" _rec_name = "geraetename"
geraetename = fields.Char('Geraetename', required=True) geraetename = fields.Char('Geraetename', required=True)
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
geraetetyp = fields.Selection([('SYS','Systemgerät'), ('STE','Steuergerät'), ('DIV','Anderes'), ('ANZ','Anzeigegerät'), ('PLY','Abspielgerät')]) geraetetyp = fields.Selection([('SYS','Systemgerät'), ('STE','Steuergerät'), ('DIV','Anderes'), ('ANZ','Anzeigegerät'), ('PLY','Abspielgerät')],tracking=True)
grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für") grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für",tracking=True)
grundsystem_kennung = fields.Char(string='Kennung', related='grundsystem.kennung') grundsystem_kennung = fields.Char(string='Kennung', related='grundsystem.kennung',tracking=True)
farbe = fields.Char('Grundfarbe') farbe = fields.Char('Grundfarbe',tracking=True)
has_heizung = fields.Boolean('Mit Heizsystem') has_heizung = fields.Boolean('Mit Heizsystem',tracking=True)
has_klima = fields.Boolean('Mit Klimasystem') has_klima = fields.Boolean('Mit Klimasystem',tracking=True)
has_fan = fields.Boolean('Mit Ventiltorensystem') has_fan = fields.Boolean('Mit Ventiltorensystem',tracking=True)
stromzaehler = fields.Many2one('dss.geraetetypen') stromzaehler = fields.Many2one('dss.geraetetypen',tracking=True)
stromverbrauch_avg = fields.Integer('Stromverbrauch AVG in W') stromverbrauch_avg = fields.Integer('Stromverbrauch AVG in W',tracking=True)
osvorhanden = fields.Boolean('Mit Betriebssystem') osvorhanden = fields.Boolean('Mit Betriebssystem',tracking=True)
osname = fields.Char('Betriebssystem') osname = fields.Char('Betriebssystem',tracking=True)
ostyp = fields.Selection([('Win','Windows'), ('Lin','Linux'), ('And','Android'),('Ras','Raspberry PI'),('Non','Keines bekannt'),('Div','Anderes')]); ostyp = fields.Selection([('Win','Windows'), ('Lin','Linux'), ('And','Android'),('Ras','Raspberry PI'),('Non','Keines bekannt'),('Div','Anderes')],tracking=True);
lcd_ausrichtung = fields.Selection([('quer','Horizontal/Querformat'), ('hoch','Vertikal/Hochformat'),('Divers','Andere Art')],'LCD Ausrichtung'); lcd_ausrichtung = fields.Selection([('quer','Horizontal/Querformat'), ('hoch','Vertikal/Hochformat'),('Divers','Andere Art')],'LCD Ausrichtung',tracking=True);
lcd_touch = fields.Boolean('Touchsystem') lcd_touch = fields.Boolean('Touchsystem',tracking=True)
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'); 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') lcd_montage_sonstige = fields.Char('Sonstige Montageart',tracking=True)
lcd_size = fields.Selection([('42','42 Zoll'), ('55','55 Zoll'), ('65','65 Zoll'),('75','75 Zoll'),('10','10.x Zoll'),('00','Sonstige')],'LCD Größe'); lcd_size = fields.Selection([('42','42 Zoll'), ('55','55 Zoll'), ('65','65 Zoll'),('75','75 Zoll'),('10','10.x Zoll'),('00','Sonstige')],'LCD Größe',tracking=True);
lcd_size_sonstige = fields.Char('LCD Sondergröße') lcd_size_sonstige = fields.Char('LCD Sondergröße',tracking=True)
led_geraetetyp = fields.Selection([('MOD','LED Modul'),('NET','Netzgerät'), ('REC','Receiving Karte'), ('STE','Steuerkarte'),('LFT','Lüftertyp')]) led_geraetetyp = fields.Selection([('MOD','LED Modul'),('NET','Netzgerät'), ('REC','Receiving Karte'), ('STE','Steuerkarte'),('LFT','Lüftertyp')],tracking=True)
led_module_pixelpitch = fields.Float('Modulpixelpitch') led_module_pixelpitch = fields.Float('Modulpixelpitch',tracking=True)
led_module_breite = fields.Integer('Modulbreite mm') led_module_breite = fields.Integer('Modulbreite mm',tracking=True)
led_module_hoehe = fields.Integer('Modulhoehe mm') led_module_hoehe = fields.Integer('Modulhoehe mm',tracking=True)
led_module_pixel_breite = fields.Integer('Modulbreite px') led_module_pixel_breite = fields.Integer('Modulbreite px',tracking=True)
led_module_pixel_hoehe = fields.Integer('Modulhoehe px') led_module_pixel_hoehe = fields.Integer('Modulhoehe px',tracking=True)
led_module_system = fields.Selection([('FIX1','Fix Verschraubt'), ('MAG1','Magnetisch haltend'), ('RIG1','Imbus Veriegelt (vorn)'),('SONS','Sonstige')],'Modul Montage/Befestigung'); led_module_system = fields.Selection([('FIX1','Fix Verschraubt'), ('MAG1','Magnetisch haltend'), ('RIG1','Imbus Veriegelt (vorn)'),('SONS','Sonstige')],'Modul Montage/Befestigung',tracking=True);
led_module_system_sonstige = fields.Char('Modulbefestigung Sonstige') led_module_system_sonstige = fields.Char('Modulbefestigung Sonstige',tracking=True)
led_module_kennung = fields.Char('Modulbezeichnung') led_module_kennung = fields.Char('Modulbezeichnung',tracking=True)
led_module_serial = fields.Char('Modulseriennummer') led_module_serial = fields.Char('Modulseriennummer',tracking=True)
led_module_vendor = fields.Many2one('res.partner','Modul Hersteller') led_module_vendor = fields.Many2one('res.partner','Modul Hersteller',tracking=True)
led_receivingcard_vendor = fields.Many2one('res.partner','Receivingcard Hersteller') led_receivingcard_vendor = fields.Many2one('res.partner','Receivingcard Hersteller')
led_receivingcard_kennung = fields.Char('Receivingcardtyp') led_receivingcard_kennung = fields.Char('Receivingcardtyp')
led_netzteil_typ = fields.Selection([('SNT','Schaltnetzteil'), ('STN','Steckernetzteil'), ('HNT','Hutschienennetzteil'),('INT','Internes Netzteil')],'Netzteil Bauart'); led_netzteil_typ = fields.Selection([('SNT','Schaltnetzteil'), ('STN','Steckernetzteil'), ('HNT','Hutschienennetzteil'),('INT','Internes Netzteil')],'Netzteil Bauart',tracking=True);
led_netzteil_vendor = fields.Many2one('res.partner','Netzteil Hersteller') led_netzteil_vendor = fields.Many2one('res.partner','Netzteil Hersteller',tracking=True)
led_netzteil_kennung = fields.Char('Netzteilkennung') led_netzteil_kennung = fields.Char('Netzteilkennung',tracking=True)
led_netzteil_spannung = fields.Char('Netzteil Spannung V') led_netzteil_spannung = fields.Char('Netzteil Spannung V',tracking=True)
led_netzteil_leistung = fields.Char('Netzteil Leistung W') led_netzteil_leistung = fields.Char('Netzteil Leistung W',tracking=True)
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'); 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') lcd_montage_sonstige = fields.Char('Sonstige Montageart',tracking=True)
hw_anzeige = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','ANZ')]") hw_anzeige = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','ANZ')]",tracking=True)
hw_steuerung = fields.Many2one('dss.geraetetypen',domain="['&',('geraetetyp','=','STE'),('grundsystem_kennung','=','LED')]") hw_steuerung = fields.Many2one('dss.geraetetypen',domain="['&',('geraetetyp','=','STE'),('grundsystem_kennung','=','LED')]",tracking=True)
hw_player = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','PLY')]") hw_player = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','PLY')]",tracking=True)
hw_umwelt = fields.Many2one('dss.geraetetypen',domain="['|',('geraetetyp','=','SYS'),('geraetetyp','=','DIV')]") hw_umwelt = fields.Many2one('dss.geraetetypen',domain="['|',('geraetetyp','=','SYS'),('geraetetyp','=','DIV')]",tracking=True)
zusatz_integrationen = fields.Many2one('dss.geraetetypen') zusatz_integrationen = fields.Many2one('dss.geraetetypen',tracking=True)
@api.model @api.model
def _default_uuid(self): def _default_uuid(self):
@ -349,6 +417,8 @@ class dssgeraetetypen(models.Model):
syst.grundsystem_kennung = syst.grundsystem.kennung syst.grundsystem_kennung = syst.grundsystem.kennung
class dsssystemtypen(models.Model): class dsssystemtypen(models.Model):
_name = "dss.systemtypen" _name = "dss.systemtypen"
_inherit = ['mail.thread'] _inherit = ['mail.thread']
_description = "DigitalSignage Systemtypen" _description = "DigitalSignage Systemtypen"
@ -356,20 +426,35 @@ class dsssystemtypen(models.Model):
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
systemname = fields.Char('Systemname', required=True) systemname = fields.Char('Systemname', required=True)
kennung = fields.Char('Kurzkennung', required=True) kennung = fields.Char('Kurzkennung', required=True)
farbe = fields.Integer('Grundfarbe') farbe = fields.Char('Grundfarbe')
icon = fields.Image() icon = fields.Image()
icon_5050 = fields.Image("Icon 50") icon_5050 = fields.Image("Icon 50",compute='_compute_icon_5050')
default_adstructure = fields.Many2one('dss.adstructures',String='Standard-Werbeaufbau')
@api.model @api.model
def _default_uuid(self): def _default_uuid(self):
return str(uuid.uuid4()) return str(uuid.uuid4())
@api.depends('icon')
def _compute_icon_5050(self):
for rec in self:
if rec.icon != False:
_logger.info('compute 50x50 icon for '+rec.uuid)
# rec.mediafile_preview = self._generate_preview_from_binary(base64.decodebytes(rec.mediafile))
# rec.icon_5050 = tools.image_resize_image(rec.icon,size=(50,50),avoid_if_small=True)
rec.icon_5050 = rec.icon
# if rec.mediafile != False:
# rec.mediafile_preview = self._generate_preview_from_binary(base64.decodebytes(rec.mediafile))
# rec.mediafile_preview = None
else:
_logger.info('alternative compute '+rec.uuid)
rec.icon_5050 = rec.icon
return
class dsssoftware(models.Model): class dsssoftware(models.Model):
_name = "dss.software" _name = "dss.software"
_description = "Softwaresysteme" _description = "Softwaresysteme"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "softwarename" _rec_name = "softwarename"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
@ -385,7 +470,7 @@ class dsssoftware(models.Model):
class dsssystems(models.Model): class dsssystems(models.Model):
_name = "dss.systems" _name = "dss.systems"
_description = "DigitalSignage Systemtypen" _description = "DigitalSignage Systemtypen"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "systemname" _rec_name = "systemname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
@ -440,13 +525,14 @@ class dsssystems(models.Model):
class dsspprojektstatus(models.Model): class dsspprojektstatus(models.Model):
_name = "dss.projectstate" _name = "dss.projectstate"
_description = "DigitalSignage Projektstatus" _description = "DigitalSignage Projektstatus"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "statusname" _rec_name = "statusname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
# uuid = fields.Char('UUID', required=True, translate=True) # uuid = fields.Char('UUID', required=True, translate=True)
statusname = fields.Char('Statusname', required=True) statusname = fields.Char('Statusname', required=True)
color = fields.Integer(string='Color Index') 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() icon = fields.Image()
@api.model @api.model
@ -456,13 +542,31 @@ class dsspprojektstatus(models.Model):
class dsscontractstatus(models.Model): class dsscontractstatus(models.Model):
_name = "dss.contractstate" _name = "dss.contractstate"
_description = "DigitalSignage Vertragsstatus" _description = "DigitalSignage Vertragsstatus"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "statusname" _rec_name = "statusname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
# uuid = fields.Char('UUID', required=True, translate=True) # uuid = fields.Char('UUID', required=True, translate=True)
statusname = fields.Char('Statusname', required=True) statusname = fields.Char('Statusname', required=True)
color = fields.Integer(string='Color Index') color = fields.Char(string='Color Index')
icon = fields.Image()
order = fields.Integer('Reihenfolge')
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
class dssadstatus(models.Model):
_name = "dss.adstate"
_description = "DigitalSignage Werbeaktions-Status"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "statusname"
# _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)
statusname = fields.Char('Statusname', required=True)
color = fields.Char(string='Color Index')
default = fields.Boolean('Standardwert ?')
icon = fields.Image() icon = fields.Image()
order = fields.Integer('Reihenfolge') order = fields.Integer('Reihenfolge')
@ -474,7 +578,7 @@ class dsscontractstatus(models.Model):
class dssworkstatus(models.Model): class dssworkstatus(models.Model):
_name = "dss.workstate" _name = "dss.workstate"
_description = "DigitalSignage Bearbeitungsstatus" _description = "DigitalSignage Bearbeitungsstatus"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "statusname" _rec_name = "statusname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
@ -490,7 +594,7 @@ class dssworkstatus(models.Model):
class dsseventdays(models.Model): class dsseventdays(models.Model):
_name = "dss.eventdays" _name = "dss.eventdays"
_description = "DigitalSignage EventSpieltage" _description = "DigitalSignage EventSpieltage"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "eventname" _rec_name = "eventname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
@ -509,7 +613,7 @@ class dsseventdays(models.Model):
class dsstodostatus(models.Model): class dsstodostatus(models.Model):
_name = "dss.todostate" _name = "dss.todostate"
_description = "DigitalSignage Bearbeitungsschritte" _description = "DigitalSignage Bearbeitungsschritte"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "statusname" _rec_name = "statusname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
@ -526,7 +630,7 @@ class dsstodostatus(models.Model):
class dssadvertisefields(models.Model): class dssadvertisefields(models.Model):
_name = "dss.advertisefields" _name = "dss.advertisefields"
_description = "DigitalSignage Werbefelder" _description = "DigitalSignage Werbefelder"
_inherit = ['mail.thread'] _inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "feldname" _rec_name = "feldname"
# _inherit = ['mail.thread', 'mail.activity.mixin'] # _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID') uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
@ -542,5 +646,386 @@ class dssadvertisefields(models.Model):
def _default_uuid(self): def _default_uuid(self):
return str(uuid.uuid4()) return str(uuid.uuid4())
class dsstexts(models.Model):
_name = "dss.texts"
_description = "DigitalSignage Standard texte"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "textname"
# _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)
text_id = fields.Char('Kennung', required=True)
textname = fields.Char('Textname', required=True)
description = fields.Text('Text')
@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())
class dssmediatypes(models.Model):
_name = "dss.mediatypes"
_description = "DigitalSignage Datei-Medientypen"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "medianame"
# _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)
medianame = fields.Char('Medien Name', required=True)
mediatype = fields.Selection([('IMG_J','Bild'),('VID_4','MP4 Video'),('FIL_X','belieb. Datei')])
description = fields.Text('Medien Beschreibung')
cloudlink = fields.Char('Cloud Urverzeichnis')
maxsize_kb = fields.Integer('Maximale Größe KB')
maxsize_w = fields.Integer('Maximale Pixel W')
maxsize_h = fields.Integer('Maximale Pixel H')
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
class dssmediarelations(models.Model):
def _generate_preview_from_binary(self, videofile_file):
cmd = ['ffmpeg', '-i','-','-ss','00:00:01','-vframes','1','-f','image2','-']
p = subprocess.Popen(cmd,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = p.communicate(videofile_file)
if p.returncode != 0:
pass
return base64.b64encode(out)
def _generate_preview_and_save_from_binary(self, videofile_file, videofile_file_name:str):
cmd = ['ffmpeg', '-i','-','-ss','00:00:01','-vframes','1','-f','image2','-']
p = subprocess.Popen(cmd,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = p.communicate(videofile_file)
if p.returncode != 0:
_logger.info(videofile_file_name)
fileobj = open(videofile_file_name,"xb")
fileobj.write(out)
fileobj.close()
pass
return base64.b64encode(out)
_name = "dss.mediarelations"
_description = "DigitalSignage Kampagne-Medien-Zuordnung"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "relname"
# _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)
kampagne = fields.Many2one('dss.ads',string='Kampagne')
mediatype = fields.Many2one('dss.mediatypes',string='Medientyp')
mediatype_type = fields.Selection(related='mediatype.mediatype',string='Medientyp')
relname = fields.Char('Relationsname')
kampagnen_uuid = fields.Char('Kampagne')
mediatype_uuid = fields.Char('Medientyp')
mediafile = fields.Binary('Datei',attachment=True)
mediafile_attachment = fields.Many2one('ir.attachment',string='Datei')
mediafile_file = fields.Char('Dateiname')
mediafile_preview = fields.Binary('Datei Vorschau',compute='_compute_media_preview')
secured_ro = fields.Boolean('Gesperrt ro')
used_ro = fields.Boolean('Benutzt ro')
@api.onchange('mediafile')
def _onchange_mediafile(self):
restr = 'keine'
for record in self :
resstr = record.uuid
_logger.info(record.mediafile)
if record.mediafile != False :
_logger.info('Generating File '+resstr)
if os.path.isfile(record.mediafile_file) :
os.remove(record.mediafile_file)
fileobj = open(record.mediafile_file,"xb")
fileobj.write(base64.decodebytes(record.mediafile))
fileobj.close()
_logger.info(resstr+' File generated')
_logger.info(' Projekt : '+record.kampagne.contract.project.uuid)
_logger.info(' Keine Datei ')
return
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
@api.depends('mediafile_file')
def _compute_media_preview(self):
for rec in self:
if rec.mediafile != False:
_logger.info('compute image for '+rec.uuid)
# rec.mediafile_preview = self._generate_preview_from_binary(base64.decodebytes(rec.mediafile))
rec.mediafile_preview = self._generate_preview_and_save_from_binary(base64.decodebytes(rec.mediafile),rec.mediafile_file+'_prv')
# if rec.mediafile != False:
# rec.mediafile_preview = self._generate_preview_from_binary(base64.decodebytes(rec.mediafile))
# rec.mediafile_preview = None
else:
_logger.info('alternative compute '+rec.uuid)
rec.mediafile_preview = rec.mediafile
return
class dssadstructures(models.Model):
_name = "dss.adstructures"
_description = "DigitalSignage Werbestrukturen"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "structurename"
# _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)
structurename = fields.Char('Struktur Name', required=True)
kampagnen_uuid = fields.Char('Kampagne')
description = fields.Text('Struktur Beschreibung')
medias = fields.Many2many('dss.mediatypes',string='Enthaltene Dateien')
@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 dsscontractads(models.Model):
def _default_work_state(self):
ds=self.env['dss.workstate'].search([('statusname','=','Neu')],limit=1).id
_logger.debug(ds)
return ds
def _default_work_state_color(self):
ds=self.env['dss.workstate'].search([('statusname','=','Neu')],limit=1).color
_logger.info(ds)
return ds
def _default_todo_state(self):
ds=self.env['dss.todostate'].search([('statusnr','=','0')],limit=1).id
if not ds : ds = 1
_logger.debug(ds)
# ds =
return ds
@api.model
def create(self,vals):
result = super().create(vals)
self['date_create'] = date.today()
self['user_create'] = self.env.user.name
return result
_name = "dss.ads"
_description = "DigitalSignage Werbekampagnen Phasen"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "adname"
# _inherit = ['mail.thread', 'mail.activity.mixin']
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
date_create = fields.Date('Erstellungsdatum',default=lambda self: self._default_create_date())
date_lastedit = fields.Date('Änderungsdatum')
user_create = fields.Char('Erstellungsuser',default=lambda self: self._default_create_user())
user_lastedit = fields.Char('Änderungsuser')
# uuid = fields.Char('UUID', required=True, translate=True)
adname = fields.Char('Kampagnenname', required=True,track_visibility='onchange',tracking=True)
adtype = fields.Selection([('MAIN','Ersteinrichtung'),('KCHN','Änderung durch Kunde'),('LCHN','Änderung durch Logumedia'),('SONS','Sonstige Änderung')],track_visibility='onchange',tracking=True)
adpos = fields.Integer('Reihenfolge',default=lambda self: self._default_adpos(),track_visibility='onchange',tracking=True)
contract = fields.Many2one('dss.contracts',store=True,track_visibility='onchange',tracking=True)
contract_id = fields.Char(related='contract.contract_id')
contract_name = fields.Char(related='contract.contract_name')
project = fields.Many2one('dss.projects' , string='Project', store=True,track_visibility='onchange',tracking=True)
project_id = fields.Integer(related='project.projectid', string='Project ID')
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')
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')
ad_state = fields.Many2one('dss.adstate',tracking=True)
ad_state_color = fields.Char(related='ad_state.color')
todo_state = fields.Many2one('dss.todostate',default=_default_todo_state,tracking=True)
todo_state_color = fields.Char(related='todo_state.color')
todo_state_text = fields.Char(related='todo_state.statusname')
todo_state_info = fields.Char('Zusatzinfo')
todo_state_until = fields.Date('Abarbeiten bis')
mediastructure = fields.Many2one('dss.adstructures',string='Systemaufbau',tracking=True)
mediarelations = fields.One2many('dss.mediarelations','kampagne',tracking=True)
cloud_add_directory = fields.Char('Cloud KundenKampagnen Ordner',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)
def _default_adpos(self):
pos = self.env['dss.ads'].search_count([('contract_id','=',self.contract.id)]) + 1
return str(pos)
@api.onchange('mediastructure')
def _onchange_mediastructure_id(self):
restr = 'keine'
for record in self :
resstr = record.mediastructure.uuid
_logger.info(resstr)
mtyp = self.env['dss.adstructures'].search([("uuid","=",str(record.mediastructure.uuid))])
resstr = mtyp.structurename
_logger.info(resstr)
_logger.info(record.mediastructure.uuid)
foundused = self.env['dss.mediarelations'].search_count(["&",('kampagnen_uuid','=',record.uuid),'|',('secured_ro','=',True),('used_ro','=',True)])
if foundused == 0 :
self.env['dss.mediarelations'].search([('kampagnen_uuid','=',record.uuid)]).unlink()
for media in mtyp.medias :
resstr = media.medianame
self.env['dss.mediarelations'].create({'kampagne': record.id,'relname':resstr,'mediatype':media.id,'kampagnen_uuid':record.uuid})
_logger.info(resstr)
else :
_logger.info('change - Canceled !')
raise ValidationError(_("Datensatz kann nicht gewechselt werden ! Es sind benutzt Medien in der Kampagne ! Bitte erst diese freigeben !"))
self.date_lastedit = str(date.today())
self.mediastructure = mtyp
def pyaction_view_ad_details(self):
action = self.env['ir.actions.act_window'].with_context({'default_adid': self.id})._for_xml_id('DigitalSignage.action_dss_ads_view')
# action['display_name'] = self.ad_name
# action['domain'] = '[["projectid","=","4"]]'
# context = action['context'].replace('', str(self.id))
# context = ast.literal_eval(context)
# context.update({
# 'create': self.active,
# 'active_test': self.active
# })
# action['context'] = context
return {
'type': 'ir.actions.act_window',
'view_type':'form',
'view_mode':'form,tree',
'res_model':'dss.ads',
'target':'current',
'context':'',
'res_id':self.id,
'display_name' : ' '+self.adname,
'domain':''
}
return action
def pydoviewallads(self):
action = self.env['ir.actions.act_window'].with_context({'default_adid': self.id})._for_xml_id('DigitalSignage.act_dss_ads_view_full')
action['display_name'] = self.contract_name
# action['domain'] = '[["projectid","=","4"]]'
# context = action['context'].replace('', str(self.id))
# context = ast.literal_eval(context)
# context.update({
# 'create': self.active,
# 'active_test': self.active
# })
# action['context'] = context
# return {
# 'type': 'ir.actions.act_window',
# 'view_type':'form',
# 'view_mode':'form,tree',
# 'res_model':'dss.ads',
# 'target':'current',
# 'context':'',
# 'res_id':kampagne.id,
# 'display_name' : 'Werbekampagne '+kampagne.adname,
# 'domain':'[("contract","=","context[active_id]")]'
# }
# return action
return {
'type': 'ir.actions.act_window',
'view_type':'kanban',
'view_mode':'kanban',
'res_model':'dss.ads',
'target':'current',
'context':'{"group_by":["parent_ad"]}',
# 'res_id':self.parent_ad,
'display_name' : 'Übersicht für '+self.adname,
'domain':[("contract","=",self.contract.id)]
}
def pydonewad(self):
defadstate = self.env['dss.adstate'].search([('default','=',True)],limit=1).id
if not defadstate :
defadstate == 1
newkampagne = self.env['dss.ads'].create({'contract': self.contract.id, 'project': self.project.id, 'adname': 'AD_'+self.adname,'parent_ad':self.id, 'adtype':'KCHN','ad_state':defadstate })
# action = self.env['ir.actions.act_window'].with_context({'default_contractid': newkampagne.id})._for_xml_id('DigitalSignage.act_dss_ads_view_contract')
# action['display_name'] = self.contract_name
# action['domain'] = '[["projectid","=","4"]]'
# context = action['context'].replace('', str(self.id))
# context = ast.literal_eval(context)
# context.update({
# 'create': self.active,
# 'active_test': self.active
# })
# action['context'] = context
return {
'type': 'ir.actions.act_window',
'view_type':'form',
'view_mode':'form,tree',
'res_model':'dss.ads',
'target':'current',
'context':'',
'res_id':newkampagne.id,
'display_name' : 'Änderung zur Werbekampagne '+newkampagne.parent_ad.adname,
'domain':'[("id","=","context[newkampagne.id]")]'
}
return action
def setStandardText(self,tid):
text = self.env['dss.texts'].search([('text_id','=',tid)], limit=1)
if text:
self.write({'description':text.description})

View File

@ -9,5 +9,13 @@ digitalsignage_dss_contractstate_group_user,access.dss.contractstate,model_dss_c
digitalsignage_dss_workstate_group_user,access.dss.workstate,model_dss_workstate,base.group_user,1,1,1,1 digitalsignage_dss_workstate_group_user,access.dss.workstate,model_dss_workstate,base.group_user,1,1,1,1
digitalsignage_dss_todostate_group_user,access.dss.todostate,model_dss_todostate,base.group_user,1,1,1,1 digitalsignage_dss_todostate_group_user,access.dss.todostate,model_dss_todostate,base.group_user,1,1,1,1
digitalsignage_dss_contracts_group_user,access.dss.contracts,model_dss_contracts,base.group_user,1,1,1,1 digitalsignage_dss_contracts_group_user,access.dss.contracts,model_dss_contracts,base.group_user,1,1,1,1
digitalsignage_dss_adstate_group_user,access.dss.adstate,model_dss_adstate,base.group_user,1,1,1,1
digitalsignage_dss_eventdays_group_user,access.dss.eventdays,model_dss_eventdays,base.group_user,1,1,1,1 digitalsignage_dss_eventdays_group_user,access.dss.eventdays,model_dss_eventdays,base.group_user,1,1,1,1
digitalsignage_dss_paysystems_group_user,access.dss.paysystems,model_dss_paysystems,base.group_user,1,1,1,1
digitalsignage_dss_paysystem_fields_group_user,access.dss.paysystem_fields,model_dss_paysystem_fields,base.group_user,1,1,1,1
digitalsignage_dss_ads_fields_group_user,access.dss.ads,model_dss_ads,base.group_user,1,1,1,1
digitalsignage_dss_adstructures_group_user,access.dss.adstructures,model_dss_adstructures,base.group_user,1,1,1,1
digitalsignage_dss_mediatypes_group_user,access.dss.mediatypes,model_dss_mediatypes,base.group_user,1,1,1,1
digitalsignage_dss_texts_group_user,access.dss.texts,model_dss_texts,base.group_user,1,1,1,1
digitalsignage_dss_mediarelations_group_user,access.dss.mediarelations,model_dss_mediarelations,base.group_user,1,1,1,1
digitalsignage_dss_advertisefields_group_user,access.dss.advertisefields,model_dss_advertisefields,base.group_user,1,1,1,1 digitalsignage_dss_advertisefields_group_user,access.dss.advertisefields,model_dss_advertisefields,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
9 digitalsignage_dss_workstate_group_user access.dss.workstate model_dss_workstate base.group_user 1 1 1 1
10 digitalsignage_dss_todostate_group_user access.dss.todostate model_dss_todostate base.group_user 1 1 1 1
11 digitalsignage_dss_contracts_group_user access.dss.contracts model_dss_contracts base.group_user 1 1 1 1
12 digitalsignage_dss_adstate_group_user access.dss.adstate model_dss_adstate base.group_user 1 1 1 1
13 digitalsignage_dss_eventdays_group_user access.dss.eventdays model_dss_eventdays base.group_user 1 1 1 1
14 digitalsignage_dss_paysystems_group_user access.dss.paysystems model_dss_paysystems base.group_user 1 1 1 1
15 digitalsignage_dss_paysystem_fields_group_user access.dss.paysystem_fields model_dss_paysystem_fields base.group_user 1 1 1 1
16 digitalsignage_dss_ads_fields_group_user access.dss.ads model_dss_ads base.group_user 1 1 1 1
17 digitalsignage_dss_adstructures_group_user access.dss.adstructures model_dss_adstructures base.group_user 1 1 1 1
18 digitalsignage_dss_mediatypes_group_user access.dss.mediatypes model_dss_mediatypes base.group_user 1 1 1 1
19 digitalsignage_dss_texts_group_user access.dss.texts model_dss_texts base.group_user 1 1 1 1
20 digitalsignage_dss_mediarelations_group_user access.dss.mediarelations model_dss_mediarelations base.group_user 1 1 1 1
21 digitalsignage_dss_advertisefields_group_user access.dss.advertisefields model_dss_advertisefields base.group_user 1 1 1 1

BIN
static/images/tree_r.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

BIN
static/images/tree_ud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

379
views/.mc.menu Normal file
View File

@ -0,0 +1,379 @@
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

72
views/dss_addstructures.xml Executable file
View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_main_adstructures_form" model="ir.ui.view">
<field name="name">dss_adstructures_form</field>
<field name="model">dss.adstructures</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="structurename"/>
<field name="description"/>
</group>
<group>
<field name="medias"/>
</group>
<notebook>
<page name="informations" string="Informationen">
<tree string="Dateien">
</tree>
</page>
<page name="informations" string="Informationen">
<group>
<field name="id" string="Interne Id" readonly="1"/>
<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_adstructures_view_tree" model="ir.ui.view">
<field name="name">dss_adstructures_tree</field>
<field name="model">dss.adstructures</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Strukturuebersicht">
<field name="structurename"/>
<field name="description"/>
</tree>
</field>
</record>
<record id="action_dss_adstructures_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Werbestrukturen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.adstructures</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 Medienfiletyp erstellen
</p>
</field>
</record>
<menuitem
id="menu_dss_adstructures"
name="Werbeformen managen"
parent="menu_dss_wtyp_internsetup"
action="action_dss_adstructures_view"
sequence="1"/>
</odoo>

324
views/dss_ads.xml Executable file
View File

@ -0,0 +1,324 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_main_ads_form" model="ir.ui.view">
<field name="name">dss_ads_form</field>
<field name="model">dss.ads</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<form>
<header>
<button name="pydoviewallads" string="Gesamter Verlauf" type="object" class="oe_hightlight"/>
<button name="pydonewad" string="Neue Aktualisierung" type="object" class="oe_hightlight" enabled="0" attrs="{'invisible': [('adtype','!=','MAIN')]}"/>
<!--- <field name="ad_state" widget="statusbar" statusbar_visible="in Arbeit,Fertig erstellt,Online/Gedruckt"/>-->
</header>
<sheet>
<div class="row">
<div class="col-10">
<group>
<field name="contract_name" string="Zum Vertrag :" readonly="1"/>
<field name="adname"/>
</group>
</div>
</div>
<hr></hr>
<div class="row">
<div class="col-7">
<div class="row">
<div class="col-3">
<group>
<field name="project_id" string="Proj.ID"/>
</group>
</div>
<div class="col-7">
<group>
<field name="project" string="Projekt"/>
</group>
</div>
</div>
<div class="row">
<div class="col-10">
<group>
<field name="mediastructure" string="System-Aufbau"/>
</group>
</div>
</div>
<div class="row">
<div class="col-20">
<group>
<field name="description" string="Kurzbeschreibung" widget="text"/>
</group>
</div>
</div>
<!-- <div class="row">
<div class="col-2">
<group>
<button name="pydoviewallads" string="1" type="object" class="oe_hightlight" icon="fa-pencil-square-o"/>
</group>
</div>
<div class="col-2">
<group>
<button name="pydoviewallads" string="Text 2" type="object" class="oe_hightlight" icon="fa-pencil-square-o"/>
</group>
</div>
<div class="col-2">
<group>
<button name="pydoviewallads" string="Text 3" type="object" class="oe_hightlight" icon="fa-pencil-square-o"/>
</group>
</div>
<div class="col-2">
<group>
<button name="pydoviewallads" string="Text 4" type="object" class="oe_hightlight" icon="fa-pencil-square-o"/>
</group>
</div>
<div class="col-2">
<group>
<button name="pydoviewallads" string="Text 5" type="object" class="oe_hightlight" icon="fa-pencil-square-o"/>
</group>
</div>
</div>-->
</div>
<div class="col-5" style="border-style:solid;border-width:1px;border-color:lightgray">
<!-- <div class="row">
<div class="col-1" t-attf-style="background-color:{{work_state_color}};padding-left: 1px;height:20px;border-style:solid;border-width:0.2px;">
</div>
<div class="col-1" t-attf-style="background-color:{{todo_state_color}};padding-left: 1px;height:20px;border-style:solid;border-width:0.2px;">
</div>
</div>-->
<div class="row">
<div class="col-5" style="height:20px;">
</div>
</div>
<div class="row">
<group>
<field name="adtype" string="Kampagnentyp"/>
</group>
</div>
<div class="row">
<group>
<field name="ad_state" string="Status"/>
</group>
</div>
<div class="row">
<group>
<field name="work_state" string="Arbeitsstand"/>
</group>
</div>
<field name="work_state_text" invisible="1"/>
<div class="row" attrs="{'invisible': [('work_state_text','!=','Sonstiges')]}" >
<group>
<field name="work_state_info"/>
</group>
</div>
<div class="row">
<group>
<field name="todo_state" string="nächste Aufgabe"/>
</group>
</div>
<div class="row">
<group>
<field name="todo_state_until" string="Aufgabe bis"/>
</group>
</div>
</div>
</div>
<hr></hr>
<notebook>
<page name="informations" string="Dateien">
<field name="mediarelations" >
<tree string="Dateien" editable="False" create="False">
<field name="mediatype_type" invisible="1"/>
<field name="mediatype" string=" Verwendung "/>
<field name="mediafile" string=" Datei " filename="mediafile_file"/>
<field name="mediafile_preview" string=" Inhalt " options="{'size':[150]}" widget="image"/>
<field name="mediafile_file"/>
<field name="secured_ro" string=" Gesperrt " widget="boolean_toggle"/>
<field name="used_ro" string=" Benutzt " widget="boolean_toggle"/>
</tree>
</field>
</page>
<page name="informations" string="Informationen">
<group>
<field name="contract" string="Vertrag" readonly="1"/>
<field name="contract_id" string="Kunden/Vert.nummer" readonly="1"/>
<field name="id" string="Vertrags Interne Id" readonly="1"/>
<field name="uuid" string="Datensatz UUID"/>
<field name="adpos"/>
</group>
</page>
<page name="createhistory" string="DSInformation">
<group>
<field name="date_create" string="Erstellt am :" readonly="1"/>
<field name="user_create" string="Erstell von :" readonly="1"/>
<field name="date_lastedit" string="letzte Änderung am :" readonly="1"/>
<field name="user_lastedit" string="letzte Änderung von :" 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_ads_view_tree" model="ir.ui.view">
<field name="name">dss_projects_tree</field>
<field name="model">dss.ads</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Werbeuebersicht" multi_edit="1" default_order="order">
<field name="adname"/>
<field name="date_create"/>
<field name="adtype"/>
<field name="project"/>
<field name="contract"/>
<field name="parent_ad"/>
<field name="description"/>
</tree>
</field>
</record>
<record id="action_set_standard_text_1" model="ir.actions.server">
<field name="name">Standard Beschreibung 1</field>
<field name="model_id" ref="model_dss_ads"/>
<field name="binding_model_id" ref="model_dss_ads"/>
<field name="binding_view_types">form</field>
<field name="state">code</field>
<field name="code">
action = records.setStandardText("AD_STD_1")
</field>
</record>
<record id="action_set_standard_text_2" model="ir.actions.server">
<field name="name">Standard Beschreibung 2</field>
<field name="model_id" ref="model_dss_ads"/>
<field name="binding_model_id" ref="model_dss_ads"/>
<field name="binding_view_types">form</field>
<field name="state">code</field>
<field name="code">
action = records.setStandardText("AD_STD_2")
</field>
</record>
<record id="action_set_standard_text_3" model="ir.actions.server">
<field name="name">Standard Beschreibung 3</field>
<field name="model_id" ref="model_dss_ads"/>
<field name="binding_model_id" ref="model_dss_ads"/>
<field name="binding_view_types">form</field>
<field name="state">code</field>
<field name="code">
action = records.setStandardText("AD_STD_3")
</field>
</record>
<record id="dss_ads_view_full_kanban" model="ir.ui.view">
<field name="name">dss_ads_kanban</field>
<field name="model">dss.ads</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile" action="pyaction_view_ad_details" type="object" quick_create="false" group_create="false">
<field name="work_state_color"/>
<field name="ad_state_color"/>
<field name="adtype"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="#{colo} oe_kanban_global_click o_has_icon oe_kanban_content oe_kanban_card" style="width:200%;-webkit-flex: none !important">
<div t-attf-class="oe_kanban_content oe_kanban_global_click o_kanban_get_form">
<div class="row" style="--gutter-x:10px;" attrs="{'invisible': [('adtype','!=','MAIN')]}">
<div style="height:10px;width:90%"></div>
<div t-attf-style="background-color:{{record.ad_state_color.value}};padding-left: 1px;width:10%;height:10px;border-style:solid;border-width:0.2px;"></div>
<div class="row" style="--gutter-x:10px;">
<div class="col-11">
<strong style="font-size:20px;font-weight:bold"><field name="adname"/></strong>
</div>
<div class="col-1">
<strong style="font-size:8px;text-align:right;"><field name="create_date"/></strong>
</div>
</div>
<div class="row" style="--gutter-x:10px;">
<div class="col-2">
</div>
<div class="col-6">
<strong style="font-size:12px"><field name="description"/></strong>
</div>
</div>
</div>
<div class="row" style="--gutter-x:10px;" attrs="{'invisible': [('adtype','==','MAIN')]}">
<div style="height:10px;width:90%"></div>
<div t-attf-style="background-color:{{record.ad_state_color.value}};padding-left: 1px;width:10%;height:10px;border-style:solid;border-width:0.2px;"></div>
<div class="row" style="--gutter-x:10px;">
<div class="col-1">
<img src="/DigitalSignage/static/images/tree_ud.png" width="20px" height="72px"/>
</div>
<div class="col-11">
<div class="row" style="--gutter-x:10px;">
<div class="col-11">
<strong style="font-size:20px;font-weight:bold"><field name="adname"/></strong>
</div>
<div class="col-1">
<strong style="font-size:8px;text-align:right;"><field name="create_date"/></strong>
</div>
</div>
<div class="row" style="--gutter-x:10px;">
<div class="col-1">
</div>
<div class="col-7">
<strong style="font-size:12px"><field name="description"/></strong>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="act_dss_ads_view_full" model="ir.actions.act_window">
<field name="name">DigitalSignage Werbekampagnen Gesamtansicht</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.ads</field>
<field name="view_mode">kanban</field>
<field name="context">{}</field>
</record>
<record id="act_dss_ads_view_contract" model="ir.actions.act_window">
<field name="name">DigitalSignage Werbekampagnen Gesamtansicht</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.ads</field>
<field name="view_mode">form</field>
<field name="context">{}</field>
</record>
<record id="action_dss_ads_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Werbekampagnen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.ads</field>
<field name="view_mode">tree,form,kanban</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Neue Werbekampagne erstellen
</p>
</field>
</record>
<menuitem
id="menu_dss_ads_details"
name="Werbekampagnen managen"
parent="menu_dss_main_view"
action="action_dss_ads_view"
sequence="5"/>
</odoo>

View File

@ -128,6 +128,9 @@
<field eval="2" name="priority"/> <field eval="2" name="priority"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<header>
<button name="tokampagne" string="Zur Werbekampagne" type="object" class="oe_hightlight"/>
</header>
<sheet> <sheet>
<div class="row"> <div class="row">
<h1> <h1>
@ -322,7 +325,7 @@
</div> </div>
</div> </div>
</page> </page>
<page name="datesettings" string="Vertragszeiten"> <page name="contractsettings" string="Vertragsdaten">
<div class="row"> <div class="row">
<div class="col-4"> <div class="col-4">
<group> <group>
@ -358,6 +361,26 @@
</group> </group>
</div> </div>
</div> </div>
<hr>></hr>
<div class="row" >
<div class="col-8">
<group>
<field name="paymentsystems" string="Abrechnung"/>
<field name="intern_info_payment_off"/>
</group>
</div>
</div>
</page>
<page name="contractsettings" string="Werbedaten/Verlauf">
-- <group>
<field name="ads" string="Werbekampagnen">
<tree string="kampagnen" editable="False" create="False">
<field name="adname" invisible="1"/>
<field name="create_date" string=" Verwendung "/>
<field name="description" string=" Datei " filename="mediafile_file"/>
</tree>
</field>
</group>
</page> </page>
<page name="querprojects" string="Weitere Projekte"> <page name="querprojects" string="Weitere Projekte">
<group> <group>
@ -375,6 +398,9 @@
</notebook> </notebook>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
@ -422,7 +448,8 @@
</div> </div>
<div class="row" style="--gutter-x:10px;"> <div class="row" style="--gutter-x:10px;">
<div class="col-2" style="padding-left: 1px"> <div class="col-2" style="padding-left: 1px">
<strong><field name="client_id"/></strong> <strong><field name="contract_auto_id" string="Kundennummer"/></strong>
<!-- <strong><field name="client_id"/></strong>-->
</div> </div>
<div class="col-8" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"> <div class="col-8" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<strong><field name="contract_name"/></strong> <strong><field name="contract_name"/></strong>
@ -451,153 +478,4 @@
</field> </field>
</record> </record>
<record id="dss_main_view_form" model="ir.ui.view">
<field name="name">dss_projects_form</field>
<field name="model">dss.projects</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="aktstatus"/>
<field name="projektname"/>
<field name="projectid"/>
<field name="name"/>
<field name="active"/>
<field name="standort_inout"/>
<field name="grundsystemname" string="Kategorie"/>
<field name="errichtet_am"/>
<field name="aktstatus_color" widget="color"/>
</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">
<group>
<field name="zeiten_on"/>
<field name="zeiten_off"/>
</group>
</page>
<page name="geraetesettings" string="Systeme">
<group>
<field name="systemname" string="Abspiel/Controlsystem"/>
</group>
</page>
<page name="informations" string="Informationen">
<field name="id" string="Iid" readonly="1"/>
<field name="uuid" string="UUID" readonly="1"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
</div>
</form>
</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>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Projektuebersicht" editable="bottom" multi_edit="1" edit="1" default_order="projectid">
<field name="grundsystemicon5050" widget="image"/>
<field name="projectid"/>
<field name="projektname"/>
<field name="name"/>
<field name="aktstatus"/>
<field name="grundsystemname"/>
</tree>
</field>
</record>
<record id="dss_main_view_kanban" model="ir.ui.view">
<field name="name">dss_projects_kanban</field>
<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">
<field name="projektname"/>
<field name="aktstatus_color"/>
<templates>
<t t-name="kanban-box">
<t t-set="colonr" t-value="aktstatus_color"/>
<!-- <t t-set="colo" t-value="kanban_color(colonr)"/> -->
<t t-set="colo" t-value="333"/>
<div t-attf-class="#{colo} oe_kanban_global_click o_has_icon oe_kanban_content oe_kanban_card">
<div t-attf-class="oe_kanban_content oe_kanban_global_click o_kanban_get_form">
<div class="row" style="--gutter-x:10px;">
<div class="col-2" style="padding-left: 1px">
<field name="grundsystemicon" widget="image" string="intern" class="system_icon_small oe_avatar"/>
<!-- <img t-attf-src="/DigitalSignage/static/images/{{grundsystemname.icon}}.jpg"></img>-->
</div>
<div class="col-10">
<div class="row">
<div class="col-2">
<strong style="font-size:20px;font-weight:bold"><field name="projectid"/></strong>
</div>
<div class="col-8" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<div class="row">
<div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<span style="font-size:17px;"><field name="projektname" string="Project Name"/></span>
</div>
</div>
<div class="row">
<div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<span style="font-size:10px;"><field name="name" string="Name"/></span>
</div>
</div>
</div>
<div class="col-2" style="padding-left:0px;padding-right:15px;">
<div class="row" style="height:25px">
<!-- <div class="dropdown" t-if="!selection_mode" groups="base.group_user">-->
<div t-if="!selection_mode" groups="base.group_user">
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
<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="%(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>
<ul class="oe_kanban_colorpicker" data-field="color"/>
</div>
</div>
</div>
<div class="row">
<field name="aktstatus_icon" widget="image" string="intern" class="system_icon_small oe_avatar"/>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12" style="padding-left: 20px">
<span style="font-size:9px"><field name="projectid"/> <field name="systemname" string="Project Name"/></span>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<menuitem
id="menu_dss_contracts_details"
name="Vertraege managen"
parent="menu_dss_main_view"
action="act_dss_contracts"
sequence="4"/>
</odoo> </odoo>

72
views/dss_mediafiles.xml Executable file
View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_main_mediatypes_form" model="ir.ui.view">
<field name="name">dss_mediatypes_form</field>
<field name="model">dss.mediatypes</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="medianame"/>
<field name="mediatype"/>
<field name="description"/>
</group>
<group>
<field name="maxsize_kb"/>
<field name="maxsize_h"/>
<field name="maxsize_w"/>
<field name="cloudlink"/>
</group>
<notebook>
<page name="informations" string="Informationen">
<tree string="Dateien">
</tree>
</page>
<page name="informations" string="Informationen">
<group>
<field name="id" string="Interne Id" readonly="1"/>
<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_mediatypes_view_tree" model="ir.ui.view">
<field name="name">dss_mediatypes_tree</field>
<field name="model">dss.mediatypes</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Medienuebersicht">
<field name="medianame"/>
<field name="mediatype"/>
<field name="description"/>
</tree>
</field>
</record>
<record id="action_dss_mediatypes_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Mediendateitypen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.mediatypes</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 Medienfiletyp erstellen
</p>
</field>
</record>
</odoo>

164
views/dss_projects.xml Executable file
View File

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_main_view_form" model="ir.ui.view">
<field name="name">dss_projects_form</field>
<field name="model">dss.projects</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="aktstatus"/>
<field name="projektname"/>
<field name="projectid"/>
<field name="name"/>
<field name="active"/>
<field name="standort_inout"/>
<field name="grundsystemname" string="Kategorie"/>
<field name="errichtet_am"/>
<field name="aktstatus_color" widget="color"/>
</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">
<group>
<field name="zeiten_on"/>
<field name="zeiten_off"/>
</group>
</page>
<page name="geraetesettings" string="Systeme">
<group>
<field name="systemname" string="Abspiel/Controlsystem"/>
</group>
</page>
<page name="informations" string="Informationen">
<field name="id" string="Iid" readonly="1"/>
<field name="uuid" string="UUID" readonly="1"/>
</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_main_view_kanban" model="ir.ui.view">
<field name="name">dss_projects_kanban</field>
<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">
<field name="projektname"/>
<field name="aktstatus_color"/>
<templates>
<t t-name="kanban-box">
<t t-set="colonr" t-value="aktstatus_color"/>
<!-- <t t-set="colo" t-value="kanban_color(colonr)"/> -->
<t t-set="colo" t-value="333"/>
<div t-attf-class="#{colo} oe_kanban_global_click o_has_icon oe_kanban_content oe_kanban_card">
<div t-attf-class="oe_kanban_content oe_kanban_global_click o_kanban_get_form">
<div class="row" style="--gutter-x:10px;">
<div class="col-2" style="padding-left: 1px">
<field name="grundsystemicon" widget="image" string="intern" class="system_icon_small oe_avatar"/>
<!-- <img t-attf-src="/DigitalSignage/static/images/{{grundsystemname.icon}}.jpg"></img>-->
</div>
<div class="col-10">
<div class="row">
<div class="col-2">
<strong style="font-size:20px;font-weight:bold"><field name="projectid"/></strong>
</div>
<div class="col-8" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<div class="row">
<div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<span style="font-size:17px;"><field name="projektname" string="Project Name"/></span>
</div>
</div>
<div class="row">
<div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
<span style="font-size:10px;"><field name="name" string="Name"/></span>
</div>
</div>
</div>
<div class="col-2" style="padding-left:0px;padding-right:15px;">
<div class="row" style="height:25px">
<!-- <div class="dropdown" t-if="!selection_mode" groups="base.group_user">-->
<div t-if="!selection_mode" groups="base.group_user">
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
<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="%(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>
<ul class="oe_kanban_colorpicker" data-field="color"/>
</div>
</div>
</div>
<div class="row">
<field name="aktstatus_icon" widget="image" string="intern" class="system_icon_small oe_avatar"/>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12" style="padding-left: 20px">
<span style="font-size:9px"><field name="projectid"/> <field name="systemname" string="Project Name"/></span>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</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>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Projektuebersicht" editable="bottom" multi_edit="1" edit="1" default_order="projectid">
<field name="grundsystemicon5050" widget="image"/>
<field name="projectid"/>
<field name="projektname"/>
<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>
</record>
<record id="action_dss_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Projekte</field>
<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="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Fuege ein System ein !
</p>
</field>
</record>
</odoo>

55
views/dss_projectstate.xml Executable file
View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_projectstate_view_tree" model="ir.ui.view">
<field name="name">dss_projectstate_tree</field>
<field name="model">dss.projectstate</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Projectstatus">
<field name="color" widget="color"/>
<field name="statusname"/>
<field name="typ" string="Zuordnung"/>
<field name="icon" widget="image"/>
</tree>
</field>
</record>
<record id="dss_projectstate_view_form" model="ir.ui.view">
<field name="name">dss_projectstate_form</field>
<field name="model">dss.projectstate</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="basethings">
<field name="statusname" string="Statusname"/>
<field name="typ" string="Zuordnung"/>
<field name="color" string="Farbindex" widget="color"/>
<field name="icon" string="Icon" widget="image"/>
</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="action_dss_projectstate_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Projectstatus</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.projectstate</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 Projektstatus erstellen
</p>
</field>
</record>
</odoo>

60
views/dss_systemtypen.xml Executable file
View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_systemtypen_view_tree" model="ir.ui.view">
<field name="name">dss_systemtypen_tree</field>
<field name="model">dss.systemtypen</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Systemtypen">
<field name="systemname"/>
<field name="kennung"/>
<field name="default_adstructure"/>
<field name="farbe" string="Farbindex" widget="color"/>
<field name="icon" />
<field name="icon_5050" />
</tree>
</field>
</record>
<record id="dss_systemtypen_view_form" model="ir.ui.view">
<field name="name">dss_systemtypen_form</field>
<field name="model">dss.systemtypen</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="erscheinung" string="Kennungen">
<field name="systemname"/>
<field name="kennung" string="Kurzkennung (XXX)"/>
<field name="default_adstructure"/>
</group>
<group name="erscheinung" string="Aussehen">
<field name="farbe" string="Farbkennung" widget="color"/>
<field name="icon" widget="image"/>
<field name="icon_5050" widget="image"/>
</group>
</sheet>
<div class="oe_chatter">
<!-- <field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>-->
</div>
</form>
</field>
</record>
<record id="action_dss_systemtypen_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Systemtypen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.systemtypen</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 Systemtyp erstellen
</p>
</field>
</record>
</odoo>

68
views/dss_texts.xml Executable file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="dss_main_texts_form" model="ir.ui.view">
<field name="name">dss_texts_form</field>
<field name="model">dss.texts</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="text_id"/>
</group>
<group>
<field name="textname"/>
<field name="description"/>
</group>
<notebook>
<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_texts_view_tree" model="ir.ui.view">
<field name="name">dss_texts_tree</field>
<field name="model">dss.texts</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Systemtexte">
<field name="text_id"/>
<field name="textname"/>
<field name="description"/>
</tree>
</field>
</record>
<record id="action_dss_texts_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Standardtexte</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.texts</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>
<menuitem
id="menu_dss_texts"
name="Standardtexte managen"
parent="menu_dss_txt_internsetup"
action="action_dss_texts_view"
sequence="2"/>
</odoo>

View File

@ -52,7 +52,7 @@
</page> </page>
<page name="aussehen" string="Aussehen/Bauart"> <page name="aussehen" string="Aussehen/Bauart">
<group name="aussehen_farbe" string="Farbgebung"> <group name="aussehen_farbe" string="Farbgebung">
<field name="farbe" widget='color_picker'/> <field name="farbe" widget='color'/>
</group> </group>
<group name="aussehen_Bauart" string="Bauart/Montage" attrs="{'invisible': [('grundsystem_kennung','!=','LCD')]}"> <group name="aussehen_Bauart" string="Bauart/Montage" attrs="{'invisible': [('grundsystem_kennung','!=','LCD')]}">
<field name="lcd_montage"/> <field name="lcd_montage"/>
@ -87,6 +87,9 @@
</notebook> </notebook>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
@ -160,30 +163,14 @@
</notebook> </notebook>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
</record> </record>
<record id="dss_systemtypen_view_form" model="ir.ui.view">
<field name="name">dss_systemtypen_form</field>
<field name="model">dss.systemtypen</field>
<field name="arch" type="xml">
<form>
<sheet>
<field name="systemname"/>
<group name="erscheinung" string="Aussehen/Kennungen">
<field name="kennung" string="Kurzkennung (XXX)"/>
<field name="farbe" string="Farbkennung" widget="color_picker"/>
<field name="icon" widget="image"/>
<field name="icon_5050" widget="image"/>
</group>
</sheet>
<div class="oe_chatter">
</div>
</form>
</field>
</record>
<record id="dss_systems_view_tree" model="ir.ui.view"> <record id="dss_systems_view_tree" model="ir.ui.view">
<field name="name">dss_systems_tree</field> <field name="name">dss_systems_tree</field>
@ -225,6 +212,9 @@
</group> </group>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
@ -244,53 +234,6 @@
</field> </field>
</record> </record>
<record id="dss_systemtypen_view_tree" model="ir.ui.view">
<field name="name">dss_systemtypen_tree</field>
<field name="model">dss.systemtypen</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Systemtypen">
<field name="systemname"/>
<field name="kennung"/>
<field name="farbe" string="Farbindex" widget="color"/>
<field name="icon" widget="image"/>
<field name="icon_5050" widget="image"/>
</tree>
</field>
</record>
<record id="dss_projectstate_view_tree" model="ir.ui.view">
<field name="name">dss_projectstate_tree</field>
<field name="model">dss.projectstate</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Projectstatus">
<field name="color" widget="color"/>
<field name="statusname"/>
<field name="icon"/>
</tree>
</field>
</record>
<record id="dss_projectstate_view_form" model="ir.ui.view">
<field name="name">dss_projectstate_form</field>
<field name="model">dss.projectstate</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="basethings">
<field name="statusname" string="Statusname"/>
<field name="color" string="Farbindex" widget="colorpicker"/>
<field name="icon" string="Icon"/>
</group>
</group>
</sheet>
<div class="oe_chatter">
</div>
</form>
</field>
</record>
<record id="dss_contractstate_view_tree" model="ir.ui.view"> <record id="dss_contractstate_view_tree" model="ir.ui.view">
<field name="name">dss_contractstate_tree</field> <field name="name">dss_contractstate_tree</field>
@ -298,7 +241,7 @@
<field name="priority" eval="16"/> <field name="priority" eval="16"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Vertragsstatus"> <tree string="Vertragsstatus">
<field name="color" widget="colorpicker"/> <field name="color" widget="color"/>
<field name="statusname"/> <field name="statusname"/>
<field name="icon"/> <field name="icon"/>
<field name="order"/> <field name="order"/>
@ -315,13 +258,56 @@
<group> <group>
<group name="basethings"> <group name="basethings">
<field name="statusname" string="Statusname"/> <field name="statusname" string="Statusname"/>
<field name="color" string="Farbindex" widget="colorpicker"/> <field name="color" string="Farbindex" widget="color"/>
<field name="icon" string="Icon"/> <field name="icon" string="Icon"/>
<field name="order"/> <field name="order"/>
</group> </group>
</group> </group>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="dss_adstate_view_tree" model="ir.ui.view">
<field name="name">dss_adstate_tree</field>
<field name="model">dss.adstate</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Werbeaktions-Status">
<field name="color" widget="color"/>
<field name="statusname"/>
<field name="default" string="Standardwert"/>
<field name="icon"/>
<field name="order"/>
</tree>
</field>
</record>
<record id="dss_adstate_view_form" model="ir.ui.view">
<field name="name">dss_adstate_form</field>
<field name="model">dss.adstate</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="basethings">
<field name="statusname" string="Statusname"/>
<field name="default" string="Standardwert"/>
<field name="color" string="Farbindex" widget="color"/>
<field name="icon" string="Icon"/>
<field name="order"/>
</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> </div>
</form> </form>
</field> </field>
@ -333,7 +319,7 @@
<field name="priority" eval="16"/> <field name="priority" eval="16"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Bearbeitungsstatus"> <tree string="Bearbeitungsstatus">
<field name="color" widget="colorpicker"/> <field name="color" widget="color"/>
<field name="statusname"/> <field name="statusname"/>
<field name="icon"/> <field name="icon"/>
</tree> </tree>
@ -356,6 +342,9 @@
</group> </group>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
@ -367,7 +356,7 @@
<field name="priority" eval="16"/> <field name="priority" eval="16"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Bearbeitungsschritte"> <tree string="Bearbeitungsschritte">
<field name="color" widget="colorpicker"/> <field name="color" widget="color"/>
<field name="statusname"/> <field name="statusname"/>
<field name="statusnr" string="Statusposition"/> <field name="statusnr" string="Statusposition"/>
<field name="icon"/> <field name="icon"/>
@ -392,6 +381,9 @@
</group> </group>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
@ -430,6 +422,9 @@
</group> </group>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
@ -465,26 +460,96 @@
</group> </group>
</sheet> </sheet>
<div class="oe_chatter"> <div class="oe_chatter">
<field name="message_follower_ids" options="{'post_refresh':True}" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div> </div>
</form> </form>
</field> </field>
</record> </record>
<record id="dss_paysystem_fields_view_tree" model="ir.ui.view">
<field name="name">dss_paysystem_fields_tree</field>
<record id="action_dss_view" model="ir.actions.act_window"> <field name="model">dss.paysystem_fields</field>
<field name="name">DigitalSignage Projekte</field> <field name="priority" eval="16"/>
<field name="type">ir.actions.act_window</field> <field name="arch" type="xml">
<field name="res_model">dss.projects</field> <tree string="Zahlungsfelder">
<field name="view_mode">kanban,form,tree</field> <field name="feldname"/>
<field name="context">{}</field> <field name="payonfieldset"/>
<field name="help" type="html"> <field name="changecount"/>
<p class="'o_view_nocontent_smiling_face"> <field name="description"/>
Fuege ein System ein ! <field name="amount"/>
</p> </tree>
</field> </field>
</record> </record>
<record id="dss_paymentsystem_fields_view_form" model="ir.ui.view">
<field name="name">dss_paymentsystem_fields_form</field>
<field name="model">dss.paysystem_fields</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="basethings">
<field name="feldname" string="Name des Feldes"/>
<field name="payonfieldset" string="Zahlung bei Änderung von :"/>
<field name="changecount" string="Anzahl" attrs="{'invisible': [('payonfieldset','!=','XH')]}" />
<field name="description" string="Beschreibung"/>
<field name="amount" string="Zahlsumme"/>
</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_paysystems_view_tree" model="ir.ui.view">
<field name="name">dss_paysystems_tree</field>
<field name="model">dss.paysystems</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Zahlungsarten">
<field name="payname"/>
<field name="payonset"/>
<field name="description"/>
<field name="amount"/>
</tree>
</field>
</record>
<record id="dss_paymentsystems_view_form" model="ir.ui.view">
<field name="name">dss_paymentsystems_form</field>
<field name="model">dss.paysystems</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="basethings">
<field name="payname" string="Name der Aktion"/>
<field name="payonset" string="Zahlung bei :"/>
<field name="description" string="Beschreibung"/>
<field name="amount" string="Zahlsumme"/>
<field name="send_info" string="Infomail senden ?"/>
<field name="send_info_to" string="Infomail an" attrs="{'invisible': [('send_info','=',False)]}" />
<field name="send_info_template" string="Infomail Vorlage" attrs="{'invisible': [('send_info','=',False)]}" domain="[('model_id', '=', 'dss.paysystems')]"/>
</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="action_dss_systems_view" model="ir.actions.act_window"> <record id="action_dss_systems_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Systeme</field> <field name="name">DigitalSignage Systeme</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
@ -524,31 +589,6 @@
</field> </field>
</record> </record>
<record id="action_dss_systemtypen_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Systemtypen</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.systemtypen</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 Systemtyp erstellen
</p>
</field>
</record>
<record id="action_dss_projectstate_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Projectstatus</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.projectstate</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 Projektstatus erstellen
</p>
</field>
</record>
<record id="action_dss_contractstate_view" model="ir.actions.act_window"> <record id="action_dss_contractstate_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Vertragsstatus</field> <field name="name">DigitalSignage Vertragsstatus</field>
@ -563,6 +603,21 @@
</field> </field>
</record> </record>
<record id="action_dss_adstate_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Werbeaktions-Status</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dss.adstate</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 Werbeaktions-Status erstellen
</p>
</field>
</record>
<record id="action_dss_workstate_view" model="ir.actions.act_window"> <record id="action_dss_workstate_view" model="ir.actions.act_window">
<field name="name">DigitalSignage Bearbeitungsstatus</field> <field name="name">DigitalSignage Bearbeitungsstatus</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
@ -615,106 +670,58 @@
</field> </field>
</record> </record>
<menuitem <record id="action_dss_paysystem_fields_view" model="ir.actions.act_window">
id="menu_dss_config" <field name="name">DigitalSignage Zahlungsfelder</field>
name="Configuration" <field name="type">ir.actions.act_window</field>
parent="menu_dss_main" <field name="res_model">dss.paysystem_fields</field>
sequence="3"/> <field name="view_mode">tree,form</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Neues Zahlfeld erstellen
</p>
</field>
</record>
<menuitem <record id="action_dss_paysystems_view" model="ir.actions.act_window">
id="menu_dss_main_view" <field name="name">DigitalSignage Zahlungsart</field>
name="DigitalSignage" <field name="type">ir.actions.act_window</field>
parent="menu_dss_main" <field name="res_model">dss.paysystems</field>
sequence="2"/> <field name="view_mode">tree,form</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="'o_view_nocontent_smiling_face">
Neue Zahlugnsart erstellen
</p>
</field>
</record>
<menuitem <record id="view_dss_email_template_search" model="ir.ui.view">
id="menu_dss_main_partner_details" <field name="name">email.dss.template.search</field>
name="Partner managen" <field name="model">mail.template</field>
parent="menu_dss_main_view" <field name="arch" type="xml">
action="base.action_partner_form" <search string="Templates">
sequence="2"/> <field name="name" filter_domain="['|', '|', '|',('name','ilike',self), ('report_name','ilike',self), ('subject','ilike',self), ('email_to','ilike',self)]" string="Templates"/>
<field name="lang"/>
<field name="model_id"/>
<filter name="payment_templates" string="Zahlungsvorlagen" domain="[('model_id', '=', 'dss.paysystems')]"/>
<group expand="0" string="Group by...">
<filter string="SMTP Server" name="smtpserver" domain="[]" context="{'group_by':'mail_server_id'}"/>
<filter string="Model" name="model" domain="[]" context="{'group_by':'model_id'}"/>
</group>
</search>
</field>
</record>
<menuitem <record model="ir.actions.act_window" id="action_dss_email_template_tree_all">
id="menu_dss_main_details" <field name="name">Email Templates</field>
name="Projekte managen" <field name="res_model">mail.template</field>
parent="menu_dss_main_view" <field name="view_mode">form,tree</field>
action="action_dss_view" <field name="view_id" ref="mail.email_template_tree" />
sequence="1"/> <field name="search_view_id" ref="view_dss_email_template_search"/>
<field name="context">{'search_default_payment_templates': 1}</field>
</record>
<menuitem
id="menu_dss_configuration_systems"
name="Systemtypen"
parent="menu_dss_config"
action="action_dss_systems_view"
sequence="3"/>
<menuitem
id="menu_dss_configurationen"
name="Werte"
parent="menu_dss_config"
sequence="5"/>
<menuitem
id="menu_dss_configuration_systemtypen"
name="Grundsystemtypen"
parent="menu_dss_configurationen"
action="action_dss_systemtypen_view"
sequence="3"/>
<menuitem
id="menu_dss_configuration_geraetetypen"
name="Hardware verwalten"
parent="menu_dss_config"
action="action_dss_geraetetypen_view"
sequence="3"/>
<menuitem
id="menu_dss_configuration_software"
name="Software verwalten"
parent="menu_dss_config"
action="action_dss_software_view"
sequence="4"/>
<menuitem
id="menu_dss_configuration_projectstate"
name="Projektstati verwalten"
parent="menu_dss_configurationen"
action="action_dss_projectstate_view"
sequence="5"/>
<menuitem
id="menu_dss_configuration_contractstate"
name="Vertragsstati verwalten"
parent="menu_dss_configurationen"
action="action_dss_contractstate_view"
sequence="6"/>
<menuitem
id="menu_dss_configuration_workstate"
name="Bearbeitungsstände verwalten"
parent="menu_dss_configurationen"
action="action_dss_workstate_view"
sequence="7"/>
<menuitem
id="menu_dss_configuration_todostate"
name="Bearbeitungsschritte verwalten"
parent="menu_dss_configurationen"
action="action_dss_todostate_view"
sequence="8"/>
<menuitem
id="menu_dss_configuration_advertisefields"
name="Werbefelder verwalten"
parent="menu_dss_configurationen"
action="action_dss_advertisefields_view"
sequence="9"/>
<menuitem
id="menu_dss_configuration_eventdays"
name="Eventtage verwalten"
parent="menu_dss_configurationen"
action="action_dss_eventdays_view"
sequence="10"/>
</odoo> </odoo>

View File

@ -6,4 +6,176 @@
web_icon="digitalsignage_system,static/description/icon.png" web_icon="digitalsignage_system,static/description/icon.png"
sequence="2"/> sequence="2"/>
<menuitem
id="menu_dss_config"
name="Konfiguration"
parent="menu_dss_main"
sequence="3"/>
<menuitem
id="menu_dss_internsetup"
name="System Einstellungen"
parent="menu_dss_main"
sequence="4"/>
<menuitem
id="menu_dss_wtyp_internsetup"
name="Medien und Werbevorlagen"
parent="menu_dss_internsetup"
sequence="10"/>
<menuitem
id="menu_dss_txt_internsetup"
name="Textvorlagen"
parent="menu_dss_internsetup"
sequence="30"/>
<menuitem
id="menu_dss_stati_internsetup"
name="Stati/Zustände"
parent="menu_dss_internsetup"
sequence="40"/>
<menuitem
id="menu_dss_main_view"
name="DigitalSignage"
parent="menu_dss_main"
sequence="2"/>
<menuitem
id="menu_dss_main_partner_details"
name="Partner managen"
parent="menu_dss_main_view"
action="base.action_partner_form"
sequence="20"/>
<menuitem
id="menu_dss_main_details"
name="Projekte managen"
parent="menu_dss_main_view"
action="action_dss_view"
sequence="1"/>
<menuitem
id="menu_dss_contracts_details"
name="Vertraege managen"
parent="menu_dss_main_view"
action="act_dss_contracts"
sequence="4"/>
<menuitem
id="menu_dss_mediafiles"
name="Medientypen managen"
parent="menu_dss_wtyp_internsetup"
action="action_dss_mediatypes_view"
sequence="1"/>
<menuitem
id="menu_dss_configuration_systems"
name="Systemtypen"
parent="menu_dss_internsetup"
action="action_dss_systems_view"
sequence="30"/>
<menuitem
id="menu_dss_configurationen"
name="Werte"
parent="menu_dss_config"
sequence="45"/>
<menuitem
id="menu_dss_configurationen_system"
name="Systemwerte"
parent="menu_dss_config"
sequence="10"/>
<menuitem
id="menu_dss_configuration_systemtypen"
name="Grundsystemtypen"
parent="menu_dss_internsetup"
action="action_dss_systemtypen_view"
sequence="20"/>
<menuitem
id="menu_dss_configuration_geraetetypen"
name="Hardware verwalten"
parent="menu_dss_config"
action="action_dss_geraetetypen_view"
sequence="30"/>
<menuitem
id="menu_dss_configuration_software"
name="Software verwalten"
parent="menu_dss_config"
action="action_dss_software_view"
sequence="40"/>
<menuitem
id="menu_dss_configuration_projectstate"
name="Projektstati verwalten"
parent="menu_dss_stati_internsetup"
action="action_dss_projectstate_view"
sequence="50"/>
<menuitem
id="menu_dss_configuration_contractstate"
name="Vertragsstati verwalten"
parent="menu_dss_stati_internsetup"
action="action_dss_contractstate_view"
sequence="60"/>
<menuitem
id="menu_dss_configuration_ads"
name="Kampagnenstati verwalten"
parent="menu_dss_stati_internsetup"
action="action_dss_adstate_view"
sequence="65"/>
<menuitem
id="menu_dss_configuration_workstate"
name="Bearbeitungsstände verwalten"
parent="menu_dss_stati_internsetup"
action="action_dss_workstate_view"
sequence="70"/>
<menuitem
id="menu_dss_configuration_todostate"
name="Bearbeitungsschritte verwalten"
parent="menu_dss_internsetup"
action="action_dss_todostate_view"
sequence="80"/>
<menuitem
id="menu_dss_configuration_advertisefields"
name="Werbefelder verwalten"
parent="menu_dss_configurationen"
action="action_dss_advertisefields_view"
sequence="90"/>
<menuitem
id="menu_dss_configuration_eventdays"
name="Eventtage verwalten"
parent="menu_dss_configurationen"
action="action_dss_eventdays_view"
sequence="100"/>
<menuitem
id="menu_dss_configuration_paysystem_fields"
name="Zahlungsfelder verwalten"
parent="menu_dss_internsetup"
action="action_dss_paysystem_fields_view"
sequence="110"/>
<menuitem
id="menu_dss_configuration_paysystems"
name="Zahlungsarten verwalten"
parent="menu_dss_internsetup"
action="action_dss_paysystems_view"
sequence="120"/>
<menuitem id="menu_dss_email_templates"
parent="menu_dss_configurationen_system"
action="action_dss_email_template_tree_all"
sequence="130"/>
</odoo> </odoo>