Relations ok, Import Begin

This commit is contained in:
jopster 2024-06-06 10:32:50 +02:00
parent bf2e5de25e
commit 1655829dc8
42 changed files with 313 additions and 241 deletions

0
.idea/.gitignore vendored Normal file → Executable file
View File

3
.idea/DigitalSignage.iml Normal file → Executable file
View File

@ -3,8 +3,9 @@
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.venv" />
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="jdk" jdkName="Python 3.7 (DigitalSignage)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

1
.idea/inspectionProfiles/profiles_settings.xml Normal file → Executable file
View File

@ -1,5 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Default" />
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>

3
.idea/misc.xml Normal file → Executable file
View File

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.7 (DigitalSignage)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (DigitalSignage)" project-jdk-type="Python SDK" />
</project>

0
.idea/modules.xml Normal file → Executable file
View File

0
.idea/vcs.xml Normal file → Executable file
View File

0
Odoo/.idea/Odoo.iml Normal file → Executable file
View File

0
Odoo/.idea/inspectionProfiles/profiles_settings.xml Normal file → Executable file
View File

0
Odoo/.idea/misc.xml Normal file → Executable file
View File

0
Odoo/.idea/modules.xml Normal file → Executable file
View File

0
Odoo/.idea/vcs.xml Normal file → Executable file
View File

0
Odoo/.idea/workspace.xml Normal file → Executable file
View File

View File

@ -18,8 +18,8 @@
'views/dss_systemtypen.xml',
'views/dss_mediarelations.xml',
'views/dss_advertisementfields.xml',
'views/dss_projects.xml',
'views/dss_ads.xml',
'views/dss_projects.xml','views/dss_import.xml',
'views/dss_ads.xml','views/dss_settings.xml',
'views/dss_mediafiles.xml',
'views/dss_addstructures.xml',
'views/dss_texts.xml',

0
digi_001.tar.gz Normal file → Executable file
View File

0
models/delete Normal file → Executable file
View File

View File

