Skip to content

Commit 50b9541

Browse files
committed
Merge branch 'release/v2.0.7' into staging
2 parents a802361 + ecca421 commit 50b9541

10 files changed

Lines changed: 109 additions & 49 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "program_configuration",
33
"title": "Program Configuration",
44
"author": "KnowTechTure SL",
5-
"version": "2.0.6",
5+
"version": "2.0.7",
66
"description": "Tracker Programs management tool",
77
"license": "CC-BY-4.0",
88
"private": true,

src/components/PRG_Details/ProgramDetails.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const queryProgramSettings = {
5757
resource: 'programs',
5858
id: ({ programId }) => programId,
5959
params: {
60-
fields: ['lastUpdated', 'id', 'href', 'created', 'name', 'shortName', 'publicAccess', 'ignoreOverdueEvents', 'skipOffline', 'enrollmentDateLabel', 'onlyEnrollOnce', 'version', 'displayFormName', 'displayEnrollmentDateLabel', 'selectIncidentDatesInFuture', 'maxTeiCountToReturn', 'selectEnrollmentDatesInFuture', 'registration', 'openDaysAfterCoEndDate', 'favorite', 'useFirstStageDuringRegistration', 'displayName', 'completeEventsExpiryDays', 'displayShortName', 'externalAccess', 'withoutRegistration', 'minAttributesRequiredToSearch', 'displayFrontPageList', 'programType', 'accessLevel', 'displayIncidentDate', 'expiryDays', 'categoryCombo', 'sharing', 'access', 'trackedEntityType', 'createdBy', 'user', 'programIndicators', 'translations', 'userGroupAccesses', 'attributeValues', 'userRoles', 'userAccesses', 'favorites', 'programRuleVariables', 'programTrackedEntityAttributes', 'notificationTemplates', 'organisationUnits', 'programSections', 'programStages', 'style']
60+
fields: getProgramQuery(false)
6161
}
6262
},
6363
}
@@ -639,6 +639,7 @@ const ProgramDetails = () => {
639639
setSavedAndValidated={setSavedAndValidated}
640640
setValidationResults={setValidationResults}
641641
setErrorReports={setErrorReports}
642+
setExportToExcel={setExportToExcel}
642643
/>
643644
}
644645
</div>

