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 );
48
String selectedOrgUnitName = "";
49
String selectedDataPeriodStartDate = "";
50
String selectedDataPeriodEndDate = "";
51
String lastDataPeriodStartDate = "";
54
List childOrgUnitIDs = new ArrayList();
55
List childOrgUnitNames = new ArrayList();
57
int childOrgUnitID = 0;
58
// String childOrgUnitName = "";
59
int childOrgUnitCount = 0;
61
double maxValue[] = new double[10];
62
double minValue[] = new double[10];
67
String maxOrgUnitName[] = new String[10];
68
String minOrgUnitName[] = new String[10];
75
// Pregnant Women Registered
78
// Early Registered ( < 12 weeks)
81
// ANC Received TT2 / Booster
84
// ANC Received full IFA course
93
double dataValues[][] = new double[25][DECodes.length];
94
double sumOfValues[] = new double[DECodes.length];
95
double PHCdataValues[] = new double[DECodes.length];
96
double PHCsumOfValues[] = new double[DECodes.length];
99
String monthNames[] = { "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
100
String partsOfStartDate[] = startingDate.split("-");
101
String partsOfEndDate[] = endingDate.split("-");
105
double birthRate = 24.3;
108
String startingYear = "";
109
String endingYear = "";
112
int lastYear = Integer.parseInt(partsOfStartDate[0]) - 1;
113
int tempForMonth1 = Integer.parseInt(partsOfStartDate[1]);
115
if(tempForMonth1 < 4)
117
tempForYear = lastYear;
118
startingYear = ""+tempForYear+"-04-01";
119
endingYear = ""+(tempForYear+1)+"-03-20";
123
tempForYear = lastYear + 1;
124
startingYear = ""+tempForYear+"-04-01";
125
endingYear = ""+(tempForYear+1)+"-03-20";
128
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);
148
//rs1 = st1.executeQuery("select shortname from organisationunit where id = "+selectedOrgUnitID);
149
rs1 = st1.executeQuery("select shortname from organisationunit where organisationunitid = "+selectedOrgUnitID);
150
if(rs1.next()) { selectedOrgUnitName = rs1.getString(1); }
152
//rs2 = st2.executeQuery("select id,shortname from organisationunit where parent = "+selectedOrgUnitID);
153
rs2 = st2.executeQuery("select organisationunitid,shortname from organisationunit where parentid = "+selectedOrgUnitID);
156
Integer tempInt = new Integer(rs2.getInt(1));
157
childOrgUnitIDs.add(childOrgUnitCount,tempInt);
158
childOrgUnitNames.add(childOrgUnitCount,rs2.getString(2));
163
//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]+")");
164
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]+")");
165
if(rs5.next()) { birthRate = rs5.getInt(1); }
166
if(birthRate==0) birthRate=24.3;
169
while(count < childOrgUnitCount)
171
Integer temp1 = (Integer) childOrgUnitIDs.get(count);
172
int currentChildID = temp1.intValue();
174
for(i=0;i<DECodes.length;i++)
176
//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]+")";
177
//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]+")";
178
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]+")";
179
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 ) * 1.1;
190
r = (r / 12) * noOfMonths;
191
int decimalPlace = 3;
192
BigDecimal bd = new BigDecimal(r);
193
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
194
r = bd.doubleValue();
196
dataValues[count][i] = r;
201
double r = ( rs3.getInt(1) / dataValues[count][0]) * 100;
202
int decimalPlace = 2;
203
BigDecimal bd = new BigDecimal(r);
204
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
205
r = bd.doubleValue();
207
dataValues[count][i] = r;
211
catch(Exception e) { dataValues[count][i] = 0.0; }
213
// sumOfValues[i] += dataValues[count][i];
227
while(count < DECodes.length)
230
minValue[count] = dataValues[0][count];
231
maxValue[count] = dataValues[0][count];
233
minOrgUnitName[count] = "";
234
maxOrgUnitName[count] = "";
236
for(i=0;i<childOrgUnitCount;i++)
239
String childOrgUnitName = (String) childOrgUnitNames.get(i);
241
if( dataValues[i][count] > maxValue[count] ) { maxValue[count] = dataValues[i][count]; maxOrgUnitName[count] = childOrgUnitName; }
242
else if( dataValues[i][count] == maxValue[count] )
243
{ maxValue[count] = dataValues[i][count];
244
if (flag1==0) { maxOrgUnitName[count] = childOrgUnitName;flag1=1;}
245
else { maxOrgUnitName[count] += "<br>"+ childOrgUnitName; }
249
if( dataValues[i][count] < minValue[count] ) { minValue[count] = dataValues[i][count]; minOrgUnitName[count] = childOrgUnitName;}
250
else if( dataValues[i][count] == minValue[count])
251
{ minValue[count] = dataValues[i][count];
252
if (flag2==0) { minOrgUnitName[count] = childOrgUnitName;flag2=1;}
253
else { minOrgUnitName[count] += "<br>"+ childOrgUnitName;}
262
for(i=0;i<DECodes.length;i++)
264
//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]+")";
265
//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]+")";
267
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]+")";
268
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]+")";
270
rs4 = st4.executeQuery(query);
278
population = rs4.getInt(1);
279
double r = ((population * birthRate)/1000 ) * 1.1;
280
r = (r / 12) * noOfMonths;
281
int decimalPlace = 3;
282
BigDecimal bd = new BigDecimal(r);
283
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
284
r = bd.doubleValue();
286
PHCdataValues[i] = r;
290
double r = ( rs4.getInt(1) / PHCdataValues[0]) * 100;
291
int decimalPlace = 2;
292
BigDecimal bd = new BigDecimal(r);
293
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
294
r = bd.doubleValue();
296
PHCdataValues[i] = r;
299
catch(Exception e) { PHCdataValues[i] = 0.0; }
301
PHCsumOfValues[i] += PHCdataValues[i];
308
catch(Exception e) { out.println(e.getMessage()); }
313
if(rs1!=null) rs1.close(); if(st1!=null) st1.close();
314
if(rs2!=null) rs2.close(); if(st2!=null) st2.close();
315
if(rs3!=null) rs3.close(); if(st3!=null) st3.close();
316
if(rs4!=null) rs4.close(); if(st4!=null) st4.close();
317
if(rs5!=null) rs5.close(); if(st5!=null) st5.close();
319
if(con!=null) con.close();
321
catch(Exception e) { out.println(e.getMessage()); }
322
} // finally block end
329
<title>ANC Care</title>
335
<font face="arial" size="4"><b>ANC Care</b></font>
337
<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">
338
<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%">
339
<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>
340
<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>
342
<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%">
343
<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>
344
<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>
349
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
351
<td width="14%" rowspan="2" align="center" height="50"><font face="arial" size="2"><b>Indicators</b></font></td>
352
<td width="10%" rowspan="2" align="center"><font face="arial" size="2"><b>Expected</b></font></td>
353
<td width="10%" rowspan="2" align="center"><font face="arial" size="2"><b>Workload Estimated (as % of Expected)</b></font></td>
354
<td width="10%" rowspan="2" align="center"><font face="arial" size="2"><b>% Workload Achieved</b></font></td>
355
<td width="56%" colspan="2" align="center"><font face="arial" size="2"><b>Sub-Centre Performance Range</b></font></td>
358
<td width="28%" align="center"><font face="arial" size="2"><b>Maximum</b></font></td>
359
<td width="28%" align="center"><font face="arial" size="2"><b>Minimum</b></font></td>
362
<td width="14%" height="50"><font face="arial" size="2"><b>Pregnant Women Registered</b></font></td>
363
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
364
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
365
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[1]%></b></font> </td>
366
<td width="28%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[1]%><br>(<%=maxValue[1]%>)</b></font> </td>
367
<td width="28%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[1]%><br>(<%=minValue[1]%>)</b></font> </td>
370
<td width="14%" height="50"><font face="arial" size="2"><b>Early Registered (< 12 weeks)</b></font></td>
371
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
372
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
373
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[2]%></b></font> </td>
374
<td width="28%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[2]%><br>(<%=maxValue[2]%>)</b></font> </td>
375
<td width="28%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[2]%><br>(<%=minValue[2]%>)</b></font> </td>
378
<td width="20%" height="50"><font face="arial" size="2"><b>ANC received TT2/Booster</b></font></td>
379
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[0]%></b></font> </td>
380
<td width="10%" align="center"><font face="arial" size="2"><b>100.0</b></font></td>
381
<td width="10%" align="center"><font face="arial" size="2"><b><%=PHCdataValues[3]%></b></font> </td>
382
<td width="25%" align="center"><font face="arial" size="2"><b><%=maxOrgUnitName[3]%><br>(<%=maxValue[3]%>)</b></font> </td>
383
<td width="25%" align="center"><font face="arial" size="2"><b><%=minOrgUnitName[3]%><br>(<%=minValue[3]%>)</b></font> </td>
386
<td width="20%" height="50"><font face="arial" size="2"><b>ANC received full IFA course</b></font></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"><font face="arial" size="2"><b>Pregnant Women Registered</b></font></td>
406
<td width="30%" align="center"><font face="arial" size="2"><b> ( (Population * Birth Rate) / 1000 ) * 1.1 </b></font> </td>
407
<td width="50%" align="center"><font face="arial" size="2"><b>(Pregnant Women Total / Expected) * 100.0</b></font> </td>
410
<td width="20%" height="50"><font face="arial" size="2"><b>Early Registered (< 12 weeks)</b></font></td>
411
<td width="30%" align="center"><font face="arial" size="2"><b> ( (Population * Birth Rate) / 1000 ) * 1.1</b></font> </td>
412
<td width="50%" align="center"><font face="arial" size="2"><b>(Ante-Natal mothers registered within 1st trimester (within 12 weeks) / Expected) * 100.0</b></font> </td>
415
<td width="20%" height="50"><font face="arial" size="2"><b>ANC received TT2/Booster</b></font></td>
416
<td width="30%" align="center"><font face="arial" size="2"><b> ( (Population * Birth Rate) / 1000 ) * 1.1</b></font> </td>
417
<td width="50%" align="center"><font face="arial" size="2"><b>(Pregnant women given Tetanus Toxide(TT) 2nd dose Total / Expected) * 100.0</b></font> </td>
420
<td width="20%" height="50"><font face="arial" size="2"><b>ANC received full IFA course</b></font></td>
421
<td width="30%" align="center"><font face="arial" size="2"><b> ( (Population * Birth Rate) / 1000 ) * 1.1 </b></font> </td>
422
<td width="50%" align="center"><font face="arial" size="2"><b>(Pregnant women given 100 Iron Folic Acid (IFA) tablets Total / Expected) * 100.0</b></font> </td>
b'\\ No newline at end of file'