UNPKG

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