fga-gpp-mds/2018.1-Dr-Down

View on GitHub
drdown/careline/models/model_procedure.py

Summary

Maintainability
A
35 mins
Test Coverage
from django.db import models
from django.utils.translation import ugettext_lazy as _

from drdown.careline.models import CheckItem


class Procedure(models.Model):

    careline = models.ForeignKey(
        'careline.Checklist', on_delete=models.CASCADE
        )

    # consts for unifying procedure parameters
    PROCEDURE_DESCRIPTION = 'description'
    PROCEDURE_AGES_REQUIRED = 'ages_required'
    PROCEDURE_AGES_WHEN_NEEDED = 'ages_needed'

    AGE_NEWBORN = 'NB'
    AGE_SIX_MONTHS = '6M'
    AGE_ONE_YEAR = '1Y'
    AGE_TWO_YEARS = '2Y'
    AGE_THREE_YEARS = '3Y'
    AGE_FIVE_YEARS = '5Y'
    AGE_SIX_TO_TEN_YEARS = '6_10Y'

    AGES = [
        AGE_NEWBORN,
        AGE_SIX_MONTHS,
        AGE_ONE_YEAR,
        AGE_TWO_YEARS,
        AGE_THREE_YEARS,
        AGE_FIVE_YEARS,
        AGE_SIX_TO_TEN_YEARS,
    ]

    proc_id = models.IntegerField(blank=False, null=False)

    initialized = models.BooleanField(
        default=False,
        null=False,
        blank=False,
        editable=False
    )

    @staticmethod
    def convert_age_to_item(age):

        if age < 0.5:
            item = Procedure.AGE_NEWBORN
        elif age < 1:
            item = Procedure.AGE_SIX_MONTHS
        elif age < 2:
            item = Procedure.AGE_ONE_YEAR
        elif age < 3:
            item = Procedure.AGE_TWO_YEARS
        elif age < 5:
            item = Procedure.AGE_THREE_YEARS
        elif age < 6:
            item = Procedure.AGE_FIVE_YEARS
        else:
            item = Procedure.AGE_SIX_TO_TEN_YEARS

        return item

    def create_check_items(self, ages_required, ages_needed):

        if self.initialized:
            return

        for age in Procedure.AGES:
            CheckItem.objects.create(
                procedure=self,
                age=age,
                required=(age in ages_required),
                when_needed=(age in ages_needed),
                check=False
            )

        self.initialized = True
        self.save()

    def get_checkitens_ordered(self):

        #  index = age = ACR,
        #  0 = 0 = RN,
        #  1 = 0.5 = 6M,
        #  2 = 1 = 1Y,
        #  3 = 2 = 2Y,
        #  4 = 3 = 3Y,
        #  5 = 5 = 5Y,
        #  6 = 6...10 = 6_10Y

        response = [None] * Procedure.AGES.__len__()

        for item in self.checkitem_set.all():
            response[Procedure.AGES.index(item.age)] = item

        return iter(response)

    def description(self):
        from drdown.careline.models import Checklist

        return Checklist.CARE_LINE[self.proc_id].get(
            Procedure.PROCEDURE_DESCRIPTION
            )