diff --git a/src/api/ADempiere/private-access.js b/src/api/ADempiere/private-access.js index c5705d15..4ff4206e 100644 --- a/src/api/ADempiere/private-access.js +++ b/src/api/ADempiere/private-access.js @@ -64,3 +64,53 @@ export function requestUnlockPrivateAccess({ return convertPrivateAccess(responsePrivateAccess) }) } + +/** + * List Rol Access Record + * @param {string} tableName + * @param {number} recordId + * @param {string} recordUuid + * @param {string} sessionUuid + */ +export function getAccessList({ + tableName, + recordId, + recordUuid, + sessionUuid +}) { + return requestRest({ + url: '/ui/update-access-record', + params: { + table_name: tableName, + id: recordId, + uuid: recordUuid, + token: sessionUuid + } + }) + .then(evaluateResponse) +} + +/** + * Update Access Record + * @param {string} tableName + * @param {number} recordId + * @param {string} recordUuid + * @param {array} listRol + */ +export function updateAccessRecord({ + tableName, + recordId, + recordUuid, + listRecord +}) { + return requestRest({ + url: '/ui/update-access-record', + params: { + table_name: tableName, + id: recordId, + uuid: recordUuid, + list_rol: listRecord + } + }) + .then(evaluateResponse) +} diff --git a/src/components/ADempiere/ContextMenu/contextMenuMixin.js b/src/components/ADempiere/ContextMenu/contextMenuMixin.js index b6acf5ac..c7886186 100644 --- a/src/components/ADempiere/ContextMenu/contextMenuMixin.js +++ b/src/components/ADempiere/ContextMenu/contextMenuMixin.js @@ -214,6 +214,20 @@ export default { return current.tableName } return '' + }, + isLockRecord() { + return this.$store.getters['user/getRole'].isPersonalLock + }, + recordAccess() { + return { + action: 'recordAccess', + disabled: false, + hidden: false, + isSortTab: true, + name: this.$t('data.recordAccess.actions'), + type: 'dataAction', + tableName: this.tableNameCurrentTab + } } }, watch: { @@ -377,14 +391,14 @@ export default { // TODO: Add store attribute to avoid making repeated requests let isChangePrivateAccess = true if (this.isReferecesContent) { - isChangePrivateAccess = false - if (!this.isEmptyValue(this.$route.params.tableName) || (!this.isEmptyValue(this.getCurrentRecord) && !this.isEmptyValue(this.tableNameCurrentTab))) { + if ((!this.isEmptyValue(this.getCurrentRecord) && !this.isEmptyValue(this.tableNameCurrentTab))) { this.$store.dispatch('getPrivateAccessFromServer', { - tableName: this.$route.params.tableName, + tableName: this.tableNameCurrentTab, recordId: this.getCurrentRecord[this.tableNameCurrentTab + '_ID'], recordUuid: this.$route.query.action }) .then(privateAccessResponse => { + isChangePrivateAccess = false this.validatePrivateAccess(privateAccessResponse) }) } @@ -397,6 +411,14 @@ export default { }) this.$store.dispatch('setOrder', processAction) } + if (this.panelType === 'window' && this.isEmptyValue(this.actions.find(element => element.action === 'recordAccess'))) { + this.$store.dispatch('addAttribute', { + tableName: this.tableNameCurrentTab, + recordId: this.getCurrentRecord[this.tableNameCurrentTab + '_ID'], + recordUuid: this.$route.query.action + }) + this.actions.push(this.recordAccess) + } if (this.actions && this.actions.length) { this.actions.forEach(itemAction => { @@ -413,11 +435,11 @@ export default { } if (this.$route.meta.type === 'window') { - if (isChangePrivateAccess) { + if (this.isLockRecord) { if (action === 'lockRecord') { - itemAction.hidden = false + itemAction.hidden = isChangePrivateAccess } else if (action === 'unlockRecord') { - itemAction.hidden = true + itemAction.hidden = !isChangePrivateAccess } } @@ -473,7 +495,12 @@ export default { ...this.getOldRouteOfWindow.query } }, () => {}) - } else { + } else if (action.action === 'recordAccess') { + this.$store.dispatch('setShowDialog', { + type: this.panelType, + action: action + }) + } else if (action.action !== 'undoModifyData') { if (action.action === 'setDefaultValues' && this.$route.query.action === 'create-new') { return } diff --git a/src/components/ADempiere/Dialog/index.vue b/src/components/ADempiere/Dialog/index.vue index aeeb8e1e..2ec4893b 100644 --- a/src/components/ADempiere/Dialog/index.vue +++ b/src/components/ADempiere/Dialog/index.vue @@ -13,6 +13,7 @@
+ - {{ $t('components.dialogCancelButton') }} - + /> - {{ $t('components.dialogConfirmButton') }} - + /> @@ -53,13 +53,17 @@ + + + diff --git a/src/lang/ADempiere/en.js b/src/lang/ADempiere/en.js index d6d07ccc..d35e7b2b 100644 --- a/src/lang/ADempiere/en.js +++ b/src/lang/ADempiere/en.js @@ -309,6 +309,13 @@ export default { deleteRecordError: 'Error deleting record', exportRecord: 'Export Record', lockRecord: 'Lock Record', + recordAccess: { + actions: 'Record Access', + hideRecord: 'Hide Record', + recordDisplay: 'Allow Record Display', + isReadonly: 'Reading Only', + isDependentEntities: 'Dependent Entities' + }, selectionRequired: 'You must select a record', undo: 'Undo', unlockRecord: 'Unlock Record' diff --git a/src/lang/ADempiere/es.js b/src/lang/ADempiere/es.js index ef79173a..3ca8bf00 100644 --- a/src/lang/ADempiere/es.js +++ b/src/lang/ADempiere/es.js @@ -284,6 +284,13 @@ export default { deleteRecordError: 'Error al eliminar el regitro', exportRecord: 'Exportar Registro', lockRecord: 'Bloquear Registro', + recordAccess: { + actions: 'Acceso a registros', + hideRecord: 'Ocultar Registro', + recordDisplay: 'Permitir Visualización del Registro', + isReadonly: 'Solo Lectura', + isDependentEntities: 'Entidades Dependientes' + }, selectionRequired: 'Debe seleccionar un registro', undo: 'Deshacer', unlockRecord: 'Desbloquear Registro' diff --git a/src/store/modules/ADempiere/accessRecord.js b/src/store/modules/ADempiere/accessRecord.js new file mode 100644 index 00000000..7409716c --- /dev/null +++ b/src/store/modules/ADempiere/accessRecord.js @@ -0,0 +1,38 @@ +const initStateUtils = { + listRecordAcces: [], + attribute: {} +} + +export default { + state: initStateUtils, + mutations: { + setListRecordAcces(state, listRecordAcces) { + state.listRecordAcces = listRecordAcces + }, + setAttribute(state, attribute) { + state.attribute = attribute + } + }, + actions: { + changeList({ commit, state }, listRecord) { + const recordAccess = { + recordId: state.attribute.recordId, + recordUuid: state.attribute.recordUuid, + tableName: state.attribute.tableName, + listRecord + } + commit('setListRecordAcces', recordAccess) + }, + addAttribute({ commit }, params) { + commit('setAttribute', params) + } + }, + getters: { + getListRecordAcces: (state) => { + return state.listRecordAcces + }, + getAttribute: (state) => { + return state.attribute + } + } +}