middleware('auth'); $this->middleware('permission:patient-list', ['only' => ['index', 'select']]); $this->middleware('permission:patient-detail', ['only' => ['show']]); $this->middleware('permission:patient-create', ['only' => ['create', 'store']]); $this->middleware('permission:patient-edit', ['only' => ['edit', 'update']]); $this->middleware('permission:patient-delete', ['only' => ['destroy']]); } /** * Display a listing of the resources */ public function index(): View { $patients = DB::table('patients')->whereNull('deleted_at') ->orderBy('created_at', 'desc')->paginate(100); $categories = DB::table('patient_categories')->pluck("name", "id"); $villages = DB::table('villages')->pluck("name", "id")->toArray(); $previous_ids = DB::table('patients')->whereNull('deleted_at') ->distinct()->pluck('previous_id'); $patient_numbers = DB::table('patients')->whereNull('deleted_at') ->pluck('number'); $full_names = DB::table('patients')->whereNull('deleted_at') ->select(DB::raw('CONCAT(first_name, " ", last_name, " - ", number, " - (", phone, ")") AS full_name')) ->pluck("full_name"); return view('patients::patients.index', compact('patients', 'categories', 'patient_numbers', 'villages', 'previous_ids', 'full_names')) ->with('i', (request()->input('page', 1) - 1) * 5); } /** * Show the form for creating a new resource. * */ public function create(): View { $occupations = Occupation::orderBy('name')->pluck('name', 'id')->toArray(); $patient_categories = PatientCategory::where('available', 1)->orderby('name')->pluck('name', 'id')->toArray(); $marital_statuses = MaritalStatus::pluck('name', 'id')->toArray(); $religions = Religion::orderBy('name')->pluck('name', 'id')->toArray(); $relationships = FamilyRelationship::orderBy('name')->pluck('name', 'id')->toArray(); $patient_registration_fields = PatientRegistrationField::orderBy('name', 'asc')->get(); $occupations = ['' => '- select -'] + $occupations; $districts = []; $religions = ['' => '- select -'] + $religions; $relationships = ['' => '- select -'] + $relationships; $dynamic_counties = []; $dynamic_sub_counties = []; $dynamic_parishes = []; $countries = DB::table('countries')->pluck('name', 'id')->prepend('- Select country of origin - ', ''); $companies = Company::orderBy('name')->pluck("name", "id")->toArray(); $companies = ['' => '- select -'] + $companies; return view('patients::patients.create', compact('occupations', 'patient_categories', 'districts', 'marital_statuses', 'religions', 'relationships', 'dynamic_counties', 'dynamic_sub_counties', 'dynamic_parishes', 'countries', 'companies', 'patient_registration_fields')); } /** * Store a newly created resource in storage. * */ public function store(Request $request) { request()->validate([ 'first_name' => 'required', 'last_name' => 'required', 'gender' => 'required', 'date_of_birth' => 'required_without:age_in_years', 'age_in_years' => 'required_without:date_of_birth', /*'national_id' => 'max:15|unique:patients',*/ 'patient_category' => 'required' ]); $other_patients_info_array = [ 'non_ugandan_foreigner_or_refugee' => $request->input('non_ugandan_foreigner_or_refugee'), 'non_ugandan_national_id_no' => $request->input('non_ugandan_national_id_no'), ]; // check if a patient's national_id is in the system already.. $patient_exists = Patient::where('national_id', $request->national_id)->pluck('national_id')->first(); if (is_null($patient_exists)) { $patient = new Patient; $patient->first_name = $request->first_name; $patient->last_name = $request->last_name; $calculated_date_of_birth = null; if (is_null($request->date_of_birth)) { $age_in_years = $request->age_in_years; $calculated_dob = \Carbon\Carbon::now()->subYears($age_in_years); $calculated_date_of_birth = $calculated_dob->toDateString(); $patient->date_of_birth = $calculated_date_of_birth; } else { $patient->date_of_birth = Carbon::createFromFormat('d/m/Y', $request->date_of_birth)->toDateString(); } $patient->marital_status = $request->marital_status; $patient->occupation_id = $request->occupation; $patient->religion_id = $request->religion; $patient->category_id = $request->patient_category; $patient->company_id = $request->company; $patient->citizenship = $request->citizenship; $patient->country_id = $request->country_id; $residence_array = explode(",", $request->residence); $patient->district_id = $residence_array[4] ?? 0; $patient->county_id = $residence_array[3] ?? 0; $patient->subcounty_id = $residence_array[2] ?? 0; $patient->parish_id = $residence_array[1] ?? 0; $patient->village_id = $residence_array[0] ?? 0; $patient->address_details = $request->residence; $patient->gender = $request->gender; $patient->next_of_kin = $request->next_of_kin; $patient->next_of_kin_relationship = $request->next_of_kin_relationship; $patient->phone_of_next_of_kin = removeSpaces($request->next_of_kin_phone); $patient->phone = removeSpaces($request->phone); $patient->alternative_phone = removeSpaces($request->alternative_phone); $patient->national_id = $request->national_id; $patient->phone_owner = $request->phone_owner; // problem $patient->hospital_contact = $request->hospital_contact; $patient->other_patients_info = !empty($other_patients_info_array) ? json_encode($other_patients_info_array) : '' ; $patient->language = $request->language; $patient->lc_one = $request->lc_one; $patient->fingerprint_template = $request->fingerprint_template ?? NULL; $patient->created_by = Auth::user()->id; if (!empty($request->registration_field_values)) { for ($i = 0; $i < count($request->registration_field_values); $i++) $registration_fields[$request->registration_field_names[$i]] = $request->registration_field_values[$i]; $patient->registration_fields = json_encode($registration_fields); } //year prefix $currentYear = Carbon::now()->year; $current_year_last_two_digits = substr($currentYear,-2); $year_prefix = HospitalInformation::where('id', 1)->value('patient_number_year_prefix'); if ($patient->save()) : $prefix = DB::table('hospital_information')->where('id', 1)->value('patient_number_abbr'); $new_id = quadLimit($patient->id); if($year_prefix == 1){ $patient_number = $prefix . "-" . $current_year_last_two_digits . "-" . $new_id; } else{ $patient_number = $prefix . "-" . $new_id; } DB::table('patients')->where('id', $new_id)->update(['number' => $patient_number]); // Updating the patient number flash('Patient with patient number ' . $patient_number . ' has been successfully registered')->success(); return redirect('/patient_episodes/set_patient_id/' . $patient->id); else : flash("There was an error")->error(); return redirect()->back()->withInput(); endif; } else { flash("Patient With This National ID Number is already Registered")->error(); return redirect()->back()->withInput(); } } /** * Display the specified resource. * * @param int $id */ public function show($id): View { $patient = Patient::withTrashed()->find($id); $last_episode = PatientEpisode::where('id', $id)->orderBy('created_at', 'desc')->first(); $country = null; if($patient){ $country = Country::find($patient->country_id); } return view('patients::patients.show', compact('patient', 'last_episode','country')); } /** * Show the form for editing the specified resource. * * @param int $id */ public function edit($id): View { $patient = Patient::where(['id' => $id])->first(); if (is_null($patient->date_of_birth)) { $dob = "01/01/2020"; } else { $dob = Carbon::parse($patient->date_of_birth)->format('d/m/Y'); } $episodes = PatientEpisode::distinct('patient_id')->pluck('patient_id')->toArray(); $occupations = Occupation::orderBy('name')->pluck('name', 'id')->toArray(); $patient_categories = PatientCategory::where('available', 1)->orderby('name')->pluck('name', 'id')->toArray(); $districts = DB::table('districts')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray(); $religions = Religion::orderBy('name')->pluck('name', 'id')->toArray(); $relationships = FamilyRelationship::orderBy('name')->pluck('name', 'id')->toArray(); $patient_registration_fields = PatientRegistrationField::orderBy('name', 'asc')->get(); $occupations = ['' => '- select -'] + $occupations; $districts = ['' => '- select -'] + $districts; $religions = ['' => '- select -'] + $religions; $relationships = ['' => '- select -'] + $relationships; $marital_statuses = DB::table('marital_statuses')->whereNull('deleted_at')->pluck('name', 'id'); $countries = DB::table('countries')->whereNull('deleted_at')->pluck('name', 'id')->prepend('- Select country of origin - ', ''); $companies = Company::orderBy('name')->pluck("name", "id")->toArray(); $companies = ['' => '- select -'] + $companies; return view('patients::patients.edit', compact('patient', 'occupations', 'dob', 'patient_registration_fields', 'patient_categories', 'episodes', 'districts', 'marital_statuses', 'religions', 'relationships', 'countries', 'companies')); } /** * Update the specified resource in storage. */ public function update(Request $request, $id): RedirectResponse { $other_patients_info_array = [ 'non_ugandan_foreigner_or_refugee' => $request->input('non_ugandan_foreigner_or_refugee'), 'non_ugandan_national_id_no' => $request->input('non_ugandan_national_id_no'), ]; request()->validate( [ 'first_name' => 'required', 'last_name' => 'required', 'date_of_birth' => 'required_without:age_in_years', 'age_in_years' => 'required_without:date_of_birth', //'national_id' => 'max:15', 'patient_category' => 'required' ], [ 'first_name.required' => 'Please enter first name' ] ); $patient = Patient::find($id); $patient->first_name = $request->first_name; $patient->last_name = $request->last_name; $calculated_date_of_birth = null; if (is_null($request->date_of_birth)) { $age_in_years = $request->age_in_years; $calculated_dob = \Carbon\Carbon::now()->subYears($age_in_years); $calculated_date_of_birth = $calculated_dob->toDateString(); $patient->date_of_birth = $calculated_date_of_birth; } else { $patient->date_of_birth = Carbon::createFromFormat('d/m/Y', $request->date_of_birth)->toDateString(); } $patient->marital_status = $request->marital_status; $patient->occupation_id = $request->occupation; $patient->religion_id = $request->religion; $patient->category_id = $request->patient_category; $patient->company_id = $request->company; $patient->citizenship = $request->citizenship; $patient->country_id = $request->country_id; /*=========*/ // split the residence values $residence_array = explode(",", $request->residence); $patient->district_id = isset($residence_array[4]) ? $residence_array[4] : 0; $patient->county_id = isset($residence_array[3]) ? $residence_array[3] : 0; $patient->subcounty_id = isset($residence_array[2]) ? $residence_array[2] : 0; $patient->parish_id = isset($residence_array[1]) ? $residence_array[1] : 0; $patient->village_id = isset($residence_array[0]) ? $residence_array[0] : 0; //for now put the residences string into address_details but ask douglas what it was meant for $patient->address_details = $request->residence; $patient->gender = $request->gender; $patient->next_of_kin = $request->next_of_kin; $patient->next_of_kin_relationship = $request->next_of_kin_relationship; $patient->phone_of_next_of_kin = removeSpaces($request->next_of_kin_phone); $patient->phone = removeSpaces($request->phone); $patient->alternative_phone = removeSpaces($request->alternative_phone); $patient->national_id = $request->national_id; $patient->phone_owner = $request->phone_owner; $patient->hospital_contact = $request->hospital_contact; $patient->other_patients_info = !empty($other_patients_info_array) ? json_encode($other_patients_info_array) : '' ; $patient->language = $request->language; $patient->lc_one = $request->lc_one; $patient->is_test_patient = $request->is_test_patient ?? 0; if ($request->fingerprint_template) { $patient->fingerprint_template = $request->fingerprint_template; } $patient->updated_by = Auth::user()->id; if (!empty($request->registration_field_values)) { for ($i = 0; $i < count($request->registration_field_values); $i++) $registration_fields[$request->registration_field_names[$i]] = $request->registration_field_values[$i]; $patient->registration_fields = json_encode($registration_fields); } /* ===== check if it was previously a main_dependant and patient category has changed then handle */ $main_patient_to_dependants = null; $does_previous_patient_category_have_threshold = does_patient_category_have_threshold($patient->category_id); $does_new_patient_category_have_threshold = does_patient_category_have_threshold($request->patient_category); $patient_is_a_dependant_of = patient_is_a_dependant_of($patient->id); if ($does_previous_patient_category_have_threshold == true || !is_null($patient_is_a_dependant_of)) { //the patient is on a patient dependants category if we go inside this "if" statement if ($patient_is_a_dependant_of == $patient->id) { //the patient is a main patient for dependants when we enter this "if" statement $main_patient_to_dependants = \Streamline\Models\CategoryPatientDependant::where('main_patient_id', $patient->id)->first(); } } /* ======== end of patient dependants hullabaloo =========== */ if ($patient->update()) { if ($main_patient_to_dependants && $does_new_patient_category_have_threshold == false) { //what happens to their existing invoices though ?? $main_patient_to_dependants->delete(); } if ($main_patient_to_dependants && $does_new_patient_category_have_threshold == true) { $main_patient_to_dependants->patient_category_id = $request->patient_category; $main_patient_to_dependants->update(); } flash("Patient " . $request->first_name . " " . $request->last_name . " has been updated")->success(); return redirect('patients/' . $patient->id); } else { flash("There was an error")->error(); return redirect()->back()->withInput(); } } /** * Remove the specified resource from storage. */ public function destroy($id) { $patient = Patient::find($id); if ($patient->delete()) : flash("Patient has been deleted.")->success(); return redirect('patients/'); else : return redirect()->back()->withInput(); endif; } /** * Search/select a resource in storage. */ public function select(Request $request) { $patient_number = $request->number; $first_name = $request->first_name; $last_name = $request->last_name; $national_id = $request->national_id; $phone_number = $request->phone_number; $subcounty = $request->subcounty_id; $parish = $request->parish; $village = $request->village; $insurance_group = $request->insurance_group; $patient_category = $request->patient_category; $filters = array(); $subcounty_ids = array(); $parish_ids = array(); $village_ids = array(); $insurance_group_ids = array(); $patient_category_ids = array(); $patients = array(); $criteria = ''; $searched = false; if (!empty($request->date_of_birth)) { $searched = TRUE; $birth_day = Carbon::createFromFormat('d/m/Y', $request->date_of_birth)->format('Y-m-d'); if (!empty($birth_day)) { array_push($filters, ['date_of_birth', '=', $birth_day]); $criteria .= 'Born (' . $request->date_of_birth . ') '; } } if (!empty($patient_number)) { $searched = TRUE; array_push($filters, ['number', 'LIKE', '%' . $patient_number . '%']); $criteria .= 'Number (' . $patient_number . ') '; } if (!empty($first_name)) { $searched = TRUE; array_push($filters, ['first_name', 'LIKE', '%' . $first_name . '%']); $criteria .= 'First name (' . $first_name . ') '; } if (!empty($last_name)) { $searched = TRUE; array_push($filters, ['last_name', 'LIKE', '%' . $last_name . '%']); $criteria .= 'Last name (' . $last_name . ') '; } if (!empty($national_id)) { $searched = TRUE; array_push($filters, ['national_id', 'LIKE', '%' . $national_id . '%']); $criteria .= 'National ID (' . $national_id . ') '; } if (!empty($phone_number)) { $searched = TRUE; array_push($filters, ['phone', 'LIKE', '%' . $phone_number . '%']); $criteria .= 'Phone Number (' . $phone_number . ') '; } if (!empty($subcounty)) { $searched = TRUE; $subcounty_ids = DB::table('subcounties')->where('name', 'LIKE', '%' . $subcounty . '%')->pluck('id'); $criteria .= 'Subcounty (' . $subcounty . ') '; } if (!empty($parish)) { $searched = TRUE; $parish_ids = DB::table('parishes')->where('name', 'LIKE', '%' . $parish . '%')->pluck('id'); $criteria .= 'Parish (' . $parish . ') '; } if (!empty($village)) { $searched = TRUE; $village_ids = DB::table('villages')->where('name', 'LIKE', '%' . $village . '%')->pluck('id'); $criteria .= 'Village (' . $village . ') '; } if (!empty($insurance_group)) { $searched = TRUE; $insurance_group_ids = DB::table('insurance_groups')->where('name', 'LIKE', '%' . $insurance_group . '%')->pluck('id'); $criteria .= 'Insurance group (' . $insurance_group . ') '; } if (!empty($patient_category)) { $searched = TRUE; $patient_category_ids = DB::table('patient_categories')->where('name', 'LIKE', '%' . $patient_category . '%')->pluck('id'); $criteria .= 'Category (' . $patient_category . ') '; } if (!empty($filters)) { $searched = TRUE; if (!empty($subcounty_ids) || !empty($parish_ids) || !empty($village_ids) || !empty($insurance_group_ids) || !empty($patient_category_ids)) { $patients = Patient::orderBy('first_name', 'asc') ->where($filters) ->whereIn('subcounty_id', $subcounty_ids) ->orWhereIn('parish_id', $parish_ids) ->orWhereIn('village_id', $village_ids) ->orWhereIn('insurance_group', $insurance_group_ids) ->orWhereIn('category_id', $patient_category_ids) ->paginate(200); } else { $patients = Patient::orderBy('first_name', 'asc')->where($filters)->paginate(200); } } elseif (!empty($subcounty_ids) || !empty($parish_ids) || !empty($village_ids) || !empty($insurance_group_ids) || !empty($patient_category_ids)) { $patients = Patient::orderBy('first_name', 'asc') ->whereIn('subcounty_id', $subcounty_ids) ->orWhereIn('parish_id', $parish_ids) ->orWhereIn('village_id', $village_ids) ->orWhereIn('insurance_group', $insurance_group_ids) ->orWhereIn('category_id', $patient_category_ids) ->paginate(200); } $categories = DB::table('patient_categories') ->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses') ->pluck("name", "id"); $occupations = DB::table('occupations') ->pluck('name', 'id'); $patient_numbers = DB::table('patients') ->orderBy('number') ->distinct() ->pluck('number'); $first_names = DB::table('patients') ->orderBy('first_name') ->distinct() ->pluck('first_name'); $last_names = DB::table('patients') ->orderBy('last_name') ->distinct() ->pluck('last_name'); $national_ids = DB::table('patients') ->orderBy('national_id') ->distinct() ->pluck('national_id'); $insurance_groups = DB::table('insurance_groups') ->orderBy('name') ->distinct() ->pluck('name'); $patient_categories = DB::table('patient_categories') ->orderBy('name') ->distinct() ->pluck('name'); $subcounties = DB::table('subcounties') ->orderBy('name') ->distinct() ->pluck('name'); $parishes = DB::table('parishes') ->orderBy('name') ->distinct() ->pluck('name'); $villages = DB::table('villages') ->orderBy('name') ->distinct() ->pluck('name'); if (count($patients) || $searched == TRUE) { $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id")->toArray(); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id")->toArray(); $occupations = DB::table('occupations')->pluck('name', 'id')->toArray(); return view('patients::patients.selected', ['patient_count' => count($patients), 'criteria' => $criteria], compact('patients', 'categories', 'marital_statuses', 'occupations')); } else { return view('patients::patients.select', compact('subcounty_ids', 'categories', 'marital_statuses', 'occupations', 'patient_numbers', 'first_names', 'last_names', 'national_ids', 'insurance_groups', 'patient_categories', 'subcounties', 'parishes', 'villages')); } } /** * Display a listing of the inactive resource(s). */ public function inactive() { $patientCount = Patient::get()->count(); $patients = Patient::onlyTrashed()->orderBy('id', 'desc')->paginate(20); $categories = PatientCategory::pluck("name", "id"); $marital_statuses = MaritalStatus::pluck("name", "id"); if (is_null($patients)) { flash()->error("There is no inactive patient"); return redirect('/patients/'); } else { return view('patients::patients.inactive', ['PatientCount' => $patientCount], compact('patients', 'categories', "marital_statuses")); } } /** * Activate the specified resource in storage. */ public function activate($id) { $patients = Patient::withTrashed()->where('id', $id)->get(); if (!is_null($patients)) { $patient = $patients->first(); if ($patient->restore()) : flash("Patient has been activated.")->success(); return redirect('/patients/inactive'); endif; } return redirect()->back()->withInput(); } public function update_patient_info($id) { $patient = Patient::find($id); if ($patient) { $first_name = title_case($patient->first_name); $last_name = title_case($patient->last_name); $code = '

Patient Names: ' . $first_name . ' ' . $last_name . '

'; $code .= '

Patient Number: ' . $patient->number . '

'; $code .= '

Gender: ' . ($patient->gender == 1 ? "Male" : "Female") . '    Date of Birth: ' . streamline_date($patient->date_of_birth) . '

'; $code .= '

Phone Number: ' . $patient->phone . '    Next of Kin: ' . $patient->next_of_kin . ' (' . $patient->phone_of_next_of_kin . ')

'; $code .= '

Patient Category: ' . get_name($patient->category_id, 'id', 'name', 'patient_categories') . '

'; $code .= '

Village: ' . get_name($patient->village_id, 'id', 'name', 'villages') . '

'; } else { $code = '

Patient Not Found

'; } return $code; } public function search_residences(Request $request) { $data = []; $counter = 0; if ($request->has('q')) { $search = $request->q; $districts = DB::table('districts')->whereNull('deleted_at')->where('name', 'LIKE', "%$search%")->get(); $counties = DB::table('counties')->whereNull('deleted_at')->where('name', 'LIKE', "%$search%")->get(); $subcounties = DB::table('subcounties')->whereNull('deleted_at')->where('name', 'LIKE', "%$search%")->get(); $parish = DB::table('parishes')->whereNull('deleted_at')->where('name', 'LIKE', "%$search%")->get(); $village = DB::table('villages')->whereNull('deleted_at')->where('name', 'LIKE', "%$search%")->get(); $districts_arr = DB::table('districts')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); $counties_arr = DB::table('counties')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); $subcounties_arr = DB::table('subcounties')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); $parish_arr = DB::table('parishes')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); $counties_rel_arr = DB::table('counties')->whereNull('deleted_at')->pluck('district_id', 'id')->toArray(); $subcounties_rel_arr = DB::table('subcounties')->whereNull('deleted_at')->pluck('county_id', 'id')->toArray(); $parish_rel_arr = DB::table('parishes')->whereNull('deleted_at')->pluck('subcounty_id', 'id')->toArray(); if (count($village) > 0) { // village with name found foreach ($village as $value) { $parish_id = $value->parish_id; $parish_name = $parish_arr[$parish_id] ?? ''; $subcounty_id = $parish_rel_arr[$parish_id] ?? 0; $subcounty_name = $subcounties_arr[$subcounty_id] ?? ''; $county_id = $subcounties_rel_arr[$subcounty_id] ?? 0; $county_name = $counties_arr[$county_id] ?? ''; $district_id = $counties_rel_arr[$county_id] ?? 0; $district_name = $districts_arr[$district_id] ?? ''; $data[$counter]['ids'] = $value->id . "," . $parish_id . "," . $subcounty_id . "," . $county_id . "," . $district_id; $data[$counter]['text'] = "Village: " . $value->name . " Parish: " . $parish_name . " Subcounty: " . $subcounty_name . " County: " . $county_name . " District: " . $district_name; $counter++; } } if (count($parish) > 0) { // parish with name found foreach ($parish as $value) { $parish_name = $parish_arr[$value->id] ?? ''; $subcounty_id = $parish_rel_arr[$value->id] ?? 0; $subcounty_name = $subcounties_arr[$subcounty_id] ?? ''; $county_id = $subcounties_rel_arr[$subcounty_id] ?? 0; $county_name = $counties_arr[$county_id] ?? ''; $district_id = $counties_rel_arr[$county_id] ?? 0; $district_name = $districts_arr[$district_id] ?? ''; $data[$counter]['ids'] = 0 . "," . $value->id . "," . $subcounty_id . "," . $county_id . "," . $district_id; $data[$counter]['text'] = "Parish: " . $parish_name . " Subcounty: " . $subcounty_name . " County: " . $county_name . " District: " . $district_name; $counter++; } } if (count($subcounties) > 0) { // subcounties with name found foreach ($subcounties as $value) { $subcounty_name = $subcounties_arr[$value->id] ?? ''; $county_id = $subcounties_rel_arr[$value->id] ?? 0; $county_name = $counties_arr[$county_id] ?? ''; $district_id = $counties_rel_arr[$county_id] ?? 0; $district_name = $districts_arr[$district_id] ?? ''; $data[$counter]['ids'] = 0 . "," . 0 . "," . $value->id . "," . $county_id . "," . $district_id; $data[$counter]['text'] = "Subcounty: " . $subcounty_name . " County: " . $county_name . " District: " . $district_name; $counter++; } } if (count($counties) > 0) { // counties with name found foreach ($counties as $value) { $county_name = $counties_arr[$value->id] ?? ''; $district_id = $counties_rel_arr[$value->id] ?? 0; $district_name = $districts_arr[$district_id] ?? ''; $data[$counter]['ids'] = 0 . "," . 0 . "," . 0 . "," . $value->id . "," . $district_id; $data[$counter]['text'] = "County: " . $county_name . " District: " . $district_name; $counter++; } } if (count($districts) > 0) { // districts with name found foreach ($districts as $value) { // auto generate the rest of the variables $district_name = $districts_arr[$value->id] ?? ''; $data[$counter]['ids'] = 0 . "," . 0 . "," . 0 . "," . 0 . "," . $value->id; $data[$counter]['text'] = "District: " . $district_name; $counter++; } } } return response()->json($data); } public function add_company(Request $request) { $company = new Company; $company->name = $request->company_name; $company->contact = $request->company_contact; $company->slug = $request->company_identifier; $company->created_by = auth()->user()->id; try { $company->save(); return $company->id; } catch (QueryException $e) { flash("An error occurred")->error(); return back()->withInput(); } } // add new country public function add_country(Request $request) { // $country = new Country; // $country->name = $request->name; // $country->created_by = auth()->user()->id; // try { // $country->save(); // return $country->id; // } catch (QueryException $e) { // $errorCode = $e->errorInfo[1]; // if ($errorCode == 1062) { // return response()->json(['error' => $e]); // } // } // Check if the country already exists $existingCountry = Country::where('name', $request->name)->first(); if ($existingCountry) { return response()->json(['error' => 'Country already exists'], 409); } // Create a new Country instance $country = new Country; $country->name = $request->name; $country->created_by = auth()->user()->id; try { // Save the country and return the ID $country->save(); return $country->id; } catch (QueryException $e) { return response()->json(['error' => 'Database error occurred'], 500); } } public function quick_add_district_residence(Request $request) { $district = new District; $district->name = $request->new_residence_district_name; $district->created_by = auth()->user()->id; try { $district->save(); return $district->id; } catch (QueryException $e) { flash("An error occurred")->error(); return back()->withInput(); } } public function quick_add_village_residence(Request $request) { $district_id = $request->residence_district_name; $village = new Village; $village->name = $request->new_residence_village_name; $village->parish_id = 0; //$request->parish_id; $village->created_by = auth()->user()->id; try { $village->save(); return $village->id; } catch (QueryException $e) { flash("An error occurred")->error(); return back()->withInput(); } } public function check_duplicate_patients(Request $request) { $result_count = 0; $html_text = 0; $patients = []; if (isset($request->first_name) && isset($request->last_name)) { $patients_one = DB::table('patients') ->where('first_name', 'LIKE', "%$request->first_name%") ->where('last_name', 'LIKE', "%$request->last_name%") ->get(["id", "first_name", "last_name", "number", "gender", "date_of_birth", "phone", "category_id"]); $patients_two = DB::table('patients') ->where('first_name', 'LIKE', "%$request->last_name%") ->where('last_name', 'LIKE', "%$request->first_name%") ->get(["id", "first_name", "last_name", "number", "gender", "date_of_birth", "phone", "category_id"]); $patients = $patients_one->merge($patients_two); $result_count += count($patients); } if (isset($request->phone)) { $patients_phone = DB::table('patients') ->where('phone', removeSpaces($request->phone)) ->get(["id", "first_name", "last_name", "number", "gender", "date_of_birth", "phone", "category_id"]); if (count($patients) > 0) { $patients = $patients->merge($patients_phone); } else { $patients = $patients_phone; } $result_count += count($patients_phone); } if ($result_count > 0) { $html_text = ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $categories = PatientCategory::pluck("name", "id"); foreach ($patients as $patient) { $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; } $html_text .= "
Name Gender Age Phone Patient Category
" . $patient->first_name . " " . $patient->last_name . " (" . $patient->number . ")" . "" . (($patient->gender == 1) ? "Male" : "Female") . "" . get_patients_age($patient->date_of_birth) . "" . $patient->phone . "" . (isset($categories[$patient->category_id]) ? $categories[$patient->category_id] : "N/A") . " Select
"; } return json_encode([ "results_count" => $result_count, "html" => $html_text ]); } public function search_patient_by_name_number(Request $request) { $data = []; if ($request->has('q')) { $search = $request->q; $data = DB::table('patients')->select("id", "first_name", "last_name", "number", "phone") ->where('last_name', 'LIKE', "%$search%") ->orWhere('first_name', 'LIKE', "%$search%") ->orWhere('number', 'LIKE', "%$search%") ->get(); } return response()->json($data); } public function possible_duplicate_patients($id) { $possible_duplicate_patients = possible_patient_record_duplicates($id); $original_patient = Patient::find($id); $districts = DB::table('districts')->pluck('name', 'id'); $counties = DB::table('counties')->pluck('name', 'id'); $subcounties = DB::table('subcounties')->pluck('name', 'id'); $parishes = DB::table('parishes')->pluck('name', 'id'); $villages = DB::table('villages')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $religions = DB::table('religions')->pluck('name', 'id'); $relationships = DB::table('family_relations')->pluck('name', 'id'); $last_episode = PatientEpisode::where('patient_id', $id)->orderBy('created_at', 'desc')->first(); return view('patients::patients.compare_patient_records', compact('original_patient', 'possible_duplicate_patients', 'districts', 'counties', 'subcounties', 'parishes', 'villages', 'occupations', 'religions', 'relationships', 'last_episode')); } public function display_original_and_duplicate_patients(Request $request) { $patient_id = $request->patient_id; $patient = Patient::find($patient_id); $html_text = ""; $html_text .= ""; $html_text .= "first_name . "> " . $patient->first_name . ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $gender = $patient->gender == 1 ? "Male" : "Female"; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= ""; $html_text .= "
All values from " . get_full_name($patient->id, "id", "first_name", "last_name", "patients") . "
" . $patient->last_name . "
" . $gender . "
" . get_patients_age($patient->date_of_birth) . "
" . $patient->phone . "
" . get_name($patient->category_id, "id", "name", "patient_categories") . "
" . get_name($patient->district_id, "id", "name", "districts") . "
" . get_name($patient->county_id, "id", "name", "counties") . "
" . get_name($patient->subcounty_id, "id", "name", "subcounties") . "
" . get_name($patient->parish_id, "id", "name", "parishes") . "
" . get_name($patient->village_id, "id", "name", "villages") . "
"; return json_encode([ "html" => $html_text ]); } public function merge_records(Request $request) { $patient_id_one = (int)$request->original_id; $patient_id_two = (int)$request->duplicate_id; //1.get the original and dupe patient ids //2.the the original record with all selected fields to keep //3.loop through the medical and finance tables updating the patient id. //4.delete the duplicate $patient_ids_array = [$patient_id_one, $patient_id_two]; $patient_id = min($patient_ids_array); $patient_id_to_delete = max($patient_ids_array); $patient = Patient::find($patient_id); $patient->first_name = $request->first_name; $patient->last_name = $request->last_name; $patient->date_of_birth = $request->dob; $patient->gender = $request->gender; $patient->phone = removeSpaces($request->phone); $patient->category_id = $request->category_id; $patient->district_id = $request->district_id; $patient->county_id = $request->county_id; $patient->subcounty_id = $request->subcounty_id; $patient->parish_id = $request->parish_id; $patient->village_id = $request->village_id; $patient->updated_by = Auth::user()->id; if ($patient->update()) { $delete_patient_record = Patient::find($patient_id_to_delete); $delete_patient_record->delete(); //loop thru episodes $patient_episodes = PatientEpisode::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_episodes) > 0) { foreach ($patient_episodes as $episode) { $episode->patient_id = $patient_id; $episode->update(); } } //loop through triage $patient_triage = \Streamline\Models\Triage::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_triage) > 0) { foreach ($patient_triage as $triage) { $triage->patient_id = $patient_id; $triage->update(); } } //loop thru consultations $patient_consultations = \Streamline\Models\Consultation::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_consultations) > 0) { foreach ($patient_consultations as $consultation) { $consultation->patient_id = $patient_id; $consultation->update(); } } //loop thru treatment $patient_treatments = \Streamline\Models\Treatment::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_treatments) > 0) { foreach ($patient_treatments as $treatment) { $treatment->patient_id = $patient_id; $treatment->update(); } } //loop thru ordered invs $patient_ordered_invs = \Streamline\Models\OrderedInvestigation::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_ordered_invs) > 0) { foreach ($patient_ordered_invs as $ordered_invs) { $ordered_invs->patient_id = $patient_id; $ordered_invs->update(); } } //loop thru investigation results $investigation_results = \Streamline\Models\InvestigationResults::where('patient_id', $patient_id_to_delete)->get(); if (count($investigation_results) > 0) { foreach ($investigation_results as $inv_results) { $inv_results->patient_id = $patient_id; $inv_results->update(); } } //loop thru ordered procedures $patient_ordered_procedures = \Streamline\Models\OrderedProcedure::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_ordered_procedures) > 0) { foreach ($patient_ordered_procedures as $ordered_procedures) { $ordered_procedures->patient_id = $patient_id; $ordered_procedures->update(); } } //loop thru ordered sundries $patient_ordered_sundries = \Streamline\Models\OrderedSundry::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_ordered_sundries) > 0) { foreach ($patient_ordered_sundries as $ordered_sundry) { $ordered_sundry->patient_id = $patient_id; $ordered_sundry->update(); } } //loop through ordered services $patient_ordered_services = \Streamline\Models\OrderedService::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_ordered_services) > 0) { foreach ($patient_ordered_services as $ordered_services) { $ordered_services->patient_id = $patient_id; $ordered_services->update(); } } //loop through inpatient info $inpatient_info_records = \Streamline\Models\InpatientInfo::where('patient_id', $patient_id_to_delete)->get(); if (count($inpatient_info_records) > 0) { foreach ($inpatient_info_records as $inpatient_info) { $inpatient_info->patient_id = $patient_id; $inpatient_info->update(); } } //loop though inpatient bills $inpatient_bills = \Streamline\Models\InpatientBill::where('patient_id', $patient_id_to_delete)->get(); if (count($inpatient_bills) > 0) { foreach ($inpatient_bills as $inpatient_bill) { $inpatient_bill->patient_id = $patient_id; $inpatient_bill->update(); } } //loop though ward bed stays $ward_bed_stay = \Streamline\Models\WardBedStay::where('patient_id', $patient_id_to_delete)->get(); if (count($ward_bed_stay) > 0) { foreach ($ward_bed_stay as $bed_stay) { $bed_stay->patient_id = $patient_id; $bed_stay->update(); } } //loop though ward consultation and service $ward_consultations_and_services = \Streamline\Models\WardConsultationsAndService::where('patient_id', $patient_id_to_delete)->get(); if (count($ward_consultations_and_services) > 0) { foreach ($ward_consultations_and_services as $ward_consultation) { $ward_consultation->patient_id = $patient_id; $ward_consultation->update(); } } //loop though ward extras $ward_extras = \Streamline\Models\WardExtra::where('patient_id', $patient_id_to_delete)->get(); if (count($ward_extras) > 0) { foreach ($ward_extras as $ward_extra) { $ward_extra->patient_id = $patient_id; $ward_extra->update(); } } //loop though ward comments $ward_comments = \Streamline\Models\WardInpatientSheetComment::where('patient_id', $patient_id_to_delete)->get(); if (count($ward_comments) > 0) { foreach ($ward_comments as $ward_comment) { $ward_comment->patient_id = $patient_id; $ward_comment->update(); } } //loop though ward investigation pricing $ward_investigation_pricing = \Streamline\Models\WardInvestigationPricing::where('patient_id', $patient_id_to_delete)->get(); foreach ($ward_investigation_pricing as $ward_inv_pricing) { $ward_inv_pricing->patient_id = $patient_id; $ward_inv_pricing->update(); } //loop though ward procedures $ward_procedures = \Streamline\Models\WardProcedure::where('patient_id', $patient_id_to_delete)->get(); foreach ($ward_procedures as $ward_procedure) { $ward_procedure->patient_id = $patient_id; $ward_procedure->update(); } //loop though ward sundries $ward_sundries = \Streamline\Models\WardSundryDispensation::where('patient_id', $patient_id_to_delete)->get(); foreach ($ward_sundries as $ward_sundry) { $ward_sundry->patient_id = $patient_id; $ward_sundry->update(); } //loop though ward treatment $ward_treatments = \Streamline\Models\WardTreatment::where('patient_id', $patient_id_to_delete)->get(); foreach ($ward_treatments as $ward_treatment) { $ward_treatment->patient_id = $patient_id; $ward_treatment->update(); } $ward_treatment_dispensations = \Streamline\Models\WardTreatmentDispensation::where('patient_id', $patient_id_to_delete)->get(); foreach ($ward_treatment_dispensations as $ward_treatment_dispensation) { $ward_treatment_dispensation->patient_id = $patient_id; $ward_treatment_dispensation->update(); } //loop through investigation deposits $investigation_deposits = \Streamline\Models\InvestigationDeposit::where('patient_id', $patient_id_to_delete)->get(); foreach ($investigation_deposits as $inv_deposit) { $inv_deposit->patient_id = $patient_id; $inv_deposit->update(); } //loop through treatment deposits $treatment_deposits = \Streamline\Models\TreatmentDeposits::where('patient_id', $patient_id_to_delete)->get(); foreach ($treatment_deposits as $treatment_deposit) { $treatment_deposit->patient_id = $patient_id; $treatment_deposit->update(); } //loop through service deposits $service_deposits = \Streamline\Models\ServiceDeposit::where('patient_id', $patient_id_to_delete)->get(); foreach ($service_deposits as $service_deposit) { $service_deposit->patient_id = $patient_id; $service_deposit->update(); } //loop through procedure deposits $procedure_deposits = \Streamline\Models\ProcedureDeposit::where('patient_id', $patient_id_to_delete)->get(); foreach ($procedure_deposits as $procedure_deposit) { $procedure_deposit->patient_id = $patient_id; $procedure_deposit->update(); } //loop through sundries deposits $sundry_deposits = \Streamline\Models\SundryDeposit::where('patient_id', $patient_id_to_delete)->get(); foreach ($sundry_deposits as $sundry_deposit) { $sundry_deposit->patient_id = $patient_id; $sundry_deposit->update(); } //loop through patient category invoice $patient_category_invoices = \Streamline\Models\PatientCategoryInvoice::where('patient_id', $patient_id_to_delete)->get(); if (count($patient_category_invoices) > 0) { foreach ($patient_category_invoices as $patient_category_invoice) { $patient_category_invoice->patient_id = $patient_id; $patient_category_invoice->update(); } } //loop through patient dependants incase they were category dependant $does_patient_to_delete_category_have_threshold = does_patient_category_have_threshold(get_name($patient_id_to_delete, 'id', 'category_id', 'patients')); $patient_is_a_dependant_of = patient_is_a_dependant_of($patient_id); if ($does_patient_to_delete_category_have_threshold == true || !is_null($patient_is_a_dependant_of)) { //the patient is on a patient dependants category if we go inside this "if" statement $previous_main_dependant_to_delete = \Streamline\Models\CategoryPatientDependant::where('main_patient_id', $patient_id_to_delete)->first(); if ($previous_main_dependant_to_delete) { $previous_main_dependant_to_delete->main_patient_id = $patient_id; $previous_main_dependant_to_delete->update(); } $record_where_duplicate_patient_is_dependant = \Streamline\Models\CategoryPatientDependant::whereRaw('FIND_IN_SET(' . $patient_id_to_delete . ',dependant_patient_ids)')->first(); if ($record_where_duplicate_patient_is_dependant) { $array_with_new_patient_id = []; $array_where_patient_to_delete_is_dependant = explode(",", $record_where_duplicate_patient_is_dependant->dependant_patient_ids); for ($i = 0; $i < count($array_where_patient_to_delete_is_dependant); $i++) { $member = $array_where_patient_to_delete_is_dependant[$i]; if ($array_where_patient_to_delete_is_dependant[$i] == $patient_id_to_delete) { $member = $patient_id; } $array_with_new_patient_id[] = $member; } $record_where_duplicate_patient_is_dependant->dependant_patient_ids = implode(",", $array_with_new_patient_id); $record_where_duplicate_patient_is_dependant->update(); } $main_dependants_consumptions = \Streamline\Models\DependantsConsumption::where('main_patient_id', $patient_id_to_delete)->get(); if (count($main_dependants_consumptions)) { foreach ($main_dependants_consumptions as $main_patient_consumption) { $main_patient_consumption->main_patient_id = $patient_id; $main_patient_consumption->update(); } } $dependants_consumptions = \Streamline\Models\DependantsConsumption::where('dependant_patient_id', $patient_id_to_delete)->get(); if (count($dependants_consumptions)) { foreach ($dependants_consumptions as $consumption) { $consumption->dependant_patient_id = $patient_id; $consumption->update(); } } } //loop through discounts $discounts = \Streamline\Models\Discount::where('patient_id', $patient_id_to_delete)->get(); if (count($discounts) > 0) { foreach ($discounts as $discount_record) { $discount_record->patient_id = $patient_id; $discount_record->update(); } } // TODO Refactor this merge to be in a separate controller and remove repeated table throughs by using one-to-many relationships https://stackoverflow.com/questions/77837354/implementing-one-to-many-relationship-in-laravel-eloquent/77837508 $tables = ['ward_inpatient_sheet_nurse_comments', 'patient_accounts_deposits', 'patient_dispensings', 'patient_accounts_refunds', 'prescription_errors', 'patient_messages_from_app', 'ward_investigation_pricings', 'patient_clinic_transfers', 'clinic_transfers', 'staff_performed_services', 'ward_inpatient_detailed_notes', 'patient_documents', 'patient_one_off_discounts', 'triage_nutrition', 'triage_news', 'surgeries', 'sundries_deposits', 'smart_triage', 'payrolls', 'patient_refunds', 'patient_account_consumptions', 'patient_appointments', 'phone_followup_patients', 'point_of_sale_records', 'cancelled_patient_opd_dispensations', 'procedure_deposits', 'cancel_patient_transactions', 'central_billing_deposits', 'chronic_patients', 'chi_deposits', 'debtors', 'debt_plan', 'family_account_consumptions', 'inpatient_attendant_passes', 'inpatient_ward_discounts', 'internal_ward_transfers', 'inpatient_sheet_audits', 'maternity_delivery_records', 'maternity_inpatients', 'mental_health_consultation', 'ordered_investigations', 'ordered_procedures']; foreach ($tables as $table) { $episodes = DB::table($table)->where('patient_id', $patient_id_to_delete)->get(); foreach ($episodes as $episode) DB::table($table)->where('id', $episode->id)->update(['patient_id' => $patient_id]); } $incoming_ward_charts = DB::table('incoming_ward_charts')->whereRaw('FIND_IN_SET(' . $patient_id_to_delete . ', patient_ids)')->get(); foreach ($incoming_ward_charts as $incoming_ward_chart) { $episode_ids = explode(',', $incoming_ward_chart->patient_ids); foreach ($episode_ids as $key => $episode_id) if ($episode_id == $patient_id_to_delete) $episode_ids[$key] = $patient_id; DB::table('incoming_ward_charts')->where('id', $incoming_ward_chart->id)->update(['patient_ids' => implode(',', $episode_ids)]); } $category_patient_dependants = DB::table('category_patient_dependants')->whereRaw('FIND_IN_SET(' . $patient_id_to_delete . ', dependant_patient_ids)')->get(); foreach ($category_patient_dependants as $category_patient_dependant) { $episode_ids = explode(',', $category_patient_dependant->dependant_patient_ids); foreach ($episode_ids as $key => $episode_id) if ($episode_id == $patient_id_to_delete) $episode_ids[$key] = $patient_id; DB::table('category_patient_dependants')->where('id', $category_patient_dependant->id)->update(['dependant_patient_ids' => implode(',', $episode_ids)]); } $main_patient_ids = DB::table('category_patient_dependants')->where('main_patient_id', $patient_id_to_delete)->get(); foreach ($main_patient_ids as $main_patient_id) DB::table('category_patient_dependants')->where('id', $main_patient_id->id)->update(['main_patient_id' => $patient_id]); $family_members_ids = DB::table('family_accounts')->whereRaw('FIND_IN_SET(' . $patient_id_to_delete . ', family_members_ids)')->get(); foreach ($family_members_ids as $family_members_id) { $episode_ids = explode(',', $family_members_id->family_members_ids); foreach ($episode_ids as $key => $episode_id) if ($episode_id == $patient_id_to_delete) $episode_ids[$key] = $patient_id; DB::table('family_accounts')->where('id', $family_members_id->id)->update(['family_members_ids' => implode(',', $episode_ids)]); } $family_head_ids = DB::table('family_accounts')->where('family_head_id', $patient_id_to_delete)->get(); foreach ($family_head_ids as $family_head_id) DB::table('family_accounts')->where('id', $family_head_id->id)->update(['family_head_id' => $patient_id]); // update the session ids with the remaining one session()->put('patient_id', $patient_id); flash("Records have been merged")->success(); return redirect('/possible_duplicate_patients/' . $patient_id); } flash("Oops. Merge has failed. Contact your system admin")->error(); return redirect()->back()->withInput(); } public function view_dna_patient_demographic(Request $request) { $patient_id = $request->patient_id; $patient = Patient::withTrashed()->find($patient_id); $code = ""; $x = 1; if ($patient) { $code .= ""; $code .= ""; $code .= "Name:"; $code .= ""; $code .= ""; $code .= insurance_flag($patient->id); $code .= ""; $code .= ""; $code .= "Number:"; $code .= ""; $code .= ""; $code .= $patient->number; $code .= ""; $code .= ""; $code .= ""; $code .= ""; $code .= "Patient Category"; $code .= ""; $code .= ""; $code .= get_name($patient->category_id, "id", "name", "patient_categories"); $code .= ""; $code .= ""; $code .= "Phone Number"; $code .= ""; $code .= ""; $code .= $patient->phone; $code .= ""; $code .= ""; } else { $code .= "

No record in the system

"; } return $code; } public function delete_patient_with_reason(Request $request) { $patient = Patient::findOrFail($request->patient_id); $patient->deleted_by = auth()->user()->id; $patient->update(); $patient_deactivation_reasons = new \Streamline\Models\PatientDeactivationReason; $patient_deactivation_reasons->patient_id = $request->patient_id; $patient_deactivation_reasons->reason = $request->patient_deactivation_reasons; $patient_deactivation_reasons->save(); if ($patient_deactivation_reasons->save() && $patient->delete()) { flash("Patient has been deleted.")->success(); return 1; } else { return 0; } } public function search(Request $request) { $patient_number_search = $request->number; $village_search = $request->village; $previous_id_search = $request->previous_id; $full_name_search = $request->full_name; $criteria = ""; $filters = []; if ($patient_number_search) { $filters[] = ['number', 'LIKE', '%' . $patient_number_search . '%']; $criteria .= 'Number (' . $patient_number_search . ') '; } if ($previous_id_search) { $filters[] = ['previous_id', 'LIKE', '%' . $previous_id_search . '%']; $criteria .= 'Previous Number (' . $previous_id_search . ') '; } if ($full_name_search) { $split_full_name_array = explode(' ', $full_name_search); if (is_array($split_full_name_array)) { $first_name_from_split = $split_full_name_array[0] ?? ""; $last_name_from_split = $split_full_name_array[1] ?? ""; $patient_number_from_split = count($split_full_name_array) > 2 ? array_slice($split_full_name_array, -3)[0] : ''; //just only use the patient number from the full name submitted if ($patient_number_from_split != "") { $filters[] = ['number', 'LIKE', '%' . $patient_number_from_split . '%']; $criteria .= 'Number (' . $patient_number_from_split . ') '; } else { $filters[] = ['first_name', 'LIKE', '%' . $first_name_from_split . '%']; $filters[] = ['last_name', 'LIKE', '%' . $last_name_from_split . '%']; $criteria .= 'Name (' . $full_name_search . ') '; } } else { //just only use the patient number from the full name submitted $filters[] = ['first_name', 'LIKE', '%' . $full_name_search . '%']; $criteria .= 'Name (' . $full_name_search . ') '; } } if ($village_search) { $village_id = DB::table('villages')->where(['name' => $village_search])->pluck('id')->first(); if (!empty($village_id)) { $filters[] = ['village_id', 'LIKE', '%' . $village_id . '%']; $criteria .= 'Village (' . $village_search . ') '; } } if (empty($criteria)) : $criteria = 'No results found for search'; $patients = DB::table('patients')->whereNull('deleted_at') ->orderBy('created_at', 'desc')->paginate(100); else : $patients = DB::table('patients')->whereNull('deleted_at')->where($filters) ->orderBy('created_at', 'desc')->paginate(100); endif; $categories = DB::table('patient_categories')->pluck("name", "id"); $villages = DB::table('villages')->pluck("name", "id")->toArray(); $previous_ids = DB::table('patients')->whereNull('deleted_at') ->distinct()->pluck('previous_id'); $patient_numbers = DB::table('patients')->whereNull('deleted_at') ->pluck('number'); $full_names = DB::table('patients')->whereNull('deleted_at') ->select(DB::raw('CONCAT(first_name, " ", last_name, " - ", number, " - (", phone, ")") AS full_name')) ->pluck("full_name"); return view('patients::patients.index', compact('patients', 'categories', 'patient_numbers', 'villages', 'previous_ids', 'full_names', 'criteria')) ->with('i', (request()->input('page', 1) - 1) * 5); } public function get_fingerprint($id) { $patient = DB::table('patients')->where('id', $id)->first(); if ($patient && $patient->fingerprint_template) { return $patient->fingerprint_template; } else { return "0"; } } public function fetch_fingerprint_from_scanner() { $response = Http::get('http://localhost:13124/cams/fp-scanner/capture?sendimage=1&apikey=' . get_fingerprint_key()); $scanner_response = json_decode($response, true); $template = $scanner_response["ApiRequestInfo"]["OperationData"]["Signature"][0]["Template"]; $pngImage = $scanner_response["ApiRequestInfo"]["OperationData"]["Signature"][0]["Image"]; $error_code = $scanner_response["ScannerError"]["errorCode"]; $error_message = $scanner_response["ScannerError"]["errorString"]; return json_encode([ "template" => $template, "image" => $pngImage, "error_code" => $error_code, "error_message" => $error_message, ]); } public function compare_fingerprint_from_scanner(Request $request) { $fingerprint_template = $request->fingerprint_template; $saved_fingerprint_template = $request->saved_fingerprint_template; $response = Http::get('http://localhost:13124/cams/fp-scanner/compare?apikey=' . get_fingerprint_key() . '&tmpl1=' . $fingerprint_template . '&tmpl2=' . $saved_fingerprint_template); $scanner_response = json_decode($response, true); $score = $scanner_response["ApiRequestInfo"]["OperationData"]["Score"]; $error_code = $scanner_response["ScannerError"]["errorCode"]; $error_message = $scanner_response["ScannerError"]["errorString"]; return json_encode([ "score" => $score, "error_code" => $error_code, "error_message" => $error_message, ]); } public function patient_cards(Request $request){ $patients = $this->patientCardsService->getPatientCardsToday($request); if ($patients->isEmpty()) { $patients = new LengthAwarePaginator([], 0, 200); } else { $patients = $patients->toQuery()->paginate(200); } return view('patients::patients/patient_cards_list', compact('patients')); } public function search_patient_cards_to_print(Request $request){ $patients_data = $this->patientCardsService->searchPatientCardsToPrint($request); $searched_data_string = $patients_data['searched_data_string']; $patients = $patients_data['patients']; if ($patients->isEmpty()) { $patients = new LengthAwarePaginator([], 0, 200); } else { $patients = $patients->toQuery()->paginate(200); } return view('patients::patients/searched_patient_cards', compact('patients','searched_data_string')); } public function patient_card($id) { $patient = Patient::find($id); $hospital_details = HospitalInformation::first(); $data = [ 'hospitalInfo' => $hospital_details, 'patient' => $patient ]; //dompdf $pdf_card = new DomPDF(); $html = view('patients::patients/patient_card',compact('data'))->render(); $pdf_card = DomPDF::loadHtml($html); $pdf_card->setPaper('A4', 'potrait'); $options = [ 'isPhpEnabled' => true, 'isHtml5ParserEnabled' => true, // Add more options ]; DomPDF::setOptions($options); return $pdf_card->stream('Patient Card.pdf'); } public function print_patients_cards(Request $request){ $patient_cards = $this->patientCardsService->printPatientCardsList($request); $hospital_details = HospitalInformation::first(); $pdf_cards = new DomPDF(); $html = view('patients::patients/print_patients_cards',compact('patient_cards','hospital_details'))->render(); $pdf_cards = DomPDF::loadHtml($html); $pdf_cards->setPaper('A4', 'potrait'); $options = [ 'isPhpEnabled' => true, 'isHtml5ParserEnabled' => true, // Add more options ]; DomPDF::setOptions($options); return $pdf_cards->stream('Patient Cards.pdf', array('Attachment' => false)); } }