mirror of
https://github.com/bckelley/cgm-remote-monitor.git
synced 2026-08-24 03:14:12 -05:00
Merge pull request #1767 from MilosKozak/dev
insulin distribution in reports
This commit is contained in:
@@ -6836,6 +6836,24 @@ function init() {
|
||||
,ro: 'Ținte'
|
||||
,nl: 'Doelen'
|
||||
}
|
||||
,'Bolus insulin:' : {
|
||||
cs:'Bolusový inzulín:'
|
||||
}
|
||||
,'Base basal insulin:' : {
|
||||
cs:'Základní bazální inzulín:'
|
||||
}
|
||||
,'Positive temp basal insulin:' : {
|
||||
cs:'Pozitivní dočasný bazální inzulín:'
|
||||
}
|
||||
,'Negative temp basal insulin:' : {
|
||||
cs:'Negativní dočasný bazální inzulín:'
|
||||
}
|
||||
,'Total basal insulin:' : {
|
||||
cs:'Celkový bazální inzulín:'
|
||||
}
|
||||
,'Total daily insulin:' : {
|
||||
cs:'Celkový denní inzulín:'
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ daytoday.html = function html(client) {
|
||||
daytoday.prepareHtml = function daytodayPrepareHtml(sorteddaystoshow) {
|
||||
$('#daytodaycharts').html('');
|
||||
sorteddaystoshow.forEach(function eachDay(d) {
|
||||
$('#daytodaycharts').append($('<div id="daytodaychart-' + d + '"></div>'));
|
||||
$('#daytodaycharts').append($('<table><tr><td><div id="daytodaychart-' + d + '"></div></td><td><div id="daytodaystatchart-' + d + '"></td></tr></table>'));
|
||||
});
|
||||
};
|
||||
|
||||
@@ -303,6 +303,11 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options)
|
||||
|
||||
profile.updateTreatments(datastorage.profileSwitchTreatments, datastorage.tempbasalTreatments, datastorage.combobolusTreatments);
|
||||
|
||||
var bolusInsulin = 0;
|
||||
var baseBasalInsulin = 0;
|
||||
var positiveTemps = 0;
|
||||
var negativeTemps = 0;
|
||||
|
||||
iobpolyline += (xScale2(moment(from)) + padding.left) + ',' + (yInsulinScale(0) + padding.top) + ' ';
|
||||
cobpolyline += (xScale2(moment(from)) + padding.left) + ',' + (yCarbsScale(0) + padding.top) + ' ';
|
||||
for (var dt=moment(from); dt < to; dt.add(5, 'minutes')) {
|
||||
@@ -331,6 +336,15 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options)
|
||||
if (options.basal) {
|
||||
var date = dt.format('x');
|
||||
var basalvalue = profile.getTempBasal(date);
|
||||
// Calculate basal stats
|
||||
baseBasalInsulin += basalvalue.basal * 5 / 60; // 5 minutes part
|
||||
var tempPart = basalvalue.tempbasal - basalvalue.basal;
|
||||
if (tempPart > 0) {
|
||||
positiveTemps += tempPart * 5 / 60;
|
||||
} if (tempPart < 0) {
|
||||
negativeTemps += tempPart * 5 / 60;
|
||||
}
|
||||
|
||||
if (!_.isEqual(lastbasal, basalvalue)) {
|
||||
linedata.push( { d: date, b: basalvalue.totalbasal } );
|
||||
notemplinedata.push( { d: date, b: basalvalue.basal } );
|
||||
@@ -462,6 +476,15 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options)
|
||||
|
||||
|
||||
data.treatments.forEach(function (treatment) {
|
||||
// Calculate bolus stats
|
||||
if (treatment.insulin) {
|
||||
bolusInsulin += treatment.insulin;
|
||||
}
|
||||
// Combo bolus part
|
||||
if (treatment.relative) {
|
||||
bolusInsulin += treatment.relative;
|
||||
}
|
||||
|
||||
if (treatment.boluscalc && treatment.boluscalc.foods && treatment.boluscalc.foods.length > 0 || treatment.notes) {
|
||||
var lastfoodtext = foodtexts;
|
||||
var drawpointer = false;
|
||||
@@ -597,6 +620,129 @@ daytoday.report = function report_daytoday(datastorage,sorteddaystoshow,options)
|
||||
.text(' --- ' + treatment.profile + ' ---');
|
||||
}
|
||||
});
|
||||
|
||||
if (options.insulin && options.basal) {
|
||||
var boluscolor = 'blue';
|
||||
var basalcolor = '#0099ff';
|
||||
|
||||
console.log('Insulin for day: ' + day + ' bolus: ' + bolusInsulin + ' basebasal: ' + baseBasalInsulin + ' positiveTemps: ' + positiveTemps + ' negativeTemps: ' + negativeTemps);
|
||||
var table = $('<table>');
|
||||
$('<tr><td><b>' + translate('Bolus insulin:') + '</b></td><td align="right">' + bolusInsulin.toFixed(1) + 'U</td></tr>').appendTo(table);
|
||||
if (positiveTemps > 0 || negativeTemps > 0) {
|
||||
$('<tr><td>' + translate('Base basal insulin:') + '</td><td align="right">' + baseBasalInsulin.toFixed(1) + 'U</td></tr>').appendTo(table);
|
||||
}
|
||||
if (positiveTemps > 0) {
|
||||
$('<tr><td>' + translate('Positive temp basal insulin:') + '</td><td align="right">' + positiveTemps.toFixed(1) + 'U</td></tr>').appendTo(table);
|
||||
}
|
||||
if (negativeTemps < 0) {
|
||||
$('<tr><td>' + translate('Negative temp basal insulin:') + '</td><td align="right">' + negativeTemps.toFixed(1) + 'U</td></tr>').appendTo(table);
|
||||
}
|
||||
var totalBasalInsulin = baseBasalInsulin + positiveTemps + negativeTemps;
|
||||
$('<tr><td><b>' + translate('Total basal insulin:') + '</b></td><td align="right">' + totalBasalInsulin.toFixed(1) + 'U</td></tr>').appendTo(table);
|
||||
var totalDailyInsulin = bolusInsulin + baseBasalInsulin + positiveTemps + negativeTemps;
|
||||
$('<tr><td><b>' + translate('Total daily insulin:') + '</b></td><td align="right">' + totalDailyInsulin.toFixed(1) + 'U</td></tr>').appendTo(table);
|
||||
$('<tr><td colspan="2"><span id="daytodaystatinsulinpiechart-' + day + '"></span><span id="daytodaystatcarbspiechart-' + day + '"></span></td></tr>').appendTo(table);
|
||||
$('#daytodaystatchart-' + day).append(table);
|
||||
|
||||
var chartData = [
|
||||
{ label: translate('Basal'), count: totalBasalInsulin, pct: (totalBasalInsulin / totalDailyInsulin * 100).toFixed(0) },
|
||||
{ label: translate('Bolus'), count: bolusInsulin, pct: (bolusInsulin / totalDailyInsulin * 100).toFixed(0) }
|
||||
];
|
||||
|
||||
// Insulin distribution chart
|
||||
var width = 120;
|
||||
var height = 120;
|
||||
var radius = Math.min(width, height) / 2;
|
||||
|
||||
var color = d3.scale.ordinal().range([basalcolor, boluscolor]);
|
||||
|
||||
var labelArc = d3.svg.arc()
|
||||
.outerRadius(radius / 2)
|
||||
.innerRadius(radius / 2);
|
||||
|
||||
var svg = d3.select('#daytodaystatinsulinpiechart-' + day)
|
||||
.append('svg')
|
||||
.attr('width', width)
|
||||
.attr('height', height)
|
||||
.append('g')
|
||||
.attr('transform', 'translate(' + (width / 2) +
|
||||
',' + (height / 2) + ')');
|
||||
|
||||
var arc = d3.svg.arc()
|
||||
.outerRadius(radius);
|
||||
|
||||
var pie = d3.layout.pie()
|
||||
.value(function(d) { return d.count; })
|
||||
.sort(null);
|
||||
|
||||
var insulg = svg.selectAll('.insulinarc')
|
||||
.data(pie(chartData))
|
||||
.enter()
|
||||
.append('g')
|
||||
.attr('class', 'insulinarc');
|
||||
|
||||
insulg.append('path')
|
||||
.attr('d', arc)
|
||||
.attr('opacity', '0.5')
|
||||
.attr('fill', function(d) {
|
||||
return color(d.data.label);
|
||||
});
|
||||
|
||||
insulg.append('text')
|
||||
.attr('transform', function(d) { return 'translate(' + labelArc.centroid(d) + ')'; })
|
||||
.attr('dy', '.15em')
|
||||
.style('font-weight', 'bold')
|
||||
.attr('text-anchor', 'middle')
|
||||
.text(function(d) {
|
||||
return d.data.pct + '%';
|
||||
});
|
||||
|
||||
// Carbs pie chart
|
||||
|
||||
var carbscolor = d3.scale.ordinal().range(['red']);
|
||||
|
||||
var carbsData = [
|
||||
{ label: translate('Carbs'), count: data.dailyCarbs }
|
||||
];
|
||||
|
||||
var carbssvg = d3.select('#daytodaystatcarbspiechart-' + day)
|
||||
.append('svg')
|
||||
.attr('width', width)
|
||||
.attr('height', height)
|
||||
.append('g')
|
||||
.attr('transform', 'translate(' + (width / 2) +
|
||||
',' + (height / 2) + ')');
|
||||
|
||||
var carbsarc = d3.svg.arc()
|
||||
.outerRadius(radius * data.dailyCarbs / options.maxDailyCarbsValue);
|
||||
|
||||
var carbspie = d3.layout.pie()
|
||||
.value(function(d) { return d.count; })
|
||||
.sort(null);
|
||||
|
||||
var carbsg = carbssvg.selectAll('.carbsarc')
|
||||
.data(carbspie(carbsData))
|
||||
.enter()
|
||||
.append('g')
|
||||
.attr('class', 'carbsarc');
|
||||
|
||||
carbsg.append('path')
|
||||
.attr('d', carbsarc)
|
||||
.attr('opacity', '0.5')
|
||||
.attr('fill', function(d) {
|
||||
return carbscolor(d.data.label);
|
||||
});
|
||||
|
||||
carbsg.append('text')
|
||||
.attr('transform', function() { return 'translate(0,0)'; })
|
||||
.attr('dy', '.15em')
|
||||
.style('font-weight', 'bold')
|
||||
.attr('text-anchor', 'middle')
|
||||
.text(function(d) {
|
||||
return d.data.count + 'g';
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function hideTooltip ( ) {
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
var translate = client.translate;
|
||||
|
||||
var maxInsulinValue = 0
|
||||
,maxCarbsValue = 0;
|
||||
,maxCarbsValue = 0
|
||||
,maxDailyCarbsValue = 0;
|
||||
var maxdays = 3 * 31;
|
||||
var datastorage = {};
|
||||
var daystoshow = {};
|
||||
@@ -470,6 +471,7 @@
|
||||
});
|
||||
options.maxInsulinValue = maxInsulinValue;
|
||||
options.maxCarbsValue = maxCarbsValue;
|
||||
options.maxDailyCarbsValue = maxDailyCarbsValue;
|
||||
|
||||
datastorage.treatments = [];
|
||||
datastorage.devicestatus = [];
|
||||
@@ -684,6 +686,7 @@
|
||||
return;
|
||||
}
|
||||
// treatments
|
||||
data.dailyCarbs = 0;
|
||||
data.treatments.forEach(function (d) {
|
||||
if (parseFloat(d.insulin) > maxInsulinValue) {
|
||||
maxInsulinValue = parseFloat(d.insulin);
|
||||
@@ -691,7 +694,13 @@
|
||||
if (parseFloat(d.carbs) > maxCarbsValue) {
|
||||
maxCarbsValue = parseFloat(d.carbs);
|
||||
}
|
||||
if (d.carbs) {
|
||||
data.dailyCarbs += d.carbs;
|
||||
}
|
||||
});
|
||||
if (data.dailyCarbs > maxDailyCarbsValue) {
|
||||
maxDailyCarbsValue = data.dailyCarbs;
|
||||
}
|
||||
|
||||
var cal = data.cal[data.cal.length-1];
|
||||
var temp1 = [ ];
|
||||
|
||||
Reference in New Issue
Block a user