src/components/PRG_Details/ValidateTracker.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ const ValidateTracker = (
1919
setImportResults,
2020
setSavedAndValidated,
2121
setSavingMetadata,
22-
setValidationResults
22+
setValidationResults,
23+
setExportToExcel
2324
}
2425
) => {
2526
const validationResults = {
@@ -161,6 +162,8 @@ const ValidateTracker = (
161162
setImportResults={setImportResults}
162163
setErrorReports={setErrorReports}
163164
saveType={'program'}
165+
fromImport={!!importResults}
166+
setExportToExcel={setExportToExcel}
164167
/>
165168
}
166169
</DialogActions>
@@ -172,6 +175,7 @@ ValidateTracker.propTypes = {
172175
importResults: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
173176
programMetadata: PropTypes.object,
174177
setErrorReports: PropTypes.func,
178+
setExportToExcel: PropTypes.func,
175179
setImportResults: PropTypes.func,
176180
setSavedAndValidated: PropTypes.func,
177181
setSavingMetadata: PropTypes.func,

src/components/PRG_List/ProgramItem.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,13 @@ const ProgramItem = ({
170170
<div>{program.programStages.length} Program Stages</div>
171171
<div
172172
style={{
173-
backgroundColor: typeTag[programType].color,
173+
backgroundColor: typeTag[programType]?.color || typeTag[(!program.withoutRegistration ? "Tracker" : "Event")].color,
174174
width: "85px",
175175
display: "flex",
176176
justifyContent: "center",
177177
}}
178178
>
179-
{typeTag[programType].text}
179+
{typeTag[programType]?.text || typeTag[(!program.withoutRegistration ? "Tracker" : "Event")].text}
180180
</div>
181181
</div>
182182
<div className="ml_item-cta">

src/components/PRG_List/ProgramList.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const query = {
5252
const paramsObject = {
5353
pageSize,
5454
page,
55-
fields: ["code", "id", "name", "shortName", "created", "lastUpdated", "href", "completeEventsExpiryDays", "description", "ignoreOverdueEvents", "skipOffline", "featureType", "minAttributesRequiredToSearch", "displayFrontPageList", "enrollmentDateLabel", "onlyEnrollOnce", "programType", "accessLevel", "sharing", "version", "maxTeiCountToReturn", "selectIncidentDatesInFuture", "incidentDateLabel", "expiryPeriodType", "displayIncidentDate", "selectEnrollmentDatesInFuture", "expiryDays", "useFirstStageDuringRegistration", "relatedProgram", "categoryCombo[id,name]", "trackedEntityType[id,name,trackedEntityTypeAttributes[trackedEntityAttribute[id]]]", "style", "programTrackedEntityAttributes[id,name,displayInList,sortOrder,mandatory,allowFutureDate,renderOptionAsRadio,searchable,valueType,trackedEntityAttribute[id,name],renderType]", "notificationTemplates", "translations", "organisationUnits", "attributeValues", "programSections[id,name,trackedEntityAttributes,sortOrder,program,renderType]","programStages[id, name, allowGenerateNextVisit, formType, generatedByEnrollmentDate, sortOrder, hideDueDate, enableUserAssignment, minDaysFromStart, openAfterEnrollment, repeatable, remindCompleted, displayGenerateEventBox, validationStrategy, autoGenerateEvent, blockEntryForm, program, sharing, programStageDataElements, translations, attributeValues, programStageSections[*]]", "access", "withoutRegistration"],
55+
fields: ["code", "id", "name", "shortName", "created", "lastUpdated", "href", "completeEventsExpiryDays", "description", "ignoreOverdueEvents", "skipOffline", "featureType", "minAttributesRequiredToSearch", "displayFrontPageList", "enrollmentDateLabel", "onlyEnrollOnce", "programType", "accessLevel", "sharing", "version", "maxTeiCountToReturn", "selectIncidentDatesInFuture", "incidentDateLabel", "expiryPeriodType", "displayIncidentDate", "selectEnrollmentDatesInFuture", "expiryDays", "useFirstStageDuringRegistration", "categoryCombo[id,name]", "trackedEntityType[id,name,trackedEntityTypeAttributes[trackedEntityAttribute[id]]]", "style", "programTrackedEntityAttributes[id,name,displayInList,sortOrder,mandatory,allowFutureDate,renderOptionAsRadio,searchable,valueType,trackedEntityAttribute[id,name],renderType]", "notificationTemplates", "translations", "organisationUnits", "attributeValues", "programSections[id,name,trackedEntityAttributes,sortOrder,program,renderType]","programStages[id, name, allowGenerateNextVisit, formType, generatedByEnrollmentDate, sortOrder, hideDueDate, enableUserAssignment, minDaysFromStart, openAfterEnrollment, repeatable, remindCompleted, displayGenerateEventBox, validationStrategy, autoGenerateEvent, blockEntryForm, program, sharing, programStageDataElements, translations, attributeValues, programStageSections[*]]", "access", "withoutRegistration"],
5656
filter: []
5757
}
5858

src/components/STG_Details/StageSections.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { DragDropContext, Droppable } from "react-beautiful-dnd";
2828
import { Link } from "react-router-dom";
2929
import { BUILD_VERSION, DATASTORE_H2_METADATA, FEEDBACK_ORDER, GENERATED_OBJECTS_NAMESPACE, H2_METADATA_VERSION, METADATA, NAMESPACE } from "../../configs/Constants.js";
3030
import { TEMPLATE_PROGRAM_TYPES } from "../../configs/TemplateConstants.js";
31-
import { DeepCopy, buildBasicFormStage, extractMetadataPermissions, mapIdArray, truncateString, versionGTE } from "../../utils/Utils.js";
31+
import { DeepCopy, buildBasicFormStage, extractMetadataPermissions, getProgramQuery, mapIdArray, truncateString, versionGTE } from "../../utils/Utils.js";
3232
import DataProcessor from "../Excel/DataProcessor.js";
3333
import Importer from "../Excel/Importer.js";
3434
import ErrorReports from "../UIElements/ErrorReports.js";
@@ -190,7 +190,7 @@ const queryProgramSettings = {
190190
resource: 'programs',
191191
id: ({ programId }) => programId,
192192
params: {
193-
fields: ['lastUpdated', 'id', 'href', 'created', 'name', 'shortName', 'publicAccess', 'ignoreOverdueEvents', 'skipOffline', 'enrollmentDateLabel', 'onlyEnrollOnce', 'version', 'displayFormName', 'displayEnrollmentDateLabel', 'selectIncidentDatesInFuture', 'maxTeiCountToReturn', 'selectEnrollmentDatesInFuture', 'registration', 'openDaysAfterCoEndDate', 'favorite', 'useFirstStageDuringRegistration', 'displayName', 'completeEventsExpiryDays', 'displayShortName', 'externalAccess', 'withoutRegistration', 'minAttributesRequiredToSearch', 'displayFrontPageList', 'programType', 'accessLevel', 'displayIncidentDate', 'expiryDays', 'categoryCombo', 'sharing', 'access', 'trackedEntityType', 'createdBy', 'user', 'programIndicators', 'translations', 'userGroupAccesses', 'attributeValues', 'userRoles', 'userAccesses', 'favorites', 'programRuleVariables', 'programTrackedEntityAttributes', 'notificationTemplates', 'organisationUnits', 'programSections', 'programStages', 'style']
193+
fields: getProgramQuery(false)
194194
}
195195
},
196196
}
@@ -1434,6 +1434,7 @@ const StageSections = ({ programStage, hnqisMode, readOnly }) => {
14341434
programMetadata={programMetadata}
14351435
setErrorReports={setErrorReports}
14361436
stagesList={stagesList}
1437+
setExportToExcel={setExportToExcel}
14371438
/>
14381439
}
14391440
{showSectionManager &&

src/components/STG_Details/ValidateMetadata.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ const ValidateMetadata = (
2929
setValidationResults,
3030
programMetadata,
3131
setErrorReports,
32-
stagesList
32+
stagesList,
33+
setExportToExcel
3334
}
3435
) => {
3536
const validationResults = {};
@@ -212,6 +213,8 @@ const ValidateMetadata = (
212213
setErrorReports={setErrorReports}
213214
stagesList={stagesList}
214215
saveType={'stage'}
216+
fromImport={!!importResults}
217+
setExportToExcel={setExportToExcel}
215218
/>
216219
}
217220
</DialogActions>
@@ -231,6 +234,7 @@ ValidateMetadata.propTypes = {
231234
programStage: PropTypes.object,
232235
removedItems: PropTypes.oneOfType([PropTypes.object,PropTypes.array]),
233236
setErrorReports: PropTypes.func,
237+
setExportToExcel: PropTypes.func,
234238
setImportResults: PropTypes.func,
235239
setSavedAndValidated: PropTypes.func,
236240
setSavingMetadata: PropTypes.func,

src/components/UIElements/SaveMetadata.js

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useDataMutation, useDataQuery } from "@dhis2/app-service-data";
22
import { CircularLoader, NoticeBox, Tag } from "@dhis2/ui";
3+
import FileDownloadIcon from '@mui/icons-material/FileDownload';
34
import Button from '@mui/material/Button';
45
import DialogActions from '@mui/material/DialogActions';
56
import DialogContent from '@mui/material/DialogContent';
@@ -415,6 +416,7 @@ const SaveMetadata = (props) => {
415416
const [typeReports, setTypeReports] = useState({});
416417
const [programPayload, setProgramPayload] = useState();
417418
const [programPayloadBackup, setProgramPayloadBackup] = useState();
419+
const [importFlag, setImportFlag] = useState(false);
418420

419421
// Create Mutation
420422
const metadataDM = useDataMutation(metadataMutation, {
@@ -441,14 +443,15 @@ const SaveMetadata = (props) => {
441443
setErrorStatus(true);
442444
setTypeReports(parseErrorsSaveMetadata(response));
443445
setCompleted(true);
444-
props.setErrorReports(parseErrorsSaveMetadata(response))
446+
props.setErrorReports(parseErrorsSaveMetadata(response));
445447
};
446448

447449
useEffect(() => {
450+
setImportFlag(props.fromImport);
448451
getProgramPayload({ id: props.programId }).then(payload => {
449452
setProgramPayload(payload?.results)
450453
setProgramPayloadBackup(payload?.results)
451-
})
454+
});
452455
}, [])
453456

454457
useEffect(() => {
@@ -538,6 +541,12 @@ const SaveMetadata = (props) => {
538541
(
539542
<div>
540543
<p><strong>Process completed! {props.hnqisMode && '"Set up program" button is now enabled'}</strong></p>
544+
{importFlag &&
545+
<p style={{marginTop: '1em'}}>
546+
<strong>Please Note:</strong>
547+
As you imported Metadata from an Excel Template, make sure you download an updated Template before making more changes.
548+
</p>
549+
}
541550
{typeReports.length > 0 && typeReports.map(tr => {
542551
<div> {tr.klass} | <Tag>{"Created: " + tr.stats.created}</Tag>
543552
<Tag>{"Deleted :" + tr.stats.deleted}</Tag>
@@ -560,14 +569,29 @@ const SaveMetadata = (props) => {
560569
</DialogContent>
561570

562571
<DialogActions style={{ padding: '1em' }}>
563-
<Button variant='outlined' disabled={!completed} onClick={() => { props.setSavingMetadata(false); /* refetchProgramStage() */ }}> Done </Button>
572+
{importFlag &&
573+
<Button
574+
startIcon={<FileDownloadIcon />}
575+
variant='outlined'
576+
color='success'
577+
disabled={!completed}
578+
onClick={() => {
579+
props.setExportToExcel(true);
580+
props.setSavingMetadata(false);
581+
}}
582+
>
583+
Download Template and Close
584+
</Button>
585+
}
586+
<Button variant='outlined' disabled={!completed} onClick={() => { props.setSavingMetadata(false); }}> Done </Button>
564587
</DialogActions>
565588

566589
</CustomMUIDialog>)
567590
};
568591

569592
SaveMetadata.propTypes = {
570593
criticalSection: PropTypes.object,
594+
fromImport: PropTypes.bool,
571595
hnqisMode: PropTypes.bool,
572596
importResults: PropTypes.object,
573597
importedScores: PropTypes.object,
@@ -581,6 +605,7 @@ SaveMetadata.propTypes = {
581605
removedItems: PropTypes.array,
582606
saveType: PropTypes.string,
583607
setErrorReports: PropTypes.func,
608+
setExportToExcel: PropTypes.func,
584609
setImportResults: PropTypes.func,
585610
setSavedAndValidated: PropTypes.func,
586611
setSavingMetadata: PropTypes.func,

src/configs/Constants.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import TextIcon from '@mui/icons-material/TextFields';
2525
import TimelineIcon from '@mui/icons-material/Timeline';
2626
import React from 'react';
2727

28-
const BUILD_VERSION = "2.0.6";
29-
const BUILD_DATE = "Aug 9, 2024";
28+
const BUILD_VERSION = "2.0.7";
29+
const BUILD_DATE = "Sep 30, 2024";
3030
const MIN_VERSION = "2.36.x";
3131
const MAX_VERSION = "2.40.x";
3232

0 commit comments

Comments
 (0)