Exemple #1
0
def generate_discharge_report(patient_id, email):
    patient = PatientRegistration.objects.get(id=patient_id)
    consultations = PatientConsultation.objects.filter(
        patient=patient).order_by("-created_date")
    diseases = Disease.objects.filter(patient=patient)
    if consultations.exists():
        consultation = consultations.first()
        samples = PatientSample.objects.filter(patient=patient,
                                               consultation=consultation)
        daily_rounds = DailyRound.objects.filter(consultation=consultation)
        investigations = InvestigationValue.objects.filter(
            consultation=consultation.id)
        investigations = list(
            filter(lambda inv: inv.value is not None or inv.notes is not None,
                   investigations))
    else:
        consultation = None
        samples = None
        daily_rounds = None
        investigations = None
    date = make_aware(datetime.datetime.now())
    disease_status = DiseaseStatusEnum(
        patient.disease_status).name.capitalize()
    html_string = render_to_string(
        "patient_pdf_template.html",
        {
            "patient": patient,
            "samples": samples,
            "consultation": consultation,
            "consultations": consultations,
            "dailyrounds": daily_rounds,
            "date": date,
            "diseases": diseases,
            "investigations": investigations,
            "disease_status": disease_status,
        },
    )
    filename = str(int(round(time.time() * 1000))) + randomString(10) + ".pdf"
    bytestring_to_pdf(
        html_string.encode(),
        default_storage.open(filename, "w+"),
        **{
            "no-margins": None,
            "disable-gpu": None,
            "disable-dev-shm-usage": False,
            "window-size": "2480,3508"
        },
    )
    file = default_storage.open(filename, "rb")
    msg = EmailMessage(
        "Patient Discharge Summary",
        "Please find the attached file",
        settings.DEFAULT_FROM_EMAIL,
        (email, ),
    )
    msg.content_subtype = "html"  # Main content is now text/html
    msg.attach(patient.name + "-Discharge_Summary.pdf", file.read(),
               "application/pdf")
    msg.send()
    default_storage.delete(filename)
 def _get_disease_state_representation(self, disease_state):
     if isinstance(disease_state, int):
         return DiseaseStatusEnum(disease_state).name
     return disease_state