middleware('auth'); $this->middleware('permission:eye_glasses-list', ['only' => ['index']]); $this->middleware('permission:eye_glasses-create', ['only' => ['create', 'store']]); $this->middleware('permission:eye_glasses-edit', ['only' => ['edit', 'update']]); $this->middleware('permission:eye_glasses-delete', ['only' => ['destroy', 'inactive', 'activate']]); } /** * Display a listing of the resource. */ public function index() { $eye_glasses = EyeGlasses::orderBy('name', 'asc')->get(); $chart_of_accounts = ChartOfAccount::orderBy('name', 'asc')->pluck('name', 'id'); return view('clinical_data::eye_glasses.index', compact('eye_glasses', 'chart_of_accounts')); } /** * Show the form for creating a new resource. */ public function create() { $cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray(); $inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray(); $chart_of_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray(); $cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts; $inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts; $chart_of_accounts = ['' => '- select -'] + $chart_of_accounts; return view('clinical_data::eye_glasses.create', compact('chart_of_accounts', 'cost_of_goods_accounts', 'inventory_asset_accounts')); } /** * Store a newly created resource in storage. */ public function store(Request $request) { request()->validate([ 'name' => 'required', 'price' => 'required', 'account_id' => 'required' ]); //validation passed $eye_glass = new EyeGlasses; $logged_in_user_id = Auth::user()->id; $eye_glass->name = $request->name; $eye_glass->buying_price = $request->price; $eye_glass->non_insured_price = $request->non_insured_price; $eye_glass->account_id = $request->account_id; $eye_glass->cost_of_goods_account = $request->cost_of_goods_account; $eye_glass->inventory_account = $request->inventory_account; $eye_glass->created_by = $logged_in_user_id; $eye_glass->updated_by = $logged_in_user_id; try { $eye_glass->save(); flash($request->name . " Eye glasses has been saved")->success(); return redirect("/opticals/"); } catch (QueryException $e) { flash("An error occurred!")->error(); return back()->withInput(); } } /** * Display the specified resource. */ public function show($id) { // } /** * Show the form for editing the specified resource. */ public function edit($id) { $eye_glass = EyeGlasses::where(['id' => $id])->first(); $cost_of_goods_accounts = ChartOfAccount::where(['type' => 7])->orderBy('name', 'asc')->pluck('name', 'id')->toArray(); $inventory_asset_accounts = ChartOfAccount::where(['type' => 10])->orderBy('name', 'asc')->pluck('name', 'id')->toArray(); $chart_of_accounts = ChartOfAccount::where(['type' => 1])->orderBy('name', 'asc')->pluck('name', 'id')->toArray(); $cost_of_goods_accounts = ['' => '- select -'] + $cost_of_goods_accounts; $inventory_asset_accounts = ['' => '- select -'] + $inventory_asset_accounts; $chart_of_accounts = ['' => '- select -'] + $chart_of_accounts; if (!$eye_glass) { flash()->error("Eye Glasses not found"); return redirect('/opticals/'); } else { return view('clinical_data::eye_glasses.edit', compact('eye_glass', 'chart_of_accounts', 'cost_of_goods_accounts', 'inventory_asset_accounts')); } } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { request()->validate([ 'name' => 'required', 'account_id' => 'required' ]); //validation passed $eye_glass = EyeGlasses::find($id); $eye_glass->name = $request->name; $eye_glass->buying_price = $request->buying_price; $eye_glass->non_insured_price = $request->non_insured_price; $eye_glass->cost_of_goods_account = $request->cost_of_goods_account; $eye_glass->inventory_account = $request->inventory_account; $eye_glass->account_id = $request->account_id; try { $eye_glass->save(); flash($request->name . " Eye glasses has been updated")->success(); return redirect("/opticals/"); } catch (QueryException $e) { flash("An error occurred!")->error(); return back()->withInput(); } } /** * Remove the specified resource from storage. */ public function destroy($id) { $eye_glass = EyeGlasses::find($id); if ($eye_glass->delete()): flash("Eye glasses has been deleted.")->success(); return redirect('/opticals/'); endif; } public function inactive() { $eye_glasses = EyeGlasses::onlyTrashed() ->orderBy('name', 'asc') ->paginate(50); $chart_of_accounts = ChartOfAccount::orderBy('name', 'asc')->pluck('name', 'id'); return view('clinical_data::eye_glasses.inactive', compact('eye_glasses', 'chart_of_accounts')); } public function activate($id) { $eye_glass = EyeGlasses::withTrashed()->find($id); if ($eye_glass->restore()): flash("Eye glasses have been activated.")->success(); return redirect('/opticals/inactive'); endif; } public function get_optical_pricing(Request $request){ $item_id = $request->item; $patient_id = $request->patient_id; $patient_insurance_status = $request->patient_insurance_status ?? 0; $optical = EyeGlasses::find($item_id); if(is_numeric($patient_insurance_status) && $patient_insurance_status == 1 && $patient_id != 0 && is_numeric($patient_id)) { $selling_price = get_item_insurance_co_payment($patient_id, $optical->id, 7, false, 0); } else { // check if the patient category is attached to a price list $price_list_id = is_patient_category_attached_to_price_list($patient_id); if ($price_list_id) { $selling_price = get_price_list_category_price($price_list_id, 7, $optical->id); } else { $selling_price = get_name($optical->id, "id", "non_insured_price", "eye_glasses"); } } if (stock_levels_to_consider() == 0) { $total_stock = $this->itemsStockService->getItemAllQuantityByTotal($optical->id, 7); } else { $total_stock = $this->itemsStockService->getItemPharmacyQuantity($optical->id, 7); } $out_of_stock = $total_stock < 1; $out_of_stock = ($out_of_stock)?1:0; $drug_expiry_date = $this->itemsStockService->getItemLatestExpiryDate($optical->id, 7) ?? $optical->expiry_date; if (Carbon::createFromFormat('Y-m-d', $drug_expiry_date)->isBefore(Carbon::tomorrow())) { $optical_is_expired = 1; } else { $optical_is_expired = 0; } return response()->json(['selling_price' => $selling_price,'total_stock'=>$out_of_stock,'expiry'=>$optical_is_expired]); } public function order(){ $patient_id = session()->get('patient_id'); $episode_id = session()->get('episode_id'); $patient = Patient::where('id', $patient_id)->first(); $eye_glasses = EyeGlasses::orderBy('name')->pluck('name', 'id'); $ordered_eye_glasses = OrderedEyeGlasses::where([ 'patient_id' => $patient_id, 'episode_id' => $episode_id, 'payment_status' => 0 ])->first(); return view('clinical_data::eye_glasses.order', compact('patient', 'patient_id', 'episode_id', 'eye_glasses', 'ordered_eye_glasses')); } public function submit_order(Request $request){ if(is_null($request->optical_id) || is_null($request->optical_id[0])) { flash("No optical item has been selected")->error(); return back()->withInput(); } else { $patient_id = session()->get('patient_id'); $episode_id = session()->get('episode_id'); $optical_ids_array = $request->optical_id; $quantity_array = $request->item_quantity; if (isset($request->order_id) && get_name($request->order_id, 'id', 'payment_status', 'ordered_eye_glasses') == 0) { $optical_order = OrderedEyeGlasses::find($request->order_id); $optical_order->updated_by = Auth::id(); } else { $optical_order = new OrderedEyeGlasses; $optical_order->patient_id = $patient_id; $optical_order->episode_id = $episode_id; $optical_order->payment_status = 0; $optical_order->created_by = Auth::id(); } $optical_order->eye_glasses_id = implode(",", $optical_ids_array); $optical_order->quantity = implode(",", $quantity_array); $optical_order->save(); flash("Optical Items have been saved")->success(); // redirect to consultation or patient_episode page depending on where the user is from if (session()->has('redirect_to_consultation')) { $url = session()->get('redirect_to_consultation'); session()->forget('redirect_to_consultation'); return redirect($url); } else { return redirect("/patient_episodes"); } } } public function cancel_ordered_glasses($order_id) { $orders = OrderedEyeGlasses::where(['id' => $order_id, 'payment_status' => 0])->delete(); if ($orders) { return 1; } else { return 0; } } }