def set_mother_arvs(entry):
    """
    Look up and set ARV's for mom.
    """
    schemafile = './apr/registry-schema.json'
    with open(schemafile) as f:
        schema = json.loads(f.read())
    arvs = schema['faces-mapping']['arvs']
    arvset = []
    begin_date = entry.date_of_outcome - datetime.timedelta(360*2)
    encobs = entry.motherobs.filter(voided=0,
        encounter_datetime__gte=begin_date,
        encounter_datetime__lte=entry.date_of_outcome).order_by('encounter_datetime')
    course = 1
    cur_arv = None
    for encob in encobs:
        if encob.concept_id == 1571:
            #arvset.add(encob.value_coded)
            if encob.value_coded != cur_arv:
                cur_arv = encob.value_coded
                arvt = ArvTherapy()
                arvt.registry_entry = entry
                arvt.course = course
                arvt.medcode = arvs[str(cur_arv)]['medcode']
                arvt.date_began = encob.encounter_datetime.date()
                arvt.save(using=APR_DB)
                print 'c: ', course, ' medcode: ', arvs[str(cur_arv)]['medcode'], ' datestarted: ', encob.encounter_datetime
                course += 1
            else:
                pass
            print encob.encounter_datetime, encob.value_coded
def add_mother_arvs(entry, save=False):
    schemafile = "./apr/registry-schema.json"
    with open(schemafile) as f:
        schema = json.loads(f.read())
    arvs = schema["faces-mapping"]["arvs"]
    begin_date = entry.date_of_outcome - datetime.timedelta(540)
    preg_encobs = (
        Obs.objects.using(FACES_OPENMRS_DB)
        .filter(
            person_id=entry.mother_id, voided=0, obs_datetime__gte=begin_date, obs_datetime__lte=entry.date_of_outcome
        )
        .order_by("obs_datetime")
    )

    # arvs
    course = 1
    cur_arv = None
    arvs_obs = preg_encobs.filter(concept_id=1571)
    if arvs_obs.count() == 0:
        entry.voided_reason = RegistryEntry.VOIDED_NO_ARV_HISTORY
        entry.voided = True
        if save:
            entry.save()
    for arv in arvs_obs:
        if arv.value_coded != cur_arv:
            cur_arv = arv.value_coded_id
            arvt = ArvTherapy()
            arvt.registry_entry = entry
            arvt.course = course
            # print "The cur_arv is: ", cur_arv, " ", str(cur_arv)
            arvt.medcode = arvs[str(cur_arv)]["medcode"]
            arvt.date_began = arv.obs_datetime
            if save:
                arvt.save(using=APR_DB)
            # print 'c: ', course, ' medcode: ', arvs[str(cur_arv)]['medcode'], ' datestarted: ', arv.obs_datetime
            course += 1
        else:
            pass
def set_mother_arvs(entry, save_entries=False):
    """
    Look up and set ARV's for mom. Returns a list of new ARV's.
    """
    schemafile = './apr/registry-schema.json'
    with open(schemafile) as f:
        schema = json.loads(f.read())
    arvs = schema['ampath-mapping']['arvs']
    arvset = []
    begin_date = entry.date_of_outcome - datetime.timedelta(360*2)
    log_data(entry, "Beginning date for searching ARVs %s" % (begin_date,), 'arvs', 1088)
    encobs = Obs.objects.using(AMRS_DB).filter(voided=0,
        obs_datetime__gte=begin_date,
        obs_datetime__lte=entry.date_of_outcome,
        person_id=entry.mother_id).order_by('obs_datetime')
    course = 1
    cur_arv = None
    for encob in encobs:
        if encob.concept_id == 1088:
            if encob.value_coded_id != cur_arv:
                cur_arv = encob.value_coded_id
                arvt = ArvTherapy()
                arvt.registry_entry = entry
                arvt.course = course
                arvt.medcode = arvs[str(cur_arv)]['medcode']
                arvt.date_began = encob.obs_datetime.date()
                log_data(entry, "Using ARV %s %s" % (encob.concept_id, encob.obs_datetime,), 'arv', 1088)
                if save_entries:
                    arvt.save(using=APR_DB)
                arvset.append(arvt)
                course += 1
            else:
                log_data(entry, "Skipping cur ARV %s %s" % (encob.concept_id, encob.obs_datetime,), 'arv', 1088)
                pass
    # Go through and adjust the end dates as well as the ongoing flag 
    for idx, arvt in enumerate(arvset):
        if len(arvset) == 1:
            arvt.ongoing = 1
        elif idx == 0:
            arvt.ongoing = 0
            arvt.date_ended = arvset[idx+1].date_began
        elif idx == (len(arvset)-1):
            arvt.ongoing = 1
        else:
            arvt.ongoing = 0
            arvt.date_ended = arvset[idx+1].date_began
        print("Saving the updated status...")
        arvt.save(using=APR_DB)
    return arvset