PageRenderTime 27ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/chits_query/pdf_reports/prenatal.php

https://github.com/mikeymckay/chits
PHP | 466 lines | 337 code | 109 blank | 20 comment | 32 complexity | e29aef4d5aab2bfefa71049b854ecec6 MD5 | raw file
  1. <?php
  2. session_start();
  3. ob_start();
  4. require('./fpdf/fpdf.php');
  5. $db_conn = mysql_connect("localhost","$_SESSION[dbuser]","$_SESSION[dbpass]");
  6. mysql_select_db($_SESSION[dbname]);
  7. class PDF extends FPDF
  8. {
  9. var $widths;
  10. var $aligns;
  11. var $page;
  12. function SetWidths($w)
  13. {
  14. //Set the array of column widths
  15. $this->widths=$w;
  16. }
  17. function SetAligns($a)
  18. {
  19. //Set the array of column alignments
  20. $this->aligns=$a;
  21. }
  22. function Row($data)
  23. {
  24. //Calculate the height of the row
  25. $nb=0;
  26. for($i=0;$i<count($data);$i++)
  27. $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
  28. $h=5*$nb;
  29. //Issue a page break first if needed
  30. $this->CheckPageBreak($h);
  31. //Draw the cells of the row
  32. for($i=0;$i<count($data);$i++)
  33. {
  34. $w=$this->widths[$i];
  35. $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'C'; //sets the alignment of text inside the cell
  36. //Save the current position
  37. $x=$this->GetX();
  38. $y=$this->GetY();
  39. //Draw the border
  40. $this->Rect($x,$y,$w,$h);
  41. //Print the text
  42. $this->MultiCell($w,5,$data[$i],0,$a);
  43. //Put the position to the right of the cell
  44. $this->SetXY($x+$w,$y);
  45. }
  46. //Go to the next line
  47. $this->Ln($h);
  48. }
  49. function CheckPageBreak($h)
  50. {
  51. //If the height h would cause an overflow, add a new page immediately
  52. if($this->GetY()+$h>$this->PageBreakTrigger)
  53. $this->AddPage($this->CurOrientation);
  54. }
  55. function NbLines($w,$txt)
  56. {
  57. //Computes the number of lines a MultiCell of width w will take
  58. $cw=&$this->CurrentFont['cw'];
  59. if($w==0)
  60. $w=$this->w-$this->rMargin-$this->x;
  61. $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
  62. $s=str_replace("\r",'',$txt);
  63. $nb=strlen($s);
  64. if($nb>0 and $s[$nb-1]=="\n")
  65. $nb--;
  66. $sep=-1;
  67. $i=0;
  68. $j=0;
  69. $l=0;
  70. $nl=1;
  71. while($i<$nb)
  72. {
  73. $c=$s[$i];
  74. if($c=="\n")
  75. {
  76. $i++;
  77. $sep=-1;
  78. $j=$i;
  79. $l=0;
  80. $nl++;
  81. continue;
  82. }
  83. if($c==' ')
  84. $sep=$i;
  85. $l+=$cw[$c];
  86. if($l>$wmax)
  87. {
  88. if($sep==-1)
  89. {
  90. if($i==$j)
  91. $i++;
  92. }
  93. else
  94. $i=$sep+1;
  95. $sep=-1;
  96. $j=$i;
  97. $l=0;
  98. $nl++;
  99. }
  100. else
  101. $i++;
  102. }
  103. return $nl;
  104. }
  105. function Header()
  106. {
  107. if($_SESSION[brgy]=='all'):
  108. $brgy_label = 'All Barangays';
  109. else:
  110. $brgy_name = mysql_query("SELECT barangay_name FROM m_lib_barangay WHERE barangay_id='$_SESSION[brgy]'") or die("Cannot query: 124");
  111. list($brgy_label) = mysql_fetch_array($brgy_name);
  112. endif;
  113. $this->SetFont('Arial','B',12);
  114. $this->Cell(0,5,'Target Client List for Prenatal Care ( '.$_SESSION[sdate_orig].' to '.$_SESSION[edate_orig].' )'.' - '.$brgy_label,0,1,'C');
  115. $this->SetFont('Arial','',10);
  116. if($_SESSION[pahina]==1):
  117. $w = array(30,30,55,85,10,30,25,25,25,25); //340
  118. $header = array('Registration Date','Family Serial No.','Name','Address','Age','LMP / GP','EDC','1st Trimester','2nd Trimester','3rd Trimester');
  119. elseif($_SESSION[pahina]==2):
  120. $this->SetFont('Arial','',8);
  121. $w = array(20,22,22,22,22,22,35,25,25,20,20,30,20,30);
  122. $header = array('Tetanus Status','TT1','TT2','TT3','TT4','TT5','Date and No. Iron With Folic Acid Was Given','Risk Code/Date Detected','Pregnancy Date Teminated','Outcome','Birth Weight (grams)','Place of Delivery','Attended By','Remarks');
  123. else:
  124. endif;
  125. $this->SetWidths($w);
  126. $this->Row($header);
  127. }
  128. function show_records()
  129. {
  130. $r_prenatal = array_values(array_unique($_SESSION[prenatal_mc_px]));
  131. $w = array(30,30,55,85,10,30,25,25,25,25);
  132. $r_rec = array();
  133. for($i=0;$i<count($r_prenatal);$i++){
  134. //echo $r_prenatal[$i].'<br>';
  135. $q_px = mysql_query("SELECT patient_lastname,patient_firstname,TO_DAYS(patient_dob) as kaarawan FROM m_patient WHERE patient_id='$r_prenatal[$i]'") or die(mysql_error());
  136. $q_name = mysql_query("SELECT a.patient_id,a.patient_lastname,a.patient_firstname,TO_DAYS(a.patient_dob) as day_bday,b.family_id,c.address,d.barangay_name FROM m_patient a,m_family_members b,m_family_address c,m_lib_barangay d WHERE a.patient_id='$r_prenatal[$i]' AND a.patient_id=b.patient_id AND b.family_id=c.family_id AND c.barangay_id=d.barangay_id") or die("Cannot query: 137");
  137. $r_name = mysql_fetch_array($q_name);
  138. //$q_prenatal = mysql_query("SELECT a.patient_lmp,a.patient_edc,a.obscore_gp,b.prenatal_date,TO_DAYS(b.prenatal_date) as day_prenatal FROM m_patient_mc a, m_consult_mc_prenatal b WHERE a.patient_id='$r_prenatal[$i]' AND a.patient_id=b.patient_id AND b.visit_sequence='1' AND end_pregnancy_flag='N'") or die(mysql_error());
  139. $q_prenatal = mysql_query("SELECT a.patient_lmp,a.patient_edc,a.obscore_gp,b.prenatal_date,TO_DAYS(b.prenatal_date) as day_prenatal FROM m_patient_mc a, m_consult_mc_prenatal b WHERE a.patient_id='$r_prenatal[$i]' AND a.patient_id=b.patient_id AND end_pregnancy_flag='N' ORDER by b.prenatal_date ASC") or die(mysql_error());
  140. $result_prenatal = mysql_fetch_array($q_prenatal);
  141. if(empty($r_name[patient_lastname]) && empty($r_name[patient_firstname])):
  142. $r_px = mysql_fetch_array($q_px);
  143. $pangalan = $r_px[patient_lastname].', '.$r_px[patient_firstname];
  144. $edad_sa_prenatal = floor(($result_prenatal[day_prenatal] - $r_px[kaarawan])/365);
  145. $tirahan = '';
  146. else:
  147. $pangalan = $r_name[patient_lastname].', '.$r_name[patient_firstname];
  148. $tirahan = $r_name[address]. ', '.$r_name[barangay_name];
  149. $edad_sa_prenatal = floor(($result_prenatal[day_prenatal] - $r_name[day_bday])/365);
  150. endif;
  151. list($predate,$pretime) = explode(' ',$result_prenatal[prenatal_date]);
  152. list($prenataldate,$prenataltime) = explode(' ',$result_prenatal[prenatal_date]);
  153. $q_prenatal_visits = mysql_query("SELECT a.patient_id,a.prenatal_date,a.trimester FROM m_consult_mc_prenatal a,m_patient_mc b WHERE a.patient_id='$r_prenatal[$i]' AND a.patient_id=b.patient_id AND b.end_pregnancy_flag='N' ORDER by a.prenatal_date DESC") or die(mysql_error());
  154. $first='';
  155. $second='';
  156. $third='';
  157. while($r_prenatal_visits=mysql_fetch_array($q_prenatal_visits)){
  158. list($d,$t) = explode(' ',$r_prenatal_visits[prenatal_date]);
  159. switch($r_prenatal_visits[trimester]){
  160. case 1:
  161. $first.= $d."\n";
  162. break;
  163. case 2:
  164. $second = $d."\n";
  165. break;
  166. case 3:
  167. $third = $d."\n";
  168. break;
  169. default:
  170. }
  171. }
  172. array_push($r_rec,array("datereg"=>$prenataldate,"familyserial"=>$r_name[family_id],"ngalan"=>$pangalan,"bahay"=>$tirahan,"edad"=>$edad_sa_prenatal,"lmp_gp"=>$result_prenatal[patient_lmp].', '.$result_prenatal[obscore_gp],"edc"=>$result_prenatal[patient_edc],"first_tri"=>$first,"second_tri"=>$second,"third_tri"=>$third));
  173. }
  174. $this->SetWidths($w);
  175. for($j=0;$j<count($r_rec);$j++){ //rows
  176. $this->Row(array($r_rec[$j]['datereg'],$r_rec[$j]['familyserial'],$r_rec[$j]['ngalan'],$r_rec[$j]['bahay'],$r_rec[$j]['edad'],$r_rec[$j]['lmp_gp'],$r_rec[$j]['edc'],$r_rec[$j]['first_tri'],$r_rec[$j]['second_tri'],$r_rec[$j]['third_tri']));
  177. }
  178. }
  179. function show_second(){
  180. $r_prenatal = $_SESSION[prenatal_mc_px];
  181. $r_mc_id = $_SESSION[mc_id];
  182. $w = array(20,22,22,22,22,22,35,25,25,20,20,30,20,30);
  183. $r_rec = array();
  184. for($i=0;$i<count($r_prenatal);$i++)
  185. {
  186. $r_dates = array();
  187. $outcome_code = '';
  188. $q_vaccine = mysql_query("SELECT a.actual_vaccine_date, a.vaccine_id FROM m_consult_mc_vaccine a, m_lib_vaccine b WHERE a.patient_id='$r_prenatal[$i]' AND a.vaccine_id=b.vaccine_id ORDER by a.actual_vaccine_date DESC") or die("Cannot query: 210");
  189. if(mysql_num_rows($q_vaccine)!=0):
  190. while($r_vaccine=mysql_fetch_array($q_vaccine))
  191. {
  192. switch($r_vaccine[vaccine_id])
  193. {
  194. case 'TT1':
  195. $r_dates[0].=$r_vaccine[actual_vaccine_date]."\n";
  196. break;
  197. case 'TT2':
  198. $r_dates[1].=$r_vaccine[actual_vaccine_date]."\n";
  199. break;
  200. case 'TT3':
  201. $r_dates[2].=$r_vaccine[actual_vaccine_date]."\n";
  202. break;
  203. case 'TT4':
  204. $r_dates[3].=$r_vaccine[actual_vaccine_date]."\n";
  205. break;
  206. case 'TT5':
  207. $r_dates[4].= $r_vaccine[actual_vaccine_date]."\n";
  208. break;
  209. default:
  210. break;
  211. }
  212. }
  213. //print_r($r_dates);
  214. $tt_stat = $this->get_tt_status($r_dates);
  215. else:
  216. $tt_stat = 'Unknown';
  217. endif;
  218. $q_postpartum = mysql_query("SELECT delivery_date,delivery_location,birthweight,outcome_id,birthmode,trimester3_date, TO_DAYS(delivery_date) as del_days FROM m_patient_mc WHERE mc_id='$r_mc_id[$i]' AND patient_id='$r_prenatal[$i]'") or die("cannot query: 245");
  219. list($del_date,$del_location,$bwt,$outcome,$bmode,$del_days,$tri3) = mysql_fetch_array($q_postpartum);
  220. $bwt_gm = empty($bwt)?'':($bwt * 1000);
  221. if($del_date=='0000-00-00'):
  222. $del_date = '';
  223. endif;
  224. $outcome_code = empty($outcome)?'':$this->get_outcome_code($outcome,$r_mc_id[$i]);
  225. $del_location = $this->get_delivery_location($del_location);
  226. $bmode = empty($bmode)?'':$this->get_attended($bmode);
  227. $ironman = $this->get_iron_intake($r_prenatal[$i],$r_mc_id[$i],$tri3);
  228. $riskcode = $this->get_risk_code($r_prenatal[$i],$r_mc_id[$i]);
  229. $remark = $this->get_prenatal_remarks($r_prenatal[$i],$r_mc_id[$i]);
  230. $this->SetWidths($w);
  231. $this->Row(array($tt_stat,$r_dates[0],$r_dates[1],$r_dates[2],$r_dates[3],$r_dates[4],$ironman,$riskcode,$del_date,$outcome_code,$bwt_gm,$del_location,$bmode,$remark));
  232. }
  233. }
  234. function get_tt_status($tt_dates){
  235. ksort($tt_dates);
  236. arsort($tt_dates);
  237. list($max,$value) = each($tt_dates);
  238. $max+=1;
  239. return 'TT'.$max;
  240. }
  241. function get_outcome_code($outcome,$mc_id){
  242. $get_lmp = mysql_query("SELECT TO_DAYS(patient_lmp) as pxlmp, TO_DAYS(delivery_date) as pxdel FROM m_patient_mc WHERE mc_id='$mc_id'") or die("cannot query: 270");
  243. list($lmp_days,$del_days) = mysql_fetch_array($get_lmp);
  244. $wks = floor(($del_days-$lmp_days)/7);
  245. if($outcome=='SB'):
  246. if($wks >= 20):
  247. $outcome_code = 'SB';
  248. else:
  249. $outcome_code = 'AB';
  250. endif;
  251. elseif($outcome=='FDU'):
  252. $outcode_code = 'Fetal Death';
  253. else:
  254. $outcome_code = 'LB';
  255. endif;
  256. return $outcome_code;
  257. }
  258. function get_delivery_location($del_loc){
  259. if($del_loc=='HOME'):
  260. $lokasyon = 'Home';
  261. elseif($del_loc=='HOSP'):
  262. $lokasyon = 'Hospital';
  263. elseif($del_loc=='LYIN'):
  264. $lokasyon = 'Lying-in Clinic';
  265. else:
  266. $lokasyon = '';
  267. endif;
  268. return $lokasyon;
  269. }
  270. function get_attended($bmode){
  271. $q_bmode = mysql_query("SELECT attendant_name FROM m_lib_mc_birth_attendant WHERE attendant_id='$bmode'") or die(mysql_error());
  272. list($attendant) = mysql_fetch_array($q_bmode);
  273. switch($bmode){
  274. case 'MD':
  275. $code_bmode = 'A';
  276. break;
  277. case 'RN':
  278. $code_bmode = 'B';
  279. break;
  280. case 'MW':
  281. $code_bmode = 'C';
  282. case 'TRH':
  283. $code_bmode = 'D';
  284. break;
  285. case 'UTH':
  286. $code_bmode = 'D';
  287. default:
  288. $code_bmode = 'E';
  289. break;
  290. }
  291. return $code_bmode;
  292. }
  293. function get_iron_intake($pxid,$mcid,$tri3){
  294. $q_iron = mysql_query("SELECT actual_service_date, service_qty FROM m_consult_mc_services WHERE patient_id='$pxid' AND mc_id='$mcid' AND service_id='IRON' AND actual_service_date <= '$tri3' ORDER by actual_service_date DESC") or die(mysql_error());
  295. if(mysql_num_rows($q_iron)>0):
  296. while($r_iron = mysql_fetch_array($q_iron)){
  297. $iron.= $r_iron[actual_service_date].'('.$r_iron[service_qty].')'."\n";
  298. }
  299. else:
  300. $iron = '';
  301. endif;
  302. return $iron;
  303. }
  304. function get_risk_code($pxid,$mcid){
  305. $q_riskcode = mysql_query("SELECT visit_risk_id,date_detected FROM m_consult_mc_visit_risk WHERE patient_id='$pxid' AND mc_id='$mcid' ORDER by date_detected DESC") or die(mysql_error());
  306. if(mysql_num_rows($q_riskcode)>0):
  307. $q_px_bday = mysql_query("SELECT floor((TO_DAYS(a.patient_lmp) - TO_DAYS(b.patient_dob))/365) as px_bday FROM m_patient_mc a,m_patient b WHERE a.mc_id='$mcid' AND a.patient_id='$pxid' AND a.patient_id=b.patient_id") or die(mysql_error());
  308. list($px_age) = mysql_fetch_array($q_px_bday);
  309. if($px_age<18 || $px_age>35):
  310. $code.=$edad_issue = 'A'."\n";
  311. endif;
  312. while($r_riskcode = mysql_fetch_array($q_riskcode)){
  313. ;
  314. list($r_date) = explode(' ',$r_riskcode[date_detected]);
  315. if($r_riskcode[visit_risk_id]=='2'):
  316. $itsrisky = 'B';
  317. elseif($r_riskcode[visit_risk_id]=='38'):
  318. $itsrisky = 'C';
  319. elseif($r_riskcode[visit_risk_id]=='3' || $r_riskcode[visit_risk_id]=='36'):
  320. $itsrisky = 'D';
  321. elseif($r_riskcode[visit_risk_id]=='24' || $r_riskcode[visit_risk_id]=='23' || $r_riskcode[visit_risk_id]=='26' || $r_riskcode[visit_risk_id]=='37' || $r_riskcode[visit_risk_id]=='28'):
  322. $itsrisky = 'E';
  323. else:
  324. $itsrisky = 'Others';
  325. endif;
  326. $code.= $itsrisky.'('.$r_date.')'."\n";
  327. }
  328. else:
  329. $code = '';
  330. endif;
  331. return $code;
  332. }
  333. function get_prenatal_remarks($pxid,$mcid){
  334. $get_remark = mysql_query("SELECT prenatal_remarks FROM m_patient_mc WHERE patient_id='$pxid' AND mc_id='$mcid'") or die("Cannot query: 412");
  335. list($remarks) = mysql_fetch_array($get_remark);
  336. return $remarks;
  337. }
  338. function Footer()
  339. {
  340. //Position at 1.5 cm from bottom
  341. $this->SetY(-15);
  342. //Arial italic 8
  343. $this->SetFont('Arial','I',8);
  344. //Page number
  345. $this->Cell(0,10,$this->PageNo().'/{nb}',0,0,'C');
  346. }
  347. }
  348. //print_r($_SESSION[prenatal_mc_px]);
  349. $_SESSION[pahina] = $page==1?1:2;
  350. $pdf=new PDF('L','mm','Legal');
  351. $pdf->AliasNbPages();
  352. $pdf->SetFont('Arial','',10);
  353. $pdf->AddPage();
  354. $_SESSION[pahina]==1?$pdf->show_records():$pdf->show_second();
  355. $pdf->Output();
  356. //header("Location: ../index.php");
  357. ?>