diff --git a/public/manifest.webapp b/public/manifest.webapp
index 260ce77..a2d4063 100644
--- a/public/manifest.webapp
+++ b/public/manifest.webapp
@@ -8,7 +8,7 @@
},
"appType": "APP",
"name": "Data Import Wizard",
- "version": "1.0.6",
+ "version": "1.0.7",
"description": "Data Importer Wizard",
"icons": {
"48": "favicon.ico"
diff --git a/src/components/schedule.js b/src/components/schedule.js
index ee1be57..422ba40 100644
--- a/src/components/schedule.js
+++ b/src/components/schedule.js
@@ -146,6 +146,7 @@ class Schedule extends React.Component {
>
} label="Every Five Seconds" />
} label="Every Minute" />
+ } label="Every Five Minutes" />
} label="Hourly" />
} label="Daily" />
} label="Weekly" />
diff --git a/src/index.js b/src/index.js
index 31b29cd..739c9ef 100644
--- a/src/index.js
+++ b/src/index.js
@@ -10,13 +10,13 @@ import { Provider } from "mobx-react";
const config = {};
if (process.env.NODE_ENV === 'development') {
- // config.baseUrl = `http://localhost:8080/api`;
+ config.baseUrl = `http://localhost:8080/api`;
// config.baseUrl = 'https://play.dhis2.org/2.30/api'
// config.baseUrl = 'https://ds.dev.hispuganda.org/api'
// config.baseUrl = 'https://ds.dev.hispuganda.org/api';
- config.baseUrl = 'https://programs.psiug.org/psi/api'
- // config.headers = { Authorization: 'Basic YWRtaW46ZGlzdHJpY3Q=' }; // admin
- config.headers = { Authorization: 'Basic SGlzcDpBcGlAMjAxOSE=' };// dev pace
+ // config.baseUrl = 'https://programs.psiug.org/psi/api'
+ config.headers = { Authorization: 'Basic YWRtaW46ZGlzdHJpY3Q=' }; // admin
+ // config.headers = { Authorization: 'Basic SGlzcDpBcGlAMjAxOSE=' };// dev pace
// config.baseUrl = `http://dhis2-staging.kuunika.org:8087/api`;
// config.headers = { Authorization: 'Basic bWJvbmdlbmljaGl6b25kYTpBYmlreWwyMkA=' };
// config.headers = { Authorization: 'Basic c3RlcGhlbjpIaXNwQDIwMTk=' };
diff --git a/src/stores/Program.js b/src/stores/Program.js
index af83bd9..219b83d 100644
--- a/src/stores/Program.js
+++ b/src/stores/Program.js
@@ -566,16 +566,9 @@ class Program {
@action
updateDHISEvents = (eventsUpdate) => {
const api = this.d2.Api.getApi();
- const events = eventsUpdate.map(event => {
- return event.dataValues.map(dataValue => {
- const { eventDate, ...others } = event;
- return { event: { ...others, dataValues: [dataValue] }, dataElement: dataValue.dataElement };
- });
+ return eventsUpdate.map(event => {
+ return api.update('events/' + event.event, event, {})
});
-
- return _.flatten(events).map(ev => {
- return api.update('events/' + ev.event.event + '/' + ev.dataElement, ev.event, {})
- })
};
@action setResponses = val => {
@@ -673,17 +666,18 @@ class Program {
}
if (eventsUpdate && eventsUpdate.length > 0) {
- const total = newEvents.length;
+ const total = eventsUpdate.length;
let current = 0;
this.setMessage(`Updating events ${current}/${total}`);
const chunkedEvents = _.chunk(eventsUpdate, 250);
- for (const events of chunkedEvents) {
- current = current + events.length;
- this.setMessage(`Updating events ${current}/${total}`);
- const eventsResults = await Promise.all(this.updateDHISEvents(events));
- this.setResponses(eventsResults);
- }
- this.setMessage('Finished updating events');
+ console.log(JSON.stringify(chunkedEvents, null, 2));
+ // for (const events of chunkedEvents) {
+ // current = current + events.length;
+ // this.setMessage(`Updating events ${current}/${total}`);
+ // const eventsResults = await Promise.all(this.updateDHISEvents(events));
+ // this.setResponses(eventsResults);
+ // }
+ // this.setMessage('Finished updating events');
}
this.setPulledData(null);
diff --git a/src/utils/utils.js b/src/utils/utils.js
index cd3bb2a..7f002ee 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -375,13 +375,11 @@ export const programUniqueAttribute = (program) => {
return null;
};
-
-
export const validText = (dataType, value) => {
switch (dataType) {
case 'TEXT':
case 'LONG_TEXT':
- return value !== null && value !== undefined && value.toString() !== '';
+ return value !== null && value !== undefined;
case 'NUMBER':
return !isNaN(value);
case 'EMAIL':
@@ -1133,14 +1131,17 @@ export const searchSavedEvent = (programStages, event, eventsData) => {
if (ev2 && !many1) {
const differingElements = _.differenceWith(event['dataValues'], ev2['dataValues'], (a, b) => {
return a.dataElement === b.dataElement && a.value + '' === b.value + '';
+ }).filter(v => {
+ return v.value !== 'null';
});
if (differingElements.length > 0 && updateEvents) {
return {
...ev2,
update: true,
+ eventDate: moment(ev2['eventDate']).format('YYYY-MM-DD'),
duplicates: false,
- dataValues: differingElements
+ dataValues: _.unionBy(ev2['dataValues'].filter(e => e.value !== ''), event['dataValues'], 'dataElement')
};
}
return null;
@@ -1161,14 +1162,17 @@ export const searchSavedEvent = (programStages, event, eventsData) => {
if (ev1 && !many1) {
const differingElements = _.differenceWith(event['dataValues'], ev1['dataValues'], (a, b) => {
return a.dataElement === b.dataElement && a.value + '' === b.value + '';
+ }).filter(v => {
+ return v.value !== 'null';
});
if (differingElements.length > 0) {
return {
...ev1,
update: true,
+ eventDate: moment(ev1['eventDate']).format('YYYY-MM-DD'),
duplicates: false,
- dataValues: differingElements
+ dataValues: _.unionBy(ev1['dataValues'].filter(e => e.value !== ''), event['dataValues'], 'dataElement')
};
}
return null;
@@ -1188,15 +1192,20 @@ export const searchSavedEvent = (programStages, event, eventsData) => {
const { event: ev2, many: many1 } = currentEvent;
if (ev2 && !many1) {
const differingElements = _.differenceWith(event['dataValues'], ev2['dataValues'], (a, b) => {
- return a.dataElement === b.dataElement && a.value + '' === b.value + '';
+ return a.dataElement === b.dataElement && a.value && b.value && a.value + '' === b.value + '';
+ }).filter(v => {
+ return v.value !== 'null';
});
if (differingElements.length > 0) {
return {
...ev2,
+ eventDate: moment(ev2['eventDate']).format('YYYY-MM-DD'),
update: true,
duplicates: false,
- dataValues: differingElements
+ dataValues: _.unionWith(ev2['dataValues'].filter(e => e.value !== ''), event['dataValues'], (a, b) => {
+ return a.dataElement === b.dataElement;
+ })
};
}
return null;
@@ -1264,17 +1273,19 @@ export const processEvents = (program, data, eventsData) => {
if (eventDate && mapped.length > 0) {
const dataValues = mapped.map(e => {
- const value = d[e.column.value];
+ let value = d[e.column.value];
const type = e.dataElement.valueType;
+ if (type === 'TEXT') {
+ value = String(value).trim();
+ }
const optionsSet = e.dataElement.optionSet;
const validatedValue = validateValue(type, value, optionsSet);
-
if (value !== '' && validatedValue !== null) {
return {
dataElement: e.dataElement.id,
value: validatedValue
}
- } else if (value !== undefined && value !== null) {
+ } else if (value !== undefined && value !== null && value !== '') {
conflicts = [...conflicts, {
error: optionsSet === null ? 'Invalid value ' + value + ' for value type ' + type : 'Invalid value: ' + value + ', expected: ' + _.map(optionsSet.options, o => {
return o.code