start_date)){ $start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); } else { $start_date = Carbon::now()->startOfDay()->toDateTimeString(); $end_date = Carbon::now()->endOfDay()->toDateTimeString(); } // get all diagnoses with hmis category mental health $diagnoses = Diagnosis::where('hmis_category', 8)->get()->toArray(); $reports = []; foreach ($diagnoses as $diagnosis){ $patient_ids =[]; $consultation = Consultation::where('primary_diagnosis', $diagnosis['id'])->whereBetween('created_at', [$start_date, $end_date])->get(); if(!empty($consultation)) foreach ($consultation as $key => $value) $patient_ids[] = $value->patient_id; $reports[] = ['name'=>$diagnosis['name'], 'count'=>count($consultation), 'patient_ids'=>$patient_ids]; } return view('reports::mental_health_reports.diagnosed_patients', compact('start_date', 'end_date', 'reports')); } public function persons_taking_psychotropic_drugs(Request $request){ // get array of accepted drugs $drugs = Drug::whereIn('category_id', [13,27,32,37,46,53])->pluck('id', 'id')->toArray(); $drugs = array_fill_keys(array_keys($drugs), 0); $drug_patient_id = []; if (isset($request->start_date)){ $start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); } else { $start_date = Carbon::now()->startOfDay()->toDateTimeString(); $end_date = Carbon::now()->endOfDay()->toDateTimeString(); } // get all diagnoses with hmis category mental health $diagnoses = Diagnosis::where('hmis_category', 8)->get()->toArray(); foreach ($diagnoses as $diagnosis){ $consultations = Consultation::where('primary_diagnosis', $diagnosis['id'])->whereBetween('created_at', [$start_date, $end_date])->get(); foreach ($consultations as $consultation){ $patient_id = $consultation->patient_id; $episode_id = $consultation->episode_id; // select treatments $treatments = Treatment::where('patient_id', $patient_id)->where('episode_id', $episode_id)->get(); foreach ($treatments as $treatment){ $ordered_drugs_array = explode(",", $treatment->drugs); // i'm tired of foreach's foreach ($ordered_drugs_array as $record){ if (key_exists($record, $drugs)){ $drugs[$record]++; $drug_patient_id[$record]['patient_ids'][]= $patient_id; } } } } } return view('reports::mental_health_reports.persons_taking_psychotropic_drugs', compact('drugs', 'start_date','drug_patient_id', 'end_date')); } public function diagnosed_persons_who_received_treatment(Request $request){ if (isset($request->start_date)){ $start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); } else { $start_date = Carbon::now()->startOfDay()->toDateTimeString(); $end_date = Carbon::now()->endOfDay()->toDateTimeString(); } // get all diagnoses with hmis category mental health $diagnoses = Diagnosis::where('hmis_category', 8)->get()->toArray(); $reports = []; $reports_counter = 0; foreach ($diagnoses as $diagnosis){ $consultations = Consultation::where('primary_diagnosis', $diagnosis['id'])->whereBetween('created_at', [$start_date, $end_date])->get(); $reports[$reports_counter]['name'] = $diagnosis['name']; $reports[$reports_counter]['number_of_patients'] = count($consultations); $patient_ids = $treated_patient_ids =[]; $patients_who_received_treatment = 0; foreach ($consultations as $consultation){ // select treatments $treatments = Treatment::where('patient_id', $consultation->patient_id)->where('episode_id', $consultation->episode_id)->get(); if (count($treatments) > 0){ // patient received treatment $patients_who_received_treatment++; foreach($treatments as $treatment) $treated_patient_ids[] = $treatment->patient_id; } $patient_ids[]= $consultation->patient_id; } $reports[$reports_counter]['number_of_patients_with_treatment'] = $patients_who_received_treatment; $reports[$reports_counter]['patient_ids'] = $patient_ids; $reports[$reports_counter]['treated_patient_ids'] = $treated_patient_ids; $reports_counter++; } return view('reports::mental_health_reports.diagnosed_persons_who_received_treatment', compact('reports', 'start_date', 'end_date')); } public function patients_lost_to_follow_up(Request $request) { if (isset($request->start_date)){ $start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateString(); } else { $start_date = Carbon::now()->startOfDay()->toDateTimeString(); $end_date = Carbon::now()->endOfDay()->toDateTimeString(); } // get all diagnoses with hmis category mental health $diagnoses = Diagnosis::where('hmis_category', 8)->pluck('id')->toArray(); $follow_ups = $number_of_patients_lost_ids = $total_follow_ups_ids = []; $number_of_patients_lost = 0; $total_follow_ups = 0; $lost_follow_ups = PatientAppointment::whereBetween('appointment_date', [$start_date, $end_date])->get(); foreach ($lost_follow_ups as $record) { $consultation = Consultation::where('episode_id', $record->episode_id)->first(); if ($consultation && in_array($consultation->primary_diagnosis, $diagnoses)){ if ($record->appointment_fulfilled == 0){ $follow_ups[$number_of_patients_lost]['patient_id']= $number_of_patients_lost_ids[] = $record->patient_id; $follow_ups[$number_of_patients_lost]['created_at'] = $record->created_at; $follow_ups[$number_of_patients_lost]['appointment_date'] = $record->appointment_date; $number_of_patients_lost++; } $total_follow_ups++; $total_follow_ups_ids[]= $record->patient_id; } } $number_of_patients_followed_up = $total_follow_ups - $number_of_patients_lost; $number_of_patients_followed_up_ids = array_diff($total_follow_ups_ids, $number_of_patients_lost_ids); $drop_out_rate = $total_follow_ups > 0 ? ($number_of_patients_lost / $total_follow_ups) * 100 : 0; return view('reports::mental_health_reports.patients_lost_to_follow_up', compact('follow_ups', 'start_date', 'end_date', 'total_follow_ups', 'number_of_patients_followed_up', 'number_of_patients_lost', 'drop_out_rate','number_of_patients_followed_up_ids','number_of_patients_lost_ids', 'total_follow_ups_ids')); } public function days_drugs_out_of_stock(Request $request) { $drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at') ->whereIn('category_id', [13,27,32,37,46,53]) ->pluck('id')->toArray(); if (isset($request->start_date)) { $start_date = Carbon::createFromFormat('d/m/Y', $request->start_date); $end_date = Carbon::createFromFormat('d/m/Y', $request->end_date); } else { $start_date = Carbon::now(); $end_date = Carbon::now(); } $selected_drugs = []; $stock_watcher_records = DB::table('stock_watcher') ->where('item_type', 1) ->whereIn('item_id', $drugs) ->get(); foreach ($stock_watcher_records as $record) { $start_date_search = clone $start_date; // or you can use $start_date->copy() $end_date_search = clone $end_date; $details_arr = json_decode($record->details, true); // keep incrementing the start date till it reaches the next day after the end date and stop while (!$start_date_search->isAfter($end_date_search)) { if (isset($details_arr[$start_date_search->toDateString()]) && $details_arr[$start_date_search->toDateString()]["pharmacy_stock"] < 1 && $details_arr[$start_date_search->toDateString()]["store_stock"] < 1) { $selected_drugs[$record->item_id] = 1 + ($selected_drugs[$record->item_id] ?? 0); } $start_date_search->addDay(); } } return view('reports::mental_health_reports.days_drugs_out_of_stock', compact('selected_drugs', 'start_date', 'end_date')); } }