From 9a17384cd20da734f7ee7f7d629324d28b0ec7a9 Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Mon, 11 May 2026 08:07:12 -0400 Subject: [PATCH] Add voxtelesys_integration/doctype/voxtelesys_settings/voxtelesys_settings.py --- .../voxtelesys_settings.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 voxtelesys_integration/doctype/voxtelesys_settings/voxtelesys_settings.py diff --git a/voxtelesys_integration/doctype/voxtelesys_settings/voxtelesys_settings.py b/voxtelesys_integration/doctype/voxtelesys_settings/voxtelesys_settings.py new file mode 100644 index 0000000..03ef65d --- /dev/null +++ b/voxtelesys_integration/doctype/voxtelesys_settings/voxtelesys_settings.py @@ -0,0 +1,49 @@ +""" +Voxtelesys Settings - Single DocType controller. +""" +import frappe +from frappe.model.document import Document + + +class VoxtelesysSettings(Document): + def validate(self): + self._set_webhook_url_display() + + def _set_webhook_url_display(self): + base = (self.voxml_base_url or "").rstrip("/") + if not base: + base = frappe.utils.get_url() + self.webhook_url_display = ( + f"{base}/api/method/voxtelesys_integration.api.voxtelesys.handle_inbound_call" + ) + + @staticmethod + def is_enabled() -> bool: + return bool(frappe.db.get_single_value("Voxtelesys Settings", "enabled")) + + @staticmethod + def get_api_token() -> str: + token = frappe.db.get_single_value("Voxtelesys Settings", "api_token") + if not token: + frappe.throw( + "Voxtelesys API Token is not configured. Please set it in Voxtelesys Settings.", + title="Voxtelesys Not Configured", + ) + return token + + @staticmethod + def get_caller_id() -> str: + return frappe.db.get_single_value("Voxtelesys Settings", "caller_id") or "" + + @staticmethod + def get_trunk_group() -> str: + return frappe.db.get_single_value("Voxtelesys Settings", "outbound_trunk_group") or "" + + @staticmethod + def is_recording_enabled() -> bool: + return bool(frappe.db.get_single_value("Voxtelesys Settings", "recording_enabled")) + + @staticmethod + def get_voxml_base_url() -> str: + base = frappe.db.get_single_value("Voxtelesys Settings", "voxml_base_url") or "" + return base.rstrip("/") or frappe.utils.get_url().rstrip("/") \ No newline at end of file