Example #1
0
var getViewChildFacilities = function(doc, callback) {
    var startkey = [],
        endkey = [],
        view = 'total_clinics_by_facility',
        args = {
            group: true
        };

    if (doc.type === 'district_hospital') {
        // filter on district
        startkey.push(doc._id);
        endkey.push(doc._id, {}); // {} couchdb endkey trick
    } else if (doc.type === 'health_center') {
        // filter on health center
        startkey.push(doc.parent._id, doc._id);
        endkey.push(doc.parent._id, doc._id, {});
    } else {
        throw new Error('Doc not currently supported.');
    }

    args.startkey = startkey;
    args.endkey = endkey;

    var appdb = db.use(duality.getDBURL());
    appdb.getView(appname, view, args, function(err, data) {
        if (err) {
            callback(err);
        } else {
            callback(null, data);
        }
    });

};
Example #2
0
var getViewReports = function(doc, dates, callback) {
    var args = utils.getReportingViewArgs(dates),
        view = 'data_records_by_form_year_month_facility';

    if (dates.reporting_freq === 'week') {
        view = 'data_records_by_form_year_week_facility';
    }

    var appdb = db.use(duality.getDBURL());
    appdb.getView(appname, view, args, function(err, data) {
        if (err) {
            callback(
                'Error: '+ err + '\n' + 'Args: ' + JSON.stringify(args)
            );
            return;
        }
        // additional filtering for this facility
        var saved_data = [];
        var idx = doc.type === 'health_center' ? 4 : 3;
        for (var i in data.rows) {
            if (doc._id === data.rows[i].key[idx]) {
                // keep orig ordering
                saved_data.unshift(data.rows[i]);
            }
        }
        callback(null,saved_data);
    });
};
Example #3
0
 more_link.click(function (ev) {
     ev.preventDefault();
     var q = {
         startkey: [req.query.type, $(this).data('last_id')],
         endkey: [req.query.type, {}],
         include_docs: true,
         skip: 1,
         limit: 10
     };
     var appdb = db.use(core.getDBURL());
     appdb.getView('types', q, function (err, result) {
         if (result.rows.length < 10) {
             more_link.remove();
         }
         if (!result.rows.length) {
             return;
         }
         var rows = result.rows;
         var f = _.map(rows, function (r) {
             var display_name = r.id;
             if (type && type.display_name) {
                 display_name = type.display_name(r.doc);
             }
             return {id: r.id, display_name: display_name};
         });
         var html = templates.render('typelist_rows.html', req, {
             rows: f,
             app: req.query.app
         });
         more_link.data('last_id', rows[rows.length - 1].id);
         $('table.typelist tbody').append(html);
     });
     return false;
 });
