diff --git a/app/Config/Routes.php b/app/Config/Routes.php index ef432b4..9f9943e 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -1045,6 +1045,9 @@ $routes->get('Report/collection_report', 'Report::collection_report', ['filter' $routes->get('Report/report_opd_total', 'Report::report_opd_total', ['filter' => $reportsCollectionFilter]); $routes->get('Report/opd_total_data/(:segment)/(:segment)/(:segment)/(:segment)', 'Report::opd_total_data/$1/$2/$3/$4', ['filter' => $reportsCollectionFilter]); $routes->get('Report/opd_total_data/(:segment)/(:segment)/(:segment)/(:segment)/(:num)', 'Report::opd_total_data/$1/$2/$3/$4/$5', ['filter' => $reportsCollectionFilter]); +$routes->get('Report/report_opd_patient_list', 'Report::report_opd_patient_list', ['filter' => $reportsCollectionFilter]); +$routes->get('Report/opd_patient_list_data/(:segment)/(:segment)/(:segment)', 'Report::opd_patient_list_data/$1/$2/$3', ['filter' => $reportsCollectionFilter]); +$routes->get('Report/opd_patient_list_data/(:segment)/(:segment)/(:segment)/(:num)', 'Report::opd_patient_list_data/$1/$2/$3/$4', ['filter' => $reportsCollectionFilter]); $routes->get('Report/report_total_payment_app_show/(:segment)/(:segment)/(:segment)', 'Report::report_total_payment_app_show/$1/$2/$3', ['filter' => $reportsCollectionFilter]); $routes->get('Report/report_total_payment_app_show/(:segment)/(:segment)/(:segment)/(:num)', 'Report::report_total_payment_app_show/$1/$2/$3/$4', ['filter' => $reportsCollectionFilter]); $routes->get('Report/report_total_payment_app_show/(:segment)/(:segment)/(:segment)/(:segment)', 'Report::report_total_payment_app_show/$1/$2/$3/$4', ['filter' => $reportsCollectionFilter]); diff --git a/app/Controllers/Report.php b/app/Controllers/Report.php index c35bf9e..ea8aa35 100644 --- a/app/Controllers/Report.php +++ b/app/Controllers/Report.php @@ -58,6 +58,98 @@ class Report extends BaseController ]); } + public function report_opd_patient_list() + { + $doctors = $this->db->table('doctor_master') + ->select('id, p_fname') + ->where('active', 1) + ->orderBy('p_fname', 'ASC') + ->get() + ->getResult(); + + $referBys = $this->db->table('patient_master') + ->select('referby') + ->where('referby IS NOT NULL', null, false) + ->where("TRIM(referby) != ''", null, false) + ->where("TRIM(referby) != '0'", null, false) + ->groupBy('referby') + ->orderBy('referby', 'ASC') + ->get() + ->getResult(); + + return view('report/opd_patient_list_report', [ + 'doctors' => $doctors, + 'refer_bys' => $referBys, + ]); + } + + public function opd_patient_list_data( + string $dateRange, + string $doctorId = '0', + string $referBy = '0', + int $output = 0 + ) { + [$minRange, $maxRange] = $this->parseDateRangeDateOnly($dateRange); + + $builder = $this->db->table('opd_master o') + ->select('o.opd_id, o.opd_code, o.P_name, p.p_code, o.apointment_date, o.doc_name, p.referby') + ->select('o.opd_fee_desc, o.opd_fee_amount, o.payment_mode, o.running_opd') + ->join('patient_master p', 'p.id = o.p_id', 'left') + ->where("DATE(o.apointment_date) BETWEEN '{$minRange}' AND '{$maxRange}'", null, false) + ->where('(o.payment_mode > 0 OR COALESCE(o.running_opd,0)=1)', null, false) + ->orderBy('o.apointment_date', 'ASC') + ->orderBy('o.opd_id', 'ASC'); + + $doctorIdValue = (int) $doctorId; + if ($doctorIdValue > 0) { + $builder->where('o.doc_id', $doctorIdValue); + } + + $referByValue = trim((string) urldecode($referBy)); + if ($referByValue !== '' && $referByValue !== '0' && strtolower($referByValue) !== 'all') { + $builder->where('p.referby', $referByValue); + } + + $rows = $builder->get()->getResult(); + $content = view('report/opd_patient_list_report_table', [ + 'rows' => $rows, + 'min_range' => $minRange, + 'max_range' => $maxRange, + ]); + + if ($output === 1) { + ExportExcel($content, 'OPD_Patient_List_' . date('YmdHis')); + return $this->response->setBody(''); + } + + if ($output === 2) { + $mpdfTempDir = WRITEPATH . 'cache' . DIRECTORY_SEPARATOR . 'mpdf'; + if (! is_dir($mpdfTempDir)) { + mkdir($mpdfTempDir, 0755, true); + } + + $mpdf = new Mpdf([ + 'tempDir' => $mpdfTempDir, + 'format' => 'A4-L', + 'margin_top' => 8, + 'margin_bottom' => 8, + 'margin_left' => 8, + 'margin_right' => 8, + ]); + $pdfHtml = '' + . '
OPD Date Range: = esc(date('d-m-Y', strtotime($minRange))) ?> to = esc(date('d-m-Y', strtotime($maxRange))) ?>
+ +| # | +OPD Code | +Patient Name | +Patient Code | +OPD Date | +Doctor | +Refer By | +Fee Type | +Fee | +
|---|---|---|---|---|---|---|---|---|
| = esc((string) ($index + 1)) ?> | += esc((string) ($row->opd_code ?? '')) ?> | += esc((string) ($row->P_name ?? '')) ?> | += esc((string) ($row->p_code ?? '')) ?> | += esc($formatDate($row->apointment_date ?? '')) ?> | += esc((string) ($row->doc_name ?? '')) ?> | += esc((string) ($row->referby ?? '')) ?> | += esc((string) ($row->opd_fee_desc ?? '')) ?> | += esc(number_format((float) ($row->opd_fee_amount ?? 0), 2)) ?> | +