fix: set as default view in view settings per user
This commit is contained in:
parent
c0bcd2a34f
commit
1e39385abe
@ -14,8 +14,3 @@ def get_views(doctype):
|
|||||||
query = query.where(View.dt == doctype)
|
query = query.where(View.dt == doctype)
|
||||||
views = query.run(as_dict=True)
|
views = query.run(as_dict=True)
|
||||||
return views
|
return views
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def get_default_view():
|
|
||||||
return frappe.db.get_single_value("FCRM Settings", "default_view") or None
|
|
||||||
|
|||||||
@ -147,9 +147,19 @@ def sync_default_columns(view):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def set_as_default(name=None, type=None, doctype=None):
|
def set_as_default(name=None, type=None, doctype=None):
|
||||||
if not name:
|
if name:
|
||||||
name = type + "_" + doctype
|
frappe.db.set_value("CRM View Settings", name, "is_default", 1)
|
||||||
frappe.db.set_single_value("FCRM Settings", "default_view", name)
|
else:
|
||||||
|
doc = create_or_update_standard_view({"type": type, "doctype": doctype, "is_default": 1})
|
||||||
|
name = doc.name
|
||||||
|
|
||||||
|
# remove default from other views of same user
|
||||||
|
frappe.db.set_value(
|
||||||
|
"CRM View Settings",
|
||||||
|
{"name": ("!=", name), "user": frappe.session.user, "is_default": 1},
|
||||||
|
"is_default",
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@ -190,10 +200,17 @@ def create_or_update_standard_view(view):
|
|||||||
doc.kanban_fields = json.dumps(kanban_fields)
|
doc.kanban_fields = json.dumps(kanban_fields)
|
||||||
doc.columns = json.dumps(columns)
|
doc.columns = json.dumps(columns)
|
||||||
doc.rows = json.dumps(rows)
|
doc.rows = json.dumps(rows)
|
||||||
|
doc.is_default = view.is_default or False
|
||||||
doc.save()
|
doc.save()
|
||||||
else:
|
else:
|
||||||
doc = frappe.new_doc("CRM View Settings")
|
doc = frappe.new_doc("CRM View Settings")
|
||||||
label = "Group By View" if view.type == "group_by" else "List View"
|
|
||||||
|
label = "List"
|
||||||
|
if view.type == "group_by":
|
||||||
|
label = "Group By"
|
||||||
|
elif view.type == "kanban":
|
||||||
|
label = "Kanban"
|
||||||
|
|
||||||
doc.name = view.label or label
|
doc.name = view.label or label
|
||||||
doc.label = view.label or label
|
doc.label = view.label or label
|
||||||
doc.type = view.type or "list"
|
doc.type = view.type or "list"
|
||||||
@ -211,4 +228,7 @@ def create_or_update_standard_view(view):
|
|||||||
doc.columns = json.dumps(columns)
|
doc.columns = json.dumps(columns)
|
||||||
doc.rows = json.dumps(rows)
|
doc.rows = json.dumps(rows)
|
||||||
doc.is_standard = True
|
doc.is_standard = True
|
||||||
|
doc.is_default = view.is_default or False
|
||||||
doc.insert()
|
doc.insert()
|
||||||
|
|
||||||
|
return doc
|
||||||
|
|||||||
@ -897,6 +897,7 @@ const viewActions = (view) => {
|
|||||||
|
|
||||||
if (!_view) {
|
if (!_view) {
|
||||||
_view = {
|
_view = {
|
||||||
|
label: view.label,
|
||||||
type: view.name,
|
type: view.name,
|
||||||
dt: props.doctype,
|
dt: props.doctype,
|
||||||
}
|
}
|
||||||
@ -984,13 +985,9 @@ const viewActions = (view) => {
|
|||||||
function isDefaultView(v, isStandard) {
|
function isDefaultView(v, isStandard) {
|
||||||
let defaultView = getDefaultView()
|
let defaultView = getDefaultView()
|
||||||
|
|
||||||
if (!defaultView) return false
|
if (!defaultView || (isStandard && !v.name)) return false
|
||||||
|
|
||||||
if (isStandard && !v.name) {
|
return defaultView.name == v.name
|
||||||
return defaultView == v.type + '_' + v.dt
|
|
||||||
}
|
|
||||||
|
|
||||||
return defaultView == v.name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const viewModalObj = ref({})
|
const viewModalObj = ref({})
|
||||||
|
|||||||
@ -113,23 +113,22 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
isLoggedIn && (await userResource.promise)
|
isLoggedIn && (await userResource.promise)
|
||||||
|
|
||||||
if (to.name === 'Home' && isLoggedIn) {
|
if (to.name === 'Home' && isLoggedIn) {
|
||||||
const { getDefaultView, defaultView } = viewsStore()
|
const { views, getDefaultView } = viewsStore()
|
||||||
await defaultView.promise
|
await views.promise
|
||||||
|
|
||||||
let _defaultView = getDefaultView(true)
|
let defaultView = getDefaultView()
|
||||||
|
if (!defaultView) {
|
||||||
if (!_defaultView) {
|
|
||||||
next({ name: 'Leads' })
|
next({ name: 'Leads' })
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let { name, type, view } = _defaultView
|
let { route_name, type, name, is_standard } = defaultView
|
||||||
name = name || 'Leads'
|
route_name = route_name || 'Leads'
|
||||||
|
|
||||||
if (view) {
|
if (name && !is_standard) {
|
||||||
next({ name, params: { viewType: type }, query: { view } })
|
next({ name: route_name, params: { viewType: type }, query: { name } })
|
||||||
} else {
|
} else {
|
||||||
next({ name, params: { viewType: type } })
|
next({ name: route_name, params: { viewType: type } })
|
||||||
}
|
}
|
||||||
} else if (!isLoggedIn) {
|
} else if (!isLoggedIn) {
|
||||||
window.location.href = '/login?redirect-to=/crm'
|
window.location.href = '/login?redirect-to=/crm'
|
||||||
|
|||||||
@ -7,13 +7,7 @@ export const viewsStore = defineStore('crm-views', (doctype) => {
|
|||||||
let pinnedViews = ref([])
|
let pinnedViews = ref([])
|
||||||
let publicViews = ref([])
|
let publicViews = ref([])
|
||||||
let standardViews = ref({})
|
let standardViews = ref({})
|
||||||
|
const defaultView = ref(null)
|
||||||
// Default view
|
|
||||||
const defaultView = createResource({
|
|
||||||
url: 'crm.api.views.get_default_view',
|
|
||||||
cache: 'crm-default-view',
|
|
||||||
auto: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
// Views
|
// Views
|
||||||
const views = createResource({
|
const views = createResource({
|
||||||
@ -34,48 +28,19 @@ export const viewsStore = defineStore('crm-views', (doctype) => {
|
|||||||
if (view.public) {
|
if (view.public) {
|
||||||
publicViews.value?.push(view)
|
publicViews.value?.push(view)
|
||||||
}
|
}
|
||||||
if (view.is_default && view.dt) {
|
if (view.is_standard && view.dt) {
|
||||||
standardViews.value[view.dt + ' ' + view.type] = view
|
standardViews.value[view.dt + ' ' + view.type] = view
|
||||||
}
|
}
|
||||||
|
if (view.is_default) {
|
||||||
|
defaultView.value = view
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return views
|
return views
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
function getDefaultView(routeName = false) {
|
function getDefaultView() {
|
||||||
let view = defaultView.data
|
return defaultView.value
|
||||||
if (!view) return null
|
|
||||||
|
|
||||||
if (typeof view === 'string' && !isNaN(view)) {
|
|
||||||
view = parseInt(view)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (routeName) {
|
|
||||||
let viewObj = getView(view) || {
|
|
||||||
type: view.split('_')[0],
|
|
||||||
dt: view.split('_')[1],
|
|
||||||
}
|
|
||||||
|
|
||||||
let routeName = viewObj.dt
|
|
||||||
|
|
||||||
if (routeName.startsWith('CRM ')) {
|
|
||||||
routeName = routeName.slice(4)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!routeName.endsWith('s')) {
|
|
||||||
routeName += 's'
|
|
||||||
}
|
|
||||||
|
|
||||||
let viewName = viewObj.is_default ? null : viewObj.name
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: routeName,
|
|
||||||
type: viewObj.type,
|
|
||||||
view: viewName,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return view
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getView(view, type, doctype = null) {
|
function getView(view, type, doctype = null) {
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { markRaw } from 'vue'
|
|||||||
|
|
||||||
const { getView: getViewDetails } = viewsStore()
|
const { getView: getViewDetails } = viewsStore()
|
||||||
|
|
||||||
function defaultView(type) {
|
function standardView(type) {
|
||||||
let types = {
|
let types = {
|
||||||
list: {
|
list: {
|
||||||
label: __('List'),
|
label: __('List'),
|
||||||
@ -29,7 +29,7 @@ export function getView(view, type, doctype) {
|
|||||||
let viewType = type || 'list'
|
let viewType = type || 'list'
|
||||||
let viewDetails = getViewDetails(view, viewType, doctype)
|
let viewDetails = getViewDetails(view, viewType, doctype)
|
||||||
if (viewDetails && !viewDetails.icon) {
|
if (viewDetails && !viewDetails.icon) {
|
||||||
viewDetails.icon = defaultView(viewType).icon
|
viewDetails.icon = standardView(viewType).icon
|
||||||
}
|
}
|
||||||
return viewDetails || defaultView(viewType)
|
return viewDetails || standardView(viewType)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user