diff --git a/crm/fcrm/doctype/crm_exotel_agent/__init__.py b/crm/fcrm/doctype/crm_telephony_agent/__init__.py similarity index 100% rename from crm/fcrm/doctype/crm_exotel_agent/__init__.py rename to crm/fcrm/doctype/crm_telephony_agent/__init__.py diff --git a/crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.js b/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.js similarity index 77% rename from crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.js rename to crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.js index 78f3c9bb..b1bea173 100644 --- a/crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.js +++ b/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.js @@ -1,7 +1,7 @@ // Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -// frappe.ui.form.on("CRM Exotel Agent", { +// frappe.ui.form.on("CRM Telephony Agent", { // refresh(frm) { // }, diff --git a/crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.json b/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json similarity index 54% rename from crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.json rename to crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json index c9baa785..083e4d91 100644 --- a/crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.json +++ b/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.json @@ -1,7 +1,7 @@ { "actions": [], "allow_rename": 1, - "autoname": "field:mobile_no", + "autoname": "field:user", "creation": "2025-01-11 16:12:46.602782", "doctype": "DocType", "engine": "InnoDB", @@ -10,7 +10,14 @@ "user_name", "column_break_hdec", "mobile_no", - "exotel_number" + "section_break_ozjn", + "twilio", + "twilio_number", + "column_break_aydj", + "exotel", + "exotel_number", + "section_break_phlq", + "phone_nos" ], "fields": [ { @@ -20,7 +27,8 @@ "in_standard_filter": 1, "label": "User", "options": "User", - "reqd": 1 + "reqd": 1, + "unique": 1 }, { "fieldname": "column_break_hdec", @@ -32,8 +40,7 @@ "in_list_view": 1, "in_standard_filter": 1, "label": "Mobile No.", - "reqd": 1, - "unique": 1 + "read_only": 1 }, { "fetch_from": "user.full_name", @@ -44,19 +51,56 @@ "label": "User Name" }, { + "depends_on": "exotel", "fieldname": "exotel_number", "fieldtype": "Data", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Exotel Number" + "label": "Exotel Number", + "mandatory_depends_on": "exotel" + }, + { + "fieldname": "section_break_phlq", + "fieldtype": "Section Break" + }, + { + "fieldname": "section_break_ozjn", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_aydj", + "fieldtype": "Column Break" + }, + { + "depends_on": "twilio", + "fieldname": "twilio_number", + "fieldtype": "Data", + "label": "Twilio Number", + "mandatory_depends_on": "twilio" + }, + { + "fieldname": "phone_nos", + "fieldtype": "Table", + "label": "Phone Numbers", + "options": "CRM Telephony Phone" + }, + { + "default": "0", + "fieldname": "twilio", + "fieldtype": "Check", + "label": "Twilio" + }, + { + "default": "0", + "fieldname": "exotel", + "fieldtype": "Check", + "label": "Exotel" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2025-01-15 20:03:31.162162", + "modified": "2025-01-19 14:12:51.596987", "modified_by": "Administrator", "module": "FCRM", - "name": "CRM Exotel Agent", + "name": "CRM Telephony Agent", "naming_rule": "By fieldname", "owner": "Administrator", "permissions": [ diff --git a/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.py b/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.py new file mode 100644 index 00000000..ff1f85e9 --- /dev/null +++ b/crm/fcrm/doctype/crm_telephony_agent/crm_telephony_agent.py @@ -0,0 +1,34 @@ +# Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.model.document import Document + + +class CRMTelephonyAgent(Document): + def validate(self): + self.set_primary() + + def set_primary(self): + # Used to set primary mobile no. + if len(self.phone_nos) == 0: + self.mobile_no = "" + return + + is_primary = [phone.number for phone in self.phone_nos if phone.get("is_primary")] + + if len(is_primary) > 1: + frappe.throw( + _("Only one {0} can be set as primary.").format(frappe.bold(frappe.unscrub("mobile_no"))) + ) + + primary_number_exists = False + for d in self.phone_nos: + if d.get("is_primary") == 1: + primary_number_exists = True + self.mobile_no = d.number + break + + if not primary_number_exists: + self.mobile_no = "" diff --git a/crm/fcrm/doctype/crm_exotel_agent/test_crm_exotel_agent.py b/crm/fcrm/doctype/crm_telephony_agent/test_crm_telephony_agent.py similarity index 77% rename from crm/fcrm/doctype/crm_exotel_agent/test_crm_exotel_agent.py rename to crm/fcrm/doctype/crm_telephony_agent/test_crm_telephony_agent.py index 9fe610ce..63e0f2fb 100644 --- a/crm/fcrm/doctype/crm_exotel_agent/test_crm_exotel_agent.py +++ b/crm/fcrm/doctype/crm_telephony_agent/test_crm_telephony_agent.py @@ -4,7 +4,6 @@ # import frappe from frappe.tests import IntegrationTestCase, UnitTestCase - # On IntegrationTestCase, the doctype test records and all # link-field test record dependencies are recursively loaded # Use these module variables to add/remove to/from that list @@ -12,18 +11,18 @@ EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"] IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"] -class UnitTestCRMExotelAgent(UnitTestCase): +class UnitTestCRMTelephonyAgent(UnitTestCase): """ - Unit tests for CRMExotelAgent. + Unit tests for CRMTelephonyAgent. Use this class for testing individual functions and methods. """ pass -class IntegrationTestCRMExotelAgent(IntegrationTestCase): +class IntegrationTestCRMTelephonyAgent(IntegrationTestCase): """ - Integration tests for CRMExotelAgent. + Integration tests for CRMTelephonyAgent. Use this class for testing interactions between multiple components. """ diff --git a/crm/fcrm/doctype/crm_telephony_phone/__init__.py b/crm/fcrm/doctype/crm_telephony_phone/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/crm/fcrm/doctype/crm_telephony_phone/crm_telephony_phone.json b/crm/fcrm/doctype/crm_telephony_phone/crm_telephony_phone.json new file mode 100644 index 00000000..6450a96a --- /dev/null +++ b/crm/fcrm/doctype/crm_telephony_phone/crm_telephony_phone.json @@ -0,0 +1,40 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-01-19 13:57:01.702519", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "number", + "is_primary" + ], + "fields": [ + { + "fieldname": "number", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Number", + "reqd": 1 + }, + { + "default": "0", + "fieldname": "is_primary", + "fieldtype": "Check", + "in_list_view": 1, + "label": "Is Primary" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2025-01-19 13:58:59.063775", + "modified_by": "Administrator", + "module": "FCRM", + "name": "CRM Telephony Phone", + "owner": "Administrator", + "permissions": [], + "sort_field": "creation", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.py b/crm/fcrm/doctype/crm_telephony_phone/crm_telephony_phone.py similarity index 84% rename from crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.py rename to crm/fcrm/doctype/crm_telephony_phone/crm_telephony_phone.py index 05fa7ee7..5522b84d 100644 --- a/crm/fcrm/doctype/crm_exotel_agent/crm_exotel_agent.py +++ b/crm/fcrm/doctype/crm_telephony_phone/crm_telephony_phone.py @@ -5,5 +5,5 @@ from frappe.model.document import Document -class CRMExotelAgent(Document): +class CRMTelephonyPhone(Document): pass