317 lines
18 KiB
Python
Executable File
317 lines
18 KiB
Python
Executable File
# -*- coding: utf-8 -*
|
|
|
|
# Test
|
|
# Test2
|
|
|
|
import ast
|
|
import datetime
|
|
import json
|
|
import re
|
|
import uuid
|
|
import logging
|
|
import base64
|
|
import subprocess
|
|
import tempfile
|
|
import easywebdav
|
|
import os
|
|
import os.path
|
|
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo import tools
|
|
from . import dss_settings
|
|
from . import dss_ads
|
|
from odoo.exceptions import ValidationError
|
|
from datetime import date
|
|
from datetime import datetime
|
|
from babel.dates import format_date
|
|
from dateutil.relativedelta import relativedelta
|
|
from pyffmpeg import FFmpeg
|
|
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
|
|
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
|
|
import sys
|
|
|
|
TUYA_LOGGER.setLevel(logging.DEBUG)
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class dsscontracts(models.Model):
|
|
|
|
_name = "dss.web_contracts"
|
|
_description = "DigitalSignage Web_Vertraege"
|
|
_rec_name = "contract_auto_name"
|
|
_inherit = ['mail.thread','mail.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_auto_id = fields.Char("Kundennummer automatisch",tracking=True,help="Wird berechnet aus Projektnummer + Kunden ID")
|
|
contract_name = fields.Char('Kurzbezeichnung', required=True,tracking=True)
|
|
contract_auto_name = fields.Char('Vertragskennung',tracking=True,help="Wird berechnet aus Kundennummer + Vertragskennung")
|
|
|
|
contract_writer = fields.Many2one('res.partner', domain="['&',('dsspartner','=',True),('dsspartner_vertrieb','=',True)]", tracking=True)
|
|
contract_writer_formular = fields.Char('Vertragsschreiber Formular', tracking=True)
|
|
contract_type = fields.Selection([('TV','TV'),('Web','Web')], 'Vertragstyp', tracking=True)
|
|
|
|
remark = fields.Char('Bemerkungen',tracking=True)
|
|
|
|
vertragssumme = fields.Float('Vertragssumme :', 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)
|
|
|
|
client_id = fields.Char(string="KundenID (2Stellen)",help="Nur der 2 stellige letzte Teil der Kundennummer",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 = 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_other_projects = fields.Many2many('dss.projects',string='Weitere Projekte',tracking=True)
|
|
|
|
werbe_feld = fields.Char(string='Werbefelde(r)',tracking=True)
|
|
werbe_feld_selected = fields.Many2many('dss.advertisefields',string='Werbefelder',tracking=True)
|
|
werbe_feld_tv = fields.Selection([('L-Banner','L-Banner'),('Countdown','Countdown')], 'Paket', tracking=True)
|
|
werbe_feld_web = fields.Selection([('Standard','Standard'),('Premium','Premium')], 'Paket', tracking=True)
|
|
zahlweise = fields.Selection([('einmalig','einmalig'),('jaehrlich','jährlich'),('sonder','Sonderzahlweise')], 'Zahlweise', tracking=True)
|
|
paymentinterval = fields.Many2one('dss.payintervals',string='Abrechnungsinterval',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)
|
|
contract_cancel_date = fields.Date('Kündigungsfrist Datum', tracking=True)
|
|
|
|
contract_cancel_mon = fields.Integer('Kündigungsfrist Monaten',tracking=True)
|
|
|
|
contract_auto_extend = fields.Boolean('autom. V.Verlängerung',tracking=True)
|
|
contract_auto_extend_time = fields.Char('Verl. Monate',tracking=True)
|
|
|
|
runtimesystem = fields.Selection([('J','Jahreslaufzeit'),('M','Monatslaufzeit'),('T','Tagelaufzeit'), ('E','Eventlaufzeit'), ('S','Sonderlaufzeit')],'Laufzeit',tracking=True)
|
|
runtime_j = fields.Integer('Laufzeit Jahre',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 Spezial',tracking=True)
|
|
runtime_finish = fields.Date('LaufzeitEnde',tracking=True)
|
|
runtime_calendar_event = fields.Integer('Kalendereintrag ID',tracking=True)
|
|
|
|
date_start_planed = fields.Date(string='geplantes Startdatum', tracking=True)
|
|
date_remove_planed = fields.Date(string='geplantes Enddatum', tracking=True)
|
|
|
|
tv_reach_PLZ = fields.Char('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 alt',tracking=True)
|
|
ads_count_perYear2 = fields.Integer('Einblendungen',tracking=True)
|
|
# ads_count_perYear_related_re = fields.Selection(related='dss.contracts.ads_count_perYear',tracking=True)
|
|
ads_topic = fields.Selection([('auto','Auto'),('beauty','Beauty & Fashion'),('wirtschaft','Wirtschaft, Finanzen & News'),('food','Food'),('gesundheit','Gesundheit'),('lifestyle','Lifestyle'),('living','Living'),('entertainment','Entertainment'),('reise','Reise'),('technik','Technik'),('individuell','Individuell')],'Themen', tracking=True)
|
|
ads_topics = fields.Many2many('dss.contracts_ads_topics', string='Themenliste', tracking=True)
|
|
grafik_zuarbeitBis = fields.Date("Zuarbeit bis", tracking=True)
|
|
grafikerstellung = fields.Boolean("Grafikerstellung Logumedia", tracking=True)
|
|
boarding = fields.Boolean("Boarding", tracking=True)
|
|
|
|
scan_vertrag = fields.Binary('Datei')
|
|
file_name = fields.Char(string='Dateiname')
|
|
|
|
erfasst_in_odoo = fields.Boolean('In Odoo erfasst')
|
|
erfasst_in_agenda = fields.Boolean('In Agenda erfasst')
|
|
rechnungsanfrage_RTL = fields.Boolean('Bei RTL angekündigt')
|
|
|
|
# def action_send_email(self):
|
|
# """ Sendet eine E-Mail mit den Inhalten des Objekts """
|
|
# template = self.env.ref('dss.email_template_my_model')
|
|
# if template:
|
|
# template.send_mail(self.id, force_send=True)
|
|
|
|
def pydonewpartner1(self):
|
|
_logger.info("create new partner...")
|
|
|
|
def pydonewpartner(self):
|
|
_logger.info("create new partner...")
|
|
fullname = str(self.client_short_vorname) + ' ' +str(self.client_short_name)
|
|
newcontact = self.env['res.partner'].create({'name': fullname,
|
|
'dsspartner_vorname': self.client_short_vorname,
|
|
'dsspartner_name': self.client_short_name,
|
|
'email': self.client_short_email,
|
|
'phone': self.client_short_telefon,
|
|
'mobile': self.client_short_mobil,
|
|
'street': self.client_short_strasse,
|
|
'city': self.client_short_ort,
|
|
'zip': self.client_short_plz,
|
|
'country_id': self.env['res.country'].search([('code', '=', 'DE')], limit=1).id,
|
|
'company_type': 'person', # 'company' oder 'person',
|
|
'website': self.client_short_website,
|
|
'company_name': self.client_short_company,
|
|
'dsspartner': True,
|
|
'dsspartner_werbung': True
|
|
})
|
|
self.client = newcontact.id
|
|
|
|
|
|
def pydonewcontract(self):
|
|
_logger.info("create new contract...")
|
|
newcontract = self.env['dss.contracts'].create({'project_id': self.project_id,
|
|
'project': self.project.id,
|
|
'client_id': self.client_id,
|
|
'contract_auto_name': self.contract_auto_name,
|
|
'contract_auto_id': self.contract_auto_id,
|
|
'contract_name': self.contract_name,
|
|
'contract_state': self.env['dss.contractstate'].search([("statusname","=","Angelegt")]).id,
|
|
'paymentinterval': self.paymentinterval.id,
|
|
'werbe_feld_selected': self.werbe_feld_selected,
|
|
'client': self.client.id,
|
|
'client_short_vorname': self.client_short_vorname,
|
|
'client_short_name': self.client_short_name,
|
|
'client_short_email': self.client_short_email,
|
|
'client_short_telefon': self.client_short_telefon,
|
|
'client_short_mobil': self.client_short_mobil,
|
|
'client_short_strasse': self.client_short_strasse,
|
|
'client_short_ort': self.client_short_ort,
|
|
'client_short_plz': self.client_short_plz,
|
|
'client_short_website': self.client_short_website,
|
|
'client_short_company': self.client_short_company,
|
|
'ads_count_perYear2': self.ads_count_perYear2,
|
|
'runtimesystem': self.runtimesystem,
|
|
'runtime_m': self.runtime_m,
|
|
'runtime_t': self.runtime_t,
|
|
'contract_auto_extend': self.contract_auto_extend,
|
|
'contract_cancel_date': self.contract_cancel_date,
|
|
'runtime_events': self.runtime_events,
|
|
'tv_reach_PLZ': self.tv_reach_PLZ,
|
|
'ads_radius_PLZ': self.ads_radius_PLZ,
|
|
'ads_topics': self.ads_topics,
|
|
'web_contract':self.id,
|
|
'contract_auto_extend': self.contract_auto_extend,
|
|
'contract_date': self.contract_date,
|
|
'work_state_info': self.remark,
|
|
'scan_vertrag': self.scan_vertrag
|
|
})
|
|
_logger.info("create new Werbekampagne...")
|
|
newWK = self.env['dss.ads'].create({'contract': newcontract.id,
|
|
'project': newcontract.project.id,
|
|
'adname': 'WK '+self.contract_auto_name,
|
|
'adtype': 'MAIN',
|
|
'date_start_planed': self.date_start_planed,
|
|
'date_remove_planed': self.date_remove_planed,
|
|
#'work_state_info': 'ZA bis: '+str(self.grafik_zuarbeitBis)+' / '+self.remark
|
|
'work_state_info': 'ZA bis: '+format_date(self.grafik_zuarbeitBis,format='dd.MM.yy',locale='de_DE')
|
|
})
|
|
self.erfasst_in_odoo = True
|
|
|
|
def pysendemail_rtl(self):
|
|
"""Sendet eine E-Mail über das Template"""
|
|
myAction = self.env['dss.triggeractions.groups'].search([('id','=',self.env['dss.settings'].search([], limit=1).tv_vertragsankuendigung_actionID)], limit=1) #Id der TriggerAktion
|
|
myAction.action_test_id = self.id #Id des Datensatzes für den die Mail ist
|
|
myAction.exectriggeraction_group()
|
|
"""
|
|
template = self.env['mail.template'].search([('id','=',44)], limit=1)
|
|
if template:
|
|
template.send_mail(self.id, force_send=True)
|
|
self.rechnungsanfrage_RTL = True
|
|
email_body = template._render_field('body_html', [self.id])[self.id] # HTML-Body rendern
|
|
email_subject = template._render_field('subject', [self.id])[self.id] # Betreff rendern
|
|
email_to = template._render_field('email_to', [self.id])[self.id] # Empfänger rendern
|
|
self.message_post(body=f"<b>Betreff:</b> {email_subject}<br/><b>Empfänger:</b> {email_to}<br/><br/>{email_body}",subject="E-Mail gesendet",message_type='comment',subtype_xmlid="mail.mt_comment")
|
|
"""
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
#Vertragskennungen bei onChange anpassen
|
|
@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.info('Contract_client_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name))
|
|
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.info('project_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name))
|
|
self.contract_auto_name = resstr
|
|
self.contract_auto_id = cidstr
|
|
|
|
# @api.onchange('project')
|
|
# def _onchange_project(self):
|
|
# self.project_id = self.project.project_id
|
|
|
|
@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)
|
|
cidstr = "%s%s" % (record.project_id, record.client_id)
|
|
if resstr is None :
|
|
resstr = 'nicht ermittelbar'
|
|
_logger.info('Contract_Name_Change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name))
|
|
if not self.contract_auto_name:
|
|
self.contract_auto_name = resstr
|
|
if not self.contract_auto_id:
|
|
self.contract_auto_id = cidstr
|
|
if self.contract_auto_id == "":
|
|
self.contract_auto_id = cidstr
|
|
|
|
@api.onchange('contract_auto_id')
|
|
def _onchange_contract_auto_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.info('Contract_auto_id_change : C_' + str(self.id) + ' - '+str(cidstr)+' vs. '+str(self.contract_auto_id)+'/'+str(resstr)+' vs '+str(self.contract_auto_name))
|
|
if not self.contract_auto_name:
|
|
self.contract_auto_name = resstr
|
|
if not self.contract_auto_id:
|
|
self.contract_auto_id = cidstr
|
|
if self.contract_auto_id == "":
|
|
self.contract_auto_id = cidstr
|
|
|
|
|
|
|
|
class dsscontractsadstopics(models.Model):
|
|
_name = 'dss.contracts_ads_topics'
|
|
_description = "DigitalSignage Werbung ATV Themen"
|
|
_rec_name = "anzeigename"
|
|
_inherit = ['mail.thread','mail.activity.mixin','dss.triggermodel']
|
|
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
|
|
|
|
thema = fields.Char(string="Name")
|
|
anzeigename = fields.Char(string='Anzeigename') |