vscode neu

This commit is contained in:
jopster
2025-03-07 12:21:01 +01:00
parent 9b2da96cd5
commit 16b4c248d4
144 changed files with 4499 additions and 1188 deletions
+140 -54
View File
@@ -1,4 +1,8 @@
# -*- coding: utf-8 -*
# Test
# Test2
import ast
import datetime
import json
@@ -16,6 +20,7 @@ import os.path
from odoo import api, fields, models, _
from odoo import tools
from . import dss_settings
from . import dss_ads
from odoo.exceptions import ValidationError
from datetime import date
from datetime import datetime
@@ -60,17 +65,26 @@ class dsscontracts(models.Model):
ds = self.env['dss.ads'].search([('contract','=',self.id)],limit=1)
return ds
def _getkorrColor(self):
_logger.info('Contract get Color ')
for record in self:
record.korrectur_color = "#000000"
return "#000000"
_name = "dss.contracts"
_description = "DigitalSignage Vertraege"
_rec_name = "contract_auto_name"
_inherit = ['mail.thread','mail.activity.mixin','dss.triggermodel']
_inherit = ['mail.thread','dss.activity.mixin','dss.triggermodel']
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_color = fields.Char(related='contract_state.color',store=True)
contract_state_order = fields.Integer(related='contract_state.order',store=True)
contract_state_name = fields.Char(related='contract_state.statusname',string='Vertragsstatus - Text',store=True)
contract_state_color = fields.Char(related='contract_state.color',string='Vertragsstatus - Farbe',store=True)
contract_state_order = fields.Integer(related='contract_state.order',string='Vertragsstatus - Reihenfolge',store=True)
contract_state_minimal_kanban = fields.Boolean(related='contract_state.kanban_display_minimal',string='Kanban mininmal',store=True)
contract_auto_id = fields.Char("Kundennummer",tracking=True,help="Wird berechnet aus Projektnummer + Kunden ID")
contract_auto_name = fields.Char('Vertragskennug',tracking=True,help="Wird berechnet aus Kundennummer + Vertragskennung")
@@ -86,13 +100,15 @@ class dsscontracts(models.Model):
remark = fields.Html('Bemerkung',tracking=True)
contract_writer = fields.Many2one('res.partner', tracking=True)
contract_writer_mailcc = fields.Boolean('Vertragsschr. Mail CC ?', tracking=True)
vertragssumme = fields.Float('Vertragssumme :', tracking=True)
provisionstyp = fields.Many2one('dss.provisionstypen', tracking=True)
provisionsteilcalc = fields.Float('Berechnete Provision :',computed='_compute_prov')
provisions = fields.Many2many('dss.provision',tracking=True)
provisionspayedpercent = fields.Float('Ausgezahlte Provision % :',computed='_compute_provisionspayedpercent')
grafiker = fields.Many2one('res.partner', placeholder="wenn vom Projekt abweichend", domain="['&',('dssinternpartner','=',True),('dssinternpartner_grafik','=',True)]", tracking=True, string="abw. Grafiker",help="Grafiker nur wenn abweichend vom Projektgrafiker")
provisionsteilcalc = fields.Float('Berechnete Provision :')
provisions = fields.Many2many('dss.provision', tracking=True)
provisionspayedpercent = fields.Float('Ausgezahlte Provision % :',compute='_compute_provisionspayedpercent')
grafiker = fields.Many2one('res.partner', domain="['&',('dssinternpartner','=',True),('dssinternpartner_grafik','=',True)]", tracking=True, string="abw. Grafiker",help="Grafiker nur wenn abweichend vom Projektgrafiker")
real_grafiker = fields.Char('Grafiker tatsächlich', tracking=True)
contract_remark = fields.Html('Vertragshinweise',tracking=True)
project = fields.Many2one('dss.projects' , string='Project', store=True,tracking=True)
@@ -101,6 +117,8 @@ class dsscontracts(models.Model):
project_ad_structure = fields.Many2one(related='project.grundsystem_default_adstructure', string='Aufbau')
project_grundsystem_typ = fields.Char(related='project.grundsystem_typ', tracking=True)
project_grafiker = fields.Many2one(related="project.project_grafiker",tracking=True)
project_system_uuid = fields.Char(related='project.grundsystemnameuuid', tracking=True)
client = fields.Many2one('res.partner',string="Kunde (wenn angelegt)",domain="['&',('dsspartner','=',True),('dsspartner_werbung','=',True)]",tracking=True,help="Nur zu Benutzen wenn Kunden als Kontakt angelegt wurde")
client_id = fields.Char(string="KundenID (2Stellen)",help="Nur der 2 stellige letzte Teil der Kundennummer",tracking=True)
@@ -115,10 +133,10 @@ class dsscontracts(models.Model):
contact_mobil = fields.Char(related="client.mobile")
contact_email = fields.Char(related="client.email")
contact_web = fields.Char(related="client.website")
contact_company_name = fields.Char(related="client.name")
contact_name = fields.Char(related="client.company_name")
contact_dsspartner_vorname = fields.Char(related="client.dsspartner_name")
contact_dsspartner_name = fields.Char(related="client.dsspartner_vorname")
contact_company_name = fields.Char(related="client.company_name")
contact_name = fields.Char(related="client.name")
contact_dsspartner_vorname = fields.Char(related="client.dsspartner_vorname")
contact_dsspartner_name = fields.Char(related="client.dsspartner_name")
parent_id = fields.Many2one('dss.contracts', string='Parent Task', index=True,tracking=True)
@@ -136,6 +154,8 @@ class dsscontracts(models.Model):
client_other_projects = fields.Many2many('dss.projects',string='Weitere Projekte',tracking=True)
client_invoices = fields.Many2many('dss.invoices',string='Rechnungsliste',tracking=True,domain='[("invoiceclientnr","=",contract_auto_id)]')
werbe_feld_selected = fields.Many2many('dss.advertisefields',string='Werbefelder',tracking=True)
shortwerbe_feld_selected = fields.Char(related='werbe_feld_selected.feldname',string='Werbefelder',tracking=True)
cutshortwerbe_feld_selected = fields.Char(string='gekürzte Felder',compute='_compute_cutshort')
@@ -147,22 +167,24 @@ class dsscontracts(models.Model):
# 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)
main_runtime = fields.Integer('Gesamtcliplänge',tracking=True)
split_runtime_count = fields.Integer('Clip Teilungen',tracking=True)
split_runtime_time = fields.Integer('Cliplänge Sekunden',tracking=True)
contract_date = fields.Date('Vertragsdatum',tracking=True)
start_date = fields.Date('Start/Auslief.datum',tracking=True)
start_date = fields.Date('Start/Auslief.datum',tracking=True,help="Datum des geplanten Startes der 1. Kampagne. Also die Uraustrahlung!")
contract_cancel_mon = fields.Integer('Kündigungsfrist Monaten',tracking=True)
contract_cancel_date = fields.Date('Kündigungsfrist Errechnet', tracking=True)
contract_auto_extend = fields.Boolean('autom. V.Verlängerung',tracking=True)
contract_auto_extend_time = fields.Char('Verl. Monate',tracking=True)
scan_vertrag = fields.Binary('Datei')
scan_vertrag_filename = fields.Char("Dateiname") # Hilft, den Dateinamen zu speichern
runtimesystem = fields.Selection([('M','Monatslaufzeit'),('T','Tagelaufzeit'), ('E','Eventlaufzeit'), ('S','Sonderlaufzeit')],tracking=True)
runtime_m = fields.Integer('Laufzeit',tracking=True)
runtime_bonus_m = fields.Integer('zusätzl. Laufzeit',tracking=True)
runtime_t = fields.Integer('Laufzeit',tracking=True)
runtime_bonus_t = fields.Integer('zusätzl. Laufzeit',tracking=True)
runtime_m = fields.Integer('Laufzeit Monate',tracking=True)
runtime_bonus_m = fields.Integer('zusätzl. Laufzeit Monate',tracking=True)
runtime_t = fields.Integer('Laufzeit Tage',tracking=True)
runtime_bonus_t = fields.Integer('zusätzl. Laufzeit Tage',tracking=True)
runtime_events = fields.Many2many('dss.eventdays',tracking=True)
runtime_bonus_e = fields.Integer('zusätzl. Events',tracking=True)
runtime_divers = fields.Char('Laufzeit',tracking=True)
@@ -175,7 +197,8 @@ class dsscontracts(models.Model):
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_ad = fields.Many2one('dss.ads', help="letzte Werbekampagne",compute='_default_get_ads_last_ad',store=True)
ads_last_adtype = fields.Selection(related='ads_last_ad.adtype')
ads_last_state = fields.Many2one(related='ads_last_ad.ad_state', string="Zuständigkeit letzt Kamp",help="Zuständigkeit/Status des letzten Werbekampagnen Eintrags",store=True,readonly=False,group_expand='_expand_ads_last_state')
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',store=True,readonly=False)
@@ -184,14 +207,30 @@ class dsscontracts(models.Model):
ads_last_work_state_text = fields.Char(related='ads_last_ad.work_state_text',store=True,readonly=False)
ads_last_work_state_info = fields.Char(related='ads_last_ad.work_state_info',store=True,readonly=False)
ads_last_todo_state = fields.Many2one(related='ads_last_ad.todo_state',string="Aufgabe letzt Kamp", help="Aufgabenstatus des letzten Werbekampagnen Eintrags",store=True,readonly=False,group_expand='_expand_ads_last_todo_state')
ads_last_todo_state_until = fields.Date(related='ads_last_ad.todo_state_until')
ads_last_todo_state_until = fields.Date(related='ads_last_ad.todo_state_until',readonly=False)
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',store=True,readonly=False)
ads_last_date_zuarbeit = fields.Date(related='ads_last_ad.date_zuarbeit',readonly=False)
ads_last_date_korrekturabzug = fields.Date(related='ads_last_ad.date_korrekturabzug',readonly=False)
ads_last_date_korrekturfreigabe_ablauf = fields.Date(related='ads_last_ad.date_korrekturfreigabe_ablauf',readonly=False)
ads_last_date_korrekturfreigabe_ablauf_erfolgt = fields.Boolean(related='ads_last_ad.korrekturfreigabe_ablauf_erfolgt',readonly=False)
ads_last_date_korrekturfreigabe = fields.Date(related='ads_last_ad.date_korrekturfreigabe',readonly=False)
ads_last_date_start_planed = fields.Date(related='ads_last_ad.date_start_planed',readonly=False,help="Datum des geplanten Startes der Aktuell gültigen Kampagne !")
ads_last_date_start_real = fields.Date(related='ads_last_ad.date_start_real',readonly=False,help="Datum des wirklichen Startes der Aktuell gültigen Kampagne !")
ads_last_date_remove_planed = fields.Date(related='ads_last_ad.date_remove_planed',readonly=False)
ads_last_date_remove_real = fields.Date(related='ads_last_ad.date_remove_real',readonly=False)
ads_last_date_start_real_mail_send = fields.Boolean(related='ads_last_ad.date_start_real_mail_send',string='Kampagnen Startmail', tracking=True)
ads_last_date_start_real_mail_data = fields.Date(related='ads_last_ad.date_start_real_mail_data', tracking=True)
korrectur_color = fields.Char(string='Korrektur Text Color nach Status',compute=_getkorrColor)
ads_last_date_korrekturfreigabe_ablauf_auto_cancel = fields.Boolean(related='ads_last_ad.korrekturfreigabe_ablauf_auto_cancel', tracking=True)
vnnox_zugang_erstellt = fields.Boolean('Vnnox Zugang ?',tracking=True)
vnnox_zugang_username = fields.Char('Vnnox Username',tracking=True)
vnnox_zugang_password = fields.Char('Vnnox Passwort',tracking=True)
vnnox_zugang_gesendet = fields.Boolean('Vnnox Zugang gesendet?',tracking=True)
vnnox_playlist_checked = fields.Boolean('Vnnox Liste geprüft ?',tracking=True)
vnnox_playlist_checked_empty = fields.Boolean('Vnnox Liste war leer ?',tracking=True)
vnnox_playlist_checked_date = fields.Date('Vnnox Liste geprüft am ',tracking=True)
xibo_zugang_erstellt = fields.Boolean('Xibo Zugang ?',tracking=True)
xibo_zugang_username = fields.Char('Xibo Username',tracking=True)
@@ -213,6 +252,13 @@ class dsscontracts(models.Model):
info_partner_changes = fields.Boolean('Benachrichtigen bei Partneränderungen',tracking=True)
info_partner = fields.Many2one('res.partner','Benachrichtigung an : ',tracking=True)
work_marker_1 = fields.Boolean('Markierung 1 aktiv',tracking=True)
work_marker_2 = fields.Boolean('Markierung 2 aktiv',tracking=True)
work_marker_3 = fields.Boolean('Markierung 3 aktiv',tracking=True)
work_marker_4 = fields.Boolean('Markierung 4 aktiv',tracking=True)
marker_list = fields.Many2many('dss.marker', string='vorhandene Marker', 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')
@@ -226,6 +272,12 @@ class dsscontracts(models.Model):
cloudlink = fields.Char('Cloud Verzeichnis',help='Verzeichnis für den Kunde innerhalb des Projekt Ordners')
tv_reach_PLZ = fields.Char(string='Reichweite PLZ',tracking=True)
ads_radius_PLZ = fields.Integer('Umkreis PLZ in Km',tracking=True)
ads_count_perYear = fields.Selection([('30000','30.000'),('60000','60.000'),('120000','120.000'),('1000000','1.000.000')],'Einblendungen',tracking=True)
ads_topics = fields.Many2many('dss.contracts_ads_topics', string='Themenliste', tracking=True)
@api.depends('vertragssumme')
def _compute_prov(self):
@@ -310,7 +362,7 @@ class dsscontracts(models.Model):
else:
cname = record.contract_name
resstr = "%s%s %s" % (record.project_id,record.client_id,cname)
cidstr: String = "%s%s" % (record.project_id,record.client_id)
cidstr = "%s%s" % (record.project_id,record.client_id)
if resstr is None :
resstr = 'nicht ermittelbar'
_logger.info('project_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name));
@@ -450,9 +502,32 @@ class dsscontracts(models.Model):
@api.model
def _read_group_stage_ids(self,stages,domain,order):
contract_state_ids = self.env['dss.contractstate'].search([],order='order')
_logger.info('Get Columns Contract State '+ str(stages)+' / ' + str(domain)+' / '+str(domain[0])+' / '+str(len(domain[0])))
if (len(domain[0]) > 1):
_logger.info('get Columns Contract State ' + str(domain)+' / '+str(domain[0]))
Pid = domain[0][2]
else:
_logger.info('get Columns Contract State ' + str(domain)+' / '+str(domain[1][2]))
Pid = domain[1][2]
Myproject=self.env['dss.projects'].search([("id","=",Pid)])
contract_state_ids = self.env['dss.contractstate'].search(["|",("systemtypdefault","=",True),("systemtypuuid","=",Myproject.grundsystemnameuuid)],order='order')
# contract_state_ids = self.env['dss.contractstate'].search([],order='order')
_logger.info('get Columns Contract State ' + str(contract_state_ids)+' / '+str(self.project_system_uuid)+' / '+str(self)+' / '+str(stages)+' / '+str(domain)+' / '+str(Myproject))
return contract_state_ids
@api.model
def _read_group_system_ids(self, stages, domain, order):
_logger.info('Get Columns System State ' + str(stages)+' / '+str(domain)+' / '+str(order))
project_system_ids = self.env['dss.systemtypen'].search([('open_close_standard_state','=',False)], order='order')
return project_system_ids
@api.model
def fields_view_get(self,cr,uid,view_id=None,view_type='form',context=None, toolbar=False, submenu=False):
_logger.info('Fields View Get ' + str(cr)+' / '+str(uid)+' / '+str(view)+' / '+str(parent))
if context is None:
context={}
return res
@api.model
def _default_client_id(self):
return str("00")
@@ -522,11 +597,17 @@ class dsscontracts(models.Model):
self.runtime_calendar_event=self.env['calendar.event'].create(event).id
return ""
def pyaction_dss_contract_calc_runtime(self):
if self.start_date:
if self.ads_last_date_start_real:
startdatum= self.ads_last_date_start_real
elif self.ads_last_date_start_planed:
startdatum= self.ads_last_date_start_planed
elif self.start_date:
startdatum= self.start_date
else:
startdatum= self.contract_date
if startdatum :
if self.runtimesystem == "M":
bmonths = 0
@@ -561,7 +642,11 @@ class dsscontracts(models.Model):
self.contract_cancel_date = enddatum - relativedelta(months=cancelmonths)
def pyaction_dss_contract_calc_runtime_end(self):
if self.start_date:
if self.ads_last_date_start_real:
startdatum= self.ads_last_date_start_real
elif self.ads_last_date_start_planed:
startdatum= self.ads_last_date_start_planed
elif self.start_date:
startdatum= self.start_date
else:
startdatum= self.contract_date
@@ -801,6 +886,13 @@ class dsscontracts(models.Model):
if record.contract_auto_id == "":
record.contract_auto_id = cidstr
# def setRealGrafiker(self):
#for record in self:
#if self.grafiker:
#record.real_Grafiker="Test"
#return "Test"
# else:
# return self.project_grafiker
def setStandardValues(self):
for record in self:
@@ -877,34 +969,28 @@ class dsscontracts(models.Model):
for record in self:
self.tokampagne()
def trigger_action_init(self):
_logger.info('Contract Cron Running - Start '+str(self)+' start searching')
jobcontracts = self.env['dss.contracts'].search([('run_trigger', '=', True)])
_logger.info('Contract Cron Running - Start '+str(self)+' '+str(len(jobcontracts))+' Triggergruppen gefunden')
for record in jobcontracts:
if not record:
_logger.info('Contract Cron Running No Contracts Delivered - searching')
else:
_logger.info('Contract Cron Running C_' + str(record.id) + ' Starte Triggerprüfung')
if record.run_trigger:
_logger.info('Contract Cron Running C_' + str(record.id) + ' Prüfe Triggergruppe TG_' + str(record.triggergroup.id))
triggergroup = record.triggergroup
if not triggergroup:
_logger.info('Contract Cron Running C_' + str(record.id) + ' Triggergruppe TG_' + str(record.triggergroup.id)+' nicht gefunden !')
pass
else:
for trigger in triggergroup.triggers:
if not trigger:
pass
_logger.info('Contract Cron Running C_' + str(record.id) + ' Triggerprüfung : Keine Trigger in Gruppe !')
else:
_logger.info('Contract Cron Running C_' + str(record) + ' in Triggergruppe TG_' + str(record.triggergroup)+' Prüfe Trigger T_'+str(trigger))
if trigger._check_trigger():
_logger.info('Contract Cron Trigger T_' + str(trigger)+' executed ')
_logger.info('Contract Cron Running - Finished')
def _track_template(self, changes):
res = super()._track_template(changes)
self.trigger_track_template(changes, self)
return res
def py_open_contract_form_view(self):
return {'name': 'Budget Edit',
'domain': [],
'res_model': 'dss.contracts',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'view_type': 'form',
'res_id': self.id,
# 'target': 'new',
}
def pyaction_vnoxx_action1(self):
return ""
def pyaction_vnoxx_action2(self):
return ""
def pyaction_vnoxx_action3(self):
return ""