userService = $userService; } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * 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) { // } /* incoming ward drug requests */ public function incoming_ward_requests(Request $request) { $search_complete = null; $ward_item_requests = null; $start_date = null; $end_date = null; if (!is_null($request->item_type)) { $search_complete = 1; $start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); $end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); if ($request->ward_id) { $ward_item_requests = WardItemRequest::where('item_type', $request->item_type)->where('ward_id',$request->ward_id)->whereBetween('created_at', [$start_date, $end_date])->orderBy('created_at','desc') ->get(); } else { $ward_item_requests = WardItemRequest::where('item_type', $request->item_type) ->whereBetween('created_at', [$start_date, $end_date])->orderBy('created_at','desc') ->get(); } } else { //show drug requests of last 24 hours $last_24_hours = Carbon::now()->subDay()->toDateTimeString(); $ward_item_requests = WardItemRequest::where('created_at', '>=', $last_24_hours)->orderBy('created_at','desc')->get(); } $wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->toArray(); $wards = ['' => '- select -'] + $wards; return view('ward_management::ward_item_requests.incoming_ward_requests',compact('wards','search_complete', 'ward_item_requests', 'start_date', 'end_date','wards')); } /* ward request form */ public function ward_item_requests(Request $request) { $item_type = null; $ward_id = null; $drugs_requested = null; $general_items_requested = null; $sundries_requested = null; $drugs = DB::table('drugs')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id'); $sundries = DB::table('sundries')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id'); $general_items = DB::table('general_items')->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; $all_ward_item_requests = WardItemRequest::whereNull('dispensation_status')->paginate(500); if (!is_null($request->item_type)) { $ward_id = $request->ward; $item_type = $request->item_type; if($item_type == "1"){ $drugs_requested = $request->drugs_requested; } else if($item_type == "2"){ $sundries_requested = $request->sundries_requested; } else { $general_items_requested = $request->general_items_requested; } } return view('ward_management::ward_item_requests.ward_item_request',compact('drugs','wards','sundries', 'general_items', 'item_type','ward_id', 'drugs_requested', 'sundries_requested', 'general_items_requested', 'all_ward_item_requests')); } /* store ward drug requests */ public function store_ward_item_requests(Request $request) { if (in_array(null, $request->quantity_requested)) { flash("Please fill in the required fields")->error(); return back()->withInput(); } $ward_drug_request = new WardItemRequest; $ward_drug_request->ward_id = $request->ward_id; $ward_drug_request->item_type = $request->item_type; $ward_drug_request->item_ids = implode(",", $request->item_id); $ward_drug_request->item_quantities = implode(",", $request->quantity_requested); $ward_drug_request->balance_on_ward_during_request = implode(",", $request->balance_on_ward_during_request); $ward_drug_request->balance_returned = implode(",", $request->balance_returned); $ward_drug_request->item_unit_cost = implode(",", $request->item_unit_cost); $ward_drug_request->order_comment = $request->order_comment; $ward_drug_request->created_by = Auth::id(); $ward_drug_request->save(); flash('Ward request has been successfully submitted')->success(); return redirect('ward_item_requests'); } /* show details of a ward item request */ public function ward_item_request_details(Request $request) { $ward_request_id = $request->ward_item_request_id; $ward_request_details = WardItemRequest::find($ward_request_id); $staff_array = $this->userService->pluckUserFullName(); $batches_array = []; return view('ward_management::ward_item_requests.ward_item_request_details',compact('ward_request_details','staff_array', 'batches_array')); } /* store a ward item request action */ public function store_ward_item_request_details_action(Request $request) { $ward_request_id = $request->ward_request_id; $approved_button = $request->approve; $dispensed_button = $request->dispense; $ward_request_record = WardItemRequest::find($ward_request_id); $ward_id = $ward_request_record->ward_id; $item_ids_array = $request->item_ids; $dispensed_batches_array = $request->dispensed_from_batch; $ward_request_record->item_quantities_approved = implode(",", $request->quantity_approved); $ward_request_record->item_ids_issued_out = implode(",", $request->item_ids); $ward_request_record->quantity_issued_out = implode(",", $request->quantity_issued_out); if (isset($approved_button)) { $ward_request_record->comment = $request->comment; $ward_request_record->approved_status = 1; $ward_request_record->approved_by = Auth::id(); $ward_request_record->approval_date = Carbon::now(); $ward_request_record->update(); flash('ward request has been approved')->success(); return redirect('incoming_ward_requests'); } elseif (isset($dispensed_button)) { $ward_request_record->received_by = $request->received_by; $ward_request_record->dispensation_status = 1; $ward_request_record->dispensed_by = Auth::id(); $ward_request_record->dispensation_date = Carbon::parse($request->dispensation_date)->toDateTimeString(); $received_from_stores_or_pharmacy = $request->received_from; $balance_returned_array = $request->balance_returned; $item_quantities_issued_out_array = $request->quantity_issued_out; // 1 - means received from pharmacy, 2 means received from stores so do the respective stock reduction if ($received_from_stores_or_pharmacy == 1) { $ward_request_record->issued_from = "pharmacy"; if ($ward_request_record->item_type == 1) { for ($i=0; $i < count($item_ids_array) ; $i++) { $drug = Drug::find($item_ids_array[$i]); if ($drug && !is_null($dispensed_batches_array[$i])) { $stock_before_making_necessary_calculations = $drug->pharmacy_stock; $balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i]; $quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i]; $drug->pharmacy_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved; $drug->update(); // return the drugs to pharmacy reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 1, $ward_id, null, null, null); update_ward_stock($ward_id, 1, $item_ids_array[$i], $item_quantities_issued_out_array[$i]); move_batch_item_from_pharmacy_to_ward($item_type = 1, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id); } } } elseif ($ward_request_record->item_type == 2) { for ($i=0; $i < count($item_ids_array) ; $i++) { $sundry = Sundry::find($item_ids_array[$i]); if ($sundry && !is_null($dispensed_batches_array[$i])) { $stock_before_making_necessary_calculations = $sundry->pharmacy_stock; $balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i]; $quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i]; $sundry->pharmacy_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved; $sundry->update(); // return the drugs to pharmacy reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 2, $ward_id, null, null, null); update_ward_stock($ward_id, 2, $item_ids_array[$i], $item_quantities_issued_out_array[$i]); move_batch_item_from_pharmacy_to_ward($item_type = 2, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id); } } } elseif ($ward_request_record->item_type == 3) { for ($i=0; $i < count($item_ids_array) ; $i++) { $general_item = GeneralItem::find($item_ids_array[$i]); if ($general_item && !is_null($dispensed_batches_array[$i])) { $stock_before_making_necessary_calculations = $general_item->pharmacy_stock; $balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i]; $quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i]; $general_item->pharmacy_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved; $general_item->update(); // return the drugs to pharmacy reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 3, $ward_id, null, null, null); update_ward_stock($ward_id, 3, $item_ids_array[$i], $item_quantities_issued_out_array[$i]); move_batch_item_from_pharmacy_to_ward($item_type = 6, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id); } } } } elseif ($received_from_stores_or_pharmacy == 2) { $ward_request_record->issued_from = "store"; if ($ward_request_record->item_type == 1) { for ($i=0; $i < count($item_ids_array) ; $i++) { $drug = Drug::withTrashed()->find($item_ids_array[$i]); if ($drug && !is_null($dispensed_batches_array[$i])) { $stock_before_making_necessary_calculations = $drug->store_stock; $balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i]; $quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i]; $drug->store_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved; $drug->update(); // return the drugs to pharmacy reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 1, $ward_id, null, null, null); update_ward_stock($ward_id, 1, $item_ids_array[$i], $item_quantities_issued_out_array[$i]); move_batch_item_from_store_to_ward($item_type = 1, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id, $ward_request_id); //cater for drug batch processing /* $batch_number = null; if (batch_tracking_method() == "manual") { $batch_number = $dispensed_batches_array[$i] ?? null; } $item_batch_calculations = batch_calculations_for_item_based_on_fifo($item_ids_array[$i], $quantity_approved, $batch_number, $item_type = 1); */ } } } elseif ($ward_request_record->item_type == 2) { for ($i=0; $i < count($item_ids_array) ; $i++) { $sundry = Sundry::withTrashed()->find($item_ids_array[$i]); if ($sundry && !is_null($dispensed_batches_array[$i])) { $stock_before_making_necessary_calculations = $sundry->store_stock; $balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i]; $quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i]; $sundry->store_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved; $sundry->update(); // return the drugs to pharmacy reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 2, $ward_id, null, null, null); update_ward_stock($ward_id, 2, $item_ids_array[$i], $item_quantities_issued_out_array[$i]); move_batch_item_from_store_to_ward($item_type = 2, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id, $ward_request_id); //cater for sundries batch processing /* $batch_number = null; if (batch_tracking_method() == "manual") { $batch_number = $dispensed_batches_array[$i] ?? null; } $item_batch_calculations = batch_calculations_for_item_based_on_fifo($item_ids_array[$i], $quantity_approved, $batch_number, $item_type = 2); */ } } } elseif ($ward_request_record->item_type == 3) { for ($i=0; $i < count($item_ids_array) ; $i++) { $general_item = GeneralItem::find($item_ids_array[$i]); if ($general_item && !is_null($dispensed_batches_array[$i])) { $stock_before_making_necessary_calculations = $general_item->store_stock; $balance_returned = empty($balance_returned_array[$i]) ? 0 : $balance_returned_array[$i]; $quantity_approved = empty($item_quantities_issued_out_array[$i]) ? 0 : $item_quantities_issued_out_array[$i]; $general_item->store_stock = $stock_before_making_necessary_calculations + (int)$balance_returned - (int)$quantity_approved; $general_item->update(); // return the drugs to pharmacy reduce_ward_stock_with_consumed_quantity($item_ids_array[$i], $balance_returned, 3, $ward_id, null, null, null); update_ward_stock($ward_id, 3, $item_ids_array[$i], $item_quantities_issued_out_array[$i]); move_batch_item_from_store_to_ward($item_type = 6, $item_ids_array[$i], $dispensed_batches_array[$i], $item_quantities_issued_out_array[$i], $ward_id, $ward_request_id); } } } } $ward_request_record->update(); flash('Items for '.get_name($ward_request_record->ward_id, "id", "name", "wards").' have been successfully dispensed')->success(); return view('ward_management::ward_item_requests.print_ward_item_request_receipt',compact('ward_request_record')); } } public function show_ward_item_request_details_action(Request $request) { $ward_request_id = $request->ward_request_id; $ward_request_details = WardItemRequest::find($ward_request_id); return view('ward_management::ward_item_requests.ward_request_show',compact('ward_request_details')); } public function ward_item_request_edit(Request $request) { $ward_request_id = $request->ward_request_id; $ward_request_details = WardItemRequest::find($ward_request_id); $search_status = false; return view('ward_management::ward_item_requests.ward_item_request_edit',compact('ward_request_details', 'search_status')); } public function edit_ward_item_request_search(Request $request) { $ward_request_id = $request->ward_request_id; $ward_request_details = WardItemRequest::find($ward_request_id); $search_status = true; $selected_item_ids_array = $request->items_ids; return view('ward_management::ward_item_requests.ward_item_request_edit',compact('ward_request_details', 'search_status', 'selected_item_ids_array')); } public function update_ward_item_requests(Request $request) { $ward_request_id = $request->ward_request_id; $ward_item_request = WardItemRequest::find($ward_request_id); $ward_item_request->item_ids = implode(",", $request->item_ids); $ward_item_request->item_quantities = implode(",", $request->item_quantities); $ward_item_request->balance_on_ward_during_request = implode(",", $request->balance_on_ward_during_request); $ward_item_request->balance_returned = implode(",", $request->balance_returned); $ward_item_request->item_unit_cost = implode(",", $request->item_unit_cost); $ward_item_request->order_comment = $request->order_comment; $ward_item_request->created_by = Auth::id(); $ward_item_request->save(); flash('Ward request has been successfully submitted')->success(); return redirect('ward_item_requests'); } public function ward_item_request_delete(Request $request) { $ward_request_id = $request->ward_request_id; $ward_item_request = WardItemRequest::find($ward_request_id); $ward_item_request->delete(); flash('Ward request has been successfully deleted')->error(); return redirect('ward_item_requests'); } public function print_ward_item_request_details($id) { $ward_request_record = WardItemRequest::find($id); return view('ward_management::ward_item_requests.print_ward_item_request_receipt',compact('ward_request_record')); } public function print_ward_item_request_details_pdf($id) { $ward_request_record = WardItemRequest::find($id); $hospital_information = HospitalInformation::find(1); $data = [ 'ward_request_record' => $ward_request_record, 'hospitalInfo' => $hospital_information ]; $print_footer = (!is_null($hospital_information->print_footer)) ? '     ' . $hospital_information->print_footer . '' : ''; $pdf = SnappyPDF::loadView("ward_management::ward_item_requests/print_ward_item_request_details_pdf", $data) ->setOrientation('portrait') ->setPaper('a4') ->setOption('margin-bottom', 5) ->setOption('margin-top', 5) ->setOption('footer-html', '© ' . date('Y') . ' Stre@mline' . $print_footer); return $pdf->inline('Ward Item Request Details' . date(" d-m-y h:ia") . '.pdf'); } }