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