dish2
Version:
Dish2 is a command line tool for DHIS 2 Web API interaction
101 lines (80 loc) • 2.25 kB
JavaScript
const csvtojson = require('csvtojson');
const fs = require('fs');
const urllib = require('urllib');
const prettyjson = require('prettyjson');
const conf = require('./configManager.js');
const app = {
postUrl: conf.getConf().dhis.baseurl + '/api/events',
fixedProps: ['program', 'orgUnit', 'eventDate', 'status', 'storedBy', 'attributeCategoryOptions']
}
/**
* Post events.
*/
app.postEvents = function(events) {
var payload = app.getEvents(events),
url = app.postUrl;
if (conf.isArg('org-unit-id-scheme')) {
url = conf.setQueryParam(url, 'orgUnitIdScheme', conf.getArgs()['org-unit-id-scheme']);
}
if (conf.isArg('data-element-id-scheme')) {
url = conf.setQueryParam(url, 'orgUnitIdScheme', conf.getArgs()['data-element-id-scheme']);
}
if (conf.isArg('category-option-id-scheme')) {
url = conf.setQueryParam(url, 'categoryOptionIdScheme', conf.getArgs()['category-option-id-scheme']);
}
if (conf.isArg('id-scheme')) {
url = conf.setQueryParam(url, 'idScheme', conf.getArgs()['id-scheme']);
}
conf.postJson(url, payload);
}
/**
* Returns an array of events.
*/
app.getEvents = function(events) {
var payload = {
events: []
};
for (var i=0; i<events.length; i++) {
var evt = events[i];
var obj = {
coordinate: {},
dataValues: []
};
Object.keys(evt).forEach(function(key,inx) {
if (!evt[key] || evt[key] == '') {
return;
}
if (app.fixedProps.indexOf(key) != -1) {
obj[key] = evt[key];
}
else if ('longitude' == key) {
obj.coordinate.longitude = evt[key];
}
else if ('latitude' == key) {
obj.coordinate.latitude = evt[key];
}
else if (conf.isUid(key)) {
var dv = {
dataElement: key,
value: evt[key]
};
obj.dataValues.push(dv);
}
});
payload.events.push(obj);
}
return payload;
}
/**
* Runs command.
*/
app.run = function() {
if (!conf.isArg('file')) {
return console.log('Usage: post_events --file <name-of-input-csv-file>');
}
console.log('Using file: ' + conf.getArgs()['file']);
console.log('Parsing CSV file..');
conf.convertCsvToJson(app.postEvents);
}
app.run();