middleware('auth'); $this->middleware('permission:pharmacy-incoming-prescriptions', ['only' => ['index']]); $this->middleware('permission:pharmacy-ward-dispensing', ['only' => ['store', 'ward_dispensing']]); $this->middleware('permission:pharmacy-stock-sheet', ['only' => ['stock_sheet']]); $this->middleware('permission:pharmacy-optical-stock-sheet', ['only' => ['pharmacy_optical_stock_sheet']]); $this->middleware('permission:pharmacy-drug-requisition', ['only' => ['requisition_for_drugs', 'store_requisition']]); $this->middleware('permission:pharmacy-saved-requisitions', ['only' => ['select_temporary_requisition', 'edit_temporary_requisition']]); $this->middleware('permission:pharmacy-previous-requisitions', ['only' => ['previous_drug_requisitions', 'edit_previous_requisition', 'update_previous_requisition']]); $this->middleware('permission:confirm-prescriptions', ['only' => ['confirm_prescriptions','confirm_dispensing_details','store_prescription_confirmation','view_dispensing_details_error']]); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $today = Carbon::today()->toDateString(); $display = "Report for ".streamline_date($today); if(is_incoming_prescriptions_feature_enabled()){ $pending_unpaid_prescriptions = Treatment::where(['confirmation_status' => 1,'dispense_status' => 0, 'payment_status'=> 0])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); $pending_paid_prescriptions = Treatment::where(['confirmation_status' => 1,'dispense_status' => 0, 'payment_status'=> 1])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); $confirmed_unpaid_prescriptions = Treatment::where(['confirmation_status' => 1,'dispense_status' => 1, 'payment_status'=> 0])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); $confirmed_paid_prescriptions = Treatment::where(['confirmation_status' => 1,'dispense_status' => 1, 'payment_status'=> 1])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); } else{ $pending_unpaid_prescriptions = Treatment::where(['dispense_status' => 0, 'payment_status'=> 0])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); $pending_paid_prescriptions = Treatment::where(['dispense_status' => 0, 'payment_status'=> 1])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); $confirmed_unpaid_prescriptions = Treatment::where(['dispense_status' => 1, 'payment_status'=> 0])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); $confirmed_paid_prescriptions = Treatment::where(['dispense_status' => 1, 'payment_status'=> 1])->whereDate('created_at', $today)->orderBy('created_at', 'desc')->get(); } $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); return view('pharmacy::pharmacy.index', compact('pending_paid_prescriptions', 'pending_unpaid_prescriptions','confirmed_paid_prescriptions', 'confirmed_unpaid_prescriptions', 'categories', 'display')); } public function search(Request $request){ $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $display = dateLabelSetter2($request); $filters = []; if(is_incoming_prescriptions_feature_enabled()){ $filters[] = ['confirmation_status', '=', 1]; } if (isset($request->patient_id) && $request->patient_id != 0) { $filters[] = ['patient_id', '=', $request->patient_id]; $pending_unpaid_prescriptions = Treatment::where(['patient_id' => $request->patient_id,'dispense_status' => 0, 'payment_status'=> 0]) ->where($filters)->orderBy('created_at', 'desc')->get(); $pending_paid_prescriptions = Treatment::where(['patient_id' => $request->patient_id,'dispense_status' => 0, 'payment_status'=> 1]) ->where($filters)->orderBy('created_at', 'desc')->get(); $confirmed_unpaid_prescriptions = Treatment::where(['patient_id' => $request->patient_id,'dispense_status' => 1, 'payment_status'=> 0]) ->where($filters)->orderBy('created_at', 'desc')->get(); $confirmed_paid_prescriptions = Treatment::where(['patient_id' => $request->patient_id,'dispense_status' => 1, 'payment_status'=> 1]) ->where($filters)->orderBy('created_at', 'desc')->get(); } else { switch ($request->dates){ case 'today': $end = Carbon::today()->endOfDay(); $start = Carbon::today()->startOfDay(); break; case 'yesterday': $end = Carbon::yesterday()->endOfDay(); $start = Carbon::yesterday()->startOfDay(); break; case 'custom_date': $end = Carbon::parse($request->start_date)->endOfDay(); $start = Carbon::parse($request->start_date)->startOfDay(); break; case 'custom_date_range': $end = Carbon::parse($request->end_date)->endOfDay(); $start = Carbon::parse($request->start_date)->startOfDay(); } $pending_unpaid_prescriptions = Treatment::where(['dispense_status' => 0, 'payment_status'=> 0]) ->whereBetween('created_at',[$start, $end])->where($filters)->orderBy('created_at', 'desc')->get(); $pending_paid_prescriptions = Treatment::where(['dispense_status' => 0, 'payment_status'=> 1]) ->whereBetween('created_at',[$start, $end])->where($filters)->orderBy('created_at', 'desc')->get(); $confirmed_unpaid_prescriptions = Treatment::where(['dispense_status' => 1, 'payment_status'=> 0]) ->whereBetween('created_at',[$start, $end])->where($filters)->orderBy('created_at', 'desc')->get(); $confirmed_paid_prescriptions = Treatment::where(['dispense_status' => 1, 'payment_status'=> 1]) ->whereBetween('created_at',[$start, $end])->where($filters)->orderBy('created_at', 'desc')->get(); } return view('pharmacy::pharmacy.index', compact('pending_paid_prescriptions', 'pending_unpaid_prescriptions','confirmed_paid_prescriptions', 'confirmed_unpaid_prescriptions', 'categories', 'display')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a new ward dispensing * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // check if any drug has been selected if(is_array($request->drug_id)){ $ward_id = $request->ward; $dispensation_date = Carbon::createFromFormat('d/m/Y', $request->dispensation_date)->toDateString(); $drug_id_array = $request->drug_id; $quantity_returned_array = $request->quantity_returned; $quantity_dispensed_array = $request->quantity_dispensed; $total_array = $request->total; $stock_array = $request->stock; $pharmacy_comment_array = $request->pharmacy_comment; for ($x = 0; $x < count($drug_id_array); $x++) { //Incrementing the quantity in the drugs table with quantity returned every time the query runs $drug = Drug::find($drug_id_array[$x]); $new_stock_after_return = $drug->pharmacy_stock + $quantity_returned_array[$x]; $drug->pharmacy_stock = $new_stock_after_return; $drug->updated_by = Auth::id(); $drug->updated_at = Carbon::now(); $drug->update(); //Decrementing the quantity in the drugs table with the quantity dispensed every time the query runs $new_stock_after_dispensing = $drug->pharmacy_stock - $quantity_dispensed_array[$x]; $drug->pharmacy_stock = $new_stock_after_dispensing; $drug->updated_by = Auth::id(); $drug->updated_at = Carbon::now(); $drug->update(); } //Run the query to insert the ward dispensing into the ward dispensing table $ward_dispensing = new WardDispensing; $ward_dispensing->ward_id = $ward_id; $ward_dispensing->drug_id = implode(',', $drug_id_array); $ward_dispensing->quantity_returned = implode(',', $quantity_returned_array); $ward_dispensing->quantity_dispensed = implode(',', $quantity_dispensed_array); $ward_dispensing->stock = implode(',', $stock_array); $ward_dispensing->total = implode(',', $total_array); $ward_dispensing->dispensation_date = $dispensation_date; $ward_dispensing->comment = implode(',', $pharmacy_comment_array); $ward_dispensing->received_by = $request->received_by; $ward_dispensing->created_by = Auth::id(); if ($ward_dispensing->save()) { flash('Drugs have been successfully dispensed')->success(); return redirect('ward_dispensing'); } flash('Error in dispensing. Kindly contact the system admin ')->error(); return redirect()->back(); } else { flash('Error in dispensing. Kindly contact the system admin ')->error(); return redirect()->back(); } } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } /* view dispensing details */ public function view_dispensing_details(Request $request) { $treatment_id = $request->treatment_id; $patient_id = $request->patient_id; $episode_id = $request->episode_id; $patient = Patient::where(['id' => $patient_id])->first(); $treatment = Treatment::find($treatment_id); $previous_treatments = Treatment::where('patient_id',$patient_id)->where('episode_id', '!=', $episode_id)->take(5)->get(); return view('pharmacy::pharmacy.view_dispensing_details', compact('patient_id', 'treatment_id', 'patient', 'treatment', 'previous_treatments')); } /** * Return to dispensing view with errors * * @param $treatment_id * @param $patient_id * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function view_dispensing_details_error($treatment_id, $patient_id) { $patient = Patient::where(['id' => $patient_id])->first(); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $drug_categories = DB::table('drug_categories')->get(); $treatment = Treatment::find($treatment_id); //allergies and alerts $known_patient_allergies = Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $known_patient_alerts = Alert::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $drug_categories_array = DB::table('drug_categories')->pluck('name', 'id'); return view('pharmacy::pharmacy.view_dispensing_details', compact('patient_id', 'treatment_id', 'patient', 'categories', 'marital_statuses', 'drug_categories', 'treatment', 'known_patient_alerts', 'known_patient_allergies', 'drug_categories_array')); } /* dispense prescriptions */ public function dispense_prescription(Request $request) { $patient_id = $request->patient_id; $treatment_id = $request->treatment_id; $drug_ids_array = $request->drug_id; $quantity_to_dispense_array = $request->quantity_to_dispense; $dose_array = $request->dose; $dose_2_array = isset($request->dose2) ? $request->dose2 : []; $frequency_array = $request->frequency; $duration_array = $request->duration; $instructions_to_patient_array = $request->instructions; $to_take_away = $request->tta; $comment = $request->comment; $purchased_elsewhere = $request->purchased_elsewhere; $purchased_elsewhere_array = []; /* 1.reduce pharmacy_stock of that drug that's been dispensed 2.insert into patient_dispensing 3.insert into prescription error if there is one 4.update treatment and set dispense status to 1 where id = treatment_id. 5.issue patient dispensed receipt */ for ($x = 0; $x < count($drug_ids_array); $x++) { if (isset($purchased_elsewhere) && count($purchased_elsewhere) > 0 && in_array($drug_ids_array[$x], $purchased_elsewhere)) { $purchased_elsewhere_array[] = 1; } else { $drug = Drug::find($drug_ids_array[$x]); if ($drug) { if (get_inventory_reduction_point() == 1) { $current_stock = $drug->pharmacy_stock; $new_stock = $current_stock - $quantity_to_dispense_array[$x]; $drug->pharmacy_stock = $new_stock; $drug->update(); } } else { $quantity_to_dispense_array[$x] = 0; } $purchased_elsewhere_array[] = 0; } } /* ========= batch calculations =========== */ $batch_drug_ids_array = $request->batch_drug_id; $batched_dispensed_array = $request->batch_dispensed_from?? []; $batch_quantity_dispensed_array = $request->batch_quantity_to_dispense; for ($x = 0; $x < count($batched_dispensed_array); $x++) { if (isset($purchased_elsewhere) && count($purchased_elsewhere) > 0 && in_array($batch_drug_ids_array[$x] ?? 0, $purchased_elsewhere)){ //in purchased elsewhere so do not reduce } else{ if (get_inventory_reduction_point() == 1) { reduce_batch_item_stock($item_type = 1,$batch_drug_ids_array[$x],$batched_dispensed_array[$x]??0, 'drugs', 'pharmacy_stock',$batch_quantity_dispensed_array[$x] ?? 0, 'treatments','Dispensing', $treatment_id, $patient_id); // reduce_batch_item_from_pharmacy($item_type = 1, $batch_drug_ids_array[$x] ?? 0, $batched_dispensed_array[$x] ?? 0, $batch_quantity_dispensed_array[$x] ?? 0, "treatments", $treatment_id, $patient_id); } } } /* ========= end of batch calculations ==== */ //Inserting patient dispensing $patient_dispensing = new PatientDispensing; $patient_dispensing->patient_id = $patient_id; $patient_dispensing->treatment_id = $treatment_id; $patient_dispensing->drugs = implode(',', $drug_ids_array); $patient_dispensing->dose = implode(',', $dose_array); $patient_dispensing->dose2 = implode(',', $dose_2_array); $patient_dispensing->drug_frequency = implode(',', $frequency_array); $patient_dispensing->duration = implode(',', $duration_array); $patient_dispensing->quantity_dispensed = implode(',', $quantity_to_dispense_array); $patient_dispensing->dispensed = 1; $patient_dispensing->instructions = implode(',', $instructions_to_patient_array); $patient_dispensing->tta = $to_take_away; $patient_dispensing->prescription_date = Carbon::now(); $patient_dispensing->pharmacy_comment = $comment; $patient_dispensing->purchased_elsewhere = implode(",", $purchased_elsewhere_array); $patient_dispensing->created_by = Auth::id(); $patient_dispensing->save(); $dispensing_id = $patient_dispensing->id; // get the last inserted ID //Updating the treatment table to show that the previous prescription was altered $treatment_model = Treatment::find($treatment_id); $treatment_model->dispense_status = 1; $treatment_model->purchased_elsewhere = implode(",", $purchased_elsewhere_array); /*====== save the current selling price now for those patients that will pay later when price has changed ====*/ $unit_selling_prices_array = []; $price_list_id = is_patient_category_attached_to_price_list($patient_id); for ($i=0; $i < count($drug_ids_array) ; $i++) { $drug_insurance_status = get_name($drug_ids_array[$i], "id", "insurance_coverage", "drugs"); if ($price_list_id) { $treatment_amount = get_price_list_category_price($price_list_id, 3, $drug_ids_array[$i]); if($drug_insurance_status == 1 && patient_insurance_status($patient_id) == 1){ $treatment_amount = get_chi_price_list_category_price($price_list_id, 3, $drug_ids_array[$i]); } } else { // check if drug and patient is eligible for insurance if($drug_insurance_status == 1 && patient_insurance_status($patient_id) == 1){ $treatment_amount = get_name($drug_ids_array[$i], "id", "insured_price", "drugs"); } else { $treatment_amount = get_name($drug_ids_array[$i], "id", "non_insured_price", "drugs"); } } $unit_selling_prices_array[] = $treatment_amount; } /* =============================================== */ $treatment_model->unit_selling_prices = implode(",", $unit_selling_prices_array); $treatment_model->save(); flash('Treatment dispensed successfully')->success(); return redirect('patient_dispensing_receipt/' . $dispensing_id); } public function edit_dispensing_details($patient_id, $treatment_id){ $treatment = Treatment::find($treatment_id); session()->put('alter_episode_id', $treatment->episode_id); session()->put('alter_patient_id', $patient_id); return redirect('/prescriptions/create'); } public function save_altered_prescription(Request $request){ $patient_id = $request->patient_id; $treatment_id = $request->treatment_id; $drug_ids_array = $request->drug_id; $quantity_to_dispense_array = $request->quantity_to_dispense; $dose_array = $request->dose; $dose_2_array = isset($request->dose2) ? $request->dose2 : []; $frequency_array = $request->frequency; $duration_array = $request->duration; $instructions_to_patient_array = $request->instructions; $prescribed_by = $request->prescribed_by; $to_take_away = $request->tta; $pharmacist = Auth::id(); $comment = $request->comment; $type_of_error = []; isset($request->wrong_dosage) ? $type_of_error[] = "Wrong dosage" : ""; isset($request->wrong_frequency) ? $type_of_error[] = "Wrong frequency" : ""; isset($request->inadequate_funds) ? $type_of_error[] = "Inadequate Funds" : ""; isset($request->other_error) ? $type_of_error[] = "Other error" : ""; $type_of_error = implode(',', $type_of_error); $severity_of_error = $request->severity_of_error; // update the drug stock levels for ($x = 0; $x < count($drug_ids_array); $x++) { $drug = Drug::find($drug_ids_array[$x]); $current_stock = $drug->pharmacy_stock; $new_stock = $current_stock - $quantity_to_dispense_array[$x]; $drug->pharmacy_stock = $new_stock; $drug->update(); } // inserting patient dispensing $patient_dispensing = new PatientDispensing; $patient_dispensing->patient_id = $patient_id; $patient_dispensing->treatment_id = $treatment_id; $patient_dispensing->drugs = implode(',', $drug_ids_array); $patient_dispensing->dose = implode(',', $dose_array); $patient_dispensing->dose2 = implode(',', $dose_2_array); $patient_dispensing->drug_frequency = implode(',', $frequency_array); $patient_dispensing->duration = implode(',', $duration_array); $patient_dispensing->quantity_dispensed = implode(',', $quantity_to_dispense_array); $patient_dispensing->dispensed = 1; $patient_dispensing->instructions = implode(',', $instructions_to_patient_array); $patient_dispensing->tta = $to_take_away; $patient_dispensing->prescription_date = Carbon::now(); $patient_dispensing->pharmacy_comment = $comment; $patient_dispensing->created_by = Auth::id(); $patient_dispensing->save(); $dispensing_id = $patient_dispensing->id; // updating the treatment table to show that the previous prescription was altered $treatment_model = Treatment::find($treatment_id); $treatment_model->altered = $patient_dispensing->id; $treatment_model->dispense_status = 1; $treatment_model->update(); // inserting the prescription errors $prescription_error = new PrescriptionError; $prescription_error->patient_id = $patient_id; $prescription_error->patient_dispensings_id = $dispensing_id; $prescription_error->type_of_error = $type_of_error; $prescription_error->severity_of_error = $severity_of_error; $prescription_error->prescriber = $prescribed_by; $prescription_error->pharmacist = Auth::id(); $prescription_error->created_by = Auth::id(); $prescription_error->comment = $comment; $prescription_error->save(); flash('Treatment altered and dispensed successfully')->success(); return redirect('patient_dispensing_receipt/' . $dispensing_id); } /* function for ward dispensing */ public function ward_dispensing(Request $request) { $drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id'); $wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray(); $wards = ['' => '- select -'] + $wards; $staff_array = $this->userService->pluckUserFullName(); if (isset($request->drugs_to_dispense)) { $selected_drugs_array = $request->drugs_to_dispense; $drugs_to_dispense_collection = Drug::whereIn('id', $selected_drugs_array)->get(); return view('pharmacy::pharmacy.ward_dispensing', compact('drugs', 'wards', 'drugs_to_dispense_collection', 'staff_array')); } return view('pharmacy::pharmacy.ward_dispensing', compact('drugs', 'wards', 'staff_array')); } // view past ward dispensing details public function view_ward_dispensing(Request $request){ $wards = Ward::orderBy('name')->pluck('name', 'id')->toArray(); $wards = ['' => '- select -'] + $wards; if (isset($request->ward)){ $search_complete = true; $ward_id = $request->ward; $start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); $ward_dispensing = WardDispensing::where('ward_id', $ward_id) ->whereBetween('created_at', [$start_date, $end_date]) ->paginate(50); return view('pharmacy::pharmacy.view_ward_dispensing', compact('wards', 'search_complete', 'ward_id', 'start_date', 'end_date', 'ward_dispensing')); } else { $search_complete = false; return view('pharmacy::pharmacy.view_ward_dispensing', compact('wards', 'search_complete')); } } /* view pharmacy stock sheet */ public function stock_sheet() { $drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->orderBy('name', 'asc')->get(); if (count($drugs) < 1) { flash()->error("There is out of stock of drugs"); return redirect('/drugs/'); } else { return view('pharmacy::pharmacy.stock_sheet', compact('drugs')); } } /* patient dispensing receipt */ public function patient_dispensing_receipt($dispensing_id) { $patient_dispensing = PatientDispensing::find($dispensing_id); session()->put('patient_id', $patient_dispensing->patient_id); $episode_id = PatientEpisode::where([['patient_id', $patient_dispensing->patient_id],['treatment_id', $patient_dispensing->treatment_id]])->first(['id']); $hospital_details = HospitalInformation::find(1); return view('pharmacy::pharmacy.patient_dispensing_receipt', compact('patient_dispensing', 'hospital_details', 'episode_id')); } /* requisition for drugs */ public function requisition_for_drugs(Request $request) { $quotation_type_options = DB::table('quotation_types')->pluck('name', 'id')->toArray(); $quotation_type_options = ['' => '- Select Requistion Type -'] + $quotation_type_options; $results = []; $item_type = 0; $names_array = []; if (isset($request->quotation_type)) { $item_type = $request->quotation_type; //1-drug 2-sundry 3-dental 4-radiology 5-Lab if ($item_type == 1) { $names_array = DB::table('drugs')->where('available', 1)->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All Drugs', 'all_items'); } elseif ($item_type == 2) { $names_array = DB::table('sundries')->where('available', 1)->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All Sundries', 'all_items'); } elseif ($item_type == 3) { $names_array = DB::table('dentals')->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All Dentals', 'all_items'); } elseif ($item_type == 4) { $names_array = DB::table('radiologies')->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All Radiology Items', 'all_items'); } elseif ($item_type == 5) { $names_array = DB::table('labs')->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All Labs', 'all_items'); } elseif ($item_type == 6) { $names_array = DB::table('general_items')->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All General Items', 'all_items'); } elseif ($item_type == 7) { $names_array = DB::table('eye_glasses')->orderBy('name')->whereNull('deleted_at')->pluck('name','id')->prepend('All Optical Items', 'all_items'); } } return view('pharmacy::pharmacy.requisition_for_drugs', compact('quotation_type_options', 'results', 'item_type','names_array')); } /* handle the search from drug requisitions */ public function drug_requisition_search(Request $request) { $quotation_type_options = DB::table('quotation_types')->pluck('name', 'id')->toArray(); $quotation_type_options = ['' => '- Select Requistion Type -'] + $quotation_type_options; $results = null; $item_type = $request->item_type; $item_ids_array = $request->drug_name; $names_array = []; if (isset($request->item_type)) { if ($item_type == 1) { $results = (in_array("all_items", $item_ids_array))? Drug::where('available', 1)->orderby('name', 'asc')->get() :Drug::whereIn('id', $item_ids_array)->where('available', 1)->orderBy('name','asc')->get(); $names_array = Drug::where('available', 1)->orderby('name')->distinct()->pluck('name','id'); } elseif ($item_type == 2) { $results = (in_array("all_items", $item_ids_array))? Sundry::where('available', 1)->orderBy('name','asc')->get() :Sundry::whereIn('id', $item_ids_array)->where('available', 1)->orderBy('name','asc')->get(); $names_array = Sundry::where('available', 1)->orderby('name')->distinct()->pluck('name','id'); } elseif ($item_type == 3) { $results = (in_array("all_items", $item_ids_array))? Dental::orderBy('name','asc')->get() :Dental::whereIn('id', $item_ids_array)->orderBy('name','asc')->get(); $names_array = Dental::orderBy('name')->distinct()->pluck('name','id'); } elseif ($item_type == 4) { $results = (in_array("all_items", $item_ids_array))? Radiology::orderBy('name','asc')->get():Radiology::whereIn('id', $item_ids_array)->orderBy('name','asc')->get(); $names_array = Radiology::orderBy('name')->distinct()->pluck('name','id'); } elseif ($item_type == 5) { $results = (in_array("all_items", $item_ids_array))? Lab::orderBy('name','asc')->get() : Lab::whereIn('id', $item_ids_array)->orderBy('name','asc')->get(); $names_array = Lab::orderBy('name')->distinct()->pluck('name','id'); } elseif ($item_type == 6) { $results = (in_array("all_items", $item_ids_array))? GeneralItem::orderBy('name','asc')->get() : GeneralItem::whereIn('id', $item_ids_array)->orderBy('name','asc')->get(); $names_array = GeneralItem::orderBy('name')->distinct()->pluck('name','id'); } elseif ($item_type == 7) { $results =(in_array("all_items", $item_ids_array))? EyeGlasses::orderBy('name','asc')->get(): EyeGlasses::whereIn('id', $item_ids_array)->orderBy('name','asc')->get(); $names_array = EyeGlasses::orderBy('name')->distinct()->pluck('name','id'); } } return view('pharmacy::pharmacy.requisition_for_drugs', compact('quotation_type_options', 'results', 'item_type','names_array')); } /* store requisitions */ public function store_requisition(Request $request) { $drug_id_array = $request->drug_id; $quantity_array = $request->quantity; $item_type = $request->item_type; $user_id = Auth::id(); /* return back if no quantity has been filled */ if (array_sum($quantity_array) < 1) { flash('Please insert some values!')->error(); return redirect()->back(); } if (isset($request->save_for_later)) { // insert into temporary requisitions table $temporary_requisition = new TemporaryRequisition; $temporary_requisition->quotation_type_id = $item_type; $temporary_requisition->drug_id = implode(',', $drug_id_array); $temporary_requisition->quantity_requested = implode(',', $quantity_array); $temporary_requisition->created_by = $user_id; if ($temporary_requisition->save()) { flash('Requisition has been saved for later')->success(); return redirect('select_temporary_requisition'); } return redirect()->back(); } elseif (isset($request->complete_request)) { /* 1.insert into the requisitions table 2.if it was a previously temporary requisition, do step 1(insert into requisitions) and update completion_status in the temporary table to 1 */ $filtered_drugs_array = []; $filtered_quantities_array = []; $associative_requested_drugs_array = []; for ($i=0; $i < count($drug_id_array) ; $i++) { if ($quantity_array[$i] != "") { $associative_requested_drugs_array[$drug_id_array[$i]] = $quantity_array[$i]; $filtered_drugs_array[] = $drug_id_array[$i]; $filtered_quantities_array[] = $quantity_array[$i]; } } $new_requisition = new Requisition; $new_requisition->quotation_type_id = $item_type; $new_requisition->drug_id = implode(',', $filtered_drugs_array); $new_requisition->quantity_requested = implode(',', $filtered_quantities_array); $new_requisition->created_by = $user_id; $new_requisition->save(); flash('Requisition number ' . $new_requisition->id . ' made successfully')->success(); return redirect('/print_requisition_receipt/' . $new_requisition->id); } elseif (isset($request->complete_previously_temporary_requisition)) { $temporary_requisition_model = TemporaryRequisition::find($request->temporary_requisition_id); $temporary_requisition_model->completion_status = 1; $temporary_requisition_model->updated_by = $user_id; $temporary_requisition_model->update(); $requisition_model = new Requisition; $requisition_model->quotation_type_id = $temporary_requisition_model->quotation_type_id; $requisition_model->drug_id = implode(',', $drug_id_array); $requisition_model->quantity_requested = implode(',', $quantity_array); $requisition_model->created_by = $user_id; $requisition_model->save(); return redirect('/print_requisition_receipt/' . $requisition_model->id); } elseif (isset($request->update_temporary_requisition)) { $temporary_requisition_model = TemporaryRequisition::find($request->temporary_requisition_id); $temporary_requisition_model->drug_id = implode(',', $drug_id_array); $temporary_requisition_model->quantity_requested = implode(',', $quantity_array); $temporary_requisition_model->updated_by = $user_id; $temporary_requisition_model->update(); flash('Requisition updated successfully')->success(); return redirect('previous_drug_requisitions'); } else { flash('Please search for items')->error(); return redirect()->back(); } } /* select and view temporary requisitions */ public function select_temporary_requisition(Request $request) { $quotation_type_options = DB::table('quotation_types')->pluck('name', 'id')->toArray(); $quotation_type_options = ['' => '- Select Requisition type -'] + $quotation_type_options; $results = 0; $quotation_type = 0; if (isset($request->quotation_type)) { $quotation_type = $request->quotation_type; //1-drug 2-sundry 3-dental 4-radiology 5-Lab $results = TemporaryRequisition::where(['quotation_type_id' => $quotation_type, 'completion_status' => 0])->orderBy('id', 'desc')->get(); } return view('pharmacy::pharmacy.select_temporary_requisitions', compact('quotation_type_options', 'results', 'quotation_type')); } /* edit temporary requisition */ public function edit_temporary_requisition(Request $request) { $quotation_type = $request->item_type; $requisition_id = $request->requisition_id; $suppliers = DB::table('suppliers')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray(); $suppliers = ['' => '- select -'] + $suppliers; $requisition_results = TemporaryRequisition::where(['id' => $requisition_id, 'completion_status' => 0])->orderBy('id', 'desc')->get(); //1-drug 2-sundry 3-dental 4-radiology 5-Lab if ($quotation_type == 1) { $items = Drug::where('available', 1)->orderby('name', 'asc')->get(); } elseif ($quotation_type == 2) { $items = Sundry::where('available', 1)->orderby('name', 'asc')->get(); } elseif ($quotation_type == 3) { $items = Dental::orderBy('name', 'asc')->get(); } elseif ($quotation_type == 4) { $items = Radiology::orderBy('name', 'asc')->get(); } elseif ($quotation_type == 5) { $items = Lab::orderBy('name', 'asc')->get(); } return view('pharmacy::pharmacy.edit_temporary_requisition', compact('items', 'quotation_type', 'suppliers', 'requisition_id', 'requisition_results')); } /* view previous drug quotations */ public function previous_drug_requisitions(Request $request) { $quotation_type_options = DB::table('quotation_types')->pluck('name', 'id')->toArray(); $quotation_type_options = ['' => '- Select Requisition type -'] + $quotation_type_options; $results = []; $item_type = ""; $display = ""; if(isset($request->start_date) && isset($request->end_date)){ if (isset($request->quotation_type)) { $start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->toDateString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->toDateString(); $start_date = Carbon::parse($start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::parse($end_date)->endOfDay()->toDateTimeString(); $results = Requisition::whereBetween('created_at',[$start_date, $end_date])->where('quotation_type_id',$request->quotation_type)->orderBy('id','desc')->get(); } } return view('pharmacy::pharmacy.previous_requisitions', compact('quotation_type_options','results','item_type','display')); } /* edit a previous requisition */ public function edit_previous_requisition(Request $request) { $requisition_id = $request->requisition_id; $item_type = $request->item_type; $results = DB::select("SELECT * FROM requisitions where id = {$requisition_id}"); if ($item_type == 4 ||$item_type == 5 ) { $results = get_requisition_all_batches($results,['store_stock','lab_stock'],['store_batches','lab_batches'],['total_store_stock','total_lab_stock'],$item_type); }else{ //if source is from labs for sundries if ($item_type==2 && $results[0]->requisition_origin == 2){ $results = get_all_batch_details($results,['store_stock','lab_stock'],['store_batches','lab_batches'],['total_store_stock','total_lab_stock'],$item_type); } // if source is from imaging for sundries elseif ($item_type==2 && $results[0]->requisition_origin == 3){ $results = get_all_batch_details($results,['store_stock','radiology_stock'],['store_batches','imaging_batches'],['total_store_stock','total_imaging_stock'],$item_type); } else $results = get_all_batch_details($results,['store_stock','pharmacy_stock'],['store_batches','pharmacy_batches'],['total_store_stock','total_pharmacy_stock'],$item_type); } return view('pharmacy::pharmacy.edit_previous_requisition', compact('requisition_id', 'item_type', 'results')); } /* function to update edited previous requisition */ public function update_previous_requisition(Request $request) { $requisition_id = $request->requisition_id; $quantity_requested_string = implode(',', $request->quantity_requested); $drugs_string = implode(',', $request->drug_id); $units_string = implode(',', $request->units); $requisition_model = Requisition::find(intval($requisition_id)); if($requisition_model != null){ //$requisition_model->drug_id = $drugs_string; $requisition_model->quantity_requested = $quantity_requested_string; if ($requisition_model->update()) { flash('Requisition has been updated')->success(); return redirect('/print_requisition_receipt/' . $requisition_id); } } flash('Error occured while trying to update')->error(); return redirect()->back(); } /* pharmacy sundries stock sheet */ public function sundries_stock_sheet() { $sundries = DB::table('sundries')->whereNull('deleted_at')->orderBy('name', 'asc')->get(); if (empty($sundries)) { flash()->error("There is out of stock of sundries"); return redirect('/sundries/'); } else { return view('pharmacy::pharmacy.sundries_stock_sheet', compact('sundries')); } } /* update the sundries stock sheet */ public function update_sundries_stock_sheet(Request $request) { $sundry_ids = $request->sundry_id; $quantity = $request->quantity; for ($x = 0; $x < count($sundry_ids); $x++): $sundry = Sundry::find($sundry_ids[$x]); $sundry->pharmacy_stock = $quantity[$x]; $update_store_stock = $sundry->update(); endfor; if ($update_store_stock): flash('Pharmacy Stock Levels Updated')->success(); return redirect('pharmacy_sundries_stock_sheet'); endif; flash('Sorry, unable to update stock')->error(); return redirect()->back(); } public function print_requisition_receipt($id) { $requisition_model = Requisition::find($id); $hospital_details = HospitalInformation::find(1); $requisition_id = $id; return view('pharmacy::pharmacy.requisition_receipt', compact('hospital_details', 'requisition_id', 'requisition_model')); } /* list all unconfirmed prescriptions */ public function confirm_prescriptions(Request $request) { $search_text = ""; $filters = []; if (isset($request->patient_id) && $request->patient_id != 0) { array_push($filters, ['patient_id', '=', $request->patient_id]); $search_text = "Showing results for " . get_full_name($request->patient_id, 'id', 'first_name', 'last_name', 'patients') . " (" . get_name($request->patient_id, 'id', 'number', 'patients') . ")"; } elseif($request->search_by == 0){ // last 24 hours array_push($filters, ['created_at', '>', Carbon::now()->subDay()]); $search_text = "Showing prescriptions in the past 24 hours"; } elseif($request->search_by == 1){ // custom date $start_date = Carbon::createFromFormat('d/m/Y', $request->reg_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->reg_date)->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date]); array_push($filters, ['created_at', '<', $end_date]); $search_text = "Showing prescriptions made between " . streamline_date_plain($start_date) . " and " . streamline_date_plain($end_date); } elseif($request->search_by == 2){ // custom date range $start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date]); array_push($filters, ['created_at', '<', $end_date]); $search_text = "Showing prescriptions made between " . streamline_date_plain($start_date) . " and " . streamline_date_plain($end_date); } else { // last 24 hours array_push($filters, ['created_at', '>', Carbon::now()->subDay()]); $search_text = "Showing prescriptions in the past 24 hours"; } $unconfirmed_prescriptions = Treatment::where(['dispense_status' => 0]) ->where(['confirmation_status' => 0]) ->where($filters) ->orderBy('created_at', 'desc') ->get(); $confirmed_prescriptions = Treatment::where(['dispense_status' => 0]) ->where(['confirmation_status' => 1]) ->where(['payment_status' => 0]) ->where($filters) ->orderBy('created_at', 'desc') ->get(); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); return view('pharmacy::pharmacy.incoming_unconfirmed_prescriptions', compact('confirmed_prescriptions','unconfirmed_prescriptions', 'categories')); } public function confirm_dispensing_details(Request $request) { $treatment_id = $request->treatment_id; $patient_id = $request->patient_id; $episode_id = $request->episode_id; $patient = Patient::where(['id' => $patient_id])->first(); $treatment = Treatment::find($treatment_id); $previous_treatments = Treatment::where('patient_id',$patient_id)->where('episode_id', '!=', $episode_id)->take(5)->get(); return view('pharmacy::pharmacy.confirm_dispensation_details', compact('patient_id', 'treatment_id', 'patient', 'treatment', 'previous_treatments')); } public function store_prescription_confirmation(Request $request) { $purchased_elsewhere = $request->purchased_elsewhere; $treatment = Treatment::find($request->treatment_id); $purchased_elsewhere_array = []; $drugs = explode(",", $treatment->drugs); if (!is_null($purchased_elsewhere) && count($purchased_elsewhere) > 0) { foreach ($drugs as $drug) { if (in_array($drug, $purchased_elsewhere)) { $purchased_elsewhere_array[] = 1; } else { $purchased_elsewhere_array[] = 0; } } } else { $purchased_elsewhere_array = array_fill(0, count($drugs), 0); } $treatment->confirmation_status = 1; $treatment->purchased_elsewhere = implode(",", $purchased_elsewhere_array); $treatment->update(); flash('Treatment has been confirmed')->success(); return redirect('confirm_prescriptions'); } public function alter_dispensing_details(Request $request){ $treatment_id = $request->treatment_id; $patient_id = $request->patient_id; if (isset($request->alter)) { $patient = Patient::where(['id' => $patient_id])->first(); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $drug_categories = DB::table('drug_categories')->get(); $treatment = Treatment::find($treatment_id); $patient_dispensings = PatientDispensing::where(['treatment_id' => $treatment_id])->get(); $dispensed_drugs_array = []; //This is to handle altering a treatment where some of the drugs have been dispensed if (count($patient_dispensings) > 0) { foreach ($patient_dispensings as $patient_dispensing) { $dispensed_drugs_array_exploded = explode(",", $patient_dispensing->drugs); $dispensed_drugs_array = array_merge($dispensed_drugs_array, $dispensed_drugs_array_exploded); } } $dosage_frequencies = DB::table('dosage_frequencies')->pluck("name", "id")->toArray(); $drug_options = DB::table('drugs')->where('available', 1)->pluck("name", "id")->toArray(); /* make frequencies drop down that will be used by ajax to dynamically add another prescription */ $frequencyDropDown = ''; $frequencyDropDown .= ''; $frequencies = DosageFrequency::orderBy('name', 'asc')->get(); foreach ($frequencies as $frequency) { $frequencyDropDown .= ''; } /* make drugs drop down that will be used by ajax to dynamically add another prescription */ $drugsDropDown = ''; $drugsDropDown .= ''; $drugs_drop_down = Drug::where('available', 1)->orderby('name', 'asc')->get(); foreach ($drugs_drop_down as $drop_down) { if ($drop_down->insurance_coverage == 1) { $drugsDropDown .= ''; } else { $drugsDropDown .= ''; } } $known_patient_allergies = Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $known_patient_alerts = Alert::where('patient_id',$patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $drug_categories_array = DB::table('drug_categories')->pluck('name', 'id'); return view('pharmacy::pharmacy.edit_dispensing_details', compact('patient_id', 'treatment_id', 'patient', 'categories', 'marital_statuses', 'drug_categories', 'treatment', 'dosage_frequencies', 'drug_options', 'frequencyDropDown', 'drugsDropDown', 'known_patient_alerts', 'known_patient_allergies','dispensed_drugs_array', 'drug_categories_array')); } $drug_ids_array = $request->drug_id; $quantity_to_dispense_array = $request->quantity_to_dispense; $dose_array = $request->dose; $dose_2_array = isset($request->dose2) ? $request->dose2 : []; $frequency_array = $request->frequency; $duration_array = $request->duration; $instructions_to_patient_array = $request->instructions; $prescribed_by = $request->prescribed_by; $to_take_away = $request->tta; $pharmacist = Auth::id(); $comment = $request->comment; $type_of_error = []; isset($request->wrong_dosage) ? $type_of_error[] = "Wrong dosage" : ""; isset($request->wrong_frequency) ? $type_of_error[] = "Wrong frequency" : ""; isset($request->inadequate_funds) ? $type_of_error[] = "Inadequate Funds" : ""; isset($request->other_error) ? $type_of_error[] = "Other error" : ""; $type_of_error = implode(',', $type_of_error); $severity_of_error = $request->severity_of_error; /* 1.reduce pharmacy_stock of that drug that's been dispensed 2.insert into patient_dispensing 3.insert into prescription error if there is one 4.update treatment and set dispense status to 1 where id = treatment_id. 5.issue patient dispensed receipt */ //$dispensing_id = $patient_dispensing->id; // get the last inserted ID //inserting the prescription errors $treatment_record = Treatment::find($treatment_id); if (isset($request->severity_of_error) && !is_null($request->severity_of_error)) { $prescription_error = new PrescriptionError; $prescription_error->patient_id = $patient_id; $prescription_error->patient_dispensings_id = 0; //$dispensing_id; update the dispensing id when dispensed $prescription_error->type_of_error = $type_of_error; $prescription_error->severity_of_error = $severity_of_error; $prescription_error->prescriber = $prescribed_by; $prescription_error->pharmacist = Auth::id(); $prescription_error->created_by = Auth::id(); $prescription_error->comment = $comment; $prescription_error->episode_id = $treatment_record->episode_id; $prescription_error->save(); //update the treatments table if anything has been added or subtracted $treatment_record->drugs = implode(",", $request->drug_id); $treatment_record->doses = implode(",", $request->dose); $treatment_record->dose2 = implode(",", $request->dose_two); $treatment_record->frequencies = implode(",", $request->frequency); $treatment_record->durations = implode(",", $request->duration); $treatment_record->quantities_dispensed = implode(",", $request->quantity_to_dispense); $treatment_record->instruction = implode(",", $request->instructions); $treatment_record->update(); } //Updating the treatment table to show that the previous prescription was altered $treatment_model = Treatment::find($treatment_id); $treatment_model->altered = 0; //$dispensing_id; update with the dispensing id when dispensed $treatment_model->confirmation_status = 1; $update_treatment_alter = $treatment_model->update(); flash('Treatment has been Updated')->success(); return redirect('confirm_prescriptions'); } public function check_if_prescription_had_error($patient_id, $episode_id) { $prescription_errors = PrescriptionError::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $status = null; if (count($prescription_errors) > 0) { foreach ($prescription_errors as $error_record) { $status = $error_record->id; } } return $status; } /* ward dispensing per chart */ public function ward_dispensing_per_chart(Request $request) { $wards = DB::table('wards')->where('available', 1)->orderBy('name')->pluck("name", "id")->toArray(); $wards = ['0' => 'All wards'] + $wards; $search_by = $request->search_by; $drugs = Drug::where('available', 1)->orderBy('name')->pluck('name', 'id')->prepend('-- Select Drug --', '')->toArray(); $drugs_dropdown = ""; foreach ($drugs as $id => $name) { $this_drug_name = str_replace("'", '', $name); $this_drug_name = str_replace("\"", '', $this_drug_name); $drugs_dropdown .= ''; } $cancer_protocols = CancerProtocol::pluck('name', 'id'); $search_text = 0; if (isset($request->patient_id) && $request->patient_id != 0) { $inpatients = InpatientInfo::where(['discharged' => 0]) ->where('patient_id', $request->patient_id) ->orderBy('created_at', 'desc') ->get(); $search_text = "Showing results for " . get_full_name($request->patient_id, 'id', 'first_name', 'last_name', 'patients') . " (" . get_name($request->patient_id, 'id', 'number', 'patients') . ")"; $ward_id = 0; } elseif (isset($request->ward_id)) { $ward_id = $request->ward_id; $inpatients = []; $filters = []; $start_date = ""; $end_date = ""; if($request->search_by == 0){ // last 24 hours $last_day = Carbon::now()->subDay(); array_push($filters, ['created_at', '>', $last_day]); } elseif($request->search_by == 1){ // custom date $start_date = Carbon::createFromFormat('d/m/Y', $request->reg_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->reg_date)->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date]); array_push($filters, ['created_at', '<', $end_date]); } elseif($request->search_by == 2){ // custom date range $start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->endOfDay()->toDateTimeString(); array_push($filters, ['created_at', '>', $start_date]); array_push($filters, ['created_at', '<', $end_date]); } elseif($request->search_by == 3){ // } if (!empty($ward_id) && $ward_id != 0) { if($request->search_by == 0){ $search_text = "Showing patients admitted to " . get_name($ward_id, 'id', 'name', 'wards') . "in last 24 hours"; } else { $search_text = "Showing patients admitted to " . get_name($ward_id, 'id', 'name', 'wards') . " between " . streamline_date_plain($start_date) . " and " . streamline_date_plain($end_date); } $inpatients = InpatientInfo::where(['ward_id' => $ward_id, 'discharged' => 0])->where($filters)->orderBy('created_at', 'desc')->get(); } else { if($request->search_by == 0){ $search_text = "Showing patients admitted in the past 24 hours"; } else { $search_text = "Showing patients admitted between " . streamline_date_plain($start_date) . " and " . streamline_date_plain($end_date); } $inpatients = InpatientInfo::where(['discharged' => 0])->where($filters)->orderBy('created_at', 'desc')->get(); } } else { $inpatients = []; $ward_id = 0; } return view('pharmacy::pharmacy.ward_dispensing_per_chart', compact('inpatients', 'wards', 'ward_id', 'search_by', 'drugs', 'search_text', 'drugs_dropdown', 'cancer_protocols')); } public function store_ward_dispensing_per_chart(Request $request) { //store in the ward_dipensings_per_charts table but also store in the ward_treatment_dispensations table so that they are billable on individual patient inpatient sheet/bill $dipensed_drugs_array = $request->dispensed_drugs ?? []; $quantity_dispensed_array = $request->quantity_dispensed; $patient_ids_array = $request->patient_id; $episode_ids_array = $request->episode_id; $inpatient_info_ids_array = $request->inpatient_info_id; $ward_ids_array = $request->ward_id; $clean_patient_id_array = []; $clean_episode_id_array = []; $clean_inpatient_info_id_array = []; $clean_ward_id_array = []; $clean_drug_id_array = []; $clean_quantity_given_array = []; $cancer_protocol_ids = []; $cancer_protocol_ward_charts = []; if (isset($request->request_comment_patient_id)) { // logic for the cancer protocol $request_comment_patient_id_arr = $request->request_comment_patient_id; $request_comment_episode_id_arr = $request->request_comment_episode_id; $request_comment_protocol_id_arr = $request->request_comment_protocol_id; $protocol_weight_arr = $request->protocol_weight; $protocol_height_arr = $request->protocol_height; $protocol_vitals_date_taken_arr = $request->protocol_vitals_date_taken; $protocol_ward_id_arr = $request->protocol_ward_id; $protocol_id_arr = $request->protocol_id; $request_comment_arr = $request->request_comment; for ($i = 0; $i < count($request_comment_arr); $i++) { $cancer_protocol_ward_charts[$request_comment_patient_id_arr[$i] . '_' . $request_comment_episode_id_arr[$i] . '_' . $request_comment_protocol_id_arr[$i]]['request_comment'] = $request_comment_arr[$i]; $cancer_protocol_ward_charts[$request_comment_patient_id_arr[$i] . '_' . $request_comment_episode_id_arr[$i] . '_' . $request_comment_protocol_id_arr[$i]]['protocol_weight'] = $protocol_weight_arr[$i]; $cancer_protocol_ward_charts[$request_comment_patient_id_arr[$i] . '_' . $request_comment_episode_id_arr[$i] . '_' . $request_comment_protocol_id_arr[$i]]['protocol_height'] = $protocol_height_arr[$i]; $cancer_protocol_ward_charts[$request_comment_patient_id_arr[$i] . '_' . $request_comment_episode_id_arr[$i] . '_' . $request_comment_protocol_id_arr[$i]]['protocol_vitals_date_taken'] = $protocol_vitals_date_taken_arr[$i]; $cancer_protocol_ward_charts[$request_comment_patient_id_arr[$i] . '_' . $request_comment_episode_id_arr[$i] . '_' . $request_comment_protocol_id_arr[$i]]['protocol_ward_id'] = $protocol_ward_id_arr[$i]; } $protocol_drug_id_arr = $request->protocol_drug_id; $protocol_section_arr = $request->protocol_section; $protocol_drug_factor_arr = $request->protocol_drug_factor; $protocol_drug_factor_value_arr = $request->protocol_drug_factor_value; $protocol_drug_dose_arr = $request->protocol_drug_dose; $protocol_drug_dosage_label_arr = $request->protocol_drug_dosage_label; $protocol_drug_unit_value_arr = $request->protocol_drug_unit_value; $protocol_dosage_to_dispense_arr = $request->protocol_dosage_to_dispense; $protocol_quantity_to_dispense_arr = $request->protocol_quantity_to_dispense; $protocol_is_drug_selected_arr = $request->protocol_is_drug_selected; $protocol_instruction_arr = $request->protocol_instruction; $protocol_patient_id_arr = $request->protocol_patient_id; $protocol_episode_id_arr = $request->protocol_episode_id; for ($i = 0; $i < count($protocol_drug_id_arr); $i++) { if ($protocol_is_drug_selected_arr[$i] == 1) { $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_section"][] = $protocol_section_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_drug_id"][] = $protocol_drug_id_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_drug_factor"][] = $protocol_drug_factor_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_drug_factor_value"][] = $protocol_drug_factor_value_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_drug_dose"][] = $protocol_drug_dose_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_drug_dosage_label"][] = $protocol_drug_dosage_label_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_drug_unit_value"][] = $protocol_drug_unit_value_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_dosage_to_dispense"][] = $protocol_dosage_to_dispense_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_quantity_to_dispense"][] = $protocol_quantity_to_dispense_arr[$i]; $cancer_protocol_ward_charts[$protocol_patient_id_arr[$i] . '_' . $protocol_episode_id_arr[$i] . '_' . $protocol_id_arr[$i]]["protocol_instruction"][] = $protocol_instruction_arr[$i]; } } foreach ($cancer_protocol_ward_charts as $key => $values) { $exploded_key = explode("_", $key); if (count($values) == 5) { // none of the drugs were ticked continue; } $cancer_protocol_ward_chart = new CancerProtocolWardChart(); $cancer_protocol_ward_chart->patient_id = $exploded_key[0]; $cancer_protocol_ward_chart->episode_id = $exploded_key[1]; $cancer_protocol_ward_chart->ward_id = $values['protocol_ward_id']; $cancer_protocol_ward_chart->height = $values['protocol_height']; $cancer_protocol_ward_chart->weight = $values['protocol_weight']; $cancer_protocol_ward_chart->vitals_date_taken = $values['protocol_vitals_date_taken']; $cancer_protocol_ward_chart->request_comment = $values['request_comment']; $cancer_protocol_ward_chart->protocol_id = $exploded_key[2]; $cancer_protocol_ward_chart->protocol_drug_id = implode(',', $values['protocol_drug_id']); $cancer_protocol_ward_chart->protocol_section = implode(',', $values['protocol_section']); $cancer_protocol_ward_chart->protocol_drug_factor = implode(',', $values['protocol_drug_factor']); $cancer_protocol_ward_chart->protocol_drug_factor_value = implode(',', $values['protocol_drug_factor_value']); $cancer_protocol_ward_chart->protocol_drug_dose = implode(',', $values['protocol_drug_dose']); $cancer_protocol_ward_chart->protocol_drug_dosage_label = implode(',', $values['protocol_drug_dosage_label']); $cancer_protocol_ward_chart->protocol_drug_unit_value = implode(',', $values['protocol_drug_unit_value']); $cancer_protocol_ward_chart->protocol_dosage_to_dispense = implode(',', $values['protocol_dosage_to_dispense']); $cancer_protocol_ward_chart->protocol_quantity_to_dispense = implode(',', $values['protocol_quantity_to_dispense']); $cancer_protocol_ward_chart->protocol_instruction = json_encode($values['protocol_instruction']); $cancer_protocol_ward_chart->created_by = Auth::id(); $cancer_protocol_ward_chart->save(); $cancer_protocol_ids[] = $cancer_protocol_ward_chart->id; } } for ($i=0; $i < count($dipensed_drugs_array) ; $i++) { if (!is_null($dipensed_drugs_array[$i]) && !is_null($quantity_dispensed_array[$i])) { $clean_patient_id_array[] = $patient_ids_array[$i]; $clean_episode_id_array[] = $episode_ids_array[$i]; $clean_inpatient_info_id_array[] = $inpatient_info_ids_array[$i]; $clean_ward_id_array[] = $ward_ids_array[$i]; $clean_drug_id_array[] = $dipensed_drugs_array[$i]; $clean_quantity_given_array[] = $quantity_dispensed_array[$i]; } } $incoming_ward_chart = new IncomingWardChart; $incoming_ward_chart->patient_ids = implode(",", $clean_patient_id_array); $incoming_ward_chart->episode_ids = implode(",", $clean_episode_id_array); $incoming_ward_chart->inpatient_info_ids = implode(",", $clean_inpatient_info_id_array); $incoming_ward_chart->drug_ids = implode(",", $clean_drug_id_array); $incoming_ward_chart->quantity_given = implode(",", $clean_quantity_given_array); $incoming_ward_chart->ward_ids = implode(",", $clean_ward_id_array); $incoming_ward_chart->chart_ward_id = $request->chart_ward_id; $incoming_ward_chart->created_by = Auth::id(); $incoming_ward_chart->has_cancer_protocol = (count($cancer_protocol_ids) > 0) ? implode(",", $cancer_protocol_ids) : NULL; $incoming_ward_chart->save(); flash('Patient charts have been saved')->success(); return redirect('incoming_ward_charts'); } public function incoming_ward_charts(Request $request) { $ward_id = $request->ward_id; $filters = []; $start_date = null; $end_date = null; if($request->search_by == 0){ // last 24 hours $last_day = Carbon::now()->subDay(); $filters[] = ['created_at', '>', $last_day]; } elseif($request->search_by == 1){ // custom date $start_date = Carbon::createFromFormat('d/m/Y', $request->reg_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->reg_date)->endOfDay()->toDateTimeString(); $filters[] = ['created_at', '>', $start_date]; $filters[] = ['created_at', '<', $end_date]; } elseif($request->search_by == 2){ // custom date range $start_date = Carbon::createFromFormat('d/m/Y', $request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::createFromFormat('d/m/Y', $request->end_date)->endOfDay()->toDateTimeString(); $filters[] = ['created_at', '>', $start_date]; $filters[] = ['created_at', '<', $end_date]; } $search_by = $request->search_by; if (!empty($ward_id) && $ward_id != 0) { $incoming_charts = IncomingWardChart::where(['chart_ward_id' => $ward_id, 'completion_status' => 0])->where($filters)->get(); } else { $incoming_charts = IncomingWardChart::where(['completion_status' => 0])->where($filters)->get(); } $staff_array = $this->userService->pluckUserFullName(); $wards = DB::table('wards')->where('available', 1)->orderBy('name')->pluck("name", "id")->toArray(); $wards = ['0' => 'All wards'] + $wards; return view('pharmacy::pharmacy.incoming_ward_chart',compact('staff_array', 'wards', 'ward_id', 'search_by','start_date','end_date', 'incoming_charts')); } public function approve_ward_dispensing_per_chart($incoming_ward_chart_id) { $search_by = null; $cancer_protocol_orders = false; $incoming_chart_record = IncomingWardChart::find($incoming_ward_chart_id); $ward_id = $incoming_chart_record->chart_ward_id; if (!is_null($incoming_chart_record)) { $drug_ids_array = explode(",", $incoming_chart_record->drug_ids); $quantity_given_array = explode(",", $incoming_chart_record->quantity_given); if (!is_null($incoming_chart_record->has_cancer_protocol)) { $cancer_protocol_ids = explode(",", $incoming_chart_record->has_cancer_protocol); $cancer_protocol_orders = CancerProtocolWardChart::whereIn('id', $cancer_protocol_ids)->get(); } } $drugs_to_dispense_array = []; $quantities_to_dispense_array = []; for ($i = 0; $i < count($drug_ids_array); $i++) { // check if a drug id already exists in the drugs array if (in_array($drug_ids_array[$i], $drugs_to_dispense_array)) { //get key of that drug which exists $key = array_search($drug_ids_array[$i], $drugs_to_dispense_array); //increment the "to_dispense_qty" value of drug $quantities_to_dispense_array[$key] += $quantity_given_array[$i]; } else { //drugs does not exist, create new entry $drugs_to_dispense_array[] = $drug_ids_array[$i]; $quantities_to_dispense_array[] = $quantity_given_array[$i]; } } $wards = DB::table('wards')->where('available', 1)->orderBy('name')->pluck("name", "id")->toArray(); $wards = ['0' => 'All wards'] + $wards; $drugs = DB::table('drugs')->whereNull('deleted_at')->where('available', 1)->pluck('name', 'id')->toArray(); $staff_array = $this->userService->pluckUserFullName(); $drug_forms = DB::table('drug_forms')->whereNull('deleted_at')->pluck('name', 'id')->toArray(); $batches_array = DB::table('item_batch_watcher')->where('pharmacy_stock', '>', 0)->orWhere('store_stock', '>', 0)->get(); return view('pharmacy::pharmacy.approve_ward_dispensing_per_chart',compact('drug_forms','staff_array', 'wards', 'ward_id', 'search_by', 'drugs', 'drugs_to_dispense_array', 'quantities_to_dispense_array', 'incoming_chart_record', 'batches_array', 'cancer_protocol_orders')); } public function cancel_ward_dispensing_per_chart($incoming_ward_chart_id) { $incoming_chart_record = IncomingWardChart::find($incoming_ward_chart_id); if ($incoming_chart_record) { if (!is_null($incoming_chart_record->has_cancer_protocol)) { $cancer_protocol_ids = explode(",", $incoming_chart_record->has_cancer_protocol); $delete_cancer_protocol_orders = CancerProtocolWardChart::whereIn('id', $cancer_protocol_ids)->delete(); } $incoming_chart_record->delete(); flash("Ward chart deleted successfully")->success(); } else { flash("Could not cancel ward chart")->error(); } return redirect('incoming_ward_charts'); } public function store_approved_dispensings_per_chart(Request $request) { /* *update the completion_status to 1 in ward_dispensation_per_chart table *record the records in the ward treatment dispensations table, created_by shd be equal to received_by *store details in the ward_chart_approvals table and update the records with the approval_id */ $protocol_drug_ids_arr =$batch_id= []; if (isset($request->protocol_ward_charts_id)) { $protocol_ward_charts_id_arr = $request->protocol_ward_charts_id; $protocol_ward_id_arr = $request->protocol_ward_id; $protocol_patient_id_arr = $request->protocol_patient_id; $protocol_episode_id_arr = $request->protocol_episode_id; $protocol_quantity_to_dispense_arr = $request->protocol_quantity_to_dispense; $protocol_instruction_arr = $request->protocol_instruction; $protocol_drug_ids_arr = $request->protocol_drug_ids; $protocol_orders = CancerProtocolWardChart::whereIn('id', $protocol_ward_charts_id_arr)->get(); if (count($protocol_orders) > 0) { // check if the drug is consuming from more than one batch foreach ($request->cancer_batch_item_ids as $key => $id ){ $batch_id[$id][] = $request->cancer_batch_dispensed_from[$key]; } foreach ($protocol_orders as $protocol_order) { $protocol_order->approved_by = Auth::id(); $protocol_order->completion_status = 1; $protocol_order->update(); } /* create a new entry for the approval that has been done */ $chart_approval = new WardChartApproval; $chart_approval->drug_ids = implode(",", $protocol_drug_ids_arr); $chart_approval->quantity_dispensed = implode(",", $protocol_quantity_to_dispense_arr); $chart_approval->comments = implode(",", $protocol_instruction_arr); $chart_approval->received_by = $request->received_by; $chart_approval->approval_date = is_null($request->approval_date) ? Carbon::now() : Carbon::createFromFormat('d/m/Y',$request->approval_date)->toDateString(); $chart_approval->incoming_ward_charts_id = $request->incoming_chart_id; $chart_approval->cancer_protocol_order_id = implode(",", $protocol_ward_charts_id_arr); $chart_approval->created_by = Auth::id(); $chart_approval->ward_id = $protocol_ward_id_arr[0] ?? 0; $chart_approval->save(); // Loop through each entry and group by drug ID foreach ($protocol_drug_ids_arr as $index => $drugId) { $patientId = $protocol_patient_id_arr[$index]; $quantity = $protocol_quantity_to_dispense_arr[$index]; $esp = $protocol_episode_id_arr[$index]; // Initialize the drug group if not already created if (!isset($groupedData[$drugId])) { $groupedData[$drugId] = []; } // Append the patient and quantity data $groupedData[$drugId][] = [ 'patient_id' => $patientId, 'episode_id'=>$esp, 'quantity' => $quantity, 'batch_id' => null, ]; } foreach($batch_id as $ind => $batch){ foreach ($batch as $key => $value) { foreach($groupedData[$ind] as $key => $data){ $groupedData[$ind][$key]['batch_id'][] = $value; } } } foreach($groupedData as $ind => $data){ foreach($data as $d){ WardTreatmentBatchDispensation::create([ "patient_id"=>$d['patient_id'], "episode_id"=>$d['episode_id'], "item_id"=>$ind, "incoming_ward_chart_id"=>$request->incoming_chart_id, "item_batch_id"=>implode(",", $d['batch_id']??[]), ]); } } /* update the ward_treatment_dispensations table to show the drugs on the respective inpatient sheet */ for ($i=0; $i < count($protocol_patient_id_arr) ; $i++) { $ward_treatment_id = $this->dispensationService->saveDispensation((int)$protocol_patient_id_arr[$i], (int)$protocol_episode_id_arr[$i], $protocol_drug_ids_arr[$i], (int)$protocol_quantity_to_dispense_arr[$i], 0, $protocol_ward_id_arr[$i] ?? 0, $request->incoming_chart_id); /*====== reduce the pharmacy stock if some quantity has been given.========*/ if ($protocol_quantity_to_dispense_arr[$i] > 0) { $ward_drug_details = Drug::find($protocol_drug_ids_arr[$i]); $current_stock = $ward_drug_details->pharmacy_stock; $new_stock = $current_stock - $protocol_quantity_to_dispense_arr[$i]; $ward_drug_details->pharmacy_stock = $new_stock; $ward_drug_details->update(); } } /* ==== reduction according to batches selected ==== */ $cancer_batch_item_ids_array = $request->cancer_batch_item_ids ?? []; $cancer_items_batches_array = $request->cancer_batch_dispensed_from ?? []; $cancer_items_quantities_array = $request->cancer_batch_quantity_dispensed ?? []; for ($i=0; $i < count($cancer_batch_item_ids_array) ; $i++) { reduce_batch_item_stock(1,$cancer_batch_item_ids_array[$i],$cancer_items_batches_array[$i],'drugs','pharmacy_stock',$cancer_items_quantities_array[$i],'incoming_ward_charts','Drug',$request->incoming_chart_id,null); // reduce_batch_item_from_pharmacy(1, $cancer_batch_item_ids_array[$i], $cancer_items_batches_array[$i], $cancer_items_quantities_array[$i], "incoming_ward_charts", $request->incoming_chart_id, null); } /* ==== end of batch === */ } } $incoming_chart_to_update = IncomingWardChart::find($request->incoming_chart_id); if ($incoming_chart_to_update) { $incoming_chart_to_update->approved_by = Auth::id(); $incoming_chart_to_update->completion_status = 1; $incoming_chart_to_update->update(); // check if there are normal drugs to process if (isset($request->drug_id) && is_array($request->drug_id)) { // check if the drug is consuming from more than one batch foreach ($request->batch_item_ids as $key => $id ){ $batch_id[$id][] = $request->batch_dispensed_from[$key]; } /* get some patient details from the incoming_ward_charts table*/ $patient_ids_array = explode(",", $incoming_chart_to_update->patient_ids); $episode_ids_array = explode(",", $incoming_chart_to_update->episode_ids); $drug_ids_array = explode(",", $incoming_chart_to_update->drug_ids); $quantities_given_array = explode(",", $incoming_chart_to_update->quantity_given); $wards_array = explode(",", $incoming_chart_to_update->ward_ids); /* create a new entry for the approval that has been done */ $chart_approval = new WardChartApproval; $chart_approval->drug_ids = implode(",", $request->drug_id); $chart_approval->quantity_dispensed = implode(",", $request->quantity_dispensed); $chart_approval->comments = implode(",", $request->comments); $chart_approval->received_by = $request->received_by; $chart_approval->approval_date = is_null($request->approval_date) ? Carbon::now() : Carbon::createFromFormat('d/m/Y',$request->approval_date)->toDateString(); $chart_approval->incoming_ward_charts_id = $request->incoming_chart_id; $chart_approval->created_by = Auth::id(); $chart_approval->ward_id = is_null($incoming_chart_to_update) ? 0 : $incoming_chart_to_update->chart_ward_id; $chart_approval->save(); $groupedData = []; // Loop through each entry and group by drug ID foreach ($drug_ids_array as $index => $drugId) { $patientId = $patient_ids_array[$index]; $quantity = $quantities_given_array[$index]; $esp = $episode_ids_array[$index]; // Initialize the drug group if not already created if (!isset($groupedData[$drugId])) { $groupedData[$drugId] = []; } // Append the patient and quantity data $groupedData[$drugId][] = [ 'patient_id' => $patientId, 'episode_id'=>$esp, 'quantity' => $quantity, 'batch_id' => null, ]; } foreach($batch_id as $ind => $batch){ foreach ($batch as $key => $value) { foreach($groupedData[$ind] as $key => $data){ $groupedData[$ind][$key]['batch_id'][] = $value; } } } foreach($groupedData as $ind => $data){ foreach($data as $d){ WardTreatmentBatchDispensation::create([ "patient_id"=>$d['patient_id'], "episode_id"=>$d['episode_id'], "item_id"=>$ind, "incoming_ward_chart_id"=>$incoming_chart_to_update->id, "item_batch_id"=>implode(",", $d['batch_id']??[]), ]); } } /* update the ward_treatment_dispensations table to show the drugs on the respective inpatient sheet */ for ($i=0; $i < count($patient_ids_array) ; $i++) { $ward_treatment_id = $this->dispensationService->saveDispensation((int)$patient_ids_array[$i], (int)$episode_ids_array[$i], $drug_ids_array[$i], (int)$quantities_given_array[$i], 0, $wards_array[$i] ?? 0, $incoming_chart_to_update->id); /*====== reduce the pharmacy stock if some quantity has been given.========*/ if ($drug_ids_array[$i] != "" && $quantities_given_array[$i] != "") { $drug = Drug::find($drug_ids_array[$i]); if ($drug) { $current_stock = $drug->pharmacy_stock; $new_stock = $current_stock - $quantities_given_array[$i]; $drug->pharmacy_stock = $new_stock; $drug->update(); } } } /* ==== reduction according to batches selected ==== */ $items_ids_array = $request->batch_item_ids ?? []; $items_batches_array = $request->batch_dispensed_from ?? []; $items_quantities_array = $request->batch_quantity_dispensed ?? []; for ($i=0; $i < count($items_batches_array) ; $i++) { reduce_batch_item_stock(1,$items_ids_array[$i],$items_batches_array[$i],'drugs','pharmacy_stock',$items_quantities_array[$i],'incoming_ward_charts','Drug',$request->incoming_chart_id,null); // reduce_batch_item_from_pharmacy(1, $items_ids_array[$i], $items_batches_array[$i], $items_quantities_array[$i], "incoming_ward_charts", $request->incoming_chart_id, null); } /* ==== end of batch === */ } flash("Ward chart has been approved")->success(); if (count($protocol_drug_ids_arr) > 0) { session()->put('request_array', $request->all()); return redirect('print_protocol_ward_chart'); } return redirect('incoming_ward_charts'); } else { flash("Ward Chart not found")->error(); return redirect()->back()->withInput(); } } /* put patient_id and episode_id in session. Done when one clicks the "view inpatient sheet" on ward_dispensing page */ public function set_inpatient_sheet($patient_id, $episode_id) { session()->put('patient_id', $patient_id); session()->put('episode_id', $episode_id); return redirect('in_patient_sheet'); } public function drug_chart_details(Request $request) { $drug_id = $request->drug_id; $incoming_chart_id = $request->chart_id; $incoming_chart_record = IncomingWardChart::find($incoming_chart_id); if (!is_null($incoming_chart_record)) { $patient_ids_array = explode(",", $incoming_chart_record->patient_ids); $episode_ids_array = explode(",", $incoming_chart_record->episode_ids); $inpatient_info_ids_array = explode(",", $incoming_chart_record->inpatient_info_ids); $drug_ids_array = explode(",", $incoming_chart_record->drug_ids); $ward_ids_array = explode(",", $incoming_chart_record->ward_ids); $quantity_given_array = explode(",", $incoming_chart_record->quantity_given); } $code = ""; $counter = 1; for ($i=0; $i < count($drug_ids_array) ; $i++) { if ($drug_ids_array[$i] == $drug_id) { $code .= "
| Drug Name | "; $html_text .= "Date | "; $html_text .= "Quantity | "; $html_text .= "
|---|---|---|
| ";
$html_text .= get_name($record->drug_id, "id", "name", "drugs");
if (in_array($record->drug_id, $stopped_ward_drugs_array)) {
$html_text .= " "; } else { $html_text .= " "; } $html_text .= " | " . streamline_date_time($dispensation_details[0]->created_at) . " by " . get_full_name($dispensation_details[0]->created_by, "id", "first_name", "last_name", "users") . " | "; $html_text .= "" . $dispensation_details[0]->quantity_given . " | "; $html_text .= "
| " . streamline_date_time($dispensation_details[$i]->created_at) . " by " . get_full_name($dispensation_details[$i]->created_by, "id", "first_name", "last_name", "users") . " | "; $html_text .= "" . $dispensation_details[$i]->quantity_given . " | "; $html_text .= "|
| Total | " . $record->quantity_given . " | |