177 lines
7.0 KiB
Python
177 lines
7.0 KiB
Python
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
|
|
import requests
|
|
import hashlib
|
|
from PIL import Image,ImageDraw,ImageFont
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo import tools
|
|
from odoo.exceptions import ValidationError
|
|
from datetime import date
|
|
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
from pyffmpeg import FFmpeg
|
|
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
|
|
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
|
|
from webdav4.client import Client
|
|
from webdav4.fsspec import WebdavFileSystem
|
|
import sys
|
|
from urllib.parse import urlencode
|
|
|
|
TUYA_LOGGER.setLevel(logging.DEBUG)
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class dsskileadsrequests(models.Model):
|
|
|
|
@api.model
|
|
def create(self,vals):
|
|
result = super().create(vals)
|
|
return result
|
|
|
|
_name = "dss.kileads.requests"
|
|
_description = "DigitalSignage KI Lead requests"
|
|
_inherit = ['mail.thread','mail.activity.mixin']
|
|
_rec_name = "request_id"
|
|
# _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')
|
|
request_id = fields.Char(string="Request ID", required=True, default=lambda self: self._default_request_id(),tracking=True)
|
|
request_name = fields.Char(string="Name der Anfrage",tracking=True)
|
|
request_isparent = fields.Boolean(string="Hauptanfrage",tracking=True)
|
|
request_data_count = fields.Integer(string="Anfrage Anzahl",tracking=True)
|
|
request_data_offset = fields.Integer(string="Beginn der Anfrage",tracking=True)
|
|
request_parent = fields.Many2one("dss.kileads.requests")
|
|
request_text = fields.Char(string="Anforderungs-Text", required=True, help = "Der Text der Anfrage die zu den Ergebnissen geführt hat.",tracking=True)
|
|
request_project = fields.Many2one('dss.projects', string="Anfrage für Projekt",tracking=True)
|
|
request_finished = fields.Boolean(string='Anfrage Abgeschlossen',tracking=True)
|
|
request_translated = fields.Boolean(string='Anfrage Übersetzt',tracking=True)
|
|
request_canhavemore = fields.Boolean(string='Anfrage kann mehr Daten haben',tracking=True)
|
|
request_results = fields.Many2many('dss.kileads', string="Leads",tracking=True)
|
|
request_raw = fields.Char(string="Raw Antwort der Anfrage")
|
|
aktcount = fields.Integer(string="akt. Anzahl")
|
|
|
|
|
|
@api.model
|
|
def _default_uuid(self):
|
|
return str(uuid.uuid4())
|
|
|
|
@api.model
|
|
def _default_create_date(self):
|
|
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
@api.model
|
|
def _default_create_user(self):
|
|
return self.env.user.name if self.env.user else 'System'
|
|
|
|
@api.model
|
|
def _default_request_id(self):
|
|
# Generate a unique binary ID based on the current timestamp and a random UUID
|
|
return f"Request_{str(uuid.uuid4())[:8]}"
|
|
|
|
|
|
def pyaction_dss_kileads_requests_dorequest(self):
|
|
import http.client
|
|
|
|
conn = http.client.HTTPSConnection("google-maps-extractor2.p.rapidapi.com")
|
|
|
|
headers = {
|
|
'x-rapidapi-key': "e4644aea12mshd78789f07136e6dp15fc91jsned56df96c261",
|
|
'x-rapidapi-host': "google-maps-extractor2.p.rapidapi.com"
|
|
}
|
|
|
|
query_params = {
|
|
"query": self.request_text,
|
|
"offset": str(self.request_data_offset),
|
|
"limit": str(self.request_data_count),
|
|
"zoom": "15",
|
|
"country": "de",
|
|
"language": "de"
|
|
}
|
|
url = "/locate_and_search?" + urlencode(query_params)
|
|
conn.request("GET", url, headers=headers)
|
|
|
|
res = conn.getresponse()
|
|
data = res.read()
|
|
|
|
self.request_raw = data
|
|
self.request_finished = True
|
|
self.request_translated = False
|
|
|
|
return True
|
|
|
|
def pyaction_dss_kileads_requests_dobuild(self):
|
|
if not self.request_raw:
|
|
raise ValidationError("Keine Daten zum Erzeugen vorhanden ! Abfrage ausführen ...")
|
|
|
|
try:
|
|
raw_data = json.loads(self.request_raw)
|
|
except json.JSONDecodeError:
|
|
raise ValidationError("Invalid JSON format in raw data.")
|
|
|
|
results = []
|
|
counter = self.aktcount
|
|
icounter = 0
|
|
for item in raw_data.get("data", []):
|
|
kilead = self.env['dss.kileads'].create({"lead_name": item.get("name"),"lead_id": self.request_id + "_" + str(counter)})
|
|
kilead.lead_address = item.get("address")
|
|
kilead.lead_phone = item.get("full_phone")
|
|
kilead.lead_google_id = item.get("google_id")
|
|
kilead.lead_place_id = item.get("place_id")
|
|
kilead.lead_main_category = item.get("main_category")
|
|
kilead.lead_website = item.get("website_url")
|
|
kilead.lead_picture_url = item.get("featured_photo")
|
|
kilead.lead_longitude = item.get("longitude" )
|
|
kilead.lead_latitude = item.get("latitude")
|
|
kilead.lead_address_city = item.get("detailed_address").get("city")
|
|
kilead.lead_address_street = item.get("detailed_address").get("street")
|
|
kilead.lead_address_zip = item.get("detailed_address").get("zip_code")
|
|
kilead.lead_address_country = item.get("detailed_address").get("country")
|
|
kilead.lead_address_state = item.get("detailed_address").get("state")
|
|
kilead.lead_address_district = item.get("detailed_address").get("district")
|
|
kilead.lead_nummer = counter
|
|
kilead.lead_converted = True
|
|
kilead.lead_request = self
|
|
counter += 1
|
|
icounter += 1
|
|
self.aktcount = counter
|
|
kilead.lead_raw_data = item
|
|
self.request_results = [(4,kilead.id)]
|
|
|
|
|
|
self.request_canhavemore = True
|
|
if icounter<self.request_data_count:
|
|
self.request_finished = True
|
|
self.request_canhavemore = False
|
|
|
|
self.request_translated = True
|
|
return True
|
|
|
|
def pyaction_dss_kileads_requests_nextbuild(self):
|
|
if not self.request_canhavemore:
|
|
raise ValidationError("Anfrage kann keine weiteren Daten enthalten !")
|
|
|
|
newrequest = self.env['dss.kileads.requests'].create({
|
|
"request_name": self.request_name + " - Folgeanfrage ab " + str(self.request_data_offset + self.request_data_count),
|
|
"request_isparent": False,
|
|
"request_data_count": self.request_data_count,
|
|
"request_data_offset": self.request_data_offset + self.request_data_count,
|
|
"request_parent": self.id,
|
|
"request_text": self.request_text,
|
|
"request_project": self.request_project.id
|
|
})
|
|
return True |