Пример #1
0
def __treatment_view_post(request, encounter):
    treatment_form = TreatmentForm(request.POST)
    if treatment_form.is_valid():
        treatment = treatment_form.save(commit=False)
        treatment.encounter = encounter
        treatment.prescriber = request.user
        if treatment.administration_schedule is not None:
            treatment.amount = (treatment.days *
                                treatment.administration_schedule.modifier)
        else:
            treatment.amount = 1
        treatment.save()
        treatment_form.save_m2m()
        for item in treatment.medication.all().iterator():
            item.amount -= treatment.amount
            if item.count > 0:
                item.quantity = math.ceil(item.amount / item.count)
            else:
                item.quantity = item.amount
            item.save()
        treatment_form = TreatmentForm()
        DatabaseChangeLog.objects.create(
            action="Edit",
            model="PatientEncounter",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            update_patient_encounter(encounter_data)
    return treatment_form
Пример #2
0
def new_diagnosis_view_post(request, encounter, diagnosis_set):
    if len(diagnosis_set) > 0:
        diagnosis_form = PatientDiagnosisForm(request.POST,
                                              instance=diagnosis_set[0])
    else:
        diagnosis_form = PatientDiagnosisForm(request.POST)
    if diagnosis_form.is_valid():
        if len(diagnosis_set) > 1:
            PatientDiagnosis.objects.exclude(pk=diagnosis_set[0].id).delete()
        diagnosis = diagnosis_form.save(commit=False)
        diagnosis.encounter = encounter
        diagnosis.save()
        diagnosis_form.save_m2m()
        DatabaseChangeLog.objects.create(
            action="Edit",
            model="PatientEncounter",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            update_patient_encounter(encounter_data)
    return diagnosis_form
Пример #3
0
def __login_view_post_failure(request):
    ip_address = get_client_ip(request)
    AuditEntry.objects.create(
        action="user_login_failed",
        ip=ip_address,
        username=request.POST["username"],
    )
    if "username" in request.COOKIES:
        form = LoginForm(initial={"username": request.COOKIES["username"]})
    else:
        form = LoginForm()
    try:
        user = fEMRUser.objects.get(username=request.POST["username"])
        if user.is_active:
            error_message = "Invalid username or password."
        else:
            error_message = (
                "Your account has been locked. Please contact your administrator."
            )
    except fEMRUser.DoesNotExist:
        error_message = "Invalid username or password."
    return render(
        request,
        "auth/login.html",
        {
            "error_message": error_message,
            "form": form
        },
    )
Пример #4
0
def submit_hpi_view(request, patient_id=None, encounter_id=None, hpi_id=None):
    if request.user.is_authenticated:
        if request.user.current_campaign == "RECOVERY MODE":
            return_response = redirect("main:home")
        elif request.method == "POST":
            encounter = get_object_or_404(PatientEncounter, pk=encounter_id)
            history = HistoryOfPresentIllness.objects.get(pk=hpi_id)
            aux_form = HistoryOfPresentIllnessForm(request.POST,
                                                   instance=history)
            if aux_form.is_valid():
                updated_history = aux_form.save()
                updated_history.save()
                DatabaseChangeLog.objects.create(
                    action="Edit",
                    model="PatientEncounter",
                    instance=str(encounter),
                    ip=get_client_ip(request),
                    username=request.user.username,
                    campaign=Campaign.objects.get(
                        name=request.user.current_campaign),
                )
                if os.environ.get("QLDB_ENABLED") == "TRUE":
                    encounter_data = PatientEncounterSerializer(encounter).data
                    update_patient_encounter(encounter_data)
            return_response = redirect("main:hpi_view",
                                       patient_id=patient_id,
                                       encounter_id=encounter_id)
    else:
        return_response = redirect("/not_logged_in")
    return return_response
Пример #5
0
def update_user_password_view(request, user_id=None):
    error = ""
    user = get_object_or_404(fEMRUser, pk=user_id)
    if request.method == "POST":
        form = AdminPasswordForm(request.POST or None, instance=user)
        if form.is_valid():
            item = form.save()
            item.save()
            user.change_password = True
            user.save()
            DatabaseChangeLog.objects.create(
                action="Change Password",
                model="User",
                instance=str(item),
                ip=get_client_ip(request),
                username=request.user.username,
                campaign=Campaign.objects.get(
                    name=request.user.current_campaign),
            )
            return_response = render(request, "admin/user_edit_confirmed.html")
        else:
            error = "Form is invalid."
    else:
        form = AdminPasswordForm(instance=user)
    return_response = render(
        request,
        "admin/user_password_edit_form.html",
        {
            "error": error,
            "form": form,
            "user_id": user_id,
            "page_name": "Editing User Password",
        },
    )
    return return_response
Пример #6
0
def __aux_form_is_valid(request, encounter, treatment_form):
    encounter.procedure = request.POST["procedure"]
    encounter.pharmacy_notes = request.POST["pharmacy_notes"]
    encounter.save()
    querysets = list(PatientDiagnosis.objects.filter(encounter=encounter))
    if len(querysets) > 0:
        item = querysets.pop().diagnosis.all()
        for query_item in querysets:
            item.union(query_item.diagnosis.all())
        treatment_form.fields["diagnosis"].queryset = item
    else:
        treatment_form.fields["diagnosis"].queryset = Diagnosis.objects.none()
    DatabaseChangeLog.objects.create(
        action="Edit",
        model="PatientEncounter",
        instance=str(encounter),
        ip=get_client_ip(request),
        username=request.user.username,
        campaign=Campaign.objects.get(name=request.user.current_campaign),
    )
    if os.environ.get("QLDB_ENABLED") == "TRUE":
        encounter_data = PatientEncounterSerializer(encounter).data
        update_patient_encounter(encounter_data)
    return render(
        request,
        "data/encounter_submitted.html",
        {
            "patient_id": encounter.patient.id,
            "encounter_id": encounter.id
        },
    )
Пример #7
0
def __encounter_edit_form_get(request, patient_id, encounter_id):
    encounter = get_object_or_404(PatientEncounter, pk=encounter_id)
    patient = get_object_or_404(Patient, pk=patient_id)
    units = Campaign.objects.get(name=request.user.current_campaign).units
    vitals_form = VitalsForm(unit=units)
    DatabaseChangeLog.objects.create(
        action="View",
        model="Patient",
        instance=str(encounter),
        ip=get_client_ip(request),
        username=request.user.username,
        campaign=Campaign.objects.get(name=request.user.current_campaign),
    )
    form = PatientEncounterForm(instance=encounter, unit=units)
    if not encounter.active:
        for field in form:
            try:
                field.widget.attrs["readonly"] = True
            except KeyError:
                pass
            except AttributeError:
                pass
        for field in vitals_form:
            try:
                field.widget.attrs["readonly"] = True
            except KeyError:
                pass
            except AttributeError:
                pass
    if units == "i":
        encounter_update_form_initial_imperial(form, encounter)
    form.initial["timestamp"] = encounter.timestamp
    encounter_active = encounter.active
    suffix = patient.get_suffix_display() if patient.suffix is not None else ""
    return render(
        request,
        "forms/edit_encounter.html",
        {
            "active": encounter_active,
            "aux_form": AuxiliaryPatientEncounterForm(),
            "form": form,
            "vitals": Vitals.objects.filter(encounter=encounter),
            "treatments": Treatment.objects.filter(encounter=encounter),
            "vitals_form": vitals_form,
            "page_name":
            f"Edit Encounter for {patient.first_name} {patient.last_name} {suffix}",
            "encounter": encounter,
            "birth_sex": patient.sex_assigned_at_birth,
            "encounter_id": encounter_id,
            "patient_name":
            f"{patient.first_name} {patient.last_name} {suffix}",
            "units": units,
            "patient": patient,
        },
    )
Пример #8
0
def patient_delete_view(request, patient_id=None):
    """
    Delete function.

    :param request: Django Request object.
    :param id: The ID of the patient to delete.
    :return: HTTPResponse.
    """
    if request.method == "POST":
        try:
            target_object = get_object_or_404(Patient, pk=patient_id)
            this_campaign = Campaign.objects.get(
                name=request.user.current_campaign)
            contact = this_campaign.instance.main_contact
            DatabaseChangeLog.objects.create(
                action="Delete",
                model="Patient",
                instance=str(target_object),
                ip=get_client_ip(request),
                username=request.user.username,
                campaign=this_campaign,
            )
            message_content = (
                f"{request.user} has deleted a patient record for the fEMR On-Chain "
                f"deployment to {this_campaign} from fEMR On-Chain on {timezone.now()}. "
                "To view audit logs, visit the Admin tab in fEMR On-Chain.")
            Message.objects.create(
                sender=request.user,
                recipient=contact,
                subject="WARNING! PATIENT DELETED",
                content=message_content,
            )
            send_mail(
                "WARNING! PATIENT DELETED",
                f"{message_content}\n\n\nTHIS IS AN AUTOMATED MESSAGE FROM fEMR ON-CHAIN. "
                "PLEASE DO NOT REPLY TO THIS EMAIL. "
                "PLEASE LOG IN TO fEMR ON-CHAIN TO REPLY.",
                os.environ.get("DEFAULT_FROM_EMAIL"),
                [contact.email],
            )
            target_object.delete()
        except ObjectDoesNotExist:
            pass
        return_response = render(request, "data/patient_deleted_success.html")
    else:
        target_object = get_object_or_404(Patient, pk=patient_id)
        return_response = render(request, "data/delete.html",
                                 {"patient": target_object})
    return return_response
Пример #9
0
def user_logged_in_callback(sender, request, user, **kwargs):
    campaign_list = request.user.campaigns.filter(active=True)
    if len(campaign_list) != 0:
        name = campaign_list[0].name
        campaign = Campaign.objects.get(name=name)
    else:
        campaign = None
    AuditEntry.objects.create(
        action="user_logged_in",
        ip=get_client_ip(request),
        username=user.username,
        campaign=campaign,
        browser_user_agent=request.user_agent.browser.family,
        system_user_agent=request.user_agent.os.family,
    )
Пример #10
0
def update_user_view(request, user_id=None):
    error = ""
    user = get_object_or_404(fEMRUser, pk=user_id)
    if request.method == "POST":
        form = (fEMRAdminUserUpdateForm(request.POST or None, instance=user)
                if request.user.groups.filter(
                    name="fEMR Admin").exists() else UserUpdateForm(
                        request.user, request.POST or None, instance=user))
        if form.is_valid():
            item = form.save()
            item.save()
            DatabaseChangeLog.objects.create(
                action="Edit",
                model="User",
                instance=str(item),
                ip=get_client_ip(request),
                username=request.user.username,
                campaign=Campaign.objects.get(
                    name=request.user.current_campaign),
            )
            return_response = render(request, "admin/user_edit_confirmed.html")
        else:
            return_response = render(
                request,
                "admin/user_edit_form.html",
                {
                    "error": "Form is invalid.",
                    "form": form,
                    "user_id": user_id,
                    "page_name": "Editing User",
                },
            )
    else:
        form = (fEMRAdminUserUpdateForm(instance=user)
                if request.user.groups.filter(name="fEMR Admin").exists() else
                UserUpdateForm(request.user, instance=user))
        return_response = render(
            request,
            "admin/user_edit_form.html",
            {
                "error": error,
                "form": form,
                "user_id": user_id,
                "page_name": "Editing User",
            },
        )
    return return_response
Пример #11
0
def new_vitals_view_post(request, units, encounter):
    vitals_form = VitalsForm(request.POST, unit=units)
    if vitals_form.is_valid():
        vitals = vitals_form.save(commit=False)
        vitals.encounter = encounter
        vitals.save()
        DatabaseChangeLog.objects.create(
            action="New",
            model="Vitals",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            update_patient_encounter(encounter_data)
Пример #12
0
def __edit_photo_view_post(request, patient_id, encounter_id, photo_id):
    units = Campaign.objects.get(name=request.user.current_campaign).units
    encounter = get_object_or_404(PatientEncounter, pk=encounter_id)
    patient = get_object_or_404(Patient, pk=patient_id)
    photo = Photo.objects.get(pk=photo_id)
    aux_form = PhotoForm(request.POST, request.FILES, instance=photo)
    if aux_form.is_valid():
        photo = aux_form.save()
        try:
            photo.save()
        except ValueError:
            photo.delete()
        DatabaseChangeLog.objects.create(
            action="Edit",
            model="Photo",
            instance=str(photo),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            update_patient_encounter(encounter_data)
        vitals_form = VitalsForm(unit=units)
        suffix = patient.get_suffix_display(
        ) if patient.suffix is not None else ""
    return render(
        request,
        "forms/photos_tab.html",
        {
            "aux_form": aux_form,
            "vitals": Vitals.objects.filter(encounter=encounter),
            "treatments": Treatment.objects.filter(encounter=encounter),
            "vitals_form": vitals_form,
            "page_name":
            f"Edit Encounter for {patient.first_name} {patient.last_name} {suffix}",
            "encounter": encounter,
            "birth_sex": patient.sex_assigned_at_birth,
            "encounter_id": encounter_id,
            "patient_name":
            f"{patient.first_name} {patient.last_name} {suffix}",
            "units": units,
            "patient": patient,
        },
    )
Пример #13
0
def __create_user_view_post(request):
    form = (fEMRAdminUserForm(request.POST) if request.user.groups.filter(
        name="fEMR Admin").exists() else UserForm(request.POST))
    if form.is_valid():
        item = form.save()
        form.save_m2m()
        item.created_by = request.user
        item.user_permissions.add(Permission.objects.get(name="Can add state"))
        item.user_permissions.add(
            Permission.objects.get(name="Can add diagnosis"))
        item.user_permissions.add(
            Permission.objects.get(name="Can add chief complaint"))
        item.user_permissions.add(
            Permission.objects.get(name="Can add medication"))

        item.user_permissions.add(
            Permission.objects.get(name="Can add administration schedule"))
        item.user_permissions.add(
            Permission.objects.get(name="Can add inventory category"))
        item.user_permissions.add(
            Permission.objects.get(name="Can add inventory form"))
        item.user_permissions.add(
            Permission.objects.get(name="Can add manufacturer"))
        item.save()
        DatabaseChangeLog.objects.create(
            action="Create",
            model="User",
            instance=str(item),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        return_response = render(request, "admin/user_edit_confirmed.html")
    else:
        return_response = render(
            request,
            "admin/user_create_form.html",
            {
                "error": "Form is invalid.",
                "form": form
            },
        )
    return return_response
Пример #14
0
def __upload_photo_view_post(request, encounter):
    aux_form = PhotoForm(request.POST, request.FILES)
    if aux_form.is_valid():
        photo = aux_form.save()
        photo.save()
        encounter.photos.add(photo)
        encounter.save()
        aux_form = PhotoForm()
        DatabaseChangeLog.objects.create(
            action="Edit",
            model="PatientEncounter",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            update_patient_encounter(encounter_data)
    return aux_form
Пример #15
0
def __patient_edit_form_get(request, patient_id, patient, encounters):
    DatabaseChangeLog.objects.create(
        action="View",
        model="Patient",
        instance=str(patient),
        ip=get_client_ip(request),
        username=request.user.username,
        campaign=Campaign.objects.get(name=request.user.current_campaign),
    )
    form = PatientForm(instance=patient)
    return render(
        request,
        "forms/patient.html",
        {
            "error": "",
            "patient_id": patient_id,
            "encounters": encounters,
            "form": form,
            "page_name": "Returning Patient",
        },
    )
Пример #16
0
def __patient_edit_form_post(request, patient_id, patient, encounters):
    form = PatientForm(request.POST or None, instance=patient)
    campaign_key = patient.campaign_key
    if form.is_valid():
        patient = form.save()
        patient.campaign_key = campaign_key
        patient.campaign.add(
            Campaign.objects.get(name=request.user.current_campaign))
        patient.save()
        DatabaseChangeLog.objects.create(
            action="Edit",
            model="Patient",
            instance=str(patient),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            update_patient(form.cleaned_data)
        return_response = render(
            request,
            "data/patient_submitted.html",
            {
                "patient": patient,
                "encounters": encounters
            },
        )
    else:
        return_response = render(
            request,
            "forms/patient.html",
            {
                "error": "Form is invalid.",
                "patient_id": patient_id,
                "encounters": encounters,
                "form": form,
                "page_name": "Returning Patient",
            },
        )
    return return_response
Пример #17
0
def __patient_encounter_form_post(request, patient):
    telehealth = Campaign.objects.get(name=request.user.current_campaign).telehealth
    units = Campaign.objects.get(name=request.user.current_campaign).units
    encounter_open = (
        len(PatientEncounter.objects.filter(patient=patient).filter(active=True)) > 0
    )
    form = PatientEncounterForm(request.POST, unit=units, prefix="form")
    vitals_form = VitalsForm(request.POST, unit=units, prefix="vitals_form")
    treatment_form = TreatmentForm()
    diagnosis_form = DiagnosisForm()
    if form.is_valid() and vitals_form.is_valid():
        encounter = form.save(commit=False)
        vitals = vitals_form.save(commit=False)
        encounter.patient = patient
        encounter.active = True
        encounter.campaign = Campaign.objects.get(name=request.user.current_campaign)
        encounter.save()
        vitals.encounter = encounter
        vitals.save()
        form.save_m2m()
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            create_new_patient_encounter(encounter_data)
        DatabaseChangeLog.objects.create(
            action="Create",
            model="PatientEncounter",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        DatabaseChangeLog.objects.create(
            action="Create",
            model="Vitals",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if "submit_encounter" in request.POST:
            return_response = render(
                request,
                "data/encounter_submitted.html",
                {"patient_id": patient.id, "encounter_id": encounter.id},
            )
        elif "submit_refer" in request.POST:
            kwargs = {"patient_id": patient.id}
            return_response = redirect("main:referral_form_view", **kwargs)
        else:
            return_response = render(
                request,
                "data/encounter_submitted.html",
                {"patient_id": patient.id, "encounter_id": encounter.id},
            )
    else:
        suffix = patient.get_suffix_display() if patient.suffix is not None else ""
        return_response = render(
            request,
            "forms/encounter.html",
            {
                "form": form,
                "vitals_form": vitals_form,
                "diagnosis_form": diagnosis_form,
                "treatment_form": treatment_form,
                "page_name": f"New Encounter for {patient.first_name} {patient.last_name} {suffix}",
                "birth_sex": patient.sex_assigned_at_birth,
                "patient_id": patient.id,
                "units": units,
                "telehealth": telehealth,
                "encounter_open": encounter_open,
                "page_tip": "Complete form with patient vitals as instructed. "
                "Any box with an asterisk (*) is required. "
                "For max efficiency, use 'tab' to navigate through this page.",
            },
        )
    return return_response
Пример #18
0
def __patient_form_view_post(request, campaign):
    form = PatientForm(request.POST)
    ssn_error = False
    phone_error = False
    email_error = False
    shared_phone_error = False
    shared_email_error = False
    match = None
    if form.is_valid():
        item = form.save()
        item.campaign.add(campaign)
        key = None
        while key is None:
            key = cal_key(campaign)
        item.campaign_key = key
        item.save()
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            create_new_patient(form.cleaned_data)
        DatabaseChangeLog.objects.create(
            action="Create",
            model="Patient",
            instance=str(item),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if item.id != "" and item.id is not None:
            return_response = render(
                request,
                "data/patient_submitted.html",
                {"patient": item, "encounters": []},
            )
        else:
            return_response = render(request, "data/patient_not_submitted.html")
    else:
        if (
            "social_security_number" in form.errors
            and "Must be 4 or 9 digits" not in form.errors["social_security_number"][0]
        ):
            ssn_error = True
            match = Patient.objects.get(
                social_security_number=form.data["social_security_number"]
            )
        if "phone_number" in form.errors:
            phone_error = True
            match = Patient.objects.filter(phone_number=form.data["phone_number"])
        if "email_address" in form.errors:
            email_error = True
            match = Patient.objects.filter(email_address=form.data["email_address"])
        form.fields["race"].queryset = campaign.race_options
        form.fields["ethnicity"].queryset = campaign.ethnicity_options
        return_response = render(
            request,
            "forms/new_patient.html",
            {
                "ssn_error": ssn_error,
                "phone_error": phone_error,
                "email_error": email_error,
                "shared_phone_error": shared_phone_error,
                "shared_email_error": shared_email_error,
                "match_list": match,
                "form": form,
                "page_name": "New Patient",
                "page_tip": "Complete form with patient demographics as instructed. "
                "Any box with an asterisk (*) is required. "
                "Shared contact information would be if two patients have a "
                "household phone or email that they share, for example.",
            },
        )
    return return_response
Пример #19
0
def __encounter_edit_form_post(request, patient_id, encounter_id):
    encounter = get_object_or_404(PatientEncounter, pk=encounter_id)
    patient = get_object_or_404(Patient, pk=patient_id)
    units = Campaign.objects.get(name=request.user.current_campaign).units
    photos = encounter.photos.all().iterator()
    treatments = Treatment.objects.filter(encounter=encounter)
    form = PatientEncounterForm(request.POST or None,
                                instance=encounter,
                                unit=units)
    if form.is_valid():
        encounter = form.save(commit=False)
        form.save_m2m()
        encounter.patient = patient
        encounter.active = True
        encounter.photos.set(photos)
        encounter.save()
        DatabaseChangeLog.objects.create(
            action="Edit",
            model="PatientEncounter",
            instance=str(encounter),
            ip=get_client_ip(request),
            username=request.user.username,
            campaign=Campaign.objects.get(name=request.user.current_campaign),
        )
        if os.environ.get("QLDB_ENABLED") == "TRUE":
            encounter_data = PatientEncounterSerializer(encounter).data
            update_patient_encounter(encounter_data)
        if "submit_encounter" in request.POST:
            return_response = render(
                request,
                "data/encounter_submitted.html",
                {
                    "patient_id": patient_id,
                    "encounter_id": encounter_id
                },
            )
        elif "submit_refer" in request.POST:
            kwargs = {"patient_id": patient_id}
            return_response = redirect("main:referral_form_view", **kwargs)
        else:
            return_response = render(
                request,
                "data/encounter_submitted.html",
                {
                    "patient_id": patient_id,
                    "encounter_id": encounter_id
                },
            )
    else:
        form.initial["timestamp"] = encounter.timestamp
        encounter_active = encounter.active
        suffix = patient.get_suffix_display(
        ) if patient.suffix is not None else ""
        return_response = render(
            request,
            "forms/edit_encounter.html",
            {
                "active": encounter_active,
                "aux_form": AuxiliaryPatientEncounterForm(),
                "form": form,
                "vitals": Vitals.objects.filter(encounter=encounter),
                "treatments": treatments,
                "vitals_form": VitalsForm(unit=units),
                "page_name":
                f"Edit Encounter for {patient.first_name} {patient.last_name} {suffix}",
                "encounter": encounter,
                "birth_sex": patient.sex_assigned_at_birth,
                "encounter_id": encounter_id,
                "patient_name":
                f"{patient.first_name} {patient.last_name} {suffix}",
                "units": units,
                "patient": patient,
            },
        )
    return return_response
Пример #20
0
def history_view(request, patient_id=None, encounter_id=None):
    if request.user.is_authenticated:
        if request.user.current_campaign == "RECOVERY MODE":
            return_response = redirect("main:home")
        else:
            units = Campaign.objects.get(
                name=request.user.current_campaign).units
            encounter = get_object_or_404(PatientEncounter, pk=encounter_id)
            patient = get_object_or_404(Patient, pk=patient_id)
            aux_form = HistoryPatientEncounterForm(instance=encounter)
            if request.method == "POST":
                aux_form = HistoryPatientEncounterForm(request.POST)
                if aux_form.is_valid():
                    encounter.medical_history = request.POST["medical_history"]
                    encounter.social_history = request.POST["social_history"]
                    encounter.current_medications = request.POST[
                        "current_medications"]
                    encounter.family_history = request.POST["family_history"]
                    encounter.save()
                    DatabaseChangeLog.objects.create(
                        action="Edit",
                        model="PatientEncounter",
                        instance=str(encounter),
                        ip=get_client_ip(request),
                        username=request.user.username,
                        campaign=Campaign.objects.get(
                            name=request.user.current_campaign),
                    )
                    if os.environ.get("QLDB_ENABLED") == "TRUE":
                        encounter_data = PatientEncounterSerializer(
                            encounter).data
                        update_patient_encounter(encounter_data)
                    return_response = render(
                        request,
                        "data/encounter_submitted.html",
                        {
                            "patient_id": patient_id,
                            "encounter_id": encounter_id
                        },
                    )
                else:
                    form = PatientEncounterForm(instance=encounter, unit=units)
                    vitals_form = VitalsForm(unit=units)
                    if units == "i":
                        history_view_imperial(form, encounter)
                    suffix = (patient.get_suffix_display()
                              if patient.suffix is not None else "")
                    return_response = render(
                        request,
                        "forms/history_tab.html",
                        {
                            "form":
                            form,
                            "aux_form":
                            aux_form,
                            "vitals":
                            Vitals.objects.filter(encounter=encounter),
                            "treatments":
                            Treatment.objects.filter(encounter=encounter),
                            "vitals_form":
                            vitals_form,
                            "page_name":
                            f"Edit Encounter for {patient.first_name} {patient.last_name} {suffix}",
                            "encounter":
                            encounter,
                            "birth_sex":
                            patient.sex_assigned_at_birth,
                            "patient_id":
                            patient_id,
                            "encounter_id":
                            encounter_id,
                            "patient_name":
                            f"{patient.first_name} {patient.last_name} {suffix}",
                            "units":
                            units,
                            "patient":
                            patient,
                        },
                    )
            else:
                return_response = __history_view_get(request, encounter_id,
                                                     units, patient, aux_form)
    else:
        return_response = redirect("/not_logged_in")
    return return_response