Files

162 lines
10 KiB
PHP
Executable File

<?php
namespace Modules\Reports\Http\Controllers;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Streamline\Models\HospitalInformation;
use Streamline\Models\PatientEpisode;
use Streamline\Models\Investigation;
class HmisController002 extends Controller {
public function page_1(Request $request) {
$search_text = "";
switch ($request->search_date_by){
case 'yesterday':
$end_date = Carbon::yesterday()->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::yesterday()->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "Yesterday ";
break;
case 'custom_date':
$end_date = Carbon::parse($request->start_date)->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::parse($request->start_date)->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "From: " . streamline_date($start_date) . " ";
break;
case 'custom_date_range':
$end_date = Carbon::parse($request->end_date)->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::parse($request->start_date)->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "From: " . streamline_date($start_date) . " to " . streamline_date($end_date) . " ";
break;
case 'today':
default:
$end_date = Carbon::today()->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::today()->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "Today ";
break;
}
$episodes = PatientEpisode::leftJoin('triage', 'patient_episodes.triage_id', '=', 'triage.id')
->leftJoin('patients', 'patient_episodes.patient_id', '=', 'patients.id')
->leftJoin('consultations as c', 'patient_episodes.id', '=', 'c.episode_id')
->leftJoin('districts', 'patients.district_id', '=', 'districts.id')
->leftJoin('subcounties', 'patients.subcounty_id', '=', 'subcounties.id')
->leftJoin('parishes', 'patients.parish_id', '=', 'parishes.id')
->leftJoin('villages', 'patients.village_id', '=', 'villages.id')
->leftJoin('family_relations', 'patients.next_of_kin_relationship', '=', 'family_relations.id')
->select('patient_episodes.id as id', 'first_name', 'last_name', 'date_of_birth', 'gender', 'citizenship', 'next_of_kin', 'national_id', 'phone', 'rbs', 'phone_of_next_of_kin', 'next_of_kin_relationship', 'family_relations.name as relation', 'observations', 'new_attendance', 'villages.name as village', 'parishes.name as parish', 'subcounties.name as subcounty', 'districts.name as district', 'patient_episodes.created_at', 'patient_episodes.consultation_id','patient_episodes.triage_id')
->whereBetween('patient_episodes.created_at', [$start_date, $end_date])->orderBy('id', 'asc')
->get();
$hospital_info = HospitalInformation::find(1);
return view('reports::hmis_reports.002.page-1', compact('search_text', 'episodes', 'start_date','hospital_info','end_date'));
}
public function page_1_print($start_date, $end_date) {
$episodes = PatientEpisode::leftJoin('triage', 'patient_episodes.triage_id', '=', 'triage.id')
->leftJoin('patients', 'patient_episodes.patient_id', '=', 'patients.id')
->leftJoin('consultations as c', 'patient_episodes.id', '=', 'c.episode_id')
->leftJoin('districts', 'patients.district_id', '=', 'districts.id')
->leftJoin('subcounties', 'patients.subcounty_id', '=', 'subcounties.id')
->leftJoin('parishes', 'patients.parish_id', '=', 'parishes.id')
->leftJoin('villages', 'patients.village_id', '=', 'villages.id')
->leftJoin('family_relations', 'patients.next_of_kin_relationship', '=', 'family_relations.id')
->select('patient_episodes.id as id', 'first_name', 'last_name', 'date_of_birth', 'gender', 'citizenship', 'next_of_kin', 'national_id', 'phone', 'rbs', 'phone_of_next_of_kin', 'next_of_kin_relationship', 'family_relations.name as relation', 'observations', 'new_attendance', 'villages.name as village', 'parishes.name as parish', 'subcounties.name as subcounty', 'districts.name as district', 'patient_episodes.created_at', 'patient_episodes.consultation_id','patient_episodes.triage_id')
->whereBetween('patient_episodes.created_at', [$start_date, $end_date])->orderBy('id', 'asc')
->get();
$search_text = "From: " . streamline_date($start_date) . " to " . streamline_date($end_date);
$hospital_info = HospitalInformation::find(1);
$data = [
'search_text' => $search_text,
'episodes' => $episodes,
'hospital_info' => $hospital_info,
'start_date' => $start_date,
'end_date' => $end_date
];
$pdf = SnappyPDF::loadView('reports::hmis_reports/002/page-1-print', $data)
->setOrientation('landscape')
->setPaper('a3')
->setOption('margin-bottom', 10)
->setOption('footer-left', 'Stre@mline')
->setOption('footer-right', '[page] of [toPage]');
return $pdf->inline('HMIS OPD 002 - Outpatient Register' . date(" d-m-y h:ia") . '.pdf');
}
public function page_2(Request $request) {
$search_text = !empty($request->search_text)? $request->search_text :"";
if(!empty($request->page_1_start_date)){
$end_date = $request->end_date;
$start_date = $request->page_1_start_date;
} else
switch ($request->search_date_by){
case 'yesterday':
$end_date = Carbon::yesterday()->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::yesterday()->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "Yesterday ";
break;
case 'custom_date':
$end_date = Carbon::parse($request->start_date)->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::parse($request->start_date)->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "From: " . streamline_date($start_date) . " ";
break;
case 'custom_date_range':
$end_date = Carbon::parse($request->end_date)->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::parse($request->start_date)->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "From: " . streamline_date($start_date) . " to " . streamline_date($end_date) . " ";
break;
case 'today':
default:
$end_date = Carbon::today()->endOfDay()->format('Y-m-d H:i:s');
$start_date = Carbon::today()->startOfDay()->format('Y-m-d H:i:s');
$search_text .= "Today ";
break;
}
$episodes = PatientEpisode::leftJoin('triage', 'patient_episodes.triage_id', '=', 'triage.id')
->leftJoin('patients', 'patient_episodes.patient_id', '=', 'patients.id')
->leftJoin('consultations as c', 'patient_episodes.id', '=', 'c.episode_id')
->leftJoin('treatments as t', 'patient_episodes.id', '=', 't.episode_id')
->leftJoin('investigation_results as or', 'or.episode_id','patient_episodes.id')
->leftJoin('eye_clinic_main_exam as e', 'patient_episodes.id', '=', 'e.episode_id')
->select('patient_episodes.id as id', 'first_name', 'last_name', 'date_of_birth', 'gender', 'next_of_kin', 'national_id','patients.id as patient_id', 'attendance', 'phone', 'phone_of_next_of_kin', 'new_attendance', 're_attendance','primary_diagnosis','other_diagnoses','rdt',DB::raw('GROUP_CONCAT(drugs) as drugs'),DB::raw('GROUP_CONCAT(frequencies) as frequencies'),DB::raw('GROUP_CONCAT(durations) as durations'),DB::raw('GROUP_CONCAT(doses) as doses'),'tb_status_assessment',
'next_of_kin_relationship', 'right_eye_diagnosis', 'triage.symptoms', 'c.symptoms as symps', 'patient_episodes.clinic_id', 'left_eye_diagnosis', DB::raw('GROUP_CONCAT(or.investigation_id) as investigation_ids'), 'observations', 'new_attendance', 'patient_episodes.created_at', 'patient_episodes.consultation_id','patient_episodes.triage_id', 'number', 'c.referred_to')
->whereBetween('patient_episodes.created_at', [$start_date, $end_date])->orderBy('id', 'asc')->groupBy('id')
->get();
$hospital_info = HospitalInformation::find(1);
$fever_symptom_ids = DB::table('symptoms')->where('name', 'LIKE', "%fever%")->orderBy('name')->pluck('id')->toArray();
$tb_clinic_ids = DB::table('clinics')->where('name', 'LIKE', "%tb%")->orWhere('name', 'LIKE', "%tuber%")->pluck('id')->toArray();
$investigations = Investigation::whereIn('hmis_002_slug', [2,3])->pluck('id')->toArray();
return view('reports::hmis_reports.002.page-2', compact('search_text', 'episodes', 'start_date', 'end_date', 'hospital_info', 'fever_symptom_ids','tb_clinic_ids','investigations'));
}
public function page_2_print(Request $request) {
$data = [
'search_text' => $request->search_text,
'episodes'=> unserialize($request->episodes),
'start_date' => $request->start_date,
'end_date' => $request->end_date,
'hospital_info' => unserialize($request->hospital_info),
'fever_symptom_ids'=> unserialize($request->fever_symptom_ids),
'tb_clinic_ids'=> unserialize($request->tb_clinic_ids),
'investigations'=> unserialize($request->investigations)
];
$pdf = SnappyPDF::loadView('reports::hmis_reports/002/page-2-print', $data)
->setOrientation('landscape')
->setPaper('a3')
->setOption('margin-bottom', 10)
->setOption('footer-left', 'Stre@mline')
->setOption('footer-right', '[page] of [toPage]');
return $pdf->inline('HMIS OPD 002 - Outpatient Register' . date(" d-m-y h:ia") . '.pdf');
}
}