user(); if ($user->hasRole('User')) { $Packages = app(PackageRepositoryInterface::class)->indexForUser($request, $user); } elseif ($user->hasRole('Supervisor')) { $Packages = app(PackageRepositoryInterface::class)->indexForSupervisor($request, $user); } else { $Packages = app(PackageRepositoryInterface::class)->indexForAdmin($request, $user); } return PackageResource::collection($Packages); } public function myPackages(Request $request) { $Packages = Package::when($request->has('name') && $request->name != '', function ($query) use ($request) { $query->where('name', 'LIKE', '%'.$request->name.'%'); }) ->when($request->has('package_id') && $request->package_id != '', function ($query) use ($request) { $query->where('id', $request->package_id); }) ->when($request->has('medical_center_id') && $request->medical_center_id != '' && $request->medical_center_id != 'undefined', function ($query) use ($request) { $query->whereHas('user', function ($query) use ($request) { $query->where('medical_center_id', $request->medical_center_id); }); }) ->with([ 'user', 'user.medical_center' => function ($query) { $query->select('id', 'name', 'address', 'phone_number'); }, "transfers" => function ($query) { $query->with([ 'user' => function ($query) { $query->select('id', 'name', 'cell_number'); }, 'user.medical_center' => function ($query) { $query->select('id', 'name', 'address', 'phone_number'); } ]); } ]); $user = auth('api')->user(); if ($user->hasRole('User')) { $Packages = $Packages->where("user_id", $user->id); } elseif ($user->hasRole('Supervisor')) { $Packages = $Packages->whereHas('user', function ($query) use ($user) { $query->where('medical_center_id', $user->medical_center_id); }); } $Packages = $Packages->orderByDesc('id')->get(); return PackageResource::collection($Packages); } public function getPackages() { $Packages = Package::where("status", StatusTypeEnum::APPROVED) ->where("user_id", auth('api')->id()) ->orderByDesc('id') ->get(); return PackageResource::collection($Packages); } public function show(Package $Package) { $Package->load([ 'user', 'creator', 'items', 'user.medical_center' => function ($query) { $query->select('id', 'name', 'address', 'phone_number'); }, "transfers" => function ($query) { $query->with([ 'user' => function ($query) { $query->select('id', 'name', 'cell_number'); }, 'user.medical_center' => function ($query) { $query->select('id', 'name', 'address', 'phone_number'); }, 'userTransfer' => function ($query) { $query->select('id','name','cell_number'); } ]); } ]); return PackageResource::make($Package); } public function store(StorePackageRequest $request) { $PackageData = [ 'name' => $request->name, 'note' => $request->note, 'status' => StatusTypeEnum::SUSPENDED, 'user_id' => auth('api')->user()->id, 'creator_id' => auth('api')->user()->id ]; $Package = Package::create($PackageData); foreach ($request->items as $itemId) { $item = Item::where("id", $itemId)->first(); if ($item) { $item->update([ "package_id" => $Package->id ]); } } return MessageResponse::success(trans('messages.success')); } public function edit(Package $Package) { $Package->load('items'); return PackageResource::make($Package); } public function update(StorePackageRequest $request, Package $Package) { $Package->update($request->except(['items'])); foreach ($request->items as $itemId) { $item = Item::where("id", $itemId)->first(); if ($item) { $item->update([ "package_id" => $Package->id ]); } } return MessageResponse::success(trans('messages.success')); } public function destroy(Package $Package) { if (auth('api')->user()->cant('delete', $Package)) { return MessageResponse::error(trans('messages.access_denied')); } if (count($Package->items)) { foreach ($Package->items as $item) { $item->update([ "package_id" => null ]); } } if (count($Package->labels)) { $Package->labels()->delete(); } $Package->transfersAll()->delete(); $Package->delete(); return MessageResponse::success(trans('messages.success')); } public function changeStatus(ChangeStatusRequest $request, Package $Package) { if (auth('api')->user()->cant('changeStatus', Package::class)) { return MessageResponse::error(trans('messages.access_denied')); } $Package->update(["status" => $request->status]); return MessageResponse::success(trans('messages.success'), null, $Package); } }