# -*- 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"Betreff: {email_subject}
Empfänger: {email_to}

{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')