fix: added kanban_columns && kanban_fields instead of using columns & rows

This commit is contained in:
Shariq Ansari 2024-06-25 18:14:13 +05:30
parent 59d5a9d31a
commit 5ae3d8f44e
5 changed files with 102 additions and 47 deletions

View File

@ -209,6 +209,8 @@ def get_data(
column_field=None,
columns=[],
rows=[],
kanban_columns=[],
kanban_fields=[],
view=None,
default_filters=None,
):
@ -216,6 +218,8 @@ def get_data(
filters = frappe._dict(filters)
rows = frappe.parse_json(rows or "[]")
columns = frappe.parse_json(columns or "[]")
kanban_fields = frappe.parse_json(kanban_fields or "[]")
kanban_columns = frappe.parse_json(kanban_columns or "[]")
custom_view_name = view.get('custom_view_name') if view else None
view_type = view.get('view_type') if view else None
@ -240,6 +244,8 @@ def get_data(
is_default = True
data = []
_list = get_controller(doctype)
if hasattr(_list, "default_list_data"):
rows = _list.default_list_data().get("rows")
if view_type != "kanban":
if columns or rows:
@ -272,9 +278,6 @@ def get_data(
elif not custom_view or is_default and hasattr(_list, "default_list_data"):
columns = _list.default_list_data().get("columns")
if hasattr(_list, "default_list_data"):
rows = _list.default_list_data().get("rows")
# check if rows has all keys from columns if not add them
for column in columns:
if column.get("key") not in rows:
@ -297,30 +300,30 @@ def get_data(
) or []
if view_type == "kanban":
if not columns and column_field:
if not kanban_columns and column_field:
field_meta = frappe.get_meta(doctype).get_field(column_field)
if field_meta.fieldtype == "Link":
columns = frappe.get_all(
kanban_columns = frappe.get_all(
field_meta.options,
fields=["name"],
order_by="modified asc",
)
elif field_meta.fieldtype == "Select":
columns = [{"name": option} for option in field_meta.options.split("\n")]
kanban_columns = [{"name": option} for option in field_meta.options.split("\n")]
if not kanban_fields:
kanban_fields = ["name"]
if not rows:
rows = ["name"]
if "name" not in kanban_fields:
kanban_fields.append("name")
if hasattr(_list, "default_list_data"):
rows = _list.default_list_data().get("rows")
for field in kanban_fields:
if field not in rows:
rows.append(field)
if "name" not in rows:
rows.append("name")
for column in columns:
column_filters = { column_field: column.get('name') }
if column_field in filters and filters.get(column_field) != column.name:
for kc in kanban_columns:
column_filters = { column_field: kc.get('name') }
if column_field in filters and filters.get(column_field) != kc.name:
column_data = []
else:
column_filters.update(filters.copy())
@ -332,13 +335,13 @@ def get_data(
page_length=20,
)
if column.get("order"):
if kc.get("order"):
column_data = sorted(
column_data, key=lambda x: column.get("order").index(x.get("name"))
if x.get("name") in column.get("order") else 0
column_data, key=lambda x: kc.get("order").index(x.get("name"))
if x.get("name") in kc.get("order") else 0
)
data.append({"column": column, "data": column_data, "count": len(column_data)})
data.append({"column": kc, "fields": kanban_fields, "data": column_data, "count": len(column_data)})
fields = frappe.get_meta(doctype).fields
fields = [field for field in fields if field.fieldtype not in no_value_fields]

View File

@ -19,16 +19,18 @@
"filters",
"order_by_tab",
"order_by",
"list_kanban_tab",
"list_tab",
"list_section",
"load_default_columns",
"kanban_section",
"column_field",
"section_break_ndtv",
"columns",
"rows",
"group_by_tab",
"group_by_field"
"group_by_field",
"kanban_tab",
"kanban_section",
"column_field",
"kanban_columns",
"kanban_fields"
],
"fields": [
{
@ -137,20 +139,13 @@
"fieldtype": "Data",
"label": "Group By Field"
},
{
"fieldname": "list_kanban_tab",
"fieldtype": "Tab Break",
"label": "List/Kanban"
},
{
"fieldname": "list_section",
"fieldtype": "Section Break",
"label": "List"
"fieldtype": "Section Break"
},
{
"fieldname": "kanban_section",
"fieldtype": "Section Break",
"label": "Kanban"
"fieldtype": "Section Break"
},
{
"fieldname": "column_field",
@ -158,13 +153,29 @@
"label": "Column Field"
},
{
"fieldname": "section_break_ndtv",
"fieldtype": "Section Break"
"fieldname": "list_tab",
"fieldtype": "Tab Break",
"label": "List"
},
{
"fieldname": "kanban_tab",
"fieldtype": "Tab Break",
"label": "Kanban"
},
{
"fieldname": "kanban_columns",
"fieldtype": "Code",
"label": "Kanban Columns"
},
{
"fieldname": "kanban_fields",
"fieldtype": "Code",
"label": "Kanban Fields"
}
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2024-06-21 14:12:41.246707",
"modified": "2024-06-25 17:16:02.876349",
"modified_by": "Administrator",
"module": "FCRM",
"name": "CRM View Settings",

View File

@ -16,12 +16,16 @@ def create(view):
view.filters = parse_json(view.filters) or {}
view.columns = parse_json(view.columns or '[]')
view.rows = parse_json(view.rows or '[]')
view.kanban_columns = parse_json(view.kanban_columns or '[]')
view.kanban_fields = parse_json(view.kanban_fields or '[]')
default_rows = sync_default_rows(view.doctype)
view.rows = view.rows + default_rows if default_rows else view.rows
view.rows = remove_duplicates(view.rows)
if not view.columns:
if not view.kanban_columns and view.type == "kanban":
view.kanban_columns = sync_default_columns(view)
elif not view.columns:
view.columns = sync_default_columns(view)
doc = frappe.new_doc("CRM View Settings")
@ -37,6 +41,8 @@ def create(view):
doc.order_by = view.order_by
doc.group_by_field = view.group_by_field
doc.column_field = view.column_field
doc.kanban_columns = json.dumps(view.kanban_columns)
doc.kanban_fields = json.dumps(view.kanban_fields)
doc.columns = json.dumps(view.columns)
doc.rows = json.dumps(view.rows)
doc.insert()
@ -49,6 +55,8 @@ def update(view):
filters = parse_json(view.filters) or {}
columns = parse_json(view.columns) or []
rows = parse_json(view.rows) or []
kanban_columns = parse_json(view.kanban_columns) or []
kanban_fields = parse_json(view.kanban_fields) or []
default_rows = sync_default_rows(view.doctype)
rows = rows + default_rows if default_rows else rows
@ -64,6 +72,8 @@ def update(view):
doc.order_by = view.order_by
doc.group_by_field = view.group_by_field
doc.column_field = view.column_field
doc.kanban_columns = json.dumps(kanban_columns)
doc.kanban_fields = json.dumps(kanban_fields)
doc.columns = json.dumps(columns)
doc.rows = json.dumps(rows)
doc.save()
@ -129,12 +139,16 @@ def create_or_update_default_view(view):
filters = parse_json(view.filters) or {}
columns = parse_json(view.columns or '[]')
rows = parse_json(view.rows or '[]')
kanban_columns = parse_json(view.kanban_columns or '[]')
kanban_fields = parse_json(view.kanban_fields or '[]')
default_rows = sync_default_rows(view.doctype, view.type)
rows = rows + default_rows if default_rows else rows
rows = remove_duplicates(rows)
if not columns:
if not kanban_columns and view.type == "kanban":
kanban_columns = sync_default_columns(view)
elif not columns:
columns = sync_default_columns(view)
doc = frappe.db.exists(
@ -156,6 +170,8 @@ 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.kanban_columns = json.dumps(kanban_columns)
doc.kanban_fields = json.dumps(kanban_fields)
doc.columns = json.dumps(columns)
doc.rows = json.dumps(rows)
doc.save()
@ -173,6 +189,8 @@ 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.kanban_columns = json.dumps(kanban_columns)
doc.kanban_fields = json.dumps(kanban_fields)
doc.columns = json.dumps(columns)
doc.rows = json.dumps(rows)
doc.is_default = True

View File

@ -4,7 +4,7 @@
:list="columns"
item-key="column"
@end="updateColumn"
class="flex sm:mx-2.5 mx-2 pb-3.5 overflow-x-auto"
class="flex sm:mx-2.5 mx-2 pb-3.5 overflow-x-auto h-full"
>
<template #item="{ element: column }">
<div
@ -85,8 +85,8 @@
: undefined,
}"
>
<div v-for="value in fields" :key="value">
<div class="truncate">{{ value }}</div>
<div v-for="value in column.fields" :key="value">
<div class="truncate">{{ fields[value] }}</div>
</div>
</component>
</template>
@ -162,10 +162,10 @@ function updateColumn({ item, from, to }) {
_columns.push(col.column)
})
let data = { columns: _columns }
let data = { kanban_columns: _columns }
if (toColumn != fromColumn) {
data = { item: itemName, to: toColumn, columns: _columns }
data = { item: itemName, to: toColumn, kanban_columns: _columns }
}
emit('update', data)

View File

@ -365,6 +365,8 @@ const view = ref({
filters: {},
order_by: 'modified desc',
column_field: 'status',
kanban_columns: '',
kanban_fields: '',
columns: '',
rows: '',
load_default_columns: false,
@ -400,6 +402,8 @@ function getParams() {
const columns = _view?.columns || ''
const rows = _view?.rows || ''
const column_field = _view?.column_field || 'status'
const kanban_columns = _view?.kanban_columns || ''
const kanban_fields = _view?.kanban_fields || ''
view.value = {
name: view_name,
@ -410,6 +414,8 @@ function getParams() {
order_by: order_by,
group_by_field: group_by_field,
column_field: column_field,
kanban_columns: kanban_columns,
kanban_fields: kanban_fields,
columns: columns,
rows: rows,
route_name: _view?.route_name || route.name,
@ -429,6 +435,8 @@ function getParams() {
group_by_field: group_by_field,
},
column_field: column_field,
kanban_columns: kanban_columns,
kanban_fields: kanban_fields,
columns: columns,
rows: rows,
page_length: pageLength.value,
@ -454,6 +462,8 @@ list.value = createResource({
group_by_field: params?.view?.group_by_field || 'owner',
},
column_field: params.column_field,
kanban_columns: data.columns,
kanban_fields: data.kanban_fields,
columns: data.columns,
rows: data.rows,
page_length: params.page_length,
@ -735,12 +745,19 @@ async function updateKanbanSettings(data) {
defaultParams.value = getParams()
}
list.value.params = defaultParams.value
if (data.column_field) {
if (data.column_field && data.column_field != view.value.column_field) {
list.value.params.column_field = data.column_field
view.value.column_field = data.column_field
}
list.value.params.columns = data.columns ? data.columns : ''
view.value.columns = data.columns ? data.columns : ''
if (data.kanban_columns) {
list.value.params.kanban_columns = data.kanban_columns
view.value.kanban_columns = data.kanban_columns
}
if (data.kanban_fields) {
list.value.params.kanban_fields = data.kanban_fields
view.value.kanban_fields = data.kanban_fields
}
list.value.reload()
if (!route.query.view) {
@ -787,6 +804,8 @@ 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,
kanban_columns: defaultParams.value.kanban_columns,
kanban_fields: defaultParams.value.kanban_fields,
columns: defaultParams.value.columns,
rows: defaultParams.value.rows,
route_name: route.name,
@ -808,6 +827,8 @@ 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,
kanban_columns: defaultParams.value.kanban_columns,
kanban_fields: defaultParams.value.kanban_fields,
columns: defaultParams.value.columns,
rows: defaultParams.value.rows,
route_name: route.name,
@ -976,6 +997,8 @@ function saveView() {
order_by: defaultParams.value.order_by,
group_by_field: defaultParams.value.view.group_by_field,
column_field: defaultParams.value.column_field,
kanban_columns: defaultParams.value.kanban_columns,
kanban_fields: defaultParams.value.kanban_fields,
columns: defaultParams.value.columns,
rows: defaultParams.value.rows,
route_name: route.name,