nightscout
Version:
Nightscout acts as a web-based CGM (Continuous Glucose Monitor) to allow multiple caregivers to remotely view a patients glucose data in realtime.
171 lines (148 loc) • 6.67 kB
JavaScript
;
var futureitems = {
name: 'futureitems'
, label: 'Remove future items from mongo database'
, pluginType: 'admin'
};
function init () {
return futureitems;
}
module.exports = init;
futureitems.actions = [
{
name: 'Find and remove treatments in the future'
, description: 'This task find and remove treatments in the future.'
, buttonLabel: 'Remove treatments in the future'
}
, {
name: 'Find and remove entries in the future'
, description: 'This task find and remove CGM data in the future created by uploader with wrong date/time.'
, buttonLabel: 'Remove entries in the future'
}
];
futureitems.actions[0].init = function init (client, callback) {
var translate = client.translate;
var $status = $('#admin_' + futureitems.name + '_0_status');
function valueOrEmpty (value) {
return value ? value : '';
}
function showOneTreatment (tr, table) {
table.append($('<tr>').css('background-color', '#0f0f0f')
.append($('<td>').attr('width', '20%').append(new Date(tr.created_at).toLocaleString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, '$1$3')))
.append($('<td>').attr('width', '20%').append(tr.eventType ? translate(client.careportal.resolveEventName(tr.eventType)) : ''))
.append($('<td>').attr('width', '10%').attr('align', 'center').append(tr.glucose ? tr.glucose + ' (' + translate(tr.glucoseType) + ')' : ''))
.append($('<td>').attr('width', '10%').attr('align', 'center').append(valueOrEmpty(tr.insulin)))
.append($('<td>').attr('width', '10%').attr('align', 'center').append(valueOrEmpty(tr.carbs)))
.append($('<td>').attr('width', '10%').append(valueOrEmpty(tr.enteredBy)))
.append($('<td>').attr('width', '20%').append(valueOrEmpty(tr.notes)))
);
}
function showTreatments (treatments, table) {
table.append($('<tr>').css('background', '#040404')
.append($('<th>').css('width', '80px').attr('align', 'left').append(translate('Time')))
.append($('<th>').css('width', '150px').attr('align', 'left').append(translate('Event Type')))
.append($('<th>').css('width', '150px').attr('align', 'left').append(translate('Blood Glucose')))
.append($('<th>').css('width', '50px').attr('align', 'left').append(translate('Insulin')))
.append($('<th>').css('width', '50px').attr('align', 'left').append(translate('Carbs')))
.append($('<th>').css('width', '150px').attr('align', 'left').append(translate('Entered By')))
.append($('<th>').css('width', '300px').attr('align', 'left').append(translate('Notes')))
);
for (var t = 0; t < treatments.length; t++) {
showOneTreatment(treatments[t], table);
}
}
$status.hide().text(translate('Loading database ...')).fadeIn('slow');
var nowiso = new Date().toISOString();
$.ajax('/api/v1/treatments.json?&find[created_at][$gte]=' + nowiso, {
headers: client.headers()
, success: function(records) {
futureitems.treatmentrecords = records;
$status.hide().text(translate('Database contains %1 future records', { params: [records.length] })).fadeIn('slow');
var table = $('<table>').css('margin-top', '10px');
$('#admin_' + futureitems.name + '_0_html').append(table);
showTreatments(records, table);
futureitems.actions[0].confirmText = translate('Remove %1 selected records?', { params: [records.length] });
}
, error: function() {
$status.hide().text(translate('Error loading database')).fadeIn('slow');
futureitems.treatmentrecords = [];
}
}).done(function() { if (callback) { callback(); } });
};
futureitems.actions[0].code = function deleteRecords (client, callback) {
var translate = client.translate;
var $status = $('#admin_' + futureitems.name + '_0_status');
if (!client.hashauth.isAuthenticated()) {
alert(translate('Your device is not authenticated yet'));
if (callback) {
callback();
}
return;
}
function deleteRecordById (_id) {
$.ajax({
method: 'DELETE'
, url: '/api/v1/treatments/' + _id
, headers: client.headers()
}).done(function success () {
$status.text(translate('Record %1 removed ...', { params: [_id] }));
}).fail(function fail () {
$status.text(translate('Error removing record %1', { params: [_id] }));
});
}
$status.hide().text(translate('Deleting records ...')).fadeIn('slow');
for (var i = 0; i < futureitems.treatmentrecords.length; i++) {
deleteRecordById(futureitems.treatmentrecords[i]._id);
}
$('#admin_' + futureitems.name + '_0_html').html('');
if (callback) {
callback();
}
};
futureitems.actions[1].init = function init (client, callback) {
var translate = client.translate;
var $status = $('#admin_' + futureitems.name + '_1_status');
$status.hide().text(translate('Loading database ...')).fadeIn('slow');
var now = new Date().getTime();
$.ajax('/api/v1/entries.json?&find[date][$gte]=' + now + '&count=288', {
headers: client.headers()
, success: function(records) {
futureitems.entriesrecords = records;
$status.hide().text(translate('Database contains %1 future records', { params: [records.length] })).fadeIn('slow');
futureitems.actions[1].confirmText = translate('Remove %1 selected records?', { params: [records.length] });
}
, error: function() {
$status.hide().text(translate('Error loading database')).fadeIn('slow');
futureitems.entriesrecords = [];
}
}).done(function() { if (callback) { callback(); } });
};
futureitems.actions[1].code = function deleteRecords (client, callback) {
var translate = client.translate;
var $status = $('#admin_' + futureitems.name + '_1_status');
if (!client.hashauth.isAuthenticated()) {
alert(translate('Your device is not authenticated yet'));
if (callback) {
callback();
}
return;
}
function deteleteRecordById (_id) {
$.ajax({
method: 'DELETE'
, url: '/api/v1/entries/' + _id
, headers: client.headers()
}).done(function success () {
$status.text(translate('Record %1 removed ...', { params: [_id] }));
}).fail(function fail () {
$status.text(translate('Error removing record %1', { params: [_id] }));
});
}
$status.hide().text(translate('Deleting records ...')).fadeIn('slow');
for (var i = 0; i < futureitems.entriesrecords.length; i++) {
deteleteRecordById(futureitems.entriesrecords[i]._id);
}
if (callback) {
callback();
}
};