Exemple #1
0
 def add_form_to_patient(line):
     
     change = Change(line)
     
     # check the global max seq in this process to avoid repeating ourselves.
     if change.seq < max_seq:
         return log_and_abort(logging.DEBUG, "ignoring item %s because it's seq is old")
     update_max_seq(change)
         
     form_id = change.id
     # don't bother with deleted or old documents
     if change.deleted or not change.is_current(db): return 
         
     formdoc = CXFormInstance.get(form_id)
     pat_id = get_patient_id_from_form(formdoc)
     if pat_id is not None and get_classification(formdoc.namespace) == "clinic":
         try:
             # this is so we don't get conflicting updates.  
             # resolve conflicts and bump version numbers before adding forms  
             pat_data = get_db().get(pat_id, conflicts=True)
             if "_conflicts" in pat_data:
                 return log_and_abort(logging.INFO, "ignoring patient %s because there are still conflicts that need to be resolved" % pat_id)
             else:
                 pat = CPatient.wrap(pat_data)
                 if pat.requires_upgrade():
                     return log_and_abort(logging.INFO, "ignoring patient %s, form %s because it is not yet upgraded to the latest version" % (pat_id, form_id))
             found_ids = [enc.xform_id for enc in pat.encounters]
             if form_id in found_ids and not formdoc.requires_upgrade():
                 return log_and_abort(logging.DEBUG, "Already found appropriate version of form %s in patient %s, no need to do anything" % (form_id, pat_id))
             else:
                 print "Form %s not found in patient %s or was old.  Rebuilding the patient now" % (form_id, pat_id)
                 reprocess(pat_id)
         except ResourceNotFound, e:
             return log_and_abort(logging.WARNING, "tried to check form %s in patient %s but patient has been deleted.  Ignoring" % (form_id, pat_id))
Exemple #2
0
def single_patient(request, patient_id):
    patient = loader.get_patient(patient_id)
    xforms = CXFormInstance.view("patient/xforms", key=patient.get_id, include_docs=True)
    encounter_types = get_encounters(patient)
    options = TouchscreenOptions.default()
    # TODO: are we upset about how this breaks MVC?
    options.nextbutton.show  = False
    options.backbutton = ButtonOptions(text="BACK", 
                                       link=reverse("patient_select"))
    
    encounters = sorted(patient.encounters, key=lambda encounter: encounter.visit_date, reverse=True)
    # TODO: figure out a way to do this more centrally
    # Inject cases into encounters so we can show them linked in the view
    for encounter in patient.encounters:
        if encounter.get_xform():
            encounter.dynamic_data["classification"] = get_classification(encounter.get_xform().namespace)
            encounter.dynamic_data["cases"] = []
            for case in patient.cases:
                if case.encounter_id == encounter.get_id:
                    encounter.dynamic_data["cases"].append(case)
        
    
    return render_to_response(request, "patient/single_patient_touchscreen.html", 
                              {"patient": patient,
                               "encounters": encounters,
                               "xforms": xforms,
                               "encounter_types": encounter_types,
                               "options": options })