Пример #1
0
    def hba1c(self):
        """
        The HbA1c is calculated using the average blood glucose from the last
        90 days.

            Less than 7 = Excellent
            Between 7 and 8 = Average
            Greater than 8 = Bad
        """
        now = datetime.now(tz=self.user.settings.time_zone).date()
        subset = self.by_date(now - timedelta(days=90), now)
        average = core_utils.round_value(
            subset.aggregate(Avg('value'))['value__avg'])
        hba1c = core_utils.round_value(core_utils.calc_hba1c(average))

        css_class = 'text-default'

        if hba1c:
            if hba1c < 7:
                css_class = 'text-success'
            elif hba1c > 8:
                css_class = 'text-danger'
            else:
                css_class = 'text-primary'

        value_html = '%s%%<br><small>(%s %s)</small>' % \
                     (hba1c, self.glucose_by_unit_setting(average),
                      self.glucose_unit_name) \
            if hba1c else 'None<br><small>(None)</small>'

        return {
            'value': value_html,
            'css_class': css_class
        }
Пример #2
0
    def hba1c(self):
        """
        The HbA1c is calculated using the average blood glucose from the last
        90 days.

            Less than 7 = Excellent
            Between 7 and 8 = Average
            Greater than 8 = Bad
        """
        now = datetime.now(tz=self.user.settings.time_zone).date()
        subset = self.by_date(now - timedelta(days=90), now)
        average = core_utils.round_value(
            subset.aggregate(Avg('value'))['value__avg'])
        hba1c = core_utils.round_value(core_utils.calc_hba1c(average))

        css_class = 'text-default'

        if hba1c:
            if hba1c < 7:
                css_class = 'text-success'
            elif hba1c > 8:
                css_class = 'text-danger'
            else:
                css_class = 'text-primary'

        value_html = '%s%%<br><small>(%s %s)</small>' % \
                     (hba1c, self.glucose_by_unit_setting(average),
                      self.glucose_unit_name) \
            if hba1c else 'None<br><small>(None)</small>'

        return {'value': value_html, 'css_class': css_class}
Пример #3
0
    def get_avg_by_day(cls, user, days):
        now = datetime.now(tz=user.settings.time_zone).date()

        glucose_averages = Glucose.objects.avg_by_day(
            (now - timedelta(days=days)), now, user)

        data = {'dates': [], 'values': []}
        for avg in glucose_averages:
            rounded_value = core_utils.round_value(avg['avg_value'])
            data['values'].append(
                core_utils.glucose_by_unit_setting(user, rounded_value))
            data['dates'].append(avg['record_date'].strftime('%m/%d'))

        return data
Пример #4
0
    def get_avg_by_day(cls, user, days):
        now = datetime.now(tz=user.settings.time_zone).date()

        glucose_averages = Glucose.objects.avg_by_day(
            (now - timedelta(days=days)), now, user)

        data = {'dates': [], 'values': []}
        for avg in glucose_averages:
            rounded_value = core_utils.round_value(avg['avg_value'])
            data['values'].append(
                core_utils.glucose_by_unit_setting(user, rounded_value))
            data['dates'].append(avg['record_date'].strftime('%m/%d'))

        return data
Пример #5
0
    def get_avg_by_category(cls, user, days):
        now = datetime.now(tz=user.settings.time_zone).date()

        glucose_averages = Color.objects.avg_by_category(
            (now - timedelta(days=days)), now, user)

        data = {'categories': [], 'values': []}
        for avg in glucose_averages:
            rounded_value = core_utils.round_value(avg['avg_value'])
            data['values'].append(
                core_utils.glucose_by_unit_setting(user, rounded_value))
            data['categories'].append(avg['category__name'])

        return data
Пример #6
0
    def get_breakdown(self, days=14):
        now = datetime.now(tz=self.user.settings.time_zone).date()
        subset = self.by_date(now - timedelta(days=days), now)

        total = subset.count()
        lowest = subset.aggregate(Min('value'))['value__min']
        highest = subset.aggregate(Max('value'))['value__max']
        average = core_utils.round_value(
            subset.aggregate(Avg('value'))['value__avg'])
        
        highs = subset.filter(value__gt=self.user_settings['high']).count()
        lows = subset.filter(value__lt=self.user_settings['low']).count()
        within_target = subset.filter(
            value__gte=self.user_settings['target_min'],
            value__lte=self.user_settings['target_max']
        ).count()
        other = total - (highs + lows + within_target)

        return {
            'total': total,
            'lowest': {
                'value': '%s %s' % (self.glucose_by_unit_setting(lowest),
                                    self.glucose_unit_name) \
                    if lowest else 'None',
                'css_class': self.get_css_class(lowest),
            },
            'highest': {
                'value': '%s %s' % (self.glucose_by_unit_setting(highest),
                                    self.glucose_unit_name) \
                    if highest else 'None',
                'css_class': self.get_css_class(highest),
            },  
            'average': {
                'value': '%s %s' % (self.glucose_by_unit_setting(average),
                                    self.glucose_unit_name) \
                    if average else 'None',
                'css_class': self.get_css_class(average)
            },
            'highs': '%s (%s%%)' % (highs, core_utils.percent(highs, total)),
            'lows': '%s (%s%%)' % (lows, core_utils.percent(lows, total)),
            'within_target': '%s (%s%%)' % (
                within_target, core_utils.percent(within_target, total)),
            'other': '%s (%s%%)' % (other, core_utils.percent(other, total)),

        }
Пример #7
0
    def get_breakdown(self, days=14):
        now = datetime.now(tz=self.user.settings.time_zone).date()
        subset = self.by_date(now - timedelta(days=days), now)

        total = subset.count()
        lowest = subset.aggregate(Min('value'))['value__min']
        highest = subset.aggregate(Max('value'))['value__max']
        average = core_utils.round_value(
            subset.aggregate(Avg('value'))['value__avg'])
        
        highs = subset.filter(value__gt=self.user_settings['high']).count()
        lows = subset.filter(value__lt=self.user_settings['low']).count()
        within_target = subset.filter(
            value__gte=self.user_settings['target_min'],
            value__lte=self.user_settings['target_max']
        ).count()
        other = total - (highs + lows + within_target)

        return {
            'total': total,
            'lowest': {
                'value': '%s %s' % (self.glucose_by_unit_setting(lowest),
                                    self.glucose_unit_name) \
                    if lowest else 'None',
                'css_class': self.get_css_class(lowest),
            },
            'highest': {
                'value': '%s %s' % (self.glucose_by_unit_setting(highest),
                                    self.glucose_unit_name) \
                    if highest else 'None',
                'css_class': self.get_css_class(highest),
            },  
            'average': {
                'value': '%s %s' % (self.glucose_by_unit_setting(average),
                                    self.glucose_unit_name) \
                    if average else 'None',
                'css_class': self.get_css_class(average)
            },
            'highs': '%s (%s%%)' % (highs, core_utils.percent(highs, total)),
            'lows': '%s (%s%%)' % (lows, core_utils.percent(lows, total)),
            'within_target': '%s (%s%%)' % (
                within_target, core_utils.percent(within_target, total)),
            'other': '%s (%s%%)' % (other, core_utils.percent(other, total)),

        }