Merge pull request #1767 from MilosKozak/dev

insulin distribution in reports
This commit is contained in:
Milos Kozak
2016-05-28 09:17:40 +02:00
3 changed files with 175 additions and 2 deletions
+18
View File
@@ -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:'
}
};
+147 -1
View File
@@ -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 ( ) {
+10 -1
View File
@@ -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 = [ ];