256 lines
6.9 KiB
JavaScript
256 lines
6.9 KiB
JavaScript
import { getLookup, getLookupList } from '@/api/ADempiere/data'
|
|
import { getCurrentRole } from '@/utils/ADempiere/auth'
|
|
import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
|
|
import { parseContext } from '@/utils/ADempiere/contextUtils'
|
|
|
|
const lookup = {
|
|
state: {
|
|
lookupItem: [],
|
|
lookupList: []
|
|
},
|
|
mutations: {
|
|
addLoockupItem(state, payload) {
|
|
state.lookupItem.push(payload)
|
|
},
|
|
addLoockupList(state, payload) {
|
|
state.lookupList.push(payload)
|
|
},
|
|
deleteLookupList(state, payload) {
|
|
state.lookupItem = payload.lookupItem
|
|
state.lookupList = payload.lookupList
|
|
}
|
|
},
|
|
actions: {
|
|
getLookupItemFromServer({ commit, rootGetters }, {
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
directQuery,
|
|
value
|
|
}) {
|
|
if (isEmptyValue(directQuery)) {
|
|
return
|
|
}
|
|
|
|
let parsedDirectQuery = directQuery
|
|
if (parsedDirectQuery.includes('@')) {
|
|
parsedDirectQuery = parseContext({
|
|
parentUuid,
|
|
containerUuid,
|
|
value: directQuery,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
|
|
return getLookup({
|
|
tableName,
|
|
directQuery: parsedDirectQuery,
|
|
value: value
|
|
})
|
|
.then(response => {
|
|
const label = response.values.DisplayColumn
|
|
const option = {
|
|
label: isEmptyValue(label) ? ' ' : label,
|
|
key: value // response.values.KeyColumn
|
|
}
|
|
|
|
commit('addLoockupItem', {
|
|
option: option,
|
|
value: value, // isNaN(objectParams.value) ? objectParams.value : parseInt(objectParams.value, 10),
|
|
parsedDirectQuery: directQuery,
|
|
tableName: tableName,
|
|
roleUuid: getCurrentRole(),
|
|
clientId: rootGetters.getContextClientId
|
|
})
|
|
return option
|
|
})
|
|
.catch(error => {
|
|
console.warn(`Get Lookup, Select Base - Error ${error.code}: ${error.message}`)
|
|
})
|
|
},
|
|
/**
|
|
* tableName,
|
|
* query
|
|
*/
|
|
getLookupListFromServer({ commit, rootGetters }, {
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
query
|
|
}) {
|
|
if (isEmptyValue(query)) {
|
|
return
|
|
}
|
|
let parsedQuery = query
|
|
if (parsedQuery.includes('@')) {
|
|
parsedQuery = parseContext({
|
|
parentUuid,
|
|
containerUuid,
|
|
value: query,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
return getLookupList({
|
|
tableName,
|
|
query: parsedQuery
|
|
})
|
|
.then(response => {
|
|
const options = response.recordsList.map(itemLookup => {
|
|
return {
|
|
label: itemLookup.values.DisplayColumn,
|
|
key: itemLookup.values.KeyColumn
|
|
}
|
|
})
|
|
|
|
commit('addLoockupList', {
|
|
list: options,
|
|
tableName,
|
|
parsedQuery,
|
|
roleUuid: getCurrentRole(),
|
|
clientId: rootGetters.getContextClientId
|
|
})
|
|
return options
|
|
})
|
|
.catch(error => {
|
|
console.warn(`Get Lookup List, Select Base - Error ${error.code}: ${error.message}`)
|
|
})
|
|
},
|
|
deleteLookupList({ commit, state }, {
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
query,
|
|
directQuery,
|
|
value
|
|
}) {
|
|
let parsedDirectQuery = directQuery
|
|
if (directQuery && parsedDirectQuery.includes('@')) {
|
|
parsedDirectQuery = parseContext({
|
|
parentUuid,
|
|
containerUuid,
|
|
value: parsedDirectQuery,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
const lookupItem = state.lookupItem.filter(itemLookup => {
|
|
return itemLookup.parsedDirectQuery !== parsedDirectQuery &&
|
|
itemLookup.tableName !== tableName &&
|
|
itemLookup.value !== value &&
|
|
itemLookup.roleUuid !== getCurrentRole()
|
|
})
|
|
|
|
let parsedQuery = query
|
|
if (parsedQuery && parsedQuery.includes('@')) {
|
|
parsedQuery = parseContext({
|
|
parentUuid: parentUuid,
|
|
containerUuid: containerUuid,
|
|
value: parsedQuery,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
const lookupList = state.lookupList.filter(itemLookup => {
|
|
return itemLookup.parsedQuery !== parsedQuery &&
|
|
itemLookup.tableName !== tableName &&
|
|
itemLookup.roleUuid !== getCurrentRole()
|
|
})
|
|
commit('deleteLookupList', {
|
|
lookupItem: lookupItem,
|
|
lookupList: lookupList
|
|
})
|
|
}
|
|
},
|
|
getters: {
|
|
getLookupItem: (state, getters, rootState, rootGetters) => ({
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
directQuery,
|
|
value
|
|
}) => {
|
|
let parsedDirectQuery = directQuery
|
|
if (parsedDirectQuery && parsedDirectQuery.includes('@')) {
|
|
parsedDirectQuery = parseContext({
|
|
parentUuid,
|
|
containerUuid,
|
|
value: parsedDirectQuery,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
const lookupItem = state.lookupItem.find(itemLookup => {
|
|
return itemLookup.parsedDirectQuery === parsedDirectQuery &&
|
|
itemLookup.tableName === tableName &&
|
|
itemLookup.roleUuid === getCurrentRole() &&
|
|
itemLookup.clientId === rootGetters.getContextClientId &&
|
|
itemLookup.value === value
|
|
})
|
|
if (lookupItem) {
|
|
return lookupItem.option
|
|
}
|
|
return undefined
|
|
},
|
|
getLookupList: (state, getters, rootState, rootGetters) => ({
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
query
|
|
}) => {
|
|
let parsedQuery = query
|
|
if (parsedQuery && parsedQuery.includes('@')) {
|
|
parsedQuery = parseContext({
|
|
parentUuid,
|
|
containerUuid,
|
|
value: parsedQuery,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
const lookupList = state.lookupList.find(itemLookup => {
|
|
return itemLookup.parsedQuery === parsedQuery &&
|
|
itemLookup.tableName === tableName &&
|
|
itemLookup.roleUuid === getCurrentRole() &&
|
|
itemLookup.clientId === rootGetters.getContextClientId
|
|
})
|
|
if (lookupList) {
|
|
const resultLookup = lookupList.list.filter(lookup => {
|
|
if (lookup.key !== undefined) {
|
|
return lookup
|
|
}
|
|
})
|
|
return resultLookup
|
|
}
|
|
return []
|
|
},
|
|
/**
|
|
* Get all lookups, item and list joined
|
|
*/
|
|
getLookupAll: (state, getters) => ({
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
query,
|
|
directQuery,
|
|
value
|
|
}) => {
|
|
const item = getters.getLookupItem({
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
directQuery,
|
|
value
|
|
})
|
|
const list = getters.getLookupList({
|
|
parentUuid,
|
|
containerUuid,
|
|
tableName,
|
|
query
|
|
})
|
|
const allList = list
|
|
if (item && !list.find(itemLookup => itemLookup.key === item.key)) {
|
|
allList.push(item)
|
|
}
|
|
return allList
|
|
}
|
|
}
|
|
}
|
|
|
|
export default lookup
|