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); } }); };
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); }); };
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; });
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); }
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(); }); };
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); }); };
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); }); };
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(); }); };
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(); } };