@ -39,12 +39,92 @@ def _generate_preview_from_binary_2(self, videofile_file):
return base64.b64encode(out)
class dssimport(models.Model):
_name = "dss.import"
_description = "DigitalSignage Import"
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
importfilename = fields.Binary('Import Dateiname')
importtext = fields.Text('Import Verlauf')
def _default_uuid(self):
return str(uuid.uuid4())
def pyimport(self):
return action
class dssSettings(models.Model):
_name = "dss.settings"
_description = "DigitalSignage Einstellungen"
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
def_project_cloudpath = fields.Char('Standard Projekt Pfad')
def_project_cloudpath_sample = fields.Char('Projekt Beispiel :',store=True)
def_contract_cloudpath = fields.Char('Standard Kunden Pfad')
def_contract_cloudpath_sample = fields.Char('Projekt Beispiel :')
def_ad_cloudpath = fields.Char('Standard Kampagnen Pfad')
def_ad_cloudpath_sample = fields.Char('Kampagnen Beispiel :')
def _get_path_converted(self,path,record):
alls = ''
_logger.info("GetPath with " + str(path)+ " and Record : "+str(record.id))
if path:
for parts in path.split(','):
if parts[0] == '$':
fels = parts[1:]
parts = record._origin.read([fels])
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden " + str(parts))
if parts:
value = str(parts[0][fels])
else:
value = ''
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden " + str(value))
alls = alls + value
else:
alls = alls + str(parts)
return alls
@api.onchange('def_project_cloudpath')
def _onchange_def_project_cloudpath(self):
_logger.info("Default Project Cloudpath Setzen")
project_1 = self.env['dss.projects'].search([('uuid','=ilike','%')],limit=1)
if not project_1:
_logger.info("Default Cloudpath Setzen - kein MusterProjekt gefunden")
else:
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden "+str(project_1.id))
alls = self._get_path_converted(self.def_project_cloudpath,project_1)
self.def_project_cloudpath_sample = alls
@api.onchange('def_contract_cloudpath')
def _onchange_def_contract_cloudpath(self):
_logger.info("Default Contract Cloudpath Setzen")
contract_1 = self.env['dss.contracts'].search([('uuid','=ilike','%')],limit=1)
if not contract_1:
_logger.info("Default Cloudpath Setzen - kein MusterProjekt gefunden")
else:
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden "+str(contract_1.id))
alls = self._get_path_converted(self.def_contract_cloudpath,contract_1)
self.def_contract_cloudpath_sample = alls
@api.onchange('def_ad_cloudpath')
def _onchange_def_ad_cloudpath(self):
_logger.info("Default ad Cloudpath Setzen")
ad_1 = self.env['dss.ads'].search([('uuid','=ilike','%')],limit=1)
if not ad_1:
_logger.info("Default Cloudpath Setzen - kein MusterProjekt gefunden")
else:
_logger.info("Default Cloudpath Setzen - MusterProjekt gefunden "+str(ad_1.id))
alls = self._get_path_converted(self.def_ad_cloudpath,ad_1)
self.def_ad_cloudpath_sample = alls
def _default_uuid(self):
return str(uuid.uuid4())
class dsscontracts(models.Model):
@api.model
def _get_default_project(self):
_logger.debug("Ermittelte Id aus Context : %s" % (self.env.context.get('active_id')))
ds = self.env('dss.projects').search([('id','=',self.env.context.get('active_id'))],limit=1)
ds = self.env['dss.projects'].search([('id','=',self.env.context.get('active_id'))],limit=1)
return ds
def _default_work_state(self):
@ -185,7 +265,7 @@ class dsscontracts(models.Model):
# todo_state_info = fields.Char('Zusatzinfo',tracking=True)
# todo_state_until = fields.Date('Abarbeiten bis',tracking=True)
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für das Project innerhalb des Projekt Ordners')
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für den Kunde innerhalb des Projekt Ordners')
@api.constrains('client_id')
def _check_client_id(self) :
@ -298,69 +378,121 @@ class dsscontracts(models.Model):
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Keine Medien gefunden ')
# Medien erzeugen wenn nicht vorhanden
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' Suche Kampagne allgemein ')
kampagne=self.env['dss.ads'].search([('contract','=',self.id)],limit=1)
_logger.info('Click auf Werbekampagne : '+str(self.id)+' 3')
if not kampagne:
_logger.info('Click auf Werbekampagne : '+str(self.id)+' kein kampagne')
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' kein kampagne')
defadstate = self.env['dss.adstate'].search([('func','=','STD')],limit=1)
if not defadstate :
_logger.info('Click auf Werbekampagne : '+str(self.id)+' kein defstate')
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' kein defstate')
defadstateid = 1
else:
defadstateid = defadstate.id
kampagne = self.env['dss.ads'].create({'contract': self.id, 'project': self.project.id, 'adname': 'WK '+self.contract_auto_name,'adtype':'MAIN','ad_state':defadstateid})
self.ads_last_ad = kampagne.id
_logger.info('Click auf Werbekampagne : '+str(self.id)+' Kampagne erstellt '+str(kampagne.id))
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' Kampagne erstellt A_'+str(kampagne.id))
kampagne.parent_ad = kampagne.id
mediaids = []
for feld in self.werbe_feld_selected:
for media in feld.mediastructure.medias:
if not media:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kampagne.id)+' Kein Medium in MedienStructur von F_'+str(feld.id)+'M_'+str(media.id))
else:
newmedia=self.env['dss.mediarelations'].create({
newmedi=media.copy({'contract':self.id,'ad':kampagne.id})
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kampagne.id)+' setze Vertrag für Medium : '+str(newmedi.contract)+'/'+str(newmedi.ad))
mediaids.append(newmedi.id)
kampagne.write({'need_media': [(6,0,mediaids)]})
_logger.info('Click auf Werbekampagne : '+str(self.id)+'/'+str(kampagne.id)+' setze Media '+str(kampagne.need_media))
if not self.werbe_feld_selected:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Keine Felder im Vertrag')
raise ValidationError(_("Vertrag hat keine Felder ! Kampagnen benötigen Felder - auch virtuelle"))
else:
for feld in self.werbe_feld_selected:
if not feld:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Keine Felder im Vertrag')
raise ValidationError(_("Vertrag hat keine Felder ! Kampagnen benötigen Felder - auch virtuelle"))
else:
for media in feld.mediastructure.medias:
if not media:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kampagne.id)+' Kein Medium in MedienStructur von F_'+str(feld.id)+'M_'+str(media.id))
else:
newmedia=self.env['dss.mediarelations'].create({'field':feld.id,'contract':self.id,'project':self.project.id,'field_uuid':feld.uuid,'ad':kampagne.id, 'relname': media.medianame,
'mediatype': media.id})
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kampagne.id)+' setze Vertrag für Medium : '+str(newmedia.contract)+'/'+str(newmedia.ad))
mediaids.append(newmedia.id)
kampagne.write({'need_media': [(6,0,mediaids)]})
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'/'+str(kampagne.id)+' setze Media '+str(kampagne.need_media))
else:
_logger.info('Click auf Werbekampagne : '+str(self.id)+' mind. 1 Kampagne vorhanden '+str(kampagne.id))
_logger.info('Prüfe Medien : C_'+str(self.id))
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' mind. 1 Kampagne vorhanden A_'+str(kampagne.id))
kampagnen=self.env['dss.ads'].search([('contract','=',self.id)])
_logger.info('Prüfe Medien : C_'+str(self.id)+' alle Kamp : '+str(kampagnen))
for kamp in kampagnen:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id))
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id))
if kamp:
mediaids = []
medias = self.env['dss.mediarelations'].search([('ad','=',kamp.id)])
if not medias:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id)+' keine Medien gefunden !')
for singlemedi in self.need_media:
if not singlemedi:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id)+' Kein Medium in NEED_MEDIA')
else:
newmedi=singlemedi.copy({'ad':kamp.id})
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id)+' Kopiere Medium : '+str(singlemedi)+' -> '+str(newmedi))
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id)+' Medien evtl erstellt !')
medias = self.env['dss.mediarelations'].search([('ad','=',kamp.id)])
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' neue Media '+str(mediaids))
kamp.write({'need_media': [(6,0,medias.ids)]})
# self.write({'need_media': [(5,0,0)]})
# _logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' setze Media '+str(kamp.need_media))
else:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id)+' Medien gefunden !')
medias = self.env['dss.mediarelations'].search([('ad','=',kamp.id)])
# mediaids.append(medias.ids)
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' gefundene Media '+str(mediaids))
kampagne=self.env['dss.ads'].browse(kamp.id)
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' gefundene Media '+str(mediaids)+' Kampagne '+str(kampagne))
if kampagne.need_media != medias:
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' Media unterschiede - setze Media '+str(mediaids)+'/'+str(kampagne.need_media))
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' keine Medien gefunden !')
if not self.werbe_feld_selected:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Keine Felder im Vertrag')
raise ValidationError(
_("Vertrag hat keine Felder ! Kampagnen benötigen Felder - auch virtuelle"))
else:
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' Media gleich '+str(kampagne.need_media))
for feld in self.werbe_feld_selected:
if not feld:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Keine Felder im Vertrag')
raise ValidationError(_("Vertrag hat keine Felder ! Kampagnen benötigen Felder - auch virtuelle"))
else:
for media in feld.mediastructure.medias:
if not media:
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Kein Medium in der Struktur F_'+str(feld.id)+'M_'+str(feld.mediastructure.id))
else:
newmedi = self.env['dss.mediarelations'].create(
{ 'field': feld.id, 'contract': self.id, 'project': self.project.id,
'field_uuid': feld.uuid, 'ad': kamp.id, 'relname':media.medianame,'mediatype':media.id})
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Erstelle Medium : M_'+str(media.id)+' -> '+str(newmedi.id))
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Medien evtl erstellt ! NM_'+str(newmedi.id))
medias = self.env['dss.mediarelations'].search([('ad','=',kamp.id)])
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(kamp.id)+' neue Media '+str(mediaids))
kamp.write({'need_media': [(6,0,medias.ids)]})
# self.write({'need_media': [(5,0,0)]})
# _logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' setze Media '+str(kamp.need_media))
else:
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Medien gefunden !')
if not self.werbe_feld_selected:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Keine Felder im Vertrag')
raise ValidationError(
_("Vertrag hat keine Felder ! Kampagnen benötigen Felder - auch virtuelle"))
else:
for feld in self.werbe_feld_selected:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(kamp.id)+'F_'+str(feld.id))
if not feld:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Keine Felder im Vertrag')
raise ValidationError(_("Vertrag hat keine Felder ! Kampagnen benötigen Felder - auch virtuelle"))
else:
for media in feld.mediastructure.medias:
if not media:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Kein Medium in der Struktur F_' + str(feld.id) + 'M_' + str(
feld.mediastructure.id))
else:
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(kamp.id) + 'F_' + str(
feld.id) + 'M_' + str(media.id))
existmedia = self.env['dss.mediarelations'].search(['&',('ad','=',kamp.id),('mediatype','=',media.id),('field','=',feld.id)])
if not existmedia:
newmedi = self.env['dss.mediarelations'].create(
{'field': feld.id, 'contract': self.id, 'project': self.project.id,
'field_uuid': feld.uuid, 'ad': kamp.id, 'relname': media.medianame,
'mediatype': media.id})
_logger.info('Prüfe Medien : C_' + str(self.id) + 'A_' + str(
kamp.id) + ' Erstelle Medium : M_' + str(media.id) + ' -> ' + str(
newmedi.id))
# mediaids.append(medias.ids)
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(kamp.id)+' gefundene Media '+str(mediaids))
kampagne=self.env['dss.ads'].browse(kamp.id)
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(kamp.id)+' gefundene Media '+str(mediaids)+' Kampagne '+str(kampagne))
if kampagne.need_media != medias:
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(kamp.id)+' Media unterschiede - setze Media '+str(mediaids)+'/'+str(kampagne.need_media))
else:
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(kamp.id)+' Media gleich '+str(kampagne.need_media))
else:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(kamp.id)+' Keine Kampagne gefunden !')
_logger.info('Prüfe Medien : C_'+str(self.id)+'A_'+str(kamp.id)+' Keine Kampagne gefunden !')
# _logger.info('Click auf Werbekampagne : '+str(self.id)+' 4 '+str(kampagne.id))
return {
'type': 'ir.actions.act_window',
@ -431,6 +563,8 @@ class dssmain(models.Model):
grundsystemicon = fields.Image(related='grundsystemname.icon',tracking=True)
grundsystem_default_adstructure = fields.Many2one(related='grundsystemname.default_adstructure',tracking=True)
grundsystemicon5050 = fields.Image(related='grundsystemname.icon_5050')
grundsystem_ordner = fields.Char(related='grundsystemname.default_cloud_path')
standort = fields.Char('Hauptstandort des Projektes',tracking=True)
vertragsschreiber = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',True)]",tracking=True)
standortpartner = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_standort','=',True)]",tracking=True)
vertriebspartner = fields.Many2many('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',True)]",tracking=True)
@ -470,9 +604,13 @@ class dssmain(models.Model):
# action['context'] = context
# action['domain'] = domain
# return action
@api.onchange('cloudlink')
def _onchange_cloudlink(self):
_logger.info("Project "+str(self.id)+" Cloudpath changed")
if (self.cloudlink == ''):
if (self._origin.cloudlink != ''):
_logger.info("Project " + str(self.id) + " deleted - using standard path")
self.cloudlink = dssSettings._get_path_converted(self,self.env['dss.settings'].search([],limit=1).def_project_cloudpath,self)
class dssgeraetetypen(models.Model):
@ -483,9 +621,12 @@ class dssgeraetetypen(models.Model):
geraetename = fields.Char('Geraetename', required=True)
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')],tracking=True)
grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für",tracking=True)
# grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für",tracking=True)
grundsystem = fields.Many2many('dss.systemtypen', string="Gerät ist nutzbar für",tracking=True)
grundsystem_kennung = fields.Char(string='Kennung', related='grundsystem.kennung',tracking=True)
standort = fields.Char('Hauptstandort des Gerätes',tracking=True)
farbe = fields.Char('Grundfarbe',tracking=True)
has_heizung = fields.Boolean('Mit Heizsystem',tracking=True)
@ -538,6 +679,8 @@ class dssgeraetetypen(models.Model):
hw_umwelt = fields.Many2one('dss.geraetetypen',domain="['|',('geraetetyp','=','SYS'),('geraetetyp','=','DIV')]",tracking=True)
zusatz_integrationen = fields.Many2one('dss.geraetetypen',tracking=True)
zusatz_zubehoer = fields.Char('Sonstiges Zubehör',tracking=True)
@api.model
def _default_uuid(self):
@ -563,6 +706,7 @@ class dsssystemtypen(models.Model):
icon = fields.Image()
icon_5050 = fields.Image("Icon 50",compute='_compute_icon_5050')
default_adstructure = fields.Many2one('dss.adstructures',String='Standard-Werbeaufbau')
default_cloud_path = fields.Char('Standard Cloud Path')
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
@ -613,6 +757,7 @@ class dsssystems(models.Model):
grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für")
grundsystem_kennung = fields.Char(string='Kennung', related='grundsystem.kennung')
farbe = fields.Integer('Grundfarbe')
has_heizung = fields.Boolean('Mit Heizsystem')
@ -1091,7 +1236,7 @@ class dsscontractads(models.Model):
order = fields.Integer('Reihenfolge')
# need_media = fields.Many2many('dss.mediarelations','ad',string='Medien')
need_media = fields.Many2many('dss.mediarelations','mediarelations_ad_relations','ad_id','mediarelations_id',string='Medien')
need_media = fields.One2many('dss.mediarelations','ad',string='Medien')
work_state = fields.Many2one('dss.workstate',default=_default_work_state,tracking=True)
work_state_color = fields.Char(related='work_state.color')
@ -1222,27 +1367,25 @@ class dsscontractads(models.Model):
newkampagne = self.env['dss.ads'].create({'contract': self.contract.id, 'project': self.project.id, 'adname': 'AD_'+self.contract.contract_auto_name+' '+str(date.today()),'parent_ad':parent_id, 'adtype':'KCHN','ad_state':defadstate })
_logger.info('C_'+str(self.id)+' Kampagne erzeugt : '+str(newkampagne))
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(newkampagne.id))
mediaids = []
medias = self.env['dss.mediarelations'].search([('ad','=',newkampagne.id)])
if not medias:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(newkampagne.id)+' keine Medien gefunden !')
medias = self.env['dss.mediarelations'].search(['&',('contract','=',self.contract.id),('ad','=',False)])
if not medias:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(newkampagne.id)+' keine Medien im vertrag gefunden !')
else:
for singlemedi in medias:
if not singlemedi:
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(newkampagne.id)+' Kein Medium')
else:
newmedi=singlemedi.copy({'ad':newkampagne.id})
mediaids.append(newmedi.id)
_logger.info('Prüfe Medien : C_'+str(self.id)+'K_'+str(newkampagne.id)+' Kopiere Medium : '+str(singlemedi)+' -> '+str(newmedi))
medias = self.env['dss.mediarelations'].search([('ad','=',newkampagne.id)])
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(newkampagne.id)+' neue Media '+str(mediaids))
newkampagne.write({'need_media': [(6,0,medias.ids)]})
# self.write({'need_media': [(5,0,0)]})
# _logger.info('Click auf Werbekampagne : C_'+str(self.id)+'K_'+str(kamp.id)+' setze Media '+str(kamp.need_media))
# _logger.info('Click auf Werbekampagne : '+str(self.id)+' 4 '+str(kampagne.id))
for feld in self.contract.werbe_feld_selected:
for media in feld.mediastructure.medias:
if not media:
_logger.info('Prüfe Medien : C_' + str(self.contract.id) + 'K_' + str(
newkampagne.id) + ' Kein Medium in MedienStructur von F_' + str(feld.id) + 'M_' + str(
media.id))
else:
newmedia = self.env['dss.mediarelations'].create(
{'field': feld.id, 'contract': self.contract.id, 'project': self.project.id,
'field_uuid': feld.uuid, 'ad': newkampagne.id,'relname':media.medianame,'mediatype':media.id})
_logger.info('Prüfe Medien : C_' + str(self.contract.id) + 'K_' + str(
newkampagne.id) + ' setze Vertrag für Medium : ' + str(newmedia.contract) + '/' + str(
newmedia.ad))
mediaids.append(newmedia.id)
newkampagne.write({'need_media': [(6, 0, mediaids)]})
_logger.info('Click auf Werbekampagne : C_' + str(self.contract.id) + 'A_' + str(newkampagne.id) + ' setze Media ')
return {
'type': 'ir.actions.act_window',
'view_type':'form',

View File

@ -18,4 +18,6 @@ digitalsignage_dss_adstructures_group_user,access.dss.adstructures,model_dss_ads
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
digitalsignage_dss_import_group_user,access.dss.import,model_dss_import,base.group_user,1,1,1,1
digitalsignage_dss_settings_group_user,access.dss.settings,model_dss_settings,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
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
22 digitalsignage_dss_import_group_user access.dss.import model_dss_import base.group_user 1 1 1 1
23 digitalsignage_dss_settings_group_user access.dss.settings model_dss_settings base.group_user 1 1 1 1

0
static/images/LCD.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

0
static/images/LED.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

0
static/images/tree_r.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 241 B

After

Width:  |  Height:  |  Size: 241 B

0
static/images/tree_ud.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 207 B

After

Width:  |  Height:  |  Size: 207 B

0
static/src/css/color_widget.scss Normal file → Executable file
View File

0
static/src/img/app_store.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

0
static/src/img/bird.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

0
static/src/img/chrome_store.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

0
static/src/img/planner_icon.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

0
static/src/img/play_store.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

0
static/src/img/project-custom-tasks.gif Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

0
static/src/img/tasks_icon.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

0
static/src/img/top_left_arrow.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

0
static/src/img/web_planner_email.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

0
static/src/img/web_planner_project.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

0
static/src/img/web_planner_subtype.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

0
views/.mc.menu Normal file → Executable file
View File

0
views/1 Normal file → Executable file
View File

0
views/2 Normal file → Executable file
View File

View File

@ -338,88 +338,79 @@
</group>
</div>
</div>
<div class="row" >
<div class="col-8">
<div class="row" >
<div class="col-8">
<group attrs="{'invisible': [('runtimesystem','!=','M')]}" >>
<field name="runtime_m" string="Laufzeit Monate"/>
</group>
<field name="runtime_m" string="Laufzeit Monate"/>
</group>
<group attrs="{'invisible': [('runtimesystem','!=','T')]}" >>
<field name="runtime_t" string="Laufzeit Tage"/>
</group>
<field name="runtime_t" string="Laufzeit Tage"/>
</group>
<group attrs="{'invisible': [('runtimesystem','!=','E')]}" >>
<field name="runtime_events" string="Laufzeit EventTage"/>
</group>
<field name="runtime_events" string="Laufzeit EventTage"/>
</group>
<group attrs="{'invisible': [('runtimesystem','!=','S')]}" >>
<field name="runtime_divers" string="Laufzeit sontige"/>
</group>
<field name="runtime_divers" string="Laufzeit sontige"/>
</group>
</div>
</div>
<hr>></hr>
<div class="row" >
<div class="col-8">
<hr>></hr>
<div class="row" >
<div class="col-8">
<group>
<field name="paymentsystems" string="Abrechnung"/>
<field name="intern_info_payment_off"/>
<field name="paymentsystems" string="Abrechnung"/>
<field name="intern_info_payment_off"/>
</group>
</div>
</div>
</div>
</page>
<page name="contractsettings" string="Kampagnen/Verlauf">
<group>
<group>
<field name="ads" string="" readonly="1">
<tree string="kampagnen" editable="none" create="none">
<field name="adname" string="Kampagne"/>
<field name="adtype" string="Kamapgnen-Art"/>
<field name="create_date" string="Erstellt am"/>
<field name="description" string="Bemerkung"/>
<field name="ad_state_color" string="Status" widget="color"/>
</tree>
</field>
</group>
<tree string="kampagnen" editable="none" create="none">
<field name="adname" string="Kampagne"/>
<field name="adtype" string="Kamapgnen-Art"/>
<field name="create_date" string="Erstellt am"/>
<field name="description" string="Bemerkung"/>
<field name="ad_state_color" string="Status" widget="color"/>
</tree>
</field>
</group>
</page>
<page name="contractmedia" string="letzte Medien">
<group>
<group>
<field name="last_media" string="" readonly="1">
<tree string="kampagnen" editable="none" create="none" >
<field name="field" string="vom Feld"/>
<field name="ad" string="vom Kampagne"/>
<field name="mediatype_name" string="Nutzung"/>
<button name="dload" string="" type="object" icon="fa-download"/>
<field name="mediafile" string="Vorschau" options="{'size':[50]}" widget="image"/>
<field name="secured_ro" string="Gesperrt" widget="boolean_toggle"/>
<field name="used_ro" string="Genutzt" widget="boolean_toggle"/>
</tree>
</field>
</group>
</page>
<page name="contractmedia" string="Erforderliche Medien">
<group>
<field name="need_media" string="" readonly="1">
<tree string="kampagnen" editable="none" create="none" >
<field name="field" string="vom Feld"/>
<field name="mediatype_name" string="Nutzung"/>
<field name="mediatype_type" string="Art"/>
<!-- <field name="secured_ro" string="Gesperrt" widget="boolean_toggle"/>
<field name="used_ro" string="Genutzt" widget="boolean_toggle"/>-->
</tree>
</field>
</group>
<tree string="kampagnen" editable="none" create="none" >
<field name="field" string="vom Feld"/>
<field name="ad" string="vom Kampagne"/>
<field name="mediatype_name" string="Nutzung"/>
<button name="dload" string="" type="object" icon="fa-download"/>
<field name="mediafile" string="Vorschau" options="{'size':[50]}" widget="image"/>
<field name="secured_ro" string="Gesperrt" widget="boolean_toggle"/>
<field name="used_ro" string="Genutzt" widget="boolean_toggle"/>
</tree>
</field>
</group>
</page>
<!-- <page name="querprojects" string="Weitere Projekte">
<group>
<field name="client_other_projects" string="Weitere Projekte"/>
</group>
<group>
<field name="client_other_projects" string="Weitere Projekte"/>
</group>
</page>-->
<page name="informations" string="Informationen">
<group>
<field name="contract_id" string="Kunden/Vert.nummer" readonly="1"/>
<field name="id" string="Vertrags Interne Id" readonly="1"/>
<field name="ads_last_state" string="letzter Vorgang" readonly="1"/>
<field name="projectIid" string="Project IId" readonly="1"/>
<field name="uuid" string="Datensatz UUID"/>
<field name="project_ad_structure" string="Project Aufbau" readonly="1"/>
<field name="cloudlink"/>
</group>
<group>
<field name="cloudlink"/>
</group>
</page>
<page name="informations" string="Informationen">
<group>
<field name="contract_id" string="Kunden/Vert.nummer" readonly="1"/>
<field name="id" string="Vertrags Interne Id" readonly="1"/>
<field name="ads_last_state" string="letzter Vorgang" readonly="1"/>
<field name="projectIid" string="Project IId" readonly="1"/>
<field name="uuid" string="Datensatz UUID"/>
<field name="project_ad_structure" string="Project Aufbau" readonly="1"/>
</group>
</page>
</notebook>
</sheet>

View File

@ -37,7 +37,6 @@
<field name="mediatype" string="Medium"/>
<field name="secured_ro" widget="boolean_toggle"/>
<field name="used_ro" widget="boolean_toggle"/>
<field name="isreference" widget="boolean_toggle"/>
<field name="mediafile" string="Medium-Inhalt" widget="image"/>
</group>
</group>

View File

@ -27,12 +27,13 @@
<field name="vertriebspartner"/>
</group>
</page>
<page name="basesettings" string="Details">
<page name="basesettings" string="Details (Zeiten,Standort)">
<group>
<field name="zeiten_on"/>
<field name="zeiten_off"/>
</group>
</page>
<field name="standort"/>
<field name="zeiten_on"/>
<field name="zeiten_off"/>
</group>
</page>
<page name="geraetesettings" string="Systeme">
<group>
<field name="systemname" string="Abspiel/Controlsystem"/>

View File

@ -24,14 +24,15 @@
<form>
<sheet>
<group name="erscheinung" string="Kennungen">
<field name="systemname"/>
<field name="kennung" string="Kurzkennung (XXX)"/>
<field name="default_adstructure"/>
<field name="systemname"/>
<field name="kennung" string="Kurzkennung (XXX)"/>
<field name="default_adstructure"/>
<field name="default_cloud_path"/>
</group>
<group name="erscheinung" string="Aussehen">
<field name="farbe" string="Farbkennung" widget="color"/>
<field name="icon" widget="image"/>
<field name="icon_5050" widget="image"/>
<field name="farbe" string="Farbkennung" widget="color"/>
<field name="icon" widget="image"/>
<field name="icon_5050" widget="image"/>
</group>
</sheet>
<div class="oe_chatter">

View File

@ -95,82 +95,6 @@
</field>
</record>
<record id="dss_geraetetypen_view_form" model="ir.ui.view">
<field name="name">dss_geraetetypen_form</field>
<field name="model">dss.geraetetypen</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group name="basesettings" >
<field name="geraetename"/>
<field name="geraetetyp"/>
<field name="grundsystem" string="Nutzung für "/>
<field name="grundsystem_kennung" invisible="1"/>
<field name="led_geraetetyp" attrs="{'invisible': ['|',('geraetetyp','!=','STE'),('grundsystem_kennung','!=','LED')]}"/>
</group>
</group>
<notebook>
<page name="osssetings" string="LCDSystem Daten" attrs="{'invisible': ['|',('geraetetyp','!=','TOP'),('grundsystem_kennung','!=','LCD')]}" >
<group name="lcdsettings">
<field name="lcd_size"/>
<field name="lcd_size_sonstige" attrs="{'invisible': [('lcd_size','!=','00')]}"/>
</group>
</page>
<page name="osssetings" string="LEDModul Daten" attrs="{'invisible': ['|',('led_geraetetyp','!=','MOD'),('grundsystem_kennung','!=','LED')]}" >
<group name="ledsettings_hw" string="LED Modul Daten" colspan="2">
<group name="ledsettings" string="LED Modul Grunddaten" colspan="2">
<field name="led_module_pixelpitch" colspan="2"/>
<field name="led_module_breite"/>
<field name="led_module_hoehe"/>
<field name="led_module_pixel_breite"/>
<field name="led_module_pixel_hoehe"/>
</group>
<group name="ledsettings" string="LED Modul Kennungen" colspan="2">
<field name="led_module_kennung"/>
<field name="led_module_serial"/>
<field name="led_module_vendor"/>
</group>
<group name="ledsettings" string="LED Modul typ" colspan="2">
<field name="led_module_system"/>
<field name="led_module_system_sonstige" attrs="{'invisible': [('led_module_system','!=','SON')]}"/>
</group>
</group>
</page>
<page name="receivingssetings" string="Receivingcard Daten" attrs="{'invisible': ['|',('led_geraetetyp','!=','REC'),('grundsystem_kennung','!=','LED')]}" >
<group name="ledsettings_hw" string="LED Receivingcard Daten" colspan="2">
<field name="led_receivingcard_kennung" colspan="2"/>
<field name="led_receivingcard_vendor"/>
</group>
</page>
<page name="ntssetings" string="Netzteil Daten" attrs="{'invisible': ['|',('led_geraetetyp','!=','NET'),('grundsystem_kennung','!=','LED')]}" >
<group name="ledsettings_hw_nt" string="LED Netzteil Daten" colspan="2">
<field name="led_netzteil_typ"/>
<field name="led_netzteil_kennung"/>
<field name="led_netzteil_vendor"/>
<field name="led_netzteil_spannung"/>
<field name="led_netzteil_leistung"/>
</group>
</page>
<page name="geraetezusatz" string="Zubehör" colspan="4">
<group>
<field name="zusatz_integrationen" string="Zubehör"/>
</group>
</page>
<page name="informations" string="Informationen">
<field name="uuid" string="UUID"/>
</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_systems_view_tree" model="ir.ui.view">
<field name="name">dss_systems_tree</field>
@ -183,20 +107,6 @@
</field>
</record>
<record id="dss_geraetetypen_view_tree" model="ir.ui.view">
<field name="name">dss_geraetetypen_tree</field>
<field name="model">dss.geraetetypen</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<tree string="Geraetetypen">
<field name="geraetename"/>
<field name="geraetetyp"/>
<field name="grundsystem"/>
<field name="led_geraetetyp"/>
</tree>
</field>
</record>
<record id="dss_software_view_form" model="ir.ui.view">
<field name="name">dss_software_form</field>
<field name="model">dss.software</field>

View File

@ -18,6 +18,12 @@
parent="menu_dss_main"
sequence="4"/>
<menuitem
id="menu_dss_interntools"
name="Tools"
parent="menu_dss_main"
sequence="5"/>
<menuitem
id="menu_dss_wtyp_internsetup"
name="Medien und Werbevorlagen"
@ -179,10 +185,24 @@
action="action_dss_paysystems_view"
sequence="120"/>
<menuitem
id="menu_dss_configuration_settings"
name="Grundeinstellungen"
parent="menu_dss_internsetup"
action="action_dss_settings_view"
sequence="130"/>
<menuitem id="menu_dss_email_templates"
parent="menu_dss_configurationen_system"
action="action_dss_email_template_tree_all"
sequence="130"/>
parent="menu_dss_configurationen_system"
action="action_dss_email_template_tree_all"
sequence="130"/>
<menuitem
id="menu_dss_openprojectimport"
name="OpenProject-Import via API"
parent="menu_dss_interntools"
action="action_dss_import_view"
sequence="10"/>
</odoo>