diff --git a/rangeldigital/__pycache__/hooks.cpython-310.pyc b/rangeldigital/__pycache__/hooks.cpython-310.pyc index 4438fd2..9811c15 100644 Binary files a/rangeldigital/__pycache__/hooks.cpython-310.pyc and b/rangeldigital/__pycache__/hooks.cpython-310.pyc differ diff --git a/rangeldigital/hooks.py b/rangeldigital/hooks.py index 5525498..d1b9a3a 100644 --- a/rangeldigital/hooks.py +++ b/rangeldigital/hooks.py @@ -27,6 +27,14 @@ scheduler_events = { } } +# Document Events + # Override Contact-> Validate to avoid setting non-mobile numbers as Lead mobile_no field +doc_events = { + "Contact": { + "validate": ["rangeldigital.utilities.contact.contact_hooks.update_lead_phone_numbers"] + } +} + # Disable default send_email_to_leads_or_contacts after_install = "rangeldigital.utilities.install.after_install" diff --git a/rangeldigital/install.py b/rangeldigital/install.py deleted file mode 100644 index ba4203b..0000000 --- a/rangeldigital/install.py +++ /dev/null @@ -1,26 +0,0 @@ -import frappe - -def after_install(): - stop_erpnext_scheduled_send_email_job() - -def stop_erpnext_scheduled_send_email_job(): - # Get list of Scheduled Job Type docs with that method - job_docs = frappe.get_all( - "Scheduled Job Type", - filters={"method": "erpnext.crm.doctype.email_campaign.email_campaign.send_email_to_leads_or_contacts"}, - limit_page_length=1 - ) - - if not job_docs: - frappe.msgprint("Scheduled Job Type not found.") - return - - job_name = job_docs[0].name - job_doc = frappe.get_doc("Scheduled Job Type", job_name) - - # Set stopped = 1 - job_doc.stopped = 1 - job_doc.save(ignore_permissions=True) - frappe.db.commit() - - frappe.msgprint(f"Scheduled Job Type '{job_doc.method}' stopped successfully.") diff --git a/rangeldigital/utilities/__pycache__/__init__.cpython-310.pyc b/rangeldigital/utilities/__pycache__/__init__.cpython-310.pyc index 4664743..72914b3 100644 Binary files a/rangeldigital/utilities/__pycache__/__init__.cpython-310.pyc and b/rangeldigital/utilities/__pycache__/__init__.cpython-310.pyc differ diff --git a/rangeldigital/utilities/contact/__pycache__/contact_hooks.cpython-310.pyc b/rangeldigital/utilities/contact/__pycache__/contact_hooks.cpython-310.pyc new file mode 100644 index 0000000..029ebda Binary files /dev/null and b/rangeldigital/utilities/contact/__pycache__/contact_hooks.cpython-310.pyc differ diff --git a/rangeldigital/utilities/contact/contact_hooks.py b/rangeldigital/utilities/contact/contact_hooks.py new file mode 100644 index 0000000..13eb69e --- /dev/null +++ b/rangeldigital/utilities/contact/contact_hooks.py @@ -0,0 +1,27 @@ +import frappe + +# Override ERPNext's hook that will set a Lead's mobile_no field based on a Contact's phone number even if it's not a mobile number +def update_lead_phone_numbers(contact, method): + if not contact.phone_nos: + return + + contact_lead = contact.get_link_for("Lead") + if not contact_lead: + return + + # Get list of phones explicitly marked as primary mobile numbers + mobile_nos = [ + phone_doc.phone + for phone_doc in contact.phone_nos + if phone_doc.is_primary_mobile_no + ] + + # If no mobile numbers were marked, clear Lead.mobile_no + if not mobile_nos: + lead = frappe.get_doc("Lead", contact_lead) + + if lead.mobile_no: + # Optional: only unset if the current value matches one of the Contact's phones + contact_phone_values = {p.phone for p in contact.phone_nos} + if lead.mobile_no in contact_phone_values: + lead.db_set("mobile_no", None) diff --git a/rangeldigital/utilities/lead/lead_api.py b/rangeldigital/utilities/lead/lead_api.py index b4ff908..828856c 100644 --- a/rangeldigital/utilities/lead/lead_api.py +++ b/rangeldigital/utilities/lead/lead_api.py @@ -15,7 +15,7 @@ def add_lead_to_campaign(lead_name, campaign_name, start_date=None): }) if existing: - frappe.throw("This Lead is already part of an Email Campaign with this name.") + frappe.throw("This Lead is already in this Email Campaign") doc = frappe.new_doc("Email Campaign") doc.update({