diff --git a/rowers/braintreestuff.py b/rowers/braintreestuff.py index 3bd84cd9..19cb6a86 100644 --- a/rowers/braintreestuff.py +++ b/rowers/braintreestuff.py @@ -1,9 +1,10 @@ -from rowers.models import Rower, PaidPlan, CoachingGroup +from rowers.models import Rower, PaidPlan, CoachingGroup, iDokladToken from rowers.utils import ProcessorCustomerError from rowsandall_app.settings import ( BRAINTREE_MERCHANT_ID, BRAINTREE_PUBLIC_KEY, BRAINTREE_PRIVATE_KEY, BRAINTREE_SANDBOX_MERCHANT_ID, BRAINTREE_SANDBOX_PUBLIC_KEY, - BRAINTREE_SANDBOX_PRIVATE_KEY, BRAINTREE_MERCHANT_ACCOUNT_ID + BRAINTREE_SANDBOX_PRIVATE_KEY, BRAINTREE_MERCHANT_ACCOUNT_ID, + IDOKLAD_CLIENT_ID, IDOKLAD_CLIENT_SECRET, IDOKLAD_REDIRECT_URI, ) import pandas as pd from rowers.utils import dologging @@ -52,6 +53,46 @@ else: ) ) +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://app.idoklad.cz/identity/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) + else: + return None + + return token + +def prepare_invoice(): + token = idoklad_token() + if token is None: + return None + + data = { + 'templateId': 1, + } + + def process_webhook(notification): if not settings.TESTING: # pragma: no cover diff --git a/rowers/models.py b/rowers/models.py index 30cbfc78..0631182a 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -5374,5 +5374,5 @@ class iDokladToken(models.Model): expires_in = models.IntegerField() # Store token expiry duration in seconds def __str__(self): - return f"iDoklad Token updated at {self.updated_at}" + return f"iDoklad Token updated at {self.updated_at}, expires at {self.updated_at+datetime.timedelta(seconds=self.expires_in)}"