From b73f40795e8a18d6e8517392da928e23a87031fa Mon Sep 17 00:00:00 2001 From: Edwin Betancourt Date: Tue, 12 Nov 2024 23:35:57 -0400 Subject: [PATCH] fix: Report with `AD_Table_ID` and `Record_ID` context. (#2977) --- .../ADempiere/FieldDefinition/FieldButton.vue | 12 ++-- .../convenienceButtons/PrintProcess.vue | 51 +++++++++++++++- .../ADempiere/dictionary/process/getters.js | 3 +- .../ADempiere/dictionary/report/getters.js | 3 +- .../ADempiere/dictionary/window/actions.js | 58 ++++++++++++++++++- .../ADempiere/constants/systemColumns.js | 2 +- 6 files changed, 115 insertions(+), 14 deletions(-) diff --git a/src/components/ADempiere/FieldDefinition/FieldButton.vue b/src/components/ADempiere/FieldDefinition/FieldButton.vue index 5a1110c22d..175ee3e297 100644 --- a/src/components/ADempiere/FieldDefinition/FieldButton.vue +++ b/src/components/ADempiere/FieldDefinition/FieldButton.vue @@ -63,7 +63,7 @@ import fieldMixinDisplayColumn from '@/components/ADempiere/FieldDefinition/mixi import { TRUE_STRING, FALSE_STRING } from '@/utils/ADempiere/formatValue/booleanFormat' -import { COLUMNNAME_RECORD_ID } from '@/utils/ADempiere/constants/systemColumns' +import { COLUMNNAME_Record_ID } from '@/utils/ADempiere/constants/systemColumns' import { IDENTIFIER_COLUMN_SUFFIX } from '@/utils/ADempiere/dictionaryUtils' // Utils and Helpers Methods @@ -105,7 +105,7 @@ export default { computed: { isDisabledButton() { - return (this.metadata.readonly || this.isDisableAction) && !['Posted', COLUMNNAME_RECORD_ID].includes(this.metadata.columnName) + return (this.metadata.readonly || this.isDisableAction) && !['Posted', COLUMNNAME_Record_ID].includes(this.metadata.columnName) }, isDisableAction() { return this.actionAssociated.isEnabled && !this.actionAssociated.isEnabled() @@ -169,7 +169,7 @@ export default { return isShowAcct } } - } else if (this.metadata.columnName === COLUMNNAME_RECORD_ID) { + } else if (this.metadata.columnName === COLUMNNAME_Record_ID) { return { // is: 'svg-icon', // 'icon-class': 'zoom-in', @@ -327,7 +327,7 @@ export default { }, currentTableId() { - if (this.metadata.displayed && this.metadata.columnName === COLUMNNAME_RECORD_ID) { + if (this.metadata.displayed && this.metadata.columnName === COLUMNNAME_Record_ID) { const { containerUuid, inTable } = this.metadata // table records values if (inTable) { @@ -353,7 +353,7 @@ export default { watch: { contextAttributes(newValue, oldValue) { - if (this.metadata.columnName === COLUMNNAME_RECORD_ID && !isSameValues(newValue, oldValue)) { + if (this.metadata.columnName === COLUMNNAME_Record_ID && !isSameValues(newValue, oldValue)) { if (!isEmptyValue(newValue)) { this.setDefaultValue() } @@ -369,7 +369,7 @@ export default { }, beforeMount() { - if (this.metadata.displayed && this.metadata.columnName === COLUMNNAME_RECORD_ID) { + if (this.metadata.displayed && this.metadata.columnName === COLUMNNAME_Record_ID) { if (!this.emptyValue && typeof this.value === 'number') { if (isEmptyValue(this.displayedValue)) { // request lookup diff --git a/src/components/ADempiere/TabManager/convenienceButtons/PrintProcess.vue b/src/components/ADempiere/TabManager/convenienceButtons/PrintProcess.vue index 47d979fab8..d05de13a35 100644 --- a/src/components/ADempiere/TabManager/convenienceButtons/PrintProcess.vue +++ b/src/components/ADempiere/TabManager/convenienceButtons/PrintProcess.vue @@ -88,6 +88,9 @@ import language from '@/lang' import store from '@/store' // Constants +import { + COLUMNNAME_AD_Table_ID, COLUMNNAME_Record_ID +} from '@/utils/ADempiere/constants/systemColumns' import { FINANCIAL_REPORT_TABLE_NAME } from '@/utils/ADempiere/dictionary/report/financialReport.ts' @@ -95,13 +98,18 @@ import { // Utils and Helper Methods import { isEmptyValue } from '@/utils/ADempiere/valueUtils' import { showNotification } from '@/utils/ADempiere/notification.js' +import { getContextAttributes } from '@/utils/ADempiere/contextUtils/contextAttributes' +// Components and Mixins import DialogLegacy from '@/components/ADempiere/Report/Data/Dialog.vue' + export default defineComponent({ name: 'PrintProcess', + components: { DialogLegacy }, + props: { parentUuid: { type: [String, Number], @@ -132,9 +140,27 @@ export default defineComponent({ /** * Computed */ + const relatedColumsNames = computed(() => { + let relatedColumns = [] + const parentColumns = props.tabAttributes.fieldsList + .filter(fieldItem => { + return fieldItem.is_parent || fieldItem.is_key || fieldItem.is_mandatory + }) + .map(fieldItem => { + return fieldItem.columnName + }) + + if (!isEmptyValue(props.tabAttributes.parent_column_name)) { + relatedColumns = relatedColumns.push(props.tabAttributes.parent_column_name) + } + relatedColumns = relatedColumns.concat(parentColumns).sort() + return relatedColumns + }) const currentTableName = computed(() => { - if (isEmptyValue(props.tabAttributes.table) || isEmptyValue(props.tabAttributes.table.table_name)) return props.tabAttributes.table_name + if (isEmptyValue(props.tabAttributes.table) || isEmptyValue(props.tabAttributes.table.table_name)) { + return props.tabAttributes.table_name + } return props.tabAttributes.table.table_name }) const recordId = computed(() => { @@ -171,6 +197,26 @@ export default defineComponent({ }) function printProcess() { store.commit('setIsLoadingDialog', false) + + // set context values + const parentValues = getContextAttributes({ + parentUuid: props.parentUuid, + containerUuid: containerUuid, + contextColumnNames: relatedColumsNames.value + }) + parentValues.push({ + columnName: COLUMNNAME_AD_Table_ID, + value: props.tabAttributes.table.internal_id + }) + parentValues.push({ + columnName: COLUMNNAME_Record_ID, + value: recordId.value + }) + store.dispatch('updateValuesOfContainer', { + containerUuid: process.uuid, + attributes: parentValues + }) + if (!isEmptyValue(selectionsList) && !isEmptyValue(selectionsList.value) && selectionsList.value.length > 1) { store.commit('setViewDialog', true) } else { @@ -186,8 +232,9 @@ export default defineComponent({ isLoading.value = true store.dispatch('runReport', { containerUuid: process.uuid, - recordId: recordId.value, reportId: process.internal_id, + // + recordId: recordId.value, tableName: currentTableName.value }) .finally(() => { diff --git a/src/store/modules/ADempiere/dictionary/process/getters.js b/src/store/modules/ADempiere/dictionary/process/getters.js index 6ef9ceef37..aa0628ad0f 100644 --- a/src/store/modules/ADempiere/dictionary/process/getters.js +++ b/src/store/modules/ADempiere/dictionary/process/getters.js @@ -18,6 +18,7 @@ // Constants import { FIELDS_DATE, FIELDS_DECIMALS } from '@/utils/ADempiere/references.js' +import { COLUMNNAME_Record_ID } from '@/utils/ADempiere/constants/systemColumns' // Utils and Helper Methods import { isEmptyValue } from '@/utils/ADempiere/valueUtils' @@ -159,7 +160,7 @@ export default { type: 'date', value: value } - } else if (isDecimalField) { + } else if (isDecimalField && ![COLUMNNAME_Record_ID].includes(columnName)) { processParameters[columnName] = { type: 'decimal', value: value diff --git a/src/store/modules/ADempiere/dictionary/report/getters.js b/src/store/modules/ADempiere/dictionary/report/getters.js index 1813e8d93f..53a8ccdcc5 100644 --- a/src/store/modules/ADempiere/dictionary/report/getters.js +++ b/src/store/modules/ADempiere/dictionary/report/getters.js @@ -18,6 +18,7 @@ // Constants import { FIELDS_DATE, FIELDS_DECIMALS } from '@/utils/ADempiere/references.js' +import { COLUMNNAME_Record_ID } from '@/utils/ADempiere/constants/systemColumns' // Utils and Helper Methods import { isEmptyValue } from '@/utils/ADempiere/valueUtils.js' @@ -170,7 +171,7 @@ export default { type: 'date', value: value } - } else if (isDecimalField) { + } else if (isDecimalField && ![COLUMNNAME_Record_ID].includes(columnName)) { reportParameters[columnName] = { type: 'decimal', value: value diff --git a/src/store/modules/ADempiere/dictionary/window/actions.js b/src/store/modules/ADempiere/dictionary/window/actions.js index 6dbb1e5bde..13805a3d4d 100644 --- a/src/store/modules/ADempiere/dictionary/window/actions.js +++ b/src/store/modules/ADempiere/dictionary/window/actions.js @@ -24,7 +24,10 @@ import store from '@/store' import { requestWindowMetadata } from '@/api/ADempiere/dictionary/window.ts' // Constants -import { CLIENT, DOCUMENT_ACTION, DOCUMENT_STATUS } from '@/utils/ADempiere/constants/systemColumns' +import { + CLIENT, DOCUMENT_ACTION, DOCUMENT_STATUS, + COLUMNNAME_AD_Table_ID, COLUMNNAME_Record_ID +} from '@/utils/ADempiere/constants/systemColumns' import { DISPLAY_COLUMN_PREFIX, IS_ADVANCED_QUERY } from '@/utils/ADempiere/dictionaryUtils' import { ROW_ATTRIBUTES } from '@/utils/ADempiere/tableUtils' import { ACTION_None } from '@/utils/ADempiere/dictionary/workflow' @@ -176,10 +179,15 @@ export default { return } - const recordUuid = rootGetters.getUuidOfContainer(tabAssociatedUuid) - const storedTab = rootGetters.getStoredTab(windowUuid, tabAssociatedUuid) const { table_name } = storedTab + + const recordUuid = rootGetters.getUuidOfContainer(tabAssociatedUuid) + const recordId = rootGetters.getIdOfContainer({ + containerUuid: tabAssociatedUuid, + tableName: table_name + }) + const { code } = rootGetters.getStoredReport(process.uuid) if (code === FINANCIAL_REPORT_CODE) { dispatch('startReport', { @@ -194,6 +202,7 @@ export default { parentUuid: tabUuid, containerUuid: process.uuid, recordUuid, + recordId, tableName: table_name }) } @@ -205,12 +214,26 @@ export default { containerManager: containerManagerReport, doneMethod: doneMethodByReport, beforeOpen: ({ parentUuid: tabAssociatedUuid, containerUuid }) => { + const storedTab = rootGetters.getStoredTab(windowUuid, tabAssociatedUuid) + const recordId = rootGetters.getIdOfContainer({ + containerUuid: tabAssociatedUuid, + tableName: storedTab.table_name + }) + // set context values const parentValues = getContextAttributes({ parentUuid: windowUuid, containerUuid: tabAssociatedUuid, contextColumnNames: relatedColumns }) + parentValues.push({ + columnName: COLUMNNAME_AD_Table_ID, + value: storedTab.table.internal_id + }) + parentValues.push({ + columnName: COLUMNNAME_Record_ID, + value: recordId + }) dispatch('updateValuesOfContainer', { containerUuid: process.uuid, @@ -344,12 +367,27 @@ export default { }) }, beforeOpen: ({ parentUuid: tabAssociatedUuid, containerUuid }) => { + const storedTab = rootGetters.getStoredTab(windowUuid, tabAssociatedUuid) + const recordId = rootGetters.getIdOfContainer({ + containerUuid: tabAssociatedUuid, + tableName: storedTab.table_name + }) + // set context values const parentValues = getContextAttributes({ parentUuid: windowUuid, containerUuid: tabAssociatedUuid, contextColumnNames: relatedColumns }) + parentValues.push({ + columnName: COLUMNNAME_AD_Table_ID, + value: storedTab.table.internal_id + }) + parentValues.push({ + columnName: COLUMNNAME_Record_ID, + value: recordId + }) + let documentAction = getContext({ parentUuid: windowUuid, containerUuid: tabAssociatedUuid, @@ -448,12 +486,26 @@ export default { }) }, beforeOpen: ({ parentUuid: tabAssociatedUuid, containerUuid }) => { + const storedTab = rootGetters.getStoredTab(windowUuid, tabAssociatedUuid) + const recordId = rootGetters.getIdOfContainer({ + containerUuid: tabAssociatedUuid, + tableName: storedTab.table_name + }) + // set context values const parentValues = getContextAttributes({ parentUuid: windowUuid, containerUuid: tabAssociatedUuid, contextColumnNames: relatedColumns }) + parentValues.push({ + columnName: COLUMNNAME_AD_Table_ID, + value: storedTab.table.internal_id + }) + parentValues.push({ + columnName: COLUMNNAME_Record_ID, + value: recordId + }) dispatch('updateValuesOfContainer', { containerUuid: process.uuid, diff --git a/src/utils/ADempiere/constants/systemColumns.js b/src/utils/ADempiere/constants/systemColumns.js index 128e546ee4..f6ebf0a285 100644 --- a/src/utils/ADempiere/constants/systemColumns.js +++ b/src/utils/ADempiere/constants/systemColumns.js @@ -36,7 +36,7 @@ export const COLUMNNAME_AD_Table_ID = 'AD_Table_ID' * @deprecated */ export const RECORD_ID = 'Record_ID' -export const COLUMNNAME_RECORD_ID = 'Record_ID' +export const COLUMNNAME_Record_ID = 'Record_ID' export const COUNTRY = 'C_Country_ID'