fix: added kanban_columns && kanban_fields instead of using columns & rows
This commit is contained in:
parent
59d5a9d31a
commit
5ae3d8f44e
@ -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]
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user