From 68af1175c4bcf3d011511a00ad9ce5a36d78fc25 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 26 Jun 2024 12:39:58 +0530 Subject: [PATCH] fix: added title field in kanban settings --- crm/api/doc.py | 9 +++- .../crm_view_settings/crm_view_settings.json | 9 +++- .../crm_view_settings/crm_view_settings.py | 4 ++ .../src/components/Kanban/KanbanSettings.vue | 48 +++++++++++++++---- frontend/src/components/Kanban/KanbanView.vue | 26 ++++++++-- frontend/src/components/ViewControls.vue | 12 +++++ 6 files changed, 95 insertions(+), 13 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index 2792feda..f30aeaa9 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -207,6 +207,7 @@ def get_data( page_length=20, page_length_count=20, column_field=None, + title_field=None, columns=[], rows=[], kanban_columns=[], @@ -311,6 +312,12 @@ def get_data( elif field_meta.fieldtype == "Select": kanban_columns = [{"name": option} for option in field_meta.options.split("\n")] + if not title_field: + title_field = "name" + + if title_field not in rows: + rows.append(title_field) + if not kanban_fields: kanban_fields = ["name"] @@ -472,7 +479,7 @@ def get_fields_meta(doctype, restricted_fieldtypes=None, as_array=False): fields_meta = {} for field in fields: - fields_meta[field.fieldname] = field + fields_meta[field.get('fieldname')] = field return fields_meta diff --git a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json index a88d5d3d..dde0b128 100644 --- a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json +++ b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.json @@ -29,6 +29,7 @@ "kanban_tab", "kanban_section", "column_field", + "title_field", "kanban_columns", "kanban_fields" ], @@ -171,11 +172,17 @@ "fieldname": "kanban_fields", "fieldtype": "Code", "label": "Kanban Fields" + }, + { + "default": "name", + "fieldname": "title_field", + "fieldtype": "Data", + "label": "Title Field" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2024-06-25 17:16:02.876349", + "modified": "2024-06-25 19:40:12.067788", "modified_by": "Administrator", "module": "FCRM", "name": "CRM View Settings", diff --git a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py index 72c8a7c0..86f1bff5 100644 --- a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py +++ b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py @@ -41,6 +41,7 @@ def create(view): doc.order_by = view.order_by doc.group_by_field = view.group_by_field doc.column_field = view.column_field + doc.title_field = view.title_field doc.kanban_columns = json.dumps(view.kanban_columns) doc.kanban_fields = json.dumps(view.kanban_fields) doc.columns = json.dumps(view.columns) @@ -72,6 +73,7 @@ def update(view): doc.order_by = view.order_by doc.group_by_field = view.group_by_field doc.column_field = view.column_field + doc.title_field = view.title_field doc.kanban_columns = json.dumps(kanban_columns) doc.kanban_fields = json.dumps(kanban_fields) doc.columns = json.dumps(columns) @@ -170,6 +172,7 @@ def create_or_update_default_view(view): doc.order_by = view.order_by doc.group_by_field = view.group_by_field doc.column_field = view.column_field + doc.title_field = view.title_field doc.kanban_columns = json.dumps(kanban_columns) doc.kanban_fields = json.dumps(kanban_fields) doc.columns = json.dumps(columns) @@ -189,6 +192,7 @@ def create_or_update_default_view(view): doc.order_by = view.order_by doc.group_by_field = view.group_by_field doc.column_field = view.column_field + doc.title_field = view.title_field doc.kanban_columns = json.dumps(kanban_columns) doc.kanban_fields = json.dumps(kanban_fields) doc.columns = json.dumps(columns) diff --git a/frontend/src/components/Kanban/KanbanSettings.vue b/frontend/src/components/Kanban/KanbanSettings.vue index 2593d8b9..95f377b9 100644 --- a/frontend/src/components/Kanban/KanbanSettings.vue +++ b/frontend/src/components/Kanban/KanbanSettings.vue @@ -16,14 +16,32 @@ v-if="columnFields" value="" :options="columnFields" - @change="(f) => (column_field = f)" + @change="(f) => (columnField = f)" > + +
+ {{ __('Title Field') }} +
+ + @@ -110,7 +128,7 @@ const emit = defineEmits(['update']) const list = defineModel() const showDialog = ref(false) -const column_field = computed({ +const columnField = computed({ get: () => { let fieldname = list.value?.params?.column_field if (!fieldname) return '' @@ -122,16 +140,29 @@ const column_field = computed({ }, }) +const titleField = computed({ + get: () => { + let fieldname = list.value?.params?.title_field + if (!fieldname) return '' + + return fields.data?.find((field) => field.fieldname === fieldname) + }, + set: (val) => { + list.value.params.title_field = val.fieldname + }, +}) + const columnFields = computed(() => { return ( - fields.data?.filter((field) => ['Link', 'Select'].includes(field.fieldtype)) || - [] + fields.data?.filter((field) => + ['Link', 'Select'].includes(field.fieldtype), + ) || [] ) }) const fields = createResource({ url: 'crm.api.doc.get_fields_meta', - params: { doctype: props.doctype, as_array: true}, + params: { doctype: props.doctype, as_array: true }, cache: ['kanban_fields', props.doctype], auto: true, onSuccess: (data) => { @@ -161,7 +192,7 @@ const allFields = computed({ }) function reorder() { - allFields.value = allFields.value.map(row => row.fieldname) + allFields.value = allFields.value.map((row) => row.fieldname) } function addField(field) { @@ -181,7 +212,8 @@ function apply() { nextTick(() => { showDialog.value = false emit('update', { - column_field: column_field.value.fieldname, + column_field: columnField.value.fieldname, + title_field: titleField.value.fieldname, kanban_fields: allFields.value.map((row) => row.fieldname), }) }) diff --git a/frontend/src/components/Kanban/KanbanView.vue b/frontend/src/components/Kanban/KanbanView.vue index 69c41833..715e02cd 100644 --- a/frontend/src/components/Kanban/KanbanView.vue +++ b/frontend/src/components/Kanban/KanbanView.vue @@ -76,7 +76,7 @@ @@ -117,6 +133,10 @@ const emit = defineEmits(['update']) const kanban = defineModel() +const titleField = computed(() => { + return kanban.value?.params?.title_field +}) + const columns = computed(() => { if (!kanban.value?.data?.data || kanban.value.data.view_type != 'kanban') return [] diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index 681f41de..cb1cb69e 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -365,6 +365,7 @@ const view = ref({ filters: {}, order_by: 'modified desc', column_field: 'status', + title_field: 'name', kanban_columns: '', kanban_fields: '', columns: '', @@ -402,6 +403,7 @@ function getParams() { const columns = _view?.columns || '' const rows = _view?.rows || '' const column_field = _view?.column_field || 'status' + const title_field = _view?.title_field || 'name' const kanban_columns = _view?.kanban_columns || '' const kanban_fields = _view?.kanban_fields || '' @@ -414,6 +416,7 @@ function getParams() { order_by: order_by, group_by_field: group_by_field, column_field: column_field, + title_field: title_field, kanban_columns: kanban_columns, kanban_fields: kanban_fields, columns: columns, @@ -435,6 +438,7 @@ function getParams() { group_by_field: group_by_field, }, column_field: column_field, + title_field: title_field, kanban_columns: kanban_columns, kanban_fields: kanban_fields, columns: columns, @@ -462,6 +466,7 @@ list.value = createResource({ group_by_field: params?.view?.group_by_field || 'owner', }, column_field: params.column_field, + title_field: params.title_field, kanban_columns: params.kanban_columns, kanban_fields: params.kanban_fields, columns: data.columns, @@ -749,6 +754,10 @@ async function updateKanbanSettings(data) { list.value.params.column_field = data.column_field view.value.column_field = data.column_field } + if (data.title_field && data.title_field != view.value.title_field) { + list.value.params.title_field = data.title_field + view.value.title_field = data.title_field + } if (data.kanban_columns) { list.value.params.kanban_columns = data.kanban_columns view.value.kanban_columns = data.kanban_columns @@ -804,6 +813,7 @@ function create_or_update_default_view() { order_by: defaultParams.value.order_by, group_by_field: defaultParams.value.view?.group_by_field, column_field: defaultParams.value.column_field, + title_field: defaultParams.value.title_field, kanban_columns: defaultParams.value.kanban_columns, kanban_fields: defaultParams.value.kanban_fields, columns: defaultParams.value.columns, @@ -827,6 +837,7 @@ function update_custom_view() { order_by: defaultParams.value.order_by, group_by_field: defaultParams.value.view.group_by_field, column_field: defaultParams.value.column_field, + title_field: defaultParams.value.title_field, kanban_columns: defaultParams.value.kanban_columns, kanban_fields: defaultParams.value.kanban_fields, columns: defaultParams.value.columns, @@ -997,6 +1008,7 @@ function saveView() { order_by: defaultParams.value.order_by, group_by_field: defaultParams.value.view.group_by_field, column_field: defaultParams.value.column_field, + title_field: defaultParams.value.title_field, kanban_columns: defaultParams.value.kanban_columns, kanban_fields: defaultParams.value.kanban_fields, columns: defaultParams.value.columns,