2
<%@ page import="java.sql.*,java.util.*,java.math.*" %>
3
<%@ page import="com.opensymphony.xwork.util.OgnlValueStack" %>
9
// For finding organisationunit name of selected Orgunit based on Orgunit id
13
// For finding child orgunit ids and names based on selected orgunit id
17
// For finding datavalues
21
// For finding PHC datavalues
25
// For finding BirthRate
30
String userName = "dhis";
32
String urlForConnection = "jdbc:mysql://localhost/gj_dhis2";
35
OgnlValueStack stack = (OgnlValueStack)request.getAttribute("webwork.valueStack");
37
String selectedId = (String) stack.findValue( "orgUnitId" );
38
int selectedOrgUnitID = Integer.parseInt( selectedId );
41
String startingDate = (String) stack.findValue( "startingPeriod" );
42
String endingDate = (String) stack.findValue( "endingPeriod" );
44
String monthlyPeriodId = (String) stack.findValue( "monthlyPeriodTypeId" );
45
int periodTypeID = Integer.parseInt( monthlyPeriodId );
49
String selectedOrgUnitName = "";
50
String selectedDataPeriodStartDate = "";
51
String selectedDataPeriodEndDate = "";
52
String lastDataPeriodStartDate = "";
55
List childOrgUnitIDs = new ArrayList();
56
List childOrgUnitNames = new ArrayList();
58
int childOrgUnitID = 0;
59
// String childOrgUnitName = "";
60
int childOrgUnitCount = 0;
62
double maxValue[] = new double[10];
63
double minValue[] = new double[10];
68
String maxOrgUnitName[] = new String[10];
69
String minOrgUnitName[] = new String[10];
77
"'Form6_DE0057','Form6_DE0060','Form6_DE0063','Form6_DE0066','Form6_DE0069','Form6_DE0072','Form6_DE0075','Form6_DE0078'",
79
// Institutional Deliveries
80
"'Form6_DE0072','Form6_DE0075','Form6_DE0078','Form6_DE0069'",
82
// Deliveries by Health Professional
83
"'Form6_DE0057','Form6_DE0060','Form6_DE0063','Form6_DE0069','Form6_DE0072','Form6_DE0075','Form6_DE0078'",
86
"'Form6_DE0204','Form6_DE0207'",
94
double dataValues[][] = new double[25][DECodes.length];
95
double sumOfValues[] = new double[DECodes.length];
96
double PHCdataValues[] = new double[DECodes.length];
97
double PHCsumOfValues[] = new double[DECodes.length];
100
String monthNames[] = { "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
101
String partsOfStartDate[] = startingDate.split("-");
102
String partsOfEndDate[] = endingDate.split("-");
106
double birthRate = 24.3;
109
String startingYear = "";
110
String endingYear = "";
113
int lastYear = Integer.parseInt(partsOfStartDate[0]) - 1;
114
int tempForMonth1 = Integer.parseInt(partsOfStartDate[1]);
116
if(tempForMonth1 < 4)
118
tempForYear = lastYear;
119
startingYear = ""+tempForYear+"-04-01";
120
endingYear = ""+(tempForYear+1)+"-03-20";
124
tempForYear = lastYear + 1;
125
startingYear = ""+tempForYear+"-04-01";
126
endingYear = ""+(tempForYear+1)+"-03-20";
129
int noOfMonths = ( 12 * ( Integer.parseInt(partsOfEndDate[1]) - Integer.parseInt(partsOfStartDate[1]) ) ) - Integer.parseInt(partsOfStartDate[1]) + Integer.parseInt(partsOfEndDate[1])+1;
139
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
140
con = DriverManager.getConnection (urlForConnection, userName, password);
142
st1=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
143
st2=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
144
st3=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
145
st4=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
146
st5=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
149
//rs1 = st1.executeQuery("select shortname from organisationunit where id = "+selectedOrgUnitID);
150
rs1 = st1.executeQuery("select shortname from organisationunit where organisationunitid = "+selectedOrgUnitID);
151
if(rs1.next()) { selectedOrgUnitName = rs1.getString(1); }
153
//rs2 = st2.executeQuery("select id,shortname from organisationunit where parent = "+selectedOrgUnitID);
154
rs2 = st2.executeQuery("select organisationunitid,shortname from organisationunit where parentid = "+selectedOrgUnitID);
157
Integer tempInt = new Integer(rs2.getInt(1));
158
childOrgUnitIDs.add(childOrgUnitCount,tempInt);
159
childOrgUnitNames.add(childOrgUnitCount,rs2.getString(2));
164
//rs5 = st5.executeQuery("SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataElement = dataelement.id WHERE datavalue.period in (select id from period where startdate like '"+startingYear+"' and enddate like '"+endingYear+"' and periodType=3) AND datavalue.source in ( select parent from organisationunit where id in ( select parent from organisationunit where id = "+selectedOrgUnitID+")) AND dataelement.code in ("+DECodes[5]+")");
165
rs5 = st5.executeQuery("SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataelementid = dataelement.dataelementid WHERE datavalue.periodid in (select periodid from period where startdate like '"+startingYear+"' and enddate like '"+endingYear+"' and periodtypeid=3) AND datavalue.sourceid in ( select parentid from organisationunit where organisationunitid in ( select parentid from organisationunit where organisationunitid = "+selectedOrgUnitID+")) AND dataelement.code in ("+DECodes[5]+")");
166
if(rs5.next()) { birthRate = rs5.getInt(1); }
167
if(birthRate==0) birthRate=24.3;
170
while(count < childOrgUnitCount)
172
Integer temp1 = (Integer) childOrgUnitIDs.get(count);
173
int currentChildID = temp1.intValue();
175
for(i=0;i<DECodes.length;i++)
177
//if(i==0) query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataElement = dataelement.id WHERE datavalue.period in (select id from period where startdate like '"+startingYear+"' and enddate like '"+endingYear+"' and periodType=3) AND datavalue.source ="+currentChildID+" AND dataelement.code in ("+DECodes[i]+")";
178
//else query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataElement = dataelement.id WHERE datavalue.period in (select id from period where startdate between '"+startingDate+"' and '"+endingDate+"') AND datavalue.source ="+currentChildID+" AND dataelement.code in ("+DECodes[i]+")";
179
if(i==0) query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataelementid = dataelement.dataelementid WHERE datavalue.periodid in (select periodid from period where startdate like '"+startingYear+"' and enddate like '"+endingYear+"' and periodtypeid=3) AND datavalue.sourceid ="+currentChildID+" AND dataelement.code in ("+DECodes[i]+")";
180
else query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataelementid = dataelement.dataelementid WHERE datavalue.periodid in (select periodid from period where startdate between '"+startingDate+"' and '"+endingDate+"') AND datavalue.sourceid ="+currentChildID+" AND dataelement.code in ("+DECodes[i]+")";
181
rs3 = st3.executeQuery(query);
189
double r = ((rs3.getInt(1) * birthRate)/1000 ) ;
190
r = (r / 12) * noOfMonths;
191
int decimalPlace = 2;
192
BigDecimal bd = new BigDecimal(r);
193
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
194
r = bd.doubleValue();
196
dataValues[count][i] = r;
200
double r = ( rs3.getInt(1) / dataValues[count][0]) * 100;
201
int decimalPlace = 2;
202
BigDecimal bd = new BigDecimal(r);
203
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
204
r = bd.doubleValue();
206
dataValues[count][i] = r;
209
catch(Exception e) { dataValues[count][i] = 0.0; }
211
// sumOfValues[i] += dataValues[count][i];
225
while(count < DECodes.length)
228
minValue[count] = dataValues[0][count];
229
maxValue[count] = dataValues[0][count];
231
minOrgUnitName[count] = "";
232
maxOrgUnitName[count] = "";
234
for(i=0;i<childOrgUnitCount;i++)
237
String childOrgUnitName = (String) childOrgUnitNames.get(i);
239
if( dataValues[i][count] > maxValue[count] ) { maxValue[count] = dataValues[i][count]; maxOrgUnitName[count] = childOrgUnitName; }
240
else if( dataValues[i][count] == maxValue[count] )
241
{ maxValue[count] = dataValues[i][count];
242
if (flag1==0) { maxOrgUnitName[count] = childOrgUnitName;flag1=1;}
243
else { maxOrgUnitName[count] += "<br>"+ childOrgUnitName; }
247
if( dataValues[i][count] < minValue[count] ) { minValue[count] = dataValues[i][count]; minOrgUnitName[count] = childOrgUnitName;}
248
else if( dataValues[i][count] == minValue[count])
249
{ minValue[count] = dataValues[i][count];
250
if (flag2==0) { minOrgUnitName[count] = childOrgUnitName;flag2=1;}
251
else { minOrgUnitName[count] += "<br>"+ childOrgUnitName;}
260
for(i=0;i<DECodes.length;i++)
262
//if(i==0) query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataElement = dataelement.id WHERE datavalue.period in (select id from period where startdate like '"+startingYear+"' and enddate like '"+endingYear+"' and periodType=3) AND datavalue.source in (select id from organisationunit where parent ="+selectedOrgUnitID+" OR id ="+selectedOrgUnitID+") AND dataelement.code in ("+DECodes[i]+")";
263
//else query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataElement = dataelement.id WHERE datavalue.period in (select id from period where startdate between '"+startingDate+"' and '"+endingDate+"') AND datavalue.source in (select id from organisationunit where parent ="+selectedOrgUnitID+" OR id ="+selectedOrgUnitID+") AND dataelement.code in ("+DECodes[i]+")";
264
if(i==0) query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataelementid = dataelement.dataelementid WHERE datavalue.periodid in (select periodid from period where startdate like '"+startingYear+"' and enddate like '"+endingYear+"' and periodtypeid=3) AND datavalue.sourceid in (select organisationunitid from organisationunit where parentid ="+selectedOrgUnitID+" OR organisationunitid ="+selectedOrgUnitID+") AND dataelement.code in ("+DECodes[i]+")";
265
else query = "SELECT sum(datavalue.value) FROM datavalue INNER JOIN dataelement ON datavalue.dataelementid = dataelement.dataelementid WHERE datavalue.periodid in (select periodid from period where startdate between '"+startingDate+"' and '"+endingDate+"') AND datavalue.sourceid in (select organisationunitid from organisationunit where parentid ="+selectedOrgUnitID+" OR organisationunitid ="+selectedOrgUnitID+") AND dataelement.code in ("+DECodes[i]+")";
266
rs4 = st4.executeQuery(query);
274
population = rs4.getInt(1);
275
double r = ((population * birthRate)/1000 ) ;
276
r = (r / 12) * noOfMonths;
277
int decimalPlace = 2;
278
BigDecimal bd = new BigDecimal(r);
279
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
280
r = bd.doubleValue();
282
PHCdataValues[i] = r;
286
double r = ( rs4.getInt(1) / PHCdataValues[0]) * 100;
287
int decimalPlace = 2;
288
BigDecimal bd = new BigDecimal(r);
289
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
290
r = bd.doubleValue();
292
PHCdataValues[i] = r;
295
catch(Exception e) { PHCdataValues[i] = 0.0; }
297
PHCsumOfValues[i] += PHCdataValues[i];
304
catch(Exception e) { out.println(e.getMessage()); }
309
if(rs1!=null) rs1.close(); if(st1!=null) st1.close();
310
if(rs2!=null) rs2.close(); if(st2!=null) st2.close();
311
if(rs3!=null) rs3.close(); if(st3!=null) st3.close();
312
if(rs4!=null) rs4.close(); if(st4!=null) st4.close();
313
if(rs5!=null) rs5.close(); if(st5!=null) st5.close();
316
if(con!=null) con.close();
318
catch(Exception e) { out.println(e.getMessage()); }
319
} // finally block end
326
<title>Delivery Care</title>
330
<font face="arial" size="4"><b>Delivery Care</b></font>
332
<table cellpadding="0" cellspacing="0" bgcolor="ffffff" align="center" style="border-style:solid; border-width:0; border-collapse: collapse; padding: 0; position:relative; top:10" bordercolor="#ffffff" width="100%" border="0">
333
<tr style="border-collapse: collapse; border-left-style: solid; border-left-width: 0; border-right-style: solid; border-right-width: 0; padding: 0" bordercolor="#111111" width="100%">
334
<td width="50%" style="border-collapse: collapse; border-left-style: solid; border-left-width: 0; border-right-style: solid; border-right-width: 0; padding-left:0; padding-right:0; padding-top:0; padding-bottom:0" bordercolor="#111111" height="23"><b><font face="Arial" size="2">Name of the PHC : <%=selectedOrgUnitName%></b></font></td>
335
<td width="50%" align="right" style="border-collapse: collapse; border-left-style: solid; border-left-width: 0; border-right-style: solid; border-right-width: 0; padding-left:15; padding-right:0; padding-top:0; padding-bottom:0" bordercolor="#111111" height="23"><font face="Arial" size="2"><b>Starting Period : <%=monthNames[Integer.parseInt(partsOfStartDate[1])]%> - <%=partsOfStartDate[0]%> </b></font></td>
337
<tr style="border-collapse: collapse; border-left-style: solid; border-left-width: 0; border-right-style: solid; border-right-width: 0; padding: 0" bordercolor="#111111" width="100%">
338
<td width="50%" style="border-collapse: collapse; border-left-style: solid; border-left-width: 0; border-right-style: solid; border-right-width: 0; padding-left:0; padding-right:0; padding-top:0; padding-bottom:0" bordercolor="#111111" height="23"><b><font face="Arial" size="2">Population : <%=population%></b></font></td>
339
<td width="50%" align="right" style="border-collapse: collapse; border-left-style: solid; border-left-width: 0; border-right-style: solid; border-right-width: 0; padding-left:15; padding-right:0; padding-top:0; padding-bottom:0" bordercolor="#111111" height="23"><font face="Arial" size="2"><b>Ending Period : <%=monthNames[Integer.parseInt(partsOfEndDate[1])]%> - <%=partsOfEndDate[0]%> </b></font></td>
345
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
347
<td width="14%" rowspan="2" align="center" height="50"><font face="arial" size="2"><b>Indicators</b></font></td>
348
<td width="10%" rowspan="2" align="center"><font face="arial" size="2"><b>Expected (In Thousands)</b></font></td>
349
<td width="10%" rowspan="2" align="center"><font face="arial" size="2"><b>Workload Estimated (as % of Expected)</b></font></td>
350
<td width="10%" rowspan="2" align="center"><font face="arial" size="2"><b>% Workload Achieved</b></font></td>
351
<td width="56%" colspan="2" align="center"><font face="arial" size="2"><b>Sub-Centre Performance Range</b></font></td>
354
<td width="28%" align="center"><font face="arial" size="2"><b>Maximum</b></font></td>
355
<td width="28%" align="center"><font face="arial" size="2"><b>Minimum</b></font></td>
358
<td width="14%" height="50"><font face="arial" size="2"><b>
359
Deliveries</b></font></td>
360
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
361
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
362
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[1]%></b></font> </td>
363
<td width="28%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[1]%><br>(<%=maxValue[1]%>)</b></font> </td>
364
<td width="28%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[1]%><br>(<%=minValue[1]%>)</b></font> </td>
367
<td width="14%" height="50"><b><font face="arial" size="2">
368
Institutional Deliveries</font></b></td>
369
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
370
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
371
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[2]%></b></font> </td>
372
<td width="28%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[2]%><br>(<%=maxValue[2]%>)</b></font> </td>
373
<td width="28%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[2]%><br>(<%=minValue[2]%>)</b></font> </td>
376
<td width="20%" height="50"><b><font face="arial" size="2">
377
Deliveries by Health Professional</font></b></td>
378
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
379
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
380
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[3]%></b></font> </td>
381
<td width="25%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[3]%><br>(<%=maxValue[3]%>)</b></font> </td>
382
<td width="25%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[3]%><br>(<%=minValue[3]%>)</b></font> </td>
385
<td width="20%" height="50"><b><font face="arial" size="2">3
386
Postnatal Visits</font></b></td>
387
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
388
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
389
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[4]%></b></font> </td>
390
<td width="25%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[4]%><br>(<%=maxValue[4]%>)</b></font> </td>
391
<td width="25%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[4]%><br>(<%=minValue[4]%>)</b></font> </td>
397
<font face="arial" size="4"><b>Formulae</b></font>
398
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
400
<td width="20%" align="center" height="50"><font face="arial" size="2"><b>Indicators</b></font></td>
401
<td width="30%" align="center"><font face="arial" size="2"><b>Expected (In Thousands)</b></font></td>
402
<td width="50%" align="center"><font face="arial" size="2"><b>% Workload Achieved</b></font></td>
405
<td width="20%" height="50"><b><font face="arial" size="2">
406
Deliveries</font></b></td>
407
<td width="30%" align="center"><font face="arial" size="2"><b> (Population * Birth Rate) / 1000 </b></font> </td>
408
<td width="50%" align="center"><font face="arial" size="2"><b>(DataElement For Deliveries / Expected) * 100.0</b></font> </td>
411
<td width="20%" height="50"><b><font face="arial" size="2">
412
Institutional Deliveries</font></b></td>
413
<td width="30%" align="center"><font face="arial" size="2"><b> (Population * Birth Rate) / 1000 </b></font> </td>
414
<td width="50%" align="center"><font face="arial" size="2"><b>(DataElement For Institutional Deliveries / Expected) * 100.0</b></font> </td>
417
<td width="20%" height="50"><b><font face="arial" size="2">
418
Deliveries by Health Professional</font></b></td>
419
<td width="30%" align="center"><font face="arial" size="2"><b> (Population * Birth Rate) / 1000 </b></font> </td>
420
<td width="50%" align="center"><font face="arial" size="2"><b>(DataElement For Deliveries by Health Professional / Expected) * 100.0</b></font> </td>
423
<td width="20%" height="50"><b><font face="arial" size="2">3
424
Postnatal Visits</font></b></td>
425
<td width="30%" align="center"><font face="arial" size="2"><b> (Population * Birth Rate) / 1000 </b></font> </td>
426
<td width="50%" align="center"><font face="arial" size="2"><b>(DataElement For 3 PostNatal Visits / Expected) * 100.0</b></font> </td>
431
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
433
<td width="20%" height="50" ><font face="arial" size="2"><b>Numerator For Deliveries : ( Home Deliveries by Doctor + ANM/Nurses/Health Worker + Trained Birth Attendant + Untrained Dai) <br>
434
435
436
437
+<br>
438
439
440
( Deliveries at Public Institutions + Sub-Centre + Facilities covered under Public Private Partnership + Other Private/NGO and Charitable Hospitals)</b></font></td>
443
<td width="20%" height="50"><font face="arial" size="2"><b>Numerator for Institutional Deliveries : Deliveries at Public Institutions + Sub-Centre + Facilities covered under Public Private Partnership + Other Private/NGO and Charitable Hospitals</b></font></td>
446
<td width="20%" height="50"><font face="arial" size="2"><b>Numerator for Deliveries by Health Professional : ( Home Deliveries by Doctor + ANM/Nurses/Health Worker + Trained Birth Attendant ) <br>
447
448
449
450
+<br>
451
452
453
( Deliveries at Public Institutions + Sub-Centre + Facilities covered under Public Private Partnership + Other Private/NGO and Charitable Hospitals)</b></font></td>
456
<td width="20%" height="50"><font face="arial" size="2"><b>Numerator for 3 PostNatal Visits : Third PostNatal Visit between 11 to 14 days Total</b></font></td>
b'\\ No newline at end of file'