1408 lines
71 KiB
Python
Executable File
1408 lines
71 KiB
Python
Executable File
# -*- coding: utf-8 -*
|
|
|
|
import ast
|
|
import json
|
|
import re
|
|
import uuid
|
|
import logging
|
|
import base64
|
|
import subprocess
|
|
import tempfile
|
|
import easywebdav
|
|
import os
|
|
import os.path
|
|
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo import tools
|
|
from odoo.exceptions import ValidationError
|
|
from datetime import date
|
|
from pyffmpeg import FFmpeg
|
|
|
|
_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)
|
|
|
|
def _generate_preview_from_binary_2(self, videofile_file):
|
|
ff=FFmpeg()
|
|
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 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)
|
|
return ds
|
|
|
|
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
|
|
|
|
def _default_get_ads_last_ad(self):
|
|
_logger.info('finding Standard ad '+self.id)
|
|
ds = self.env['dss.ads'].search([('contract','=',self.id),('ad_is_lastpos','=',True)],limit=1)
|
|
if not ds:
|
|
ds = self.env['dss.ads'].search([('contract','=',self.id)],limit=1)
|
|
return ds
|
|
|
|
_name = "dss.contracts"
|
|
_description = "DigitalSignage Vertraege"
|
|
_rec_name = "contract_auto_name"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
|
cruuid = fields.Char(related='uuid')
|
|
contract_id = fields.Char("Kundennummer",store=True,tracking=True)
|
|
contract_name = fields.Char('Kurzbezeichnung', required=True,tracking=True)
|
|
contract_state = fields.Many2one('dss.contractstate',group_expand='_read_group_stage_ids',tracking=True)
|
|
contract_state_order = fields.Integer(related='contract_state.order',store=True)
|
|
contract_auto_id = fields.Char("Kundennummer",tracking=True)
|
|
contract_auto_name = fields.Char('Vertragskennug',tracking=True)
|
|
|
|
contract_remark = fields.Html('Vertragshinweise',tracking=True)
|
|
|
|
project = fields.Many2one('dss.projects' , string='Project', store=True,tracking=True)
|
|
project_id = fields.Integer(related='project.projectid', string='Project ID')
|
|
projectIid = fields.Integer('Project IID',tracking=True)
|
|
project_ad_structure = fields.Many2one(related='project.grundsystem_default_adstructure', string='Aufbau')
|
|
|
|
client = fields.Many2one('res.partner',domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]",tracking=True)
|
|
client_id = fields.Char("Kundenid",tracking=True)
|
|
client_uuid = fields.Char(related="client.dss_uuid")
|
|
parent_id = fields.Many2one('dss.contracts', string='Parent Task', index=True,tracking=True)
|
|
|
|
client_short_company = fields.Char('Firmenname Kunde',tracking=True)
|
|
client_short_vorname = fields.Char('Vorname Kunde',tracking=True)
|
|
client_short_name = fields.Char('Name Kunde',tracking=True)
|
|
client_short_strasse = fields.Char('Strasse Kunde',tracking=True)
|
|
client_short_plz = fields.Char('PLZ Kunde',tracking=True)
|
|
client_short_ort = fields.Char('Ort Kunde',tracking=True)
|
|
client_short_land = fields.Many2one('res.country','Land Kunde',tracking=True)
|
|
client_short_email = fields.Char('Email Kunde',tracking=True)
|
|
client_short_telefon = fields.Char('Telefon Kunde',tracking=True)
|
|
client_short_mobil = fields.Char('Mobilfunk Kunde',tracking=True)
|
|
client_short_website = fields.Char('Webseite Kunde',tracking=True)
|
|
|
|
client_other_projects = fields.Many2many('dss.projects',string='Weitere Projekte',tracking=True)
|
|
|
|
werbe_feld_selected = fields.One2many('dss.advertisefields','contract',string='Werbefelder',tracking=True)
|
|
|
|
# need_media = fields.Many2many('dss.mediarelations','mediarelations_contract_rel','contract_id','mediarelations_id',string='benötigte Medien')
|
|
last_media = fields.One2many('dss.mediarelations','contract',string='Medien',domain="[('isreference','=',False)]")
|
|
# last_media = fields.Many2many('dss.mediarelations','mediarelations_ad_relations','contract_id','mediarelations_id',string='Medien')
|
|
need_media = fields.One2many('dss.mediarelations','contract',string='Medien',domain="[('isreference','=',True)]")
|
|
# need_media_computed = fields.One2many('dss.mediarelations','field',compute='_get_media_list')
|
|
# need_media_computed = fields.One2many('dss.mediarelations','uuid',domain="[('field','in',werbe_feld_selected)]")
|
|
|
|
main_runtime = fields.Integer('Gesamtlaufzeit',tracking=True)
|
|
split_runtime_count = fields.Integer('Laufzeit Teilungen',tracking=True)
|
|
split_runtime_time = fields.Integer('Laufzeit Sekunden',tracking=True)
|
|
|
|
contract_date = fields.Date('Vertragsdatum',tracking=True)
|
|
start_date = fields.Date('Ausstrahlungsdatum',tracking=True)
|
|
|
|
runtimesystem = fields.Selection([('M','Monatslaufzeit'),('T','Tagelaufzeit'), ('E','Eventlaufzeit'), ('S','Sonderlaufzeit')],tracking=True)
|
|
runtime_m = fields.Integer('Laufzeit',tracking=True)
|
|
runtime_t = fields.Integer('Laufzeit',tracking=True)
|
|
runtime_events = fields.Many2many('dss.eventdays',tracking=True)
|
|
runtime_divers = fields.Char('Laufzeit',tracking=True)
|
|
|
|
paymentsystems = fields.Many2one('dss.paysystems',tracking=True)
|
|
intern_info_payment_off = fields.Boolean('Keine Zahl-Benachrichtigungen',tracking=True)
|
|
|
|
base_ad = fields.Many2one('dss.ads',tracking=True)
|
|
ads = fields.One2many('dss.ads','contract',tracking=True)
|
|
ads_last_ad = fields.Many2one('dss.ads', help="letzte Werbekampagne",computed='_default_get_ads_last_ad',store=True)
|
|
ads_last_state = fields.Many2one(related='ads_last_ad.ad_state', help="Status des letzten Werbekampagnen Eintrags")
|
|
ads_last_state_color = fields.Char(related='ads_last_ad.ad_state_color')
|
|
ads_last_state_text = fields.Char(related='ads_last_ad.ad_state_text')
|
|
ads_last_work_state = fields.Many2one(related='ads_last_ad.work_state', help="Arbeitsstatus des letzten Werbekampagnen Eintrags")
|
|
ads_last_work_state_color = fields.Char(related='ads_last_ad.work_state_color')
|
|
ads_last_work_state_text = fields.Char(related='ads_last_ad.work_state_text')
|
|
ads_last_todo_state = fields.Many2one(related='ads_last_ad.todo_state', help="Aufgabenstatus des letzten Werbekampagnen Eintrags")
|
|
ads_last_todo_state_until = fields.Date(related='ads_last_ad.todo_state_until')
|
|
ads_last_todo_state_color = fields.Char(related='ads_last_ad.todo_state_color')
|
|
ads_last_todo_state_text = fields.Char(related='ads_last_ad.todo_state_text')
|
|
|
|
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_text = fields.Char(related='work_state.statusname')
|
|
work_state_info = fields.Char('Zusatzinfo',tracking=True)
|
|
|
|
# todo_state = fields.Many2one('dss.todostate',default=_default_todo_state,tracking=True)
|
|
# todo_state_color = fields.Char(related='todo_state.color')
|
|
# todo_state_text = fields.Char(related='todo_state.statusname')
|
|
# 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 den Kunde innerhalb des Projekt Ordners')
|
|
|
|
@api.constrains('client_id')
|
|
def _check_client_id(self) :
|
|
for record in self :
|
|
if len(record.client_id) != 2 :
|
|
_logger.debug("Kundenid muss 2 Stellen haben %s" % (record.client_id))
|
|
raise ValidationError(_("KundenID muss 2 Stellen haben"))
|
|
|
|
@api.onchange('client_id')
|
|
def _onchange_client_id(self):
|
|
for record in self :
|
|
if record.contract_name == '' :
|
|
cname = 'unbekannter Kunden'
|
|
else:
|
|
cname = record.contract_name
|
|
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
|
cidstr = "%s%s" % (record.project_id,record.client_id)
|
|
if resstr is None :
|
|
resstr = 'nicht ermittelbar'
|
|
_logger.debug(resstr)
|
|
self.contract_auto_name = resstr
|
|
self.contract_auto_id = cidstr
|
|
|
|
@api.onchange('project_id')
|
|
def _onchange_project_id(self):
|
|
for record in self :
|
|
if record.contract_name == '' :
|
|
cname = 'unbekannter Kunden'
|
|
else:
|
|
cname = record.contract_name
|
|
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
|
cidstr = "%s%s" % (record.project_id,record.client_id)
|
|
if resstr is None :
|
|
resstr = 'nicht ermittelbar'
|
|
_logger.debug(resstr)
|
|
self.contract_auto_name = resstr
|
|
self.contract_auto_id = cidstr
|
|
|
|
@api.onchange('contract_name')
|
|
def _onchange_contract_name(self):
|
|
for record in self :
|
|
if record.contract_name == '' :
|
|
cname = 'unbekannter Kunden'
|
|
else:
|
|
cname = record.contract_name
|
|
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
|
|
if resstr is None :
|
|
resstr = 'nicht ermittelbar'
|
|
_logger.debug(resstr)
|
|
self.contract_auto_name = resstr
|
|
|
|
# @api.model
|
|
# def create(self,vals):
|
|
# vals['projectid'] = self.env.context.get('active_id')
|
|
# project = self.env('dss.projects').search(['id','=',vals['projectid']])
|
|
# vals['project'] = project('projektname');
|
|
# contract=super().create(vals)
|
|
# return contract
|
|
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
@api.model
|
|
def _getdefwscolor(self):
|
|
return str('#ffffff')
|
|
|
|
@api.model
|
|
def _default_client_id(self):
|
|
return str("00")
|
|
|
|
@api.model
|
|
def _read_group_stage_ids(self,stages,domain,order):
|
|
contract_state_ids = self.env['dss.contractstate'].search([],order='order')
|
|
return contract_state_ids
|
|
|
|
@api.model
|
|
def pyaction_dss_contract_make_partner(self):
|
|
action = self.env['ir.actions.act_window'].with_context({'default_contractid': self.id})._for_xml_id('DigitalSignage.act_dss_project_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 action
|
|
|
|
def tokampagne(self):
|
|
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' - prüfe Letzte Aktuelle Kampagne')
|
|
# action = self.env['ir.actions.act_window'].with_context({'default_contractid': self.id})._for_xml_id('DigitalSignage.action_dss_ads_view')
|
|
# context = action['context']
|
|
ds = self.env['dss.ads'].search([('contract','=',self.id),('ad_is_lastpos','=',True)],limit=1)
|
|
if not ds:
|
|
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+' - keine letzte Kampagne')
|
|
ds = self.env['dss.ads'].search([('contract','=',self.id)],limit=1)
|
|
else:
|
|
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Kampagne gefunden ')
|
|
self.ads_last_ad = ds
|
|
# prüfen ob LetzteKampagne medien hat
|
|
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Suche evtl Medien der Kampagne ')
|
|
medias = self.env['dss.mediarelations'].search(['&',('contract','=',self.id),('ad','=',ds.id)])
|
|
if medias:
|
|
_logger.info('Click auf Werbekampagne : C_'+str(self.id)+'A_'+str(ds.id)+' - Medien gefunden '+str(medias.ids))
|
|
self.write({'last_media': [(6,0,medias.ids)]})
|
|
else:
|
|
_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)
|
|
if not 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 : 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 : C_'+str(self.id)+' Kampagne erstellt A_'+str(kampagne.id))
|
|
kampagne.parent_ad = kampagne.id
|
|
mediaids = []
|
|
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 : 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)+'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)+'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:
|
|
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)+'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',
|
|
'view_type':'form',
|
|
'view_mode':'form,tree',
|
|
'res_model':'dss.ads',
|
|
'target':'current',
|
|
'context':'{"kampagne_id":'+str(kampagne.id)+',"show_project_update":True}',
|
|
'context':'',
|
|
'res_id':kampagne.id,
|
|
'display_name' : 'Änderung zur Werbekampagne '+kampagne.parent_ad.adname,
|
|
'domain':'[("id","=","context[kampagne_id]")]'
|
|
}
|
|
|
|
|
|
def pyaction_view_contract(self):
|
|
view = self.env.ref('DigitalSignage.dss_main_contracts_form')
|
|
_logger.debug('Click auf Vertrag : '+str(self.id))
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'view_mode': 'form' ,
|
|
'view_id': view.id,
|
|
'res_model': 'dss.contracts' ,
|
|
'target': 'current' ,
|
|
'display_name' : self.contract_name,
|
|
'views':[(view.id,'form')],
|
|
'res_id': self.id ,
|
|
}
|
|
|
|
def pyaction_new_contract_kanban(self):
|
|
action = self.env['ir.actions.act_window'].with_context({'default_contractid': self.id})._for_xml_id('DigitalSignage.action_dss_project_new_contract_kanban')
|
|
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 action
|
|
|
|
def pyaction_dss_project_make_contract(self):
|
|
action = self.env['ir.actions.act_window'].with_context({'default_projectid': self.id})._for_xml_id('DigitalSignage.action_dss_project_view_contract')
|
|
return action
|
|
|
|
|
|
|
|
|
|
class dssmain(models.Model):
|
|
_name = "dss.projects"
|
|
_description = "DigitalSignage Projekte"
|
|
_rec_name = "projektname"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
projektname = fields.Char('Projektname', required=True)
|
|
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
|
projectid = fields.Integer('Projekt ID',tracking=True)
|
|
color = fields.Char('Color Index',tracking=True)
|
|
active = fields.Boolean('Active', default=True,tracking=True)
|
|
name = fields.Char('Interner Name', required=True,tracking=True)
|
|
aktstatus = fields.Many2one('dss.projectstate',string='Aktueller Status:',tracking=True)
|
|
aktstatus_typ = fields.Selection(related='aktstatus.typ')
|
|
aktstatus_color = fields.Char(related='aktstatus.color')
|
|
aktstatus_icon = fields.Image(related='aktstatus.icon')
|
|
description = fields.Text('Beschreibung',tracking=True)
|
|
systemname = fields.Many2one('dss.systems',tracking=True)
|
|
grundsystemname = fields.Many2one('dss.systemtypen',tracking=True)
|
|
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)
|
|
zeiten_on = fields.Datetime('Einschaltzeit',tracking=True)
|
|
zeiten_off = fields.Datetime('Ausschaltzeit',tracking=True)
|
|
errichtet_am = fields.Datetime('Errichtungstag',tracking=True)
|
|
standort_inout = fields.Selection([('indoor','im Gebäude'), ('outdoor','Aussenbereich'), ('semiindoor','Überdachter Aussenbereich'),('Divers','Andere Art')],tracking=True);
|
|
|
|
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für das Project innerhalb des Cloud Struktur')
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
def pyaction_view_contracts(self):
|
|
# action = self.env['ir.actions.act_window'].with_context({'default_project': self.id})._for_xml_id('DigitalSignage.action_dss_project_contracts')
|
|
# action['display_name'] = self.projektname
|
|
# context = action['context'].replace('active_id', str(self.id))
|
|
# domain = action['domain'].replace('active_id', str(self.id))
|
|
# _logger.info('Vertraege fuer : '+str(self.id))
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'view_type':'kanban',
|
|
'view_mode':'kanban,tree',
|
|
'res_model':'dss.contracts',
|
|
'target':'current',
|
|
'context':'{"default_project":'+str(self.id)+',"show_project_update":True}',
|
|
'res_id':self.id,
|
|
'display_name' : self.projektname,
|
|
'domain':'[("project","=",'+str(self.id)+')]'
|
|
}
|
|
# context = ast.literal_eval(context)
|
|
# context = "{
|
|
# 'create': self.active,
|
|
# 'active_test': self.active
|
|
# }
|
|
# 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):
|
|
_name = "dss.geraetetypen"
|
|
_description = "DigitalSignage Geraetetypen"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
_rec_name = "geraetename"
|
|
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.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)
|
|
has_klima = fields.Boolean('Mit Klimasystem',tracking=True)
|
|
has_fan = fields.Boolean('Mit Ventiltorensystem',tracking=True)
|
|
|
|
stromzaehler = fields.Many2one('dss.geraetetypen',tracking=True)
|
|
stromverbrauch_avg = fields.Integer('Stromverbrauch AVG in W',tracking=True)
|
|
|
|
osvorhanden = fields.Boolean('Mit Betriebssystem',tracking=True)
|
|
osname = fields.Char('Betriebssystem',tracking=True)
|
|
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',tracking=True);
|
|
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',tracking=True);
|
|
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',tracking=True);
|
|
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')],tracking=True)
|
|
led_module_pixelpitch = fields.Float('Modulpixelpitch',tracking=True)
|
|
led_module_breite = fields.Integer('Modulbreite mm',tracking=True)
|
|
led_module_hoehe = fields.Integer('Modulhoehe mm',tracking=True)
|
|
led_module_pixel_breite = fields.Integer('Modulbreite px',tracking=True)
|
|
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',tracking=True);
|
|
led_module_system_sonstige = fields.Char('Modulbefestigung Sonstige',tracking=True)
|
|
led_module_kennung = fields.Char('Modulbezeichnung',tracking=True)
|
|
led_module_serial = fields.Char('Modulseriennummer',tracking=True)
|
|
led_module_vendor = fields.Many2one('res.partner','Modul Hersteller',tracking=True)
|
|
|
|
led_receivingcard_vendor = fields.Many2one('res.partner','Receivingcard Hersteller')
|
|
led_receivingcard_kennung = fields.Char('Receivingcardtyp')
|
|
|
|
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',tracking=True)
|
|
led_netzteil_kennung = fields.Char('Netzteilkennung',tracking=True)
|
|
led_netzteil_spannung = fields.Char('Netzteil Spannung V',tracking=True)
|
|
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',tracking=True);
|
|
lcd_montage_sonstige = fields.Char('Sonstige Montageart',tracking=True)
|
|
|
|
|
|
hw_anzeige = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','ANZ')]",tracking=True)
|
|
hw_steuerung = fields.Many2one('dss.geraetetypen',domain="['&',('geraetetyp','=','STE'),('grundsystem_kennung','=','LED')]",tracking=True)
|
|
hw_player = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','PLY')]",tracking=True)
|
|
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):
|
|
return str(uuid.uuid4())
|
|
|
|
@api.depends('grundsystem')
|
|
def _compute_grundsystem_kennung(self):
|
|
for syst in self:
|
|
if syst.grundsystem:
|
|
syst.grundsystem_kennung = syst.grundsystem.kennung
|
|
|
|
class dsssystemtypen(models.Model):
|
|
|
|
|
|
_name = "dss.systemtypen"
|
|
_inherit = ['mail.thread']
|
|
_description = "DigitalSignage Systemtypen"
|
|
_rec_name = "systemname"
|
|
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
|
systemname = fields.Char('Systemname', required=True)
|
|
kennung = fields.Char('Kurzkennung', required=True)
|
|
farbe = fields.Char('Grundfarbe')
|
|
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())
|
|
|
|
@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):
|
|
_name = "dss.software"
|
|
_description = "Softwaresysteme"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
_rec_name = "softwarename"
|
|
# _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)
|
|
softwarename = fields.Char('Softwarename', required=True)
|
|
version = fields.Char('Version')
|
|
hersteller = fields.Char('Hersteller')
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
class dsssystems(models.Model):
|
|
_name = "dss.systems"
|
|
_description = "DigitalSignage Systemtypen"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
_rec_name = "systemname"
|
|
# _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)
|
|
systemname = fields.Char('Systemname', required=True)
|
|
|
|
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')
|
|
has_klima = fields.Boolean('Mit Klimasystem')
|
|
has_fan = fields.Boolean('Mit Ventiltorensystem')
|
|
|
|
stromzaehler = fields.Many2one('dss.geraetetypen')
|
|
stromverbrauch_avg = fields.Integer('Stromverbrauch AVG in W')
|
|
|
|
osvorhanden = fields.Boolean('Mit Betriebssystem')
|
|
osname = fields.Char('Betriebssystem')
|
|
ostyp = fields.Selection([('Win','Windows'), ('Lin','Linux'), ('And','Android'),('Ras','Raspberry PI'),('Non','Keines bekannt'),('Div','Anderes')]);
|
|
|
|
lcd_ausrichtung = fields.Selection([('quer','Horizontal/Querformat'), ('hoch','Vertikal/Hochformat'),('Divers','Andere Art')],'LCD Ausrichtung');
|
|
lcd_touch = fields.Boolean('Touchsystem')
|
|
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_sonstige = fields.Char('Sonstige Montageart')
|
|
|
|
lcd_panel = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LCD'),('led_geraetetyp','=','ANZ')]")
|
|
lcd_mainboard = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LCD'),('led_geraetetyp','=','STE')]")
|
|
lcd_touchcontroler = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LCD'),('led_geraetetyp','=','SYS')]")
|
|
lcd_netzteil = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LCD'),('led_geraetetyp','=','NET')]")
|
|
|
|
led_pixelpitch = fields.Char('Pixelabstand')
|
|
led_breite = fields.Integer('LED Breite mm')
|
|
led_hoehe = fields.Integer('LED Hoehe mm')
|
|
led_pixel_breite = fields.Integer('LED Breite px')
|
|
led_pixel_hoehe = fields.Integer('LED Hoehe px')
|
|
|
|
led_receivingcard = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LED'),('led_geraetetyp','=','REC')]")
|
|
led_netzteile = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LED'),('led_geraetetyp','=','NET')]")
|
|
led_module = fields.Many2one('dss.geraetetypen',domain="['&',('grundsystem_kennung','=','LED'),('led_geraetetyp','=','MOD')]")
|
|
|
|
led_montage = fields.Selection([('WAN','Wandmontage'), ('FUS','1 standFuss zentral'), ('FU2','2 Standfüsse Aussen'),('FU3','1 Standfuss dezentral'),('MO1','manuell Mobil bewegbar'),('MO2','Mobil bewegbar Container'),('XXX','Sonstige')],'Montage/Befestigung');
|
|
led_montage_sonstige = fields.Char('Sonstige Montageart')
|
|
|
|
zusatz_integrationen = fields.Many2many('dss.geraetetypen')
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
class dsspprojektstatus(models.Model):
|
|
_name = "dss.projectstate"
|
|
_description = "DigitalSignage Projektstatus"
|
|
_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')
|
|
typ = fields.Selection([('NEU','In Bearbeitung'),('WORK','fertig/laufend'),('ERROR','Fehlerhaft/Defekt'),('ARCHIV','veraltet/archiviert')],'Systemzuordnung')
|
|
icon = fields.Image()
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
class dsscontractstatus(models.Model):
|
|
_name = "dss.contractstate"
|
|
_description = "DigitalSignage Vertragsstatus"
|
|
_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')
|
|
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')
|
|
func = fields.Selection([('STD','Standard'), ('FIN','Endzustand'), ('WOR','Arbeitszustand')])
|
|
icon = fields.Image()
|
|
order = fields.Integer('Reihenfolge')
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
class dssworkstatus(models.Model):
|
|
_name = "dss.workstate"
|
|
_description = "DigitalSignage Bearbeitungsstatus"
|
|
_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')
|
|
icon = fields.Image()
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
class dsseventdays(models.Model):
|
|
_name = "dss.eventdays"
|
|
_description = "DigitalSignage EventSpieltage"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
_rec_name = "eventname"
|
|
# _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)
|
|
eventname = fields.Char('Eventname', required=True)
|
|
description = fields.Text('EventBeschreibung')
|
|
eventdate = fields.Date('EventDatum', required=True)
|
|
color = fields.Char(string='Color Index')
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
|
|
class dsstodostatus(models.Model):
|
|
_name = "dss.todostate"
|
|
_description = "DigitalSignage Bearbeitungsschritte"
|
|
_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)
|
|
statusnr = fields.Integer(default=lambda self: self._default_statusnr(),string='Listenpostion', required=True)
|
|
color = fields.Char(string='Color Index')
|
|
icon = fields.Image()
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
@api.model
|
|
def _default_statusnr(self):
|
|
return str(1)
|
|
|
|
class dssadvertisefields(models.Model):
|
|
|
|
@api.model
|
|
def create(self,vals):
|
|
result = super().create(vals)
|
|
result.issaved = True
|
|
return result
|
|
|
|
_name = "dss.advertisefields"
|
|
_description = "DigitalSignage Werbefelder"
|
|
_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')
|
|
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')
|
|
issaved = fields.Boolean('ist gespeichert')
|
|
# uuid = fields.Char('UUID', required=True, translate=True)
|
|
feldname = fields.Char('Feldname', required=True)
|
|
project = fields.Many2one('dss.projects' , string='Project', store=True)
|
|
project_id = fields.Integer(related='project.projectid', string='Project ID')
|
|
contract = fields.Many2one('dss.contracts' , string='Vertrag', store=True)
|
|
color_used = fields.Char(string='Color Index')
|
|
color_unused = fields.Char(string='Color Index')
|
|
mediastructure = fields.Many2one('dss.adstructures',string='Feldaufbau',tracking=True)
|
|
mediastructure_medias = fields.Many2many(related='mediastructure.medias',string='Inhalt')
|
|
mediarelations = fields.One2many('dss.mediarelations','relname',tracking=True)
|
|
|
|
def _default_create_date(self):
|
|
return str(date.today())
|
|
|
|
def _default_create_user(self):
|
|
self.issaved = True
|
|
return str(self.env.user.name)
|
|
|
|
|
|
@api.onchange('mediastructure')
|
|
def _onchange_mediastructure_id(self):
|
|
restr = 'keine'
|
|
for record in self :
|
|
resstr = record.mediastructure.uuid
|
|
mtyp = self.env['dss.adstructures'].search([("uuid","=",str(record.mediastructure.uuid))])
|
|
_logger.info(resstr)
|
|
if mtyp:
|
|
resstr = mtyp.structurename
|
|
_logger.info(resstr + ' uuid : '+record.mediastructure.uuid)
|
|
foundused = self.env['dss.mediarelations'].search_count(["&",('field_uuid','=',record.uuid),'|',('secured_ro','=',True),('used_ro','=',True)])
|
|
if foundused != 0 :
|
|
_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
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
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 Verzeichnis',help='Verzeichnis für diese Datei innerhalb des Vertrags-Ordners')
|
|
filepartname = fields.Char('Part.Dateiname',help='Teil des Dateinamens. Wird ergaenzt durch KampagnenID und MedienID. Beispiel : PNAME_34_544.jpg')
|
|
maxsize_kb = fields.Integer('Maximale Größe KB')
|
|
maxsize_w = fields.Integer('Maximale Pixel W')
|
|
maxsize_h = fields.Integer('Maximale Pixel H')
|
|
standard_image = fields.Image()
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
class dssmediarelations(models.Model):
|
|
|
|
_name = "dss.mediarelations"
|
|
_description = "DigitalSignage Kampagne-Medien-Zuordnung"
|
|
_inherit = []
|
|
_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)
|
|
field = fields.Many2one('dss.advertisefields',string='Feld')
|
|
contract = fields.Many2one(related='field.contract',string='Vertrag')
|
|
ad = fields.Many2one('dss.ads',string='Werbekampagne')
|
|
project = fields.Many2one('dss.projects',string='Werbeprojekt')
|
|
mediatype = fields.Many2one('dss.mediatypes',string='Medientyp')
|
|
mediatype_type = fields.Selection(related='mediatype.mediatype',string='Medientyp')
|
|
mediatype_name = fields.Char(related='mediatype.medianame',string='Medienname')
|
|
relname = fields.Char('Relationsname')
|
|
field_uuid = fields.Char('Feld')
|
|
mediatype_uuid = fields.Char('Medientyp')
|
|
mediafile = fields.Binary('Datei',attachment=True)
|
|
mediafile_attachment = fields.Many2one('ir.attachment',string='Datei')
|
|
mediafile_file = fields.Char('Dateiname')
|
|
secured_ro = fields.Boolean('Gesperrt ro')
|
|
used_ro = fields.Boolean('Benutzt ro')
|
|
isreference = fields.Boolean('Für Referenz')
|
|
|
|
# @api.onchange('field')
|
|
# def _onchange_field(self):
|
|
# for record in self:
|
|
# if record.field='':
|
|
# record.contract=''
|
|
# else:
|
|
# record.contrect=record.field_contract
|
|
|
|
def unlink(self):
|
|
_logger.info('unlinking '+str(self))
|
|
for record in self:
|
|
_logger.info('unlinking '+str(record)+' '+str(record.ad))
|
|
if record.ad != False:
|
|
super(dssmediarelations,record).unlink()
|
|
else:
|
|
_logger.info('not unlinking '+str(record)+' '+str(record.ad))
|
|
|
|
@api.onchange('mediafile')
|
|
def _onchange_mediafile(self):
|
|
restr = 'keine'
|
|
for record in self :
|
|
resstr = record.uuid
|
|
_logger.info(record.mediafile_file)
|
|
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 : P_'+str(record.project)+'C_'+str(record.contract)+'A_'+str(record.ad)+' F : '+restr+' created ')
|
|
_logger.info(' Keine Datei ')
|
|
return
|
|
|
|
def dload(self):
|
|
for record in self :
|
|
_logger.info('Download pressed : '+str(record))
|
|
|
|
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)
|
|
resstr = result.uuid
|
|
_logger.info(resstr)
|
|
for n_record in result:
|
|
resstr = n_record.uuid
|
|
_logger.info(resstr)
|
|
n_record.date_create = date.today()
|
|
n_record.user_create = self.env.user.name
|
|
allads = n_record.contract.ads
|
|
_logger.info(allads)
|
|
if allads != False:
|
|
for ad in allads:
|
|
ad.ad_is_lastpos = False
|
|
n_record.ad_is_lastpos = True
|
|
contract = n_record.contract
|
|
contract.ads_last_ad = n_record
|
|
return result
|
|
|
|
# @api.depends('need_media')
|
|
# def _getmedialist(self):
|
|
# mlist = []
|
|
# mlist = self.env['dss.mediarelations'].search([('ad','=',self.id)])
|
|
# if mlist != False:
|
|
# _logger.info('AD Need_Medias A_'+str(self)+' - Computed Medias '+str(mlist))
|
|
# self.need_media = mlist.ids
|
|
# else:
|
|
# self.need_media = False
|
|
|
|
_name = "dss.ads"
|
|
_description = "DigitalSignage Werbekampagnen Phasen"
|
|
# _inherit = ['mail.thread','mail.activity.mixin']
|
|
_inherit = ['mail.activity.mixin']
|
|
#'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')
|
|
aduuid = fields.Char(related='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)
|
|
ad_is_lastpos = fields.Boolean('Letzte Aktion')
|
|
|
|
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')
|
|
contract_need_media = fields.Many2many('contract.need_media',tracking=True)
|
|
|
|
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')
|
|
|
|
# need_media = fields.Many2many('dss.mediarelations','ad',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')
|
|
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')
|
|
ad_state_text = fields.Char(related='ad_state.statusname')
|
|
ad_state_func = fields.Selection(related='ad_state.func')
|
|
|
|
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')
|
|
|
|
|
|
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('ad_state')
|
|
def _onchange_ad_state(self):
|
|
for record in self :
|
|
if record.ad_is_lastpos == True:
|
|
contract = record.contract
|
|
contract.ads_last_state = record.ad_state
|
|
# mtyp = self.env['dss.adstructures'].search([("uuid","=",str(record.mediastructure.uuid))])
|
|
# buildmediarelations(self)
|
|
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):
|
|
for n_record in self:
|
|
resstr = n_record.uuid
|
|
_logger.info(resstr)
|
|
allads = n_record.contract.ads
|
|
_logger.info(allads)
|
|
abort = False
|
|
if allads != False:
|
|
for ad in allads:
|
|
if ad.ad_state.func != 'FIN':
|
|
abort = True
|
|
if abort == False:
|
|
defadstate = self.env['dss.adstate'].search([('func','=','STD')],limit=1).id
|
|
if not defadstate :
|
|
defadstate = 1
|
|
if self.ad_state.func == 'STD':
|
|
parent_id = self.id
|
|
else:
|
|
parent_id = self.parent_ad.id
|
|
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 = []
|
|
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_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]")]'
|
|
}
|
|
else:
|
|
raise ValidationError(_("Kann neue Aktualisierung erst anlegen wenn alle vorherigen Schritte beendet wurden !"))
|
|
|
|
|
|
def setStandardText(self,tid):
|
|
text = self.env['dss.texts'].search([('text_id','=',tid)], limit=1)
|
|
if text:
|
|
self.write({'description':text.description})
|