middleware('auth'); $this->middleware('permission:diagnosis-list', ['only' => ['index']]); $this->middleware('permission:diagnosis-create', ['only' => ['create', 'store']]); $this->middleware('permission:diagnosis-edit', ['only' => ['edit', 'update', 'edit_all', 'update_all']]); $this->middleware('permission:diagnosis-delete', ['only' => ['destroy', 'inactive', 'activate']]); } /** * Display a listing of the resource. * */ public function index() { $diagnoses = Diagnosis::orderBy('name', 'asc')->leftJoin('hmis_category_options as h', 'h.id', 'diagnoses.hmis_no_inpatient') ->select('diagnoses.*', 'h.number as inpatient_number') ->paginate(10000); $hmis_categories = DB::table('hmis_categories') ->orderBy('title', 'asc') ->pluck('title', 'id'); $issued_diagnoses = []; $hmis_category_options = HmisCategoryOptions::orderBy('name', 'asc')->pluck('name', 'id'); $consultations_primary = Consultation::distinct('primary_diagnosis')->select('primary_diagnosis'); $inpatient_primary = InpatientInfo::distinct('primary_diagnosis')->select('primary_diagnosis')->union($consultations_primary)->get()->toArray(); foreach($inpatient_primary as $diagnosis) if(!in_array($diagnosis['primary_diagnosis'], $issued_diagnoses) && !empty($diagnosis['primary_diagnosis'])) $issued_diagnoses[]=$diagnosis['primary_diagnosis']; $consultations_other = Consultation::distinct('other_diagnoses')->select('other_diagnoses'); $inpatient_other = InpatientInfo::distinct('other_diagnoses')->select('other_diagnoses')->union($consultations_other)->get(); foreach($inpatient_other as $diagnosis_other) { $other_diagnoses = unserialize($diagnosis_other->other_diagnoses); if(!empty($other_diagnoses)) foreach($other_diagnoses as $other_diagnosis) if(!in_array(intval($other_diagnosis), $issued_diagnoses)) $issued_diagnoses[]= intval($other_diagnosis); } return view('clinical_data::diagnoses.index', compact('diagnoses', 'hmis_categories','issued_diagnoses', 'hmis_category_options')); } /** * Show the form for creating a new resource. * */ public function create() { $hmis_categories = DB::table('hmis_categories')->whereIn('section_number',[6,7,1])->orderBy('title', 'asc')->get(); $inpatient_hmis_categories = $hmis_categories->filter(function($hmis_category){ return $hmis_category->type == 1; })->pluck('title', 'id')->prepend('- Select HMIS Inpatient Category -', ''); $outpatient_hmis_categories = $hmis_categories->filter(function($hmis_category){ return $hmis_category->type == 0; })->pluck('title', 'id')->prepend('- Select HMIS Outpatient Category -', ''); $parent_categories = array_unique(HmisCategoryOptions::where('parent_option', '<>','')->pluck('parent_option')->toArray()); $diagnosis_categories = DiagnosisCategory::orderBy('name', 'asc')->pluck('name', 'id')->prepend('None', 0); $insurance_tariffs = DB::table('insurance_tariffs')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); return view('clinical_data::diagnoses.create', compact('hmis_categories', 'insurance_tariffs','parent_categories', 'inpatient_hmis_categories', 'outpatient_hmis_categories', 'diagnosis_categories')); } /** * Store a newly created resource in storage. * */ public function store(Request $request) { request()->validate([ 'name' => 'required|unique:diagnoses' ]); $logged_in_user_id = Auth()->user()->id; $diagnosis = new Diagnosis; //Reference Names $reference_names_array = $request->reference_names; $reference_names = ""; //Processing reference areas $reference_areas_array = $request->reference_areas; $reference_areas = ""; if ($request->insurance_tariffs) { $diagnosis->insurance_tariffs = implode(",", $request->insurance_tariffs); } for ($x = 0; $x < count($reference_areas_array); $x++): $reference_area = $reference_areas_array[$x]; $reference_area_data = parse_url($reference_area); if (empty($reference_area_data['scheme'])): $reference_area = 'http://' . ltrim($reference_area, '/'); endif; $reference_areas .= $reference_area . ","; $reference_names .= rtrim($reference_names_array[$x], ", ") . ","; endfor; if (!empty($request->district_code) && $request->outpatient_hmis_category_option == '655') { $district_code = HmisCategoryOptions::updateOrCreate(['name' => $request->district_code,'number' => 'Code', 'hmis_category_id' => 0],[ 'name' => $request->district_code, 'number' => 'Code', 'hmis_category_id' => 0, 'parent_option' => $request->outpatient_hmis_category_option, 'created_by' => Auth()->user()->id ]); } $diagnosis->name = $request->name; $diagnosis->icd10_code = $request->icd10_code; $diagnosis->available = $request->available; // $diagnosis->hmis_no_outpatient = $request->hmis_no_outpatient; $diagnosis->hmis_no_inpatient = $request->hmis_no_inpatient; $diagnosis->prompts = $request->prompts; $diagnosis->diagnosis_category = $request->diagnosis_category?? null; $diagnosis->chronic_status = $request->chronic_status; $diagnosis->reference_areas = rtrim($reference_areas, ", "); $diagnosis->reference_names = rtrim($reference_names, ", "); $diagnosis->hmis_category = $request->hmis_category; $diagnosis->dependent_option = $request->parent_dependent_option ?? null; $diagnosis->outpatient_hmis_category = $request->outpatient_hmis_category ?? null; $diagnosis->outpatient_hmis_category_option = $request->outpatient_hmis_category_option ?? null; if(!empty($district_code->id)) $diagnosis->outpatient_dependent_option = $district_code->id; else $diagnosis->outpatient_dependent_option = $request->outpatient_dependent_option ?? null; $diagnosis->created_by = $logged_in_user_id; try { $diagnosis->save(); if ($request->insurance_tariffs) { // add diagnoses to the tariffs foreach ($request->insurance_tariffs as $tariff_id) { try { $tariff = InsuranceTariff::find($tariff_id); if ($tariff->linked_diagnoses) { $current_diagnoses = explode(",", $tariff->linked_diagnoses); $current_diagnoses = array_merge($current_diagnoses, $diagnosis->id); } else { $current_diagnoses = [$diagnosis->id]; } $tariff->linked_diagnoses = implode(",", $current_diagnoses); $tariff->save(); } catch (\Exception $exception) {} } } flash($request->name . " Diagnosis has been saved")->success(); return redirect("/diagnoses/"); } catch (QueryException $e) { flash("An error occurred!")->error(); return back()->withInput(); } } /** * Display the specified resource. * * @param int $id */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id */ public function edit($id) { $diagnosis = Diagnosis::findOrFail($id); $hmis_categories = HmisCategory::whereIn('section_number',[6,7,1])->orderBy('title', 'asc')->get(); $diagnosis_categories = DiagnosisCategory::orderBy('name', 'asc')->pluck('name', 'id')->prepend('None', 0); $parent_categories = array_unique(HmisCategoryOptions::where('parent_option', '<>','')->pluck('parent_option')->toArray()); $insurance_tariffs = DB::table('insurance_tariffs')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); $inpatient_category_options_header = (!empty($diagnosis->hmis_no_inpatient) || $diagnosis->hmis_no_inpatient == '-')? '- Select HMIS Inpatient Category Option -': '- Firstly, Select HMIS Inpatient Category -'; $outpatient_category_options_header = !empty($diagnosis->outpatient_hmis_category)? '- Select HMIS Outpatient Category Option -': '- Firstly, Select HMIS Outpatient Category -'; $dependent_options_header = '- Select Dependent Option -';$inpatient_category_options = $outpatient_dependent_options = $dependent_options = $outpatient_category_options =[]; if(!empty($diagnosis->hmis_no_inpatient) || $diagnosis->hmis_no_inpatient == '-') $inpatient_category_options = HmisCategoryOptions::where('hmis_category_id', $diagnosis->hmis_category)->pluck('name','id')->prepend($inpatient_category_options_header, ''); if(!empty($diagnosis->outpatient_hmis_category)) $outpatient_category_options = HmisCategoryOptions::where('hmis_category_id', $diagnosis->outpatient_hmis_category)->pluck('name','id')->prepend($outpatient_category_options_header, ''); if(!empty($diagnosis->hmis_no_inpatient) || $diagnosis->hmis_no_inpatient == '-' || in_array($diagnosis->hmis_no_inpatient, $parent_categories)) $dependent_options = HmisCategoryOptions::where('parent_option', $diagnosis->hmis_no_inpatient)->pluck('name','id')->prepend($dependent_options_header, ''); if(!empty($diagnosis->outpatient_hmis_category_option) || in_array($diagnosis->outpatient_hmis_category_option, $parent_categories)) $outpatient_dependent_options = HmisCategoryOptions::where('parent_option', $diagnosis->outpatient_hmis_category_option)->pluck('name','id')->prepend($dependent_options_header, ''); $inpatient_hmis_categories = $hmis_categories->filter(function($hmis_category){ return $hmis_category->type == 1; })->pluck('title', 'id')->prepend('- Select HMIS Inpatient Category -', ''); $outpatient_hmis_categories = $hmis_categories->filter(function($hmis_category){ return $hmis_category->type == 0; })->pluck('title', 'id')->prepend('- Select HMIS Outpatient Category -', ''); return view('clinical_data::diagnoses.edit', compact('diagnosis', 'inpatient_hmis_categories', 'insurance_tariffs', 'outpatient_hmis_categories', 'outpatient_category_options', 'diagnosis_categories', 'inpatient_category_options', 'dependent_options', 'parent_categories', 'outpatient_dependent_options')); } /** * Update the specified resource in storage. * */ public function update(Request $request, $id) { request()->validate([ 'name' => 'required|unique:diagnoses,name,'.$id ]); $logged_in_user_id = Auth()->user()->id; //Reference Names $reference_names_array = $request->reference_names; $reference_names = ""; //Processing reference areas $reference_areas_array = $request->reference_areas; $reference_areas = ""; if (!empty($reference_areas_array)) { for ($x = 0; $x < count($reference_areas_array); $x++): $reference_area = $reference_areas_array[$x]; $reference_area_data = parse_url($reference_area); if (empty($reference_area_data['scheme'])): $reference_area = 'http://' . ltrim($reference_area, '/'); endif; $reference_areas .= $reference_area . ","; $reference_names .= rtrim($reference_names_array[$x], ", ") . ","; endfor; } if (!empty($request->district_code) && $request->outpatient_hmis_category_option == '655') { $district_code = HmisCategoryOptions::updateOrCreate(['id' => $request->district_code_id,'number' => 'Code', 'hmis_category_id' => 0],[ // 'id'=>$hmis_category_option['id'], 'name' => $request->district_code, 'number' => 'Code', 'hmis_category_id' => 0, 'parent_option' => $request->outpatient_hmis_category_option, 'created_by' => Auth()->user()->id ]); } $diagnosis = Diagnosis::find($id); $diagnosis->name = $request->name; $diagnosis->icd10_code = $request->icd10_code; $diagnosis->available = $request->available; // $diagnosis->hmis_no_outpatient = $request->hmis_no_outpatient; $diagnosis->hmis_no_inpatient = $request->hmis_no_inpatient; $diagnosis->prompts = $request->prompts; $diagnosis->chronic_status = $request->chronic_status; $diagnosis->reference_areas = rtrim($reference_areas, ", "); $diagnosis->reference_names = rtrim($reference_names, ", "); $diagnosis->hmis_category = $request->hmis_category; $diagnosis->diagnosis_category = $request->diagnosis_category?? null; $diagnosis->dependent_option = $request->parent_dependent_option ?? null; $diagnosis->outpatient_hmis_category = $request->outpatient_hmis_category ?? null; $diagnosis->outpatient_hmis_category_option = $request->outpatient_hmis_category_option ?? null; if(!empty($district_code->id) && $request->outpatient_hmis_category_option == '655') $diagnosis->outpatient_dependent_option = $district_code->id; else $diagnosis->outpatient_dependent_option = $request->outpatient_dependent_option ?? null; $diagnosis->updated_by = $logged_in_user_id; if ($request->insurance_tariffs) { $original_tariffs = explode(",", $diagnosis->insurance_tariffs); $diagnosis->insurance_tariffs = implode(",", $request->insurance_tariffs); $removed_tariffs = array_diff($original_tariffs, $request->insurance_tariffs); $added_tariffs = array_diff($request->insurance_tariffs, $original_tariffs); // add diagnoses to the tariffs foreach ($added_tariffs as $tariff_id) { try { $tariff = InsuranceTariff::find($tariff_id); if ($tariff->linked_diagnoses) { $current_diagnoses = explode(",", $tariff->linked_diagnoses); $current_diagnoses = array_merge($current_diagnoses, $diagnosis->id); } else { $current_diagnoses = [$diagnosis->id]; } $tariff->linked_diagnoses = implode(",", $current_diagnoses); $tariff->save(); } catch (\Exception $exception) {} } // remove diagnosis from tariffs foreach ($removed_tariffs as $tariff_id) { try { $tariff = InsuranceTariff::find($tariff_id); $current_diagnoses = explode(",", $tariff->linked_diagnoses); if (in_array($diagnosis->id, $current_diagnoses)) { unset($current_diagnoses[array_search($diagnosis->id, $current_diagnoses)]); $tariff->linked_diagnoses = implode(",", $current_diagnoses); $tariff->save(); } } catch (\Exception $exception) {} } } try { $diagnosis->save(); flash($request->name . " Diagnosis has been updated")->success(); return redirect("/diagnoses/"); } catch (QueryException $e) { flash("An error occurred!")->error(); return back()->withInput(); } } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $diagnosis = Diagnosis::find($id); if ($diagnosis->delete()){ flash("Diagnosis has been deleted.")->success(); return redirect('/diagnoses/'); } } /** * Display a listing of the inactive resource(s). * * @return \Illuminate\Http\Response */ public function inactive() { $diagnoses = Diagnosis::onlyTrashed() ->orderBy('name', 'asc') ->paginate(50); $hmis_categories = DB::table('hmis_categories') ->orderBy('title', 'asc') ->pluck('title', 'id'); if (empty($diagnoses)) { flash()->error("There is no inactive diagnosis"); return redirect('/diagnoses/'); } else { return view('clinical_data::diagnoses.inactive', compact('diagnoses', 'hmis_categories')); } } /** * Activate the specified resource in storage. * * @param int $id * @return \Illuminate\Http\Response */ public function activate($id) { $diagnosis = Diagnosis::withTrashed()->find($id); if ($diagnosis->restore()){ flash("Diagnosis has been activated.")->success(); return redirect('/diagnoses/inactive'); } } /** * Display a listing of the active resources for bulk editing. * * @return \Illuminate\Http\Response */ public function edit_all() { $diagnoses = Diagnosis::orderBy('name', 'asc') ->get(); $hmis_categories = DB::table('hmis_categories') ->pluck('title', 'id') ->toArray(); $hmis_categories = ['' => '- select -'] + $hmis_categories; if (count($diagnoses) < 1) { flash()->error("There is no active diagnosis"); return redirect('/diagnoses/'); } else { return view('clinical_data::diagnoses.edit.all', compact('diagnoses', 'hmis_categories')); } } /** * Update all the resources in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function update_all(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required' ]); if ($validator->fails()) { $string = ""; foreach ($validator->errors()->getMessages() as $item) { $string .= "{$item[0]}
"; } // flash($string)->error(); return back()->withErrors($validator)->withInput(); } else { $logged_in_user_id = Auth()->user()->id; $id_array = $request->id; $name_array = $request->name; $icd10_code_array = $request->icd10_code; $hmis_no_outpatient_array = $request->hmis_no_outpatient; $hmis_no_inpatient_array = $request->hmis_no_inpatient; $prompts_array = $request->prompts; $chronic_status_array = $request->chronic_status; $reference_areas_array = $request->reference_areas; $reference_names_array = $request->reference_names; $hmis_category_array = $request->hmis_category; for ($x = 0; $x < count($id_array); $x++): $diagnosis = Diagnosis::find($id_array[$x]); $diagnosis->name = $name_array[$x]; $diagnosis->icd10_code = $icd10_code_array[$x]; $diagnosis->hmis_no_outpatient = $hmis_no_outpatient_array[$x]; $diagnosis->hmis_no_inpatient = $hmis_no_inpatient_array[$x]; $diagnosis->prompts = $prompts_array[$x]; $diagnosis->chronic_status = $chronic_status_array[$x]; $diagnosis->reference_areas = rtrim($reference_areas_array[$x], ", "); $diagnosis->reference_names = rtrim($reference_names_array[$x], ", "); $diagnosis->hmis_category = $hmis_category_array[$x]; $diagnosis->updated_by = $logged_in_user_id; try { $diagnosis->save(); } catch (QueryException $e) { flash("An error occurred")->error(); return back()->withInput(); } endfor; flash("Diagnoses have been updated")->success(); return redirect("/diagnoses/"); } } public function get_diagnosis(Request $request) { $diagnosis_id = $request->diagnosis_id; $diagnosis = Diagnosis::where('id', $diagnosis_id)->first(); $reference_areas_array = explode(",", $diagnosis->reference_areas); $reference_names_array = explode(",", $diagnosis->reference_names); $prompt = empty($diagnosis->prompts) ? " " : $diagnosis->prompts; $links = ""; for ($x = 0; $x < count($reference_areas_array); $x++) { if (isset($reference_areas_array[$x]) && isset($reference_names_array[$x])){ $links .= "" . $reference_names_array[$x] . " | "; } } return $prompt . "&&" . $links; } public function get_diagnosis_by_category($category){ $code = ""; $diagnoses = Diagnosis::where('diagnosis_category', $category)->orderBy('name', 'asc')->get(); foreach ($diagnoses as $diagnosis) { $code .= ""; } $code .= ""; return $code; } public function get_diagnosis_categories(){ $diagnoses = DiagnosisCategory::all(); $code = ""; foreach ($diagnoses as $diagnosis) { $code .= ""; } $code .= ""; return $code; } }