From 4d6604ab7a11b9a00fa346f6d401abaed91cac32 Mon Sep 17 00:00:00 2001 From: rajabxahmd Date: Mon, 17 Mar 2025 12:39:52 +0530 Subject: [PATCH 1/6] fix: improper currency formatting issue in kanban view --- frontend/src/pages/Deals.vue | 14 +++++++++++--- frontend/src/pages/Leads.vue | 14 +++++++++++--- frontend/src/pages/Tasks.vue | 14 +++++++++++--- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/frontend/src/pages/Deals.vue b/frontend/src/pages/Deals.vue index 578534b7..37b3dd70 100644 --- a/frontend/src/pages/Deals.vue +++ b/frontend/src/pages/Deals.vue @@ -387,9 +387,17 @@ function parseRows(rows, columns = []) { deals.value.data.rows.forEach((row) => { _rows[row] = deal[row] - let fieldType = columns?.find( - (col) => (col.key || col.value) == row, - )?.type + let fieldType; + if (deals.value.data.view_type === 'kanban') { + fieldType = columns?.find( + (col) => (col.fieldname || col.value) == row, + )?.fieldtype + } + else { + fieldType = columns?.find( + (col) => (col.key || col.value) == row, + )?.type + } if ( fieldType && diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index 98afce8f..cbabb3e6 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -407,9 +407,17 @@ function parseRows(rows, columns = []) { leads.value?.data.rows.forEach((row) => { _rows[row] = lead[row] - let fieldType = columns?.find( - (col) => (col.key || col.value) == row, - )?.type + let fieldType; + if (leads.value.data.view_type === 'kanban') { + fieldType = columns?.find( + (col) => (col.fieldname || col.value) == row, + )?.fieldtype + } + else { + fieldType = columns?.find( + (col) => (col.key || col.value) == row, + )?.type + } if ( fieldType && diff --git a/frontend/src/pages/Tasks.vue b/frontend/src/pages/Tasks.vue index 69662d9e..3a17614f 100644 --- a/frontend/src/pages/Tasks.vue +++ b/frontend/src/pages/Tasks.vue @@ -262,9 +262,17 @@ function parseRows(rows, columns = []) { tasks.value?.data.rows.forEach((row) => { _rows[row] = task[row] - let fieldType = columns?.find( - (col) => (col.key || col.value) == row, - )?.type + let fieldType; + if (tasks.value.data.view_type === 'kanban') { + fieldType = columns?.find( + (col) => (col.fieldname || col.value) == row, + )?.fieldtype + } + else { + fieldType = columns?.find( + (col) => (col.key || col.value) == row, + )?.type + } if ( fieldType && From 26703070c9dc0ff625e5148a0956459691562a0f Mon Sep 17 00:00:00 2001 From: rajabxahmd Date: Wed, 19 Mar 2025 16:09:46 +0530 Subject: [PATCH 2/6] Update frontend/src/pages/Deals.vue Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> --- frontend/src/pages/Deals.vue | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/frontend/src/pages/Deals.vue b/frontend/src/pages/Deals.vue index 37b3dd70..527a57e6 100644 --- a/frontend/src/pages/Deals.vue +++ b/frontend/src/pages/Deals.vue @@ -387,17 +387,11 @@ function parseRows(rows, columns = []) { deals.value.data.rows.forEach((row) => { _rows[row] = deal[row] - let fieldType; - if (deals.value.data.view_type === 'kanban') { - fieldType = columns?.find( - (col) => (col.fieldname || col.value) == row, - )?.fieldtype - } - else { - fieldType = columns?.find( - (col) => (col.key || col.value) == row, - )?.type - } + let fieldname = deals.value.data.view_type === 'kanban' ? 'fieldname' : 'key' + let fieldtype = deals.value.data.view_type === 'kanban' ? 'fieldtype' : 'type' + let fieldType = columns?.find( + (col) => (col[fieldname] || col.value) == row, + )?.[fieldtype] if ( fieldType && From 5bba8459182ce1e139ee32058a32f1a901f85e0d Mon Sep 17 00:00:00 2001 From: rajabxahmd Date: Wed, 19 Mar 2025 16:19:54 +0530 Subject: [PATCH 3/6] Update frontend/src/pages/Tasks.vue Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> --- frontend/src/pages/Tasks.vue | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/frontend/src/pages/Tasks.vue b/frontend/src/pages/Tasks.vue index 3a17614f..93775863 100644 --- a/frontend/src/pages/Tasks.vue +++ b/frontend/src/pages/Tasks.vue @@ -262,17 +262,11 @@ function parseRows(rows, columns = []) { tasks.value?.data.rows.forEach((row) => { _rows[row] = task[row] - let fieldType; - if (tasks.value.data.view_type === 'kanban') { - fieldType = columns?.find( - (col) => (col.fieldname || col.value) == row, - )?.fieldtype - } - else { - fieldType = columns?.find( - (col) => (col.key || col.value) == row, - )?.type - } + let fieldname = deals.value.data.view_type === 'kanban' ? 'fieldname' : 'key' + let fieldtype = deals.value.data.view_type === 'kanban' ? 'fieldtype' : 'type' + let fieldType = columns?.find( + (col) => (col[fieldname] || col.value) == row, + )?.[fieldtype] if ( fieldType && From 8a6b6b65e1e8f95ac63ba5a9f956d523130172d9 Mon Sep 17 00:00:00 2001 From: rajabxahmd Date: Wed, 19 Mar 2025 16:20:05 +0530 Subject: [PATCH 4/6] Update frontend/src/pages/Leads.vue Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> --- frontend/src/pages/Leads.vue | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index cbabb3e6..03c5a314 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -407,17 +407,11 @@ function parseRows(rows, columns = []) { leads.value?.data.rows.forEach((row) => { _rows[row] = lead[row] - let fieldType; - if (leads.value.data.view_type === 'kanban') { - fieldType = columns?.find( - (col) => (col.fieldname || col.value) == row, - )?.fieldtype - } - else { - fieldType = columns?.find( - (col) => (col.key || col.value) == row, - )?.type - } + let fieldname = deals.value.data.view_type === 'kanban' ? 'fieldname' : 'key' + let fieldtype = deals.value.data.view_type === 'kanban' ? 'fieldtype' : 'type' + let fieldType = columns?.find( + (col) => (col[fieldname] || col.value) == row, + )?.[fieldtype] if ( fieldType && From 00a869119c0b7e7df67b1f08bc7bcbeb2b04132d Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 21 Mar 2025 15:39:48 +0530 Subject: [PATCH 5/6] fix: avoid auto setting mobile no as primary via validate method --- crm/api/contact.py | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/crm/api/contact.py b/crm/api/contact.py index 65bc0660..6cab9c10 100644 --- a/crm/api/contact.py +++ b/crm/api/contact.py @@ -3,29 +3,9 @@ from frappe import _ def validate(doc, method): - set_primary_email(doc) - set_primary_mobile_no(doc) - doc.set_primary_email() - doc.set_primary("mobile_no") update_deals_email_mobile_no(doc) -def set_primary_email(doc): - if not doc.email_ids: - return - - if len(doc.email_ids) == 1: - doc.email_ids[0].is_primary = 1 - - -def set_primary_mobile_no(doc): - if not doc.phone_nos: - return - - if len(doc.phone_nos) == 1: - doc.phone_nos[0].is_primary_mobile_no = 1 - - def update_deals_email_mobile_no(doc): linked_deals = frappe.get_all( "CRM Contacts", @@ -45,12 +25,7 @@ def update_deals_email_mobile_no(doc): def get_contact(name): Contact = frappe.qb.DocType("Contact") - query = ( - frappe.qb.from_(Contact) - .select("*") - .where(Contact.name == name) - .limit(1) - ) + query = frappe.qb.from_(Contact).select("*").where(Contact.name == name).limit(1) contact = query.run(as_dict=True) if not len(contact): @@ -66,6 +41,7 @@ def get_contact(name): ) return contact + @frappe.whitelist() def get_linked_deals(contact): """Get linked deals for a contact""" @@ -109,12 +85,14 @@ def create_new(contact, field, value): if not frappe.has_permission("Contact", "write", contact): frappe.throw("Not permitted", frappe.PermissionError) - contact = frappe.get_doc("Contact", contact) + contact = frappe.get_cached_doc("Contact", contact) if field == "email": - contact.append("email_ids", {"email_id": value}) + email = {"email_id": value, "is_primary": 1 if len(contact.email_ids) == 0 else 0} + contact.append("email_ids", email) elif field in ("mobile_no", "phone"): - contact.append("phone_nos", {"phone": value}) + mobile_no = {"phone": value, "is_primary_mobile_no": 1 if len(contact.phone_nos) == 0 else 0} + contact.append("phone_nos", mobile_no) else: frappe.throw("Invalid field") @@ -174,10 +152,10 @@ def search_emails(txt: str): or_filters=or_filters, limit_start=0, limit_page_length=20, - order_by='email_id, full_name, name', + order_by="email_id, full_name, name", ignore_permissions=False, as_list=True, strict=False, ) - return results \ No newline at end of file + return results From a32749533fc42406f52dc6af3a77b66d9042e898 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 21 Mar 2025 16:24:25 +0530 Subject: [PATCH 6/6] fix: code cleanup --- frontend/src/pages/Deals.vue | 16 ++++++++++------ frontend/src/pages/Leads.vue | 16 ++++++++++------ frontend/src/pages/Tasks.vue | 12 +++++++----- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/frontend/src/pages/Deals.vue b/frontend/src/pages/Deals.vue index 527a57e6..73e7f62c 100644 --- a/frontend/src/pages/Deals.vue +++ b/frontend/src/pages/Deals.vue @@ -350,7 +350,9 @@ function getGroupedByRows(listRows, groupByField, columns) { if (!option) { filteredRows = listRows.filter((row) => !row[groupByField.fieldname]) } else { - filteredRows = listRows.filter((row) => row[groupByField.fieldname] == option) + filteredRows = listRows.filter( + (row) => row[groupByField.fieldname] == option, + ) } let groupDetail = { @@ -382,16 +384,18 @@ function getKanbanRows(data, columns) { } function parseRows(rows, columns = []) { + let view_type = deals.value.data.view_type + let key = view_type === 'kanban' ? 'fieldname' : 'key' + let type = view_type === 'kanban' ? 'fieldtype' : 'type' + return rows.map((deal) => { let _rows = {} deals.value.data.rows.forEach((row) => { _rows[row] = deal[row] - let fieldname = deals.value.data.view_type === 'kanban' ? 'fieldname' : 'key' - let fieldtype = deals.value.data.view_type === 'kanban' ? 'fieldtype' : 'type' - let fieldType = columns?.find( - (col) => (col[fieldname] || col.value) == row, - )?.[fieldtype] + let fieldType = columns?.find((col) => (col[key] || col.value) == row)?.[ + type + ] if ( fieldType && diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index 03c5a314..9d65cbd5 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -370,7 +370,9 @@ function getGroupedByRows(listRows, groupByField, columns) { if (!option) { filteredRows = listRows.filter((row) => !row[groupByField.fieldname]) } else { - filteredRows = listRows.filter((row) => row[groupByField.fieldname] == option) + filteredRows = listRows.filter( + (row) => row[groupByField.fieldname] == option, + ) } let groupDetail = { @@ -402,16 +404,18 @@ function getKanbanRows(data, columns) { } function parseRows(rows, columns = []) { + let view_type = leads.value.data.view_type + let key = view_type === 'kanban' ? 'fieldname' : 'key' + let type = view_type === 'kanban' ? 'fieldtype' : 'type' + return rows.map((lead) => { let _rows = {} leads.value?.data.rows.forEach((row) => { _rows[row] = lead[row] - let fieldname = deals.value.data.view_type === 'kanban' ? 'fieldname' : 'key' - let fieldtype = deals.value.data.view_type === 'kanban' ? 'fieldtype' : 'type' - let fieldType = columns?.find( - (col) => (col[fieldname] || col.value) == row, - )?.[fieldtype] + let fieldType = columns?.find((col) => (col[key] || col.value) == row)?.[ + type + ] if ( fieldType && diff --git a/frontend/src/pages/Tasks.vue b/frontend/src/pages/Tasks.vue index 93775863..894f96d8 100644 --- a/frontend/src/pages/Tasks.vue +++ b/frontend/src/pages/Tasks.vue @@ -257,16 +257,18 @@ function getKanbanRows(data, columns) { } function parseRows(rows, columns = []) { + let view_type = tasks.value.data.view_type + let key = view_type === 'kanban' ? 'fieldname' : 'key' + let type = view_type === 'kanban' ? 'fieldtype' : 'type' + return rows.map((task) => { let _rows = {} tasks.value?.data.rows.forEach((row) => { _rows[row] = task[row] - let fieldname = deals.value.data.view_type === 'kanban' ? 'fieldname' : 'key' - let fieldtype = deals.value.data.view_type === 'kanban' ? 'fieldtype' : 'type' - let fieldType = columns?.find( - (col) => (col[fieldname] || col.value) == row, - )?.[fieldtype] + let fieldType = columns?.find((col) => (col[key] || col.value) == row)?.[ + type + ] if ( fieldType &&