194 lines
5.3 KiB
JavaScript
194 lines
5.3 KiB
JavaScript
// ADempiere-Vue (Frontend) for ADempiere ERP & CRM Smart Business Solution
|
|
// Copyright (C) 2017-Present E.R.P. Consultores y Asociados, C.A.
|
|
// Contributor(s): Yamel Senih ysenih@erpya.com www.erpya.com
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
import { getRecordAccess, setRecordAccess } from '@/api/ADempiere/actions/record-access.js'
|
|
import { showMessage } from '@/utils/ADempiere/notification.js'
|
|
import language from '@/lang'
|
|
export default {
|
|
name: 'MixinRecordAccess',
|
|
props: {
|
|
parentUuid: {
|
|
type: String,
|
|
default: undefined
|
|
},
|
|
containerUuid: {
|
|
type: String,
|
|
default: undefined
|
|
},
|
|
order: {
|
|
type: String,
|
|
default: undefined
|
|
},
|
|
included: {
|
|
type: String,
|
|
default: undefined
|
|
},
|
|
keyColumn: {
|
|
type: String,
|
|
default: undefined
|
|
},
|
|
identifiersList: {
|
|
type: Array,
|
|
default: undefined
|
|
},
|
|
record: {
|
|
type: Object,
|
|
default: () => {}
|
|
},
|
|
tableName: {
|
|
type: String,
|
|
default: undefined
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
group: 'sequence',
|
|
isReadonly: false,
|
|
isDependentEntities: true,
|
|
recordAccess: {
|
|
recordUuid: '',
|
|
roles: []
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
excludedList: {
|
|
get() {
|
|
if (this.recordAccess.roles) {
|
|
return this.recordAccess.roles.filter(role => !role.isLocked)
|
|
} else {
|
|
return []
|
|
}
|
|
},
|
|
set(value) {
|
|
}
|
|
},
|
|
includedList: {
|
|
get() {
|
|
if (this.recordAccess.roles) {
|
|
return this.recordAccess.roles.filter(role => role.isLocked)
|
|
} else {
|
|
return []
|
|
}
|
|
},
|
|
set(value) {
|
|
}
|
|
},
|
|
getIdentifiersList() {
|
|
return this.identifiersList
|
|
.filter(item => item.componentPath !== 'FieldSelect')
|
|
}
|
|
},
|
|
created() {
|
|
getRecordAccess({
|
|
tableName: this.tableName,
|
|
recordId: this.record[this.tableName + '_ID'],
|
|
recordUuid: this.record.UUID
|
|
})
|
|
.then(access => {
|
|
this.recordAccess.tableName = access.tableName
|
|
this.recordAccess.recordId = access.recordId
|
|
this.recordAccess.recordUuid = access.recordUuid
|
|
access.availableRoles.forEach(role => {
|
|
this.recordAccess.roles.push({
|
|
...role,
|
|
isLocked: false
|
|
})
|
|
})
|
|
access.currentRoles.forEach(role => {
|
|
this.recordAccess.roles.find(availableRole => availableRole.roleId === role.roleId).isLocked = true
|
|
this.recordAccess.roles.find(availableRole => availableRole.roleId === role.roleId).isDependentEntities = role.isDependentEntities
|
|
this.recordAccess.roles.find(availableRole => availableRole.roleId === role.roleId).isReadOnly = role.isReadOnly
|
|
})
|
|
})
|
|
},
|
|
methods: {
|
|
handleChange(value) {
|
|
const action = Object.keys(value)[0] // get property
|
|
const element = value[action].element
|
|
const index = this.recordAccess.roles.findIndex(role => role.roleId === element.roleId)
|
|
switch (action) {
|
|
case 'added':
|
|
this.addItem({
|
|
index,
|
|
element
|
|
})
|
|
break
|
|
case 'removed':
|
|
this.deleteItem({
|
|
index,
|
|
element
|
|
})
|
|
break
|
|
}
|
|
},
|
|
/**
|
|
* @param {number} index: the index of the added element
|
|
* @param {object} element: the added element
|
|
*/
|
|
addItem({
|
|
index,
|
|
element
|
|
}) {
|
|
this.recordAccess.roles[index].isLocked = true
|
|
},
|
|
/**
|
|
* @param {number} index: the index of the element before remove
|
|
* @param {object} element: the removed element
|
|
*/
|
|
deleteItem({
|
|
index,
|
|
element
|
|
}) {
|
|
this.recordAccess.roles[index].isLocked = false
|
|
},
|
|
getOrder(arrayToSort, orderBy = this.order) {
|
|
return arrayToSort.sort((itemA, itemB) => {
|
|
return itemA[orderBy] - itemB[orderBy]
|
|
})
|
|
},
|
|
saveRecordAccess(recordAccesses) {
|
|
setRecordAccess({
|
|
tableName: this.tableName,
|
|
recordId: this.record[this.tableName + '_ID'],
|
|
recordUuid: this.record.UUID,
|
|
recordAccesses
|
|
})
|
|
.then(response => {
|
|
showMessage({
|
|
message: language.t('grid.recordAccess.accessGranted')
|
|
})
|
|
this.close()
|
|
})
|
|
.catch(error => {
|
|
showMessage({
|
|
message: error.message,
|
|
type: 'error'
|
|
})
|
|
console.warn(`setPreference error: ${error.message}.`)
|
|
})
|
|
},
|
|
close() {
|
|
this.$store.dispatch('setShowDialog', {
|
|
type: 'window',
|
|
action: undefined
|
|
})
|
|
this.$store.commit('setRecordAccess', false)
|
|
this.$store.commit('changeShowRigthPanel', false)
|
|
}
|
|
}
|
|
}
|