Initial commit
This commit is contained in:
commit
536ff43ce4
158 files changed
+30355
No files matched your search
@@ -0,0 +1,140 @@
|
||||
import requests
|
||||
from config import Config
|
||||
|
||||
BASE_DATA_URL = "https://byod-api.signpost.be/v1"
|
||||
|
||||
|
||||
def get_signpost_token():
|
||||
"""Token met de Signpost/M4S-gegevens van de huidige school (None bij een fout)."""
|
||||
return signpost_token_met_reden()[0]
|
||||
|
||||
|
||||
def signpost_token_met_reden():
|
||||
"""Geeft (token, None) of (None, leesbare foutmelding)."""
|
||||
if not (Config.M4S_CLIENT_ID and Config.M4S_CLIENT_SECRET):
|
||||
return None, ("Signpost is nog niet ingesteld voor deze school: vul de client-ID en het client-secret in "
|
||||
"via 🔌 Koppelingen van deze school › Signpost / M4S.")
|
||||
auth_payload = {
|
||||
"grant_type": "client_credentials",
|
||||
"client_id": Config.M4S_CLIENT_ID,
|
||||
"client_secret": Config.M4S_CLIENT_SECRET,
|
||||
"scope": "openid",
|
||||
"resource": "management_portal:api"
|
||||
}
|
||||
try:
|
||||
response = requests.post(Config.M4S_AUTH_URL, data=auth_payload, timeout=15)
|
||||
except requests.exceptions.RequestException as e:
|
||||
return None, f"Signpost ({Config.M4S_AUTH_URL}) is niet bereikbaar: {e}"
|
||||
if response.status_code in (400, 401, 403):
|
||||
detail = ''
|
||||
try:
|
||||
j = response.json()
|
||||
detail = j.get('error_description') or j.get('error') or ''
|
||||
except ValueError:
|
||||
pass
|
||||
return None, (f"Signpost weigert de aanmelding (HTTP {response.status_code}{': ' + detail if detail else ''}). "
|
||||
"Controleer de client-ID en het client-secret bij 🔌 Koppelingen van deze school.")
|
||||
if not response.ok:
|
||||
return None, f"Signpost gaf foutcode {response.status_code} bij het aanmelden."
|
||||
token = response.json().get("access_token")
|
||||
return (token, None) if token else (None, "Signpost gaf geen token terug.")
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
#herstelling signpost doorgeven
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
def create_signpost_case(serial_number, description, damage_flags=None):
|
||||
"""
|
||||
Maakt een nieuw herstellingsdossier aan bij Signpost.
|
||||
:param serial_number: Het serienummer van het toestel.
|
||||
:param description: Omschrijving van het probleem.
|
||||
:param damage_flags: Dict met booleans (bv. {'waterDamage': True})
|
||||
"""
|
||||
token = get_signpost_token()
|
||||
if not token:
|
||||
return False, "Authenticatie mislukt."
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Content-Type": "application/json",
|
||||
"Accept": "application/json"
|
||||
}
|
||||
|
||||
# Bouw het payload op basis van de Config klasse
|
||||
payload = {
|
||||
"languageCode": getattr(Config, "M4S_LANGUAGE_CODE", "nl-BE"),
|
||||
"description": description,
|
||||
"status": getattr(Config, "M4S_REPAIR_STATUS", "Nieuw"),
|
||||
"repairLocationType": int(getattr(Config, "M4S_REPAIR_LOCATION_TYPE", 1)),
|
||||
"serialNumber": serial_number,
|
||||
"institutionGuid": Config.M4S_INSTITUTIONGUID,
|
||||
"address": {
|
||||
"street": Config.M4S_REPAIR_STREET,
|
||||
"number": Config.M4S_REPAIR_STREETNUMBER,
|
||||
"zipCode": Config.M4S_REPAIR_ZIPCODE,
|
||||
"city": Config.M4S_REPAIIR_CITY,
|
||||
"countryCode": Config.M4S_REPAIR_COUNTRYCODE,
|
||||
"repairAtInstitution": True
|
||||
},
|
||||
"contacts": [{
|
||||
"firstName": Config.M4S_CONTACT_FIRST_NAME,
|
||||
"lastName": Config.M4S_CONTACT_LAST_NAME,
|
||||
"email": Config.M4S_CONTACT_EMAIL,
|
||||
"phone": Config.M4S_CONTACT_PHONE
|
||||
}],
|
||||
"billingContact": {
|
||||
"firstName": Config.M4S_BILLING_FIRST_NAME,
|
||||
"lastName": Config.M4S_BILLING_LAST_NAME,
|
||||
"email": Config.M4S_BILLING_EMAIL,
|
||||
"phone": Config.M4S_BILLING_PHONE,
|
||||
"street": Config.M4S_REPAIR_STREET,
|
||||
"number": Config.M4S_REPAIR_STREETNUMBER,
|
||||
"zipCode": Config.M4S_REPAIR_ZIPCODE,
|
||||
"city": Config.M4S_REPAIIR_CITY,
|
||||
"countryCode": Config.M4S_REPAIR_COUNTRYCODE
|
||||
}
|
||||
}
|
||||
|
||||
# Voeg schade-indicatoren toe indien meegegeven
|
||||
if damage_flags:
|
||||
payload.update(damage_flags)
|
||||
|
||||
try:
|
||||
res = requests.post(f"{BASE_DATA_URL}/field-service/cases", headers=headers, json=payload, timeout=15)
|
||||
if res.status_code in [200, 201]:
|
||||
return True, res.json().get("ourReference", "Succesvol aangemaakt")
|
||||
else:
|
||||
return False, f"API Fout {res.status_code}: {res.text}"
|
||||
except Exception as e:
|
||||
return False, f"Verbindingsfout: {str(e)}"
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
#
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
def get_cases_by_serial(serial_number):
|
||||
token = get_signpost_token()
|
||||
if not token:
|
||||
return []
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token}",
|
||||
"Accept": "application/json"
|
||||
}
|
||||
params = {"$search": serial_number}
|
||||
|
||||
try:
|
||||
res = requests.get(f"{BASE_DATA_URL}/field-service/cases", headers=headers, params=params, timeout=15)
|
||||
if res.status_code == 200:
|
||||
return res.json().get("items", [])
|
||||
return []
|
||||
except Exception as e:
|
||||
print(f"Signpost API Fout: {e}")
|
||||
return []
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user