diff --git a/fleet_management/traccar_api.py b/fleet_management/traccar_api.py new file mode 100644 index 0000000..4aed0e9 --- /dev/null +++ b/fleet_management/traccar_api.py @@ -0,0 +1,68 @@ +from datetime import datetime +import frappe +import requests +from requests.auth import HTTPBasicAuth + +def traccar_auth(ts): + """authenticates on traccar server and returns cookies""" + response = requests.post( + f"http://{ts.traccar_server}:{ts.traccar_port}/api/session", + data = { + 'email': ts.traccar_username, + 'password': frappe.utils.password.get_decrypted_password( + 'TraccarServer', + ts.name, + 'traccar_password' + ) + } + ) + if response.status_code == 200: + return response.cookies + else: + frappe.throw(f"Authentication failed: {response.status_code}: {response.reason}
Dict ts: {ts.as_dict()}") + +@frappe.whitelist() +def get_devices(doc=None): + """fetches all devices the user has access to and stores them in Tracker Doctype + should also be able to be called frequently to update the status""" + + # get informations for authentication on traccar server + ts = frappe.get_last_doc('TraccarServer') + + # get all devices from traccar server + try: + devices = requests.get( + f"http://{ts.traccar_server}:{ts.traccar_port}/api/devices", + cookies = traccar_auth(ts) + ) + except: + frappe.throw("Could not fetch devices from traccar server") + + # Insert devices into Tracker Doctype + for dev in devices.json(): + if not frappe.db.exists('Tracker', int(dev['id'])): + frappe.get_doc({ + 'doctype': 'Tracker', + 'portal_id': dev['id'], + 'portal_name': dev['name'], + 'unique_id': dev['uniqueId'], + 'status': dev['status'], + 'last_update': datetime.fromisoformat(dev['lastUpdate']).strftime('%Y-%m-%d %H:%M:%S'), + 'position_id': dev['positionId'], + 'group_id': dev['groupId'], + 'phone': dev['phone'], + 'model': dev['model'], + 'contact': dev['contact'], + 'categorie': dev['category'], + 'disabled': dev['disabled'], + }).insert() + + # update db frappe + frappe.db.commit() + + + +def get_trips_for_device(device, start = None, end = None): + """getches all trip for a device, stores them Trip Doctype and links them to the vehicle which is assigned to the device""" + pass +