From 9215e8b0bda3c8cf0f14046c859dace062edc15a Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 17 Nov 2024 17:41:30 +0100 Subject: [PATCH] adding idoklad.py --- rowers/idoklad.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 rowers/idoklad.py diff --git a/rowers/idoklad.py b/rowers/idoklad.py new file mode 100644 index 00000000..d8779983 --- /dev/null +++ b/rowers/idoklad.py @@ -0,0 +1,98 @@ +import requests +import json +from requests.auth import HTTPBasicAuth +import urllib.parse +from rowers.utils import dologging +import datetime +from django.utils import timezone + +from rowsandall_app.settings import ( + IDOKLAD_CLIENT_ID, IDOKLAD_CLIENT_SECRET, + ) + +contacts_url = 'https://api.idoklad.cz/v3/Contacts' + +from rowers.models import iDokladToken + +def idoklad_token(): + try: + token = iDokladToken.objects.get(id=1) + except iDokladToken.DoesNotExist: + return None + + if token.updated_at + datetime.timedelta(seconds=token.expires_in) < timezone.now(): + headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + } + + data = { + 'grant_type': 'refresh_token', + 'client_id': IDOKLAD_CLIENT_ID, + 'client_secret': IDOKLAD_CLIENT_SECRET, + 'scope': 'eet offline_access', + 'refresh_token': token.refresh_token, + } + + response = requests.post('https://identity.idoklad.cz/server/connect/token', headers=headers, data=data) + + if response.status_code == 200: + token = response.json() + token['updated_at'] = timezone.now() + iDokladToken.objects.filter(id=1).update(**token) + return token + else: + return None + + return token + +def prepare_invoice(): + token = idoklad_token() + if token is None: + return None + + data = { + 'templateId': 1, + } + +def get_contacts(rower): + token = idoklad_token() + if token is None: + return None + headers = { + 'Authorization': 'Bearer {t}'.format(t=token.access_token), + } + + url = contacts_url+'?filter=(Email~eq~'+urllib.parse.quote(rower.user.email)+')' + dologging('idoklad.log','Searching Contact url: '+str(url)) + + res = requests.get(url, headers=headers) + + dologging('idoklad.log','Searching Contact Status code '+str(res.status_code)+'\n') + + if res.status_code != 200: # pragma: no cover + return None + + + dologging('idoklad.log','Status Code '+json.dumps(res.json())+'\n') + + data = res.json()['Data']['Items'] + + if len(data) >= 1: + r = data[0] + return r['Id'] + + return None # pragma + +def create_contact(rower): + post_data = { + 'City': rower.city, + 'CompanyName': rower.user.first_name+" "+rower.user.last_name, + 'CountryId': rower.country.code, # country id + 'Email': rower.user.email, + 'Firstname': rower.user.first_name, + 'PostalCode': rower.postal_code, + 'Street': rower.street_address, + 'Surname': rower.user.last_name, + 'DeliveryAddresses': [] + } +