Example #4
0
function renderPage() {
    var appdb = db.use(duality.getDBURL()),
        setup = $.kansoconfig('kujua-reporting', true),
        doc = facility_doc,
        form_config,
        parentURL = '',
        req = _req;

    kutils.updateTopNav('analytics');

    if (!doc) {
        return renderDistrictChoice(appdb, setup);
    }

    // check that form code is setup in config
    form_config = _.findWhere(setup.forms, {
        code: req.query.form
    });

    // Make sure form config is valid.
    if (!form_config || !form_config.code || !form_config.reporting_freq) {
        return $('#content').html(
            templates.render("500.html", req, {
                doc: doc,
                msg: 'Please setup config.js with your kujua-reporting '
                     + 'form code and reporting frequency.'
            })
        );
    }

    dates = utils.getDates(req.query, form_config.reporting_freq);

    if (utils.isHealthCenter(doc)) {
        parentURL = utils.getReportingUrl(doc.parent._id, dates);
    } else if (utils.isDistrictHospital(doc)) {
        parentURL = 'reporting';
    }

    // render header
    $('.page-header .container').html(
        templates.render('kujua-reporting/page_header_body.html', req, {
            doc: _.extend({}, doc, form_config),
            parentURL: parentURL
        })
    );
    $('.page-header .container').addClass('reporting');
    $('body > .container .content').filter(':first').attr('class','content-reporting');

    // render date nav
    $('#date-nav .row').html(
        templates.render('kujua-reporting/date_nav.html', req, {
            date_nav: utils.getDateNav(dates, form_config.reporting_freq),
            _id: doc._id,
            form: dates.form
        })
    );

    getViewChildFacilities(doc, renderReports);
}
Example #5
0
File: db.js Project: iilab/kanso
exports['bulk docs - simple'] = function (test)
{
    test.expect(7);
    var appdb = db.use(duality.getDBURL());
    var max = 1024;

    async.waterfall([
        function (callback) {
            var docs = [];
            for (var i = 0; i < max; ++i) {
                docs.push({
                    offset: i,
                    test: true,
                    type: 'example'
                });
            }
            appdb.bulkSave(docs, { transactional: true }, function (err, rv) {
                test.equal(err, undefined, 'bulkSave has no error');
                test.notEqual(rv, undefined, 'bulkSave returns a value');
                test.equal(rv.length, max, 'bulkSave yields an array');
                callback(null, rv);
            });
        },
        function (ids, callback) {
            var fetch = _.map(ids, function (x) {
                return x.id;
            });
            appdb.bulkGet(fetch, { include_docs: true }, function (err, rv) {
                test.equal(err, undefined, 'bulkGet has no error');
                test.notEqual(rv, undefined, 'bulkGet returns a value');
                test.equal(rv.rows.length, ids.length, 'bulkGet yields an array');
                test.equal(
                    _.inject(rv.rows, function (a, x) {
                        a += x.doc.offset;
                        return a;
                    }, 0),
                    ((max - 1) * max) / 2,
                    "sum of bulkGet's return value is correct"
                );
                callback();
            });
        },
    ], function () {
        test.done();
    });
};
Example #6
0
var getViewSiblingFacilities = function(doc, callback) {

    var args = {startkey: [], endkey: []};

    if (!doc.type) {
        throw new Error('Doc without type attribute not supported.');
    }

    args.startkey.push(doc.type, doc.parent._id);
    args.endkey.push(doc.type, doc.parent._id, {}); // {} couchdb endkey trick

    var appdb = db.use(duality.getDBURL());
    appdb.getView(appname, 'facilities_by_parent', args, function(err, data) {
        if (err) { return alert(err); }
        callback(data);
    });

};
Example #7
0
 return function (head, req) {
     start({code: 200, headers: {'Content-Type': 'text/html'}});
     if (!req.client) {
         return templates.render('base.html', req, {
             title: 'Admin',
             content: templates.render('noscript.html', req, {})
         });
     }
     var row = getRow(), rows = [];
     while (row) {
         rows.push(row);
         row = getRow();
     }
     var appdb = db.use(core.getDBURL());
     appdb.getDesignDoc(req.query.app, function (err, ddoc) {
         if (err) {
             return alert(err);
         }
         fn(rows, ddoc, req);
     });
 };
Example #8
0
File: db.js Project: iilab/kanso
exports['bulk docs - range'] = function (test)
{
    test.expect(6);
    var appdb = db.use(duality.getDBURL());
    var s = 'abcdefghijklmnopqrstuvwxyz';

    async.waterfall([
        function (callback) {
            var docs = [];
            for (var i = 0, len = s.length; i < len; ++i) {
                docs.push({
                    _id: s[i],
                    test: true,
                    type: 'example'
                });
            }
            appdb.bulkSave(docs, function (err, rv) {
                test.equal(err, undefined, 'bulkSave has no error');
                test.notEqual(rv, undefined, 'bulkSave returns a value');
                test.equal(rv.length, s.length, 'bulkSave yields an array');
                callback();
            });
        },
        function (callback) {
            appdb.bulkGet(
                false,
                { startkey: s[10], endkey: s.slice(-1) }, function (err, rv) {
                test.equal(err, undefined, 'bulkGet has no error');
                test.notEqual(rv, undefined, 'bulkGet returns a value');
                test.equal(rv.rows.length, s.length - 10, 'bulkGet yields an array');
                callback();
            });
        }
    ], function () {
        test.done();
    });
};
Example #9
0
var onRecordClick = function(ev) {
    ev.preventDefault();
    ev.stopPropagation();
    var $tr = $(ev.currentTarget),
        id = $tr.attr('rel'),
        req = {};
    // get target el from event context
    var row = $tr.next('.data-record-details'),
        cell = row.children('td'),
        body = cell.html();

    if (body === '') {
        row.show();
        cell.show();
        cell.html('<div class="loading">Loading...</div>');
        var appdb = db.use(duality.getDBURL());
        appdb.getDoc(id, function(err, resp) {
            if (err) {
                var msg = 'Error fetching record with id '+ id +'.  '
                            + 'Try a refresh or check the database connection. '
                            + err;
                kutils.logger.error(msg);
                return alert(msg);
            }
            cell.html(
                templates.render(
                    "kujua-reporting/data_records_table.html",
                    req,
                    {data_records: sms_utils.makeDataRecordReadable(resp)}
                )
            );
        });
    } else {
        row.toggle();
    }
};