|
| 1 | +package org.openmrs.module.ugandaemrreports.definition.dataset.evaluator; |
| 2 | + |
| 3 | +import com.google.common.base.Joiner; |
| 4 | +import org.openmrs.annotation.Handler; |
| 5 | +import org.openmrs.module.reporting.common.DateUtil; |
| 6 | +import org.openmrs.module.reporting.common.ObjectUtil; |
| 7 | +import org.openmrs.module.reporting.dataset.DataSet; |
| 8 | +import org.openmrs.module.reporting.dataset.DataSetRow; |
| 9 | +import org.openmrs.module.reporting.dataset.SimpleDataSet; |
| 10 | +import org.openmrs.module.reporting.dataset.definition.DataSetDefinition; |
| 11 | +import org.openmrs.module.reporting.dataset.definition.evaluator.DataSetEvaluator; |
| 12 | +import org.openmrs.module.reporting.evaluation.EvaluationContext; |
| 13 | +import org.openmrs.module.reporting.evaluation.EvaluationException; |
| 14 | +import org.openmrs.module.reporting.evaluation.querybuilder.SqlQueryBuilder; |
| 15 | +import org.openmrs.module.reporting.evaluation.service.EvaluationService; |
| 16 | +import org.openmrs.module.ugandaemrreports.common.PatientDataHelper; |
| 17 | +import org.openmrs.module.ugandaemrreports.common.PersonDemographics; |
| 18 | +import org.openmrs.module.ugandaemrreports.definition.dataset.definition.VLExchangeDatasetDefinition; |
| 19 | +import org.springframework.beans.factory.annotation.Autowired; |
| 20 | + |
| 21 | +import java.sql.Connection; |
| 22 | +import java.sql.SQLException; |
| 23 | +import java.util.*; |
| 24 | +import java.util.stream.Collectors; |
| 25 | +import java.util.stream.Stream; |
| 26 | + |
| 27 | +import static org.openmrs.module.ugandaemrreports.reports.Helper.*; |
| 28 | + |
| 29 | + |
| 30 | +/** |
| 31 | + */ |
| 32 | +@Handler(supports = {VLExchangeDatasetDefinition.class}) |
| 33 | +public class VLExchangeDatasetDefinitionEvaluator implements DataSetEvaluator { |
| 34 | + |
| 35 | + @Autowired |
| 36 | + EvaluationService evaluationService; |
| 37 | + |
| 38 | + |
| 39 | + Map<Integer,String> drugNames = new HashMap<>(); |
| 40 | + @Override |
| 41 | + public DataSet evaluate(DataSetDefinition dataSetDefinition, EvaluationContext context) throws EvaluationException { |
| 42 | + |
| 43 | + VLExchangeDatasetDefinition definition = (VLExchangeDatasetDefinition) dataSetDefinition; |
| 44 | + |
| 45 | + |
| 46 | + SimpleDataSet dataSet = new SimpleDataSet(dataSetDefinition, context); |
| 47 | + PatientDataHelper pdh = new PatientDataHelper(); |
| 48 | + |
| 49 | + String startDate = DateUtil.formatDate(definition.getStartDate(), "yyyy-MM-dd"); |
| 50 | + String endDate = DateUtil.formatDate(definition.getEndDate(), "yyyy-MM-dd"); |
| 51 | + |
| 52 | + startDate = startDate+" 00:00:00"; |
| 53 | + endDate = endDate+" 23:59:59"; |
| 54 | + context = ObjectUtil.nvl(context, new EvaluationContext()); |
| 55 | + |
| 56 | + String dataQuery = String.format("SELECT pi.identifier as HIV_clinic_no,\n" + |
| 57 | + " p.birthdate,\n" + |
| 58 | + " TIMESTAMPDIFF(YEAR,p.birthdate,CURRENT_DATE) AS age,\n" + |
| 59 | + " p.gender,\n" + |
| 60 | + " accession_number AS specimen_id,\n" + |
| 61 | + " specimen_source,\n" + |
| 62 | + " DATE(date_activated),\n" + |
| 63 | + " DATE(send_request_sync_task.date_sent) AS send_request_date_sent,\n" + |
| 64 | + " send_request_sync_task.status AS send_request_status,\n" + |
| 65 | + " send_request_sync_task.status_code AS send_request_status_code,\n" + |
| 66 | + " program_data_task.status as program_data_status,\n" + |
| 67 | + " program_data_task.status_code as program_data_status_code,\n" + |
| 68 | + " DATE(program_data_task.date_created) as program_data_date,\n" + |
| 69 | + " DATE(request_result_task.date_created) as request_results_date,\n" + |
| 70 | + " request_result_task.status as request_results,\n" + |
| 71 | + " request_result_task.status_code as request_status_code\n" + |
| 72 | + "\n" + |
| 73 | + "FROM (SELECT orders.patient_id,orders.date_activated,orders.accession_number, test_order.specimen_source\n" + |
| 74 | + " FROM orders\n" + |
| 75 | + " INNER JOIN test_order ON (test_order.order_id = orders.order_id)\n" + |
| 76 | + "WHERE accession_number IS NOT NULL\n" + |
| 77 | + " AND specimen_source IS NOT NULL\n" + |
| 78 | + " AND orders.instructions = 'REFER TO cphl'\n" + |
| 79 | + " AND orders.concept_id = 165412\n" + |
| 80 | + " AND orders.voided = 0\n" + |
| 81 | + " AND orders.date_activated >= '%s'\n" + |
| 82 | + " AND orders.date_activated <= '%s')cohort\n" + |
| 83 | + "LEFT JOIN person p on p.person_id = cohort.patient_id\n" + |
| 84 | + "LEFT JOIN sync_task send_request_sync_task on send_request_sync_task.sync_task = accession_number and send_request_sync_task.sync_task_type = (SELECT sync_task_type_id from sync_task_type where uuid='3551ca84-06c0-432b-9064-fcfeefd6f4ec')\n" + |
| 85 | + "LEFT JOIN sync_task request_result_task on request_result_task.sync_task = accession_number and request_result_task.sync_task_type = (SELECT sync_task_type_id from sync_task_type where uuid='3396dcf0-2106-4e73-9b90-c63978c3a8b4')\n" + |
| 86 | + "LEFT JOIN sync_task program_data_task on program_data_task.sync_task = accession_number and program_data_task.sync_task_type = (SELECT sync_task_type_id from sync_task_type where uuid='f9b2fa5d-5d37-4fd9-b20a-a0cab664f520')\n" + |
| 87 | + "LEFT JOIN patient_identifier pi ON pi.patient_id = cohort.patient_id and pi.identifier_type = (SELECT patient_identifier_type_id from patient_identifier_type where uuid = 'e1731641-30ab-102d-86b0-7a5022ba4115');",startDate,endDate); |
| 88 | + |
| 89 | + SqlQueryBuilder q = new SqlQueryBuilder(); |
| 90 | + q.append(dataQuery); |
| 91 | + |
| 92 | + List<Object[]> results = evaluationService.evaluateToList(q, context); |
| 93 | + |
| 94 | + if(!results.isEmpty()) { |
| 95 | + for (Object[] e : results) { |
| 96 | + DataSetRow row = new DataSetRow(); |
| 97 | + pdh.addCol(row, "HIV Clinic No", e[0]); |
| 98 | + pdh.addCol(row, "Birthdate", e[1]); |
| 99 | + pdh.addCol(row, "Age", e[2]); |
| 100 | + pdh.addCol(row, "Sex", e[3]); |
| 101 | + pdh.addCol(row, "Specimen ID", e[4]); |
| 102 | + pdh.addCol(row, "Specimen source", e[5]); |
| 103 | + pdh.addCol(row, "Date Ordered", e[6]); |
| 104 | + pdh.addCol(row, "send_request_date_sent", e[7]); |
| 105 | + pdh.addCol(row, "send_request_status", e[8]); |
| 106 | + pdh.addCol(row, "send_request_status_code", e[9]); |
| 107 | + pdh.addCol(row, "program_data_status", e[10]); |
| 108 | + pdh.addCol(row, "program_data_status_code", e[11]); |
| 109 | + pdh.addCol(row, "program_data_date", e[12]); |
| 110 | + pdh.addCol(row, "request_results_date", e[13]); |
| 111 | + pdh.addCol(row, "request_results", e[14]); |
| 112 | + pdh.addCol(row, "request_status_code", e[15]); |
| 113 | + |
| 114 | + dataSet.addRow(row); |
| 115 | + } |
| 116 | + |
| 117 | + } |
| 118 | + return dataSet; |
| 119 | + } |
| 120 | + |
| 121 | +} |
0 commit comments