diff --git a/crm/api/doc.py b/crm/api/doc.py index a1a7bb40..18fd7290 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -376,6 +376,24 @@ def get_list_data( "list_script": get_form_script(doctype, "List"), } +@frappe.whitelist() +def get_kanban_data(doctype: str, filters: dict, order_by: str, column_field: str, columns=None, rows=None): + filters = frappe._dict(filters) + columns = frappe.parse_json(columns) + data = [] + for column in columns: + column_filters = filters.copy() + column_filters.update({column_field: column}) + column_data = frappe.get_list( + doctype, + fields=rows, + filters=column_filters, + order_by=order_by, + page_length=20, + ) + data.append({"column": column, "data": column_data, "count": len(column_data)}) + return data + @frappe.whitelist() def get_fields_meta(doctype, restricted_fieldtypes=None, as_array=False): not_allowed_fieldtypes = [ diff --git a/frontend/src/components/Kanban/KanbanView.vue b/frontend/src/components/Kanban/KanbanView.vue new file mode 100644 index 00000000..921ba009 --- /dev/null +++ b/frontend/src/components/Kanban/KanbanView.vue @@ -0,0 +1,62 @@ + + diff --git a/frontend/src/pages/Leads.vue b/frontend/src/pages/Leads.vue index 2733eb51..fe7cf445 100644 --- a/frontend/src/pages/Leads.vue +++ b/frontend/src/pages/Leads.vue @@ -29,9 +29,24 @@ allowedViews: ['list', 'group_by', 'kanban'], }" /> + { if (!leads.value?.data.group_by_field?.name) return [] return getGroupedByRows( leads.value?.data.data, - leads.value?.data.group_by_field + leads.value?.data.group_by_field, ) } else { return parseRows(leads.value?.data.data) @@ -177,8 +193,8 @@ function parseRows(rows) { lead.sla_status == 'Failed' ? 'red' : lead.sla_status == 'Fulfilled' - ? 'green' - : 'orange' + ? 'green' + : 'orange' if (value == 'First Response Due') { value = __(timeAgo(lead.response_by)) tooltipText = dateFormat(lead.response_by, dateTooltipFormat) @@ -213,7 +229,7 @@ function parseRows(rows) { } } else if ( ['first_response_time', 'first_responded_on', 'response_by'].includes( - row + row, ) ) { let field = row == 'response_by' ? 'response_by' : 'first_responded_on'