File manager - Edit - /var/www/html/spdc/api/app/Http/Services/ShelterService.php
Back
<?php namespace App\Http\Services; use App\Classes\BaseServiceResponse; use App\Enums\TypeOfAreaEnum; use App\Enums\TypeOfHistoricEnum; use App\Http\Requests\CloseShelterRequest; use App\Http\Requests\ConvertIntoShelterRequest; use App\Http\Requests\ConvertIntoSuportPointRequest; use App\Http\Requests\OpenShelterRequest; use App\Http\Requests\ShelterRealOpenRequest; use App\Http\Requests\ShelterRequest; use App\Http\Resources\ShelterDashboardResource; use App\Http\Resources\ShelterDetailedResource; use App\Http\Resources\ShelterFamilyResource; use App\Http\Resources\ShelterResource; use App\Models\Shelter; use App\Models\ShelterBathroom; use App\Models\ShelterCommonArea; use App\Models\ShelterFamily; use App\Models\ShelterFile; use App\Models\ShelterKitchen; use App\Models\ShelterManager; use App\Models\ShelterServiceArea; use App\Models\ShelterWaterTank; use Carbon\Carbon; use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; use PDO; class ShelterService extends BaseService { private ShelterHistoricService $historicService; public function __construct() { $this->historicService = new ShelterHistoricService(); } public function index(): BaseServiceResponse { if (request()->has('search_term')) { $shelters = $this->withSearch(Shelter::class, request()->get('search_term'), ['name']); $shelters = $shelters->get(); return $this->response( ShelterResource::collection($shelters), JsonResponse::HTTP_OK ); } $shelters = Shelter::all(); return $this->response( ShelterResource::collection($shelters), JsonResponse::HTTP_OK ); } public function showDashboard(string $id): BaseServiceResponse { $shelter = Shelter::findOrFail(['id' => $id])->first(); $statistics = $this->generateStatistics($shelter); return $this->response( [ 'shelter' => new ShelterDashboardResource($shelter), 'statistics' => $statistics, ], JsonResponse::HTTP_OK ); } public function show(string $id) { $shelter = Shelter::findOrFail(['id' => $id])->first(); return $this->response( [ 'shelter' => new ShelterDetailedResource($shelter), ], JsonResponse::HTTP_OK ); } public function store(ShelterRequest $request): BaseServiceResponse { try { DB::beginTransaction(); $shelter = $this->createShelter($request); $data = $request->all(); $this->createShelterManagers($request, $shelter); if ($request->has('shelter_common_areas')) { $this->createShelterCommonAreas($request, $shelter); } if ($request->has('shelter_bathrooms')) { $this->createShelterBathrooms($request, $shelter); } if ($request->has('shelter_service_areas')) { $this->createShelterServiceAreas($request, $shelter); } if ($request->has('shelter_kitchens')) { $this->createdShelterKitchens($request, $shelter); } if ($request->has('shelter_water_tanks')) { $this->createShelterWaterTanks($request, $shelter); } if ($request->has('shelter_files')) { foreach ($data['shelter_files'] as $fileBase64) { $size_in_bytes = (int) (strlen(rtrim($fileBase64, '=')) * 3 / 4); $size_in_kb = $size_in_bytes / 1024; $size_in_mb = $size_in_kb / 1024; if ($size_in_mb > 10) { DB::rollBack(); return $this->response( ["error" => 'File cannot be size more than 10mb'], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } $types = ['jpg', 'png', 'jpeg', 'pdf', 'csv', 'xlsx', 'xml', 'txt', 'ods']; $extension = explode('/', explode(':', substr($fileBase64, 0, strpos($fileBase64, ';')))[1])[1]; if (in_array($extension, $types) == false) { DB::rollBack(); return $this->response( ["error" => 'Only jpg, jpeg, png, pdf, csv, xlsx, xml, txt, ods files can be saved'], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } $replace = substr($fileBase64, 0, strpos($fileBase64, ',') + 1); $file = str_replace($replace, '', $fileBase64); $file = str_replace(' ', '+', $file); $fileName = Carbon::now()->format('d-m-Y') . '_' . uniqid() . '.' . $extension; Storage::disk('public')->put($fileName, base64_decode($file), ['visibility' => 'public', 'directory_visibility' => 'public']); $newFile = new ShelterFile(); $newFile->url = "/storage/" . $fileName; $newFile->shelter()->associate($shelter); $newFile->save(); } } } catch (Exception $exception) { DB::rollBack(); return $this->response( ["error" => $exception->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } DB::commit(); return $this->response( new ShelterResource($shelter), JsonResponse::HTTP_CREATED ); } public function update(ShelterRequest $request, string $id): BaseServiceResponse { $data = $request->all(); $shelter = Shelter::findOrFail($id)->first(); $shelter->name = $data['name']; $shelter->city = $data['city']; $shelter->state = $data['state']; $shelter->number = $data['number']; $shelter->zip_code = $data['zip_code']; $shelter->neighborhood = $data['neighborhood']; $shelter->street = $data['street']; $shelter->reference_point = $data['reference_point']; $shelter->latitude = $data['latitude']; $shelter->longitude = $data['longitude']; $shelter->phone = $data['phone']; $shelter->bathroom_total = $data['bathroom_total']; $shelter->created_by = $data['user']['id']; $shelter->responsible_for_completing = $data['responsible_for_completing']; $shelter->service_capacity = $data['service_capacity']; $shelter->is_shelter = $data['is_shelter']; $shelter->is_support_point = $data['is_support_point']; $shelter->save(); return $this->response( new ShelterResource($shelter), JsonResponse::HTTP_CREATED ); } public function openShelter(OpenShelterRequest $request): BaseServiceResponse { $data = $request->all(); $shelter = Shelter::findOrFail(['id' => $data['shelter_id']])->first(); $carbonDate = Carbon::parse($data['date'])->format('Y-m-d H:i:s'); $shelter->opening_date = $carbonDate; $shelter->observation_open = $data['observation_open']; $shelter->is_real_open = true; $this->historicService->createHistoric($data); $shelter->update(); return $this->response( new ShelterResource($shelter), JsonResponse::HTTP_OK ); } public function closeShelter(CloseShelterRequest $request): BaseServiceResponse { $data = $request->all(); $shelter = Shelter::findOrFail(['id' => $data['shelter_id']])->first(); $carbonDate = Carbon::parse($data['date'])->format('Y-m-d H:i:s'); $shelter->closed_in = $carbonDate; $shelter->observation_closed = $data['observation_closed']; $shelter->closed_by = $data['user']['id']; $shelter->is_real_open = false; $data['type'] = TypeOfHistoricEnum::SHELTER_CLOSURE->value; $this->historicService->createHistoric($data); $shelter->update(); return $this->response( new ShelterResource($shelter), JsonResponse::HTTP_OK ); } public function getAreaTypes(): BaseServiceResponse { return $this->response(['status' => TypeOfAreaEnum::cases()]); } private function createShelter(ShelterRequest $request) { $data = $request->all(); $data['created_by'] = $request->user['id']; return Shelter::create($data); } private function createShelterCommonAreas(ShelterRequest $request, Shelter $shelter) { $data = $request->shelter_common_areas; foreach ($data as $room) { $newRoom = new ShelterCommonArea(); $newRoom->name = $room["name"]; $newRoom->length = $room["length"]; $newRoom->width = $room["width"]; $newRoom->total_area = $room["total_area"]; $newRoom->type = $room["type"]; $newRoom->observation = array_key_exists('observation', $room) ? $room['observation'] : null; $newRoom->shelter()->associate($shelter); $newRoom->save(); } } private function createShelterServiceAreas(ShelterRequest $request, Shelter $shelter) { $data = $request->shelter_service_areas; foreach ($data as $area) { $newArea = new ShelterServiceArea(); $newArea->name = $area["name"]; $newArea->washing_machine_amount = $area["washing_machine_amount"]; $newArea->type = $area['type']; $newArea->washing_tank_amount = $area['washing_tank_amount']; $newArea->observation = array_key_exists('observation', $area) ? $area['observation'] : null; $newArea->shelter()->associate($shelter); $newArea->save(); } } private function createShelterBathrooms(ShelterRequest $request, Shelter $shelter) { $data = $request->shelter_bathrooms; foreach ($data as $bathroom) { $newBathroom = new ShelterBathroom(); $newBathroom->type = $bathroom['type']; $newBathroom->toilet_amount = $bathroom['toilet_amount']; $newBathroom->latrine_amount = $bathroom['latrine_amount']; $newBathroom->urinal_amount = $bathroom['urinal_amount']; $newBathroom->hot_shower_amount = $bathroom['hot_shower_amount']; $newBathroom->cold_shower_amount = $bathroom['cold_shower_amount']; $newBathroom->sink_amount = $bathroom['sink_amount']; $newBathroom->name = $bathroom['name']; $newBathroom->observation = array_key_exists('observation', $bathroom) ? $bathroom['observation'] : null; $newBathroom->shelter()->associate($shelter); $newBathroom->save(); } } private function createdShelterKitchens(ShelterRequest $request, Shelter $shelter) { $data = $request->shelter_kitchens; foreach ($data as $kitchen) { $newKitchen = new ShelterKitchen(); $newKitchen->name = $kitchen['name']; $newKitchen->type = $kitchen['type']; $newKitchen->length = $kitchen['length']; $newKitchen->width = $kitchen['width']; $newKitchen->observation = array_key_exists('observation', $kitchen) ? $kitchen['observation'] : null; $newKitchen->shelter()->associate($shelter); $newKitchen->save(); } } private function createShelterWaterTanks(ShelterRequest $request, Shelter $shelter) { $data = $request->shelter_water_tanks; foreach ($data as $tank) { $newTank = new ShelterWaterTank(); $newTank->type = $tank['type']; $newTank->name = $tank['name']; $newTank->observation = array_key_exists('observation', $tank) ? $tank['observation'] : null;; $newTank->amount = $tank['amount']; $newTank->capacity = $tank['capacity']; $newTank->shelter()->associate($shelter); $newTank->save(); } } private function createShelterManagers(ShelterRequest $request, Shelter $shelter) { $data = $request->managers; foreach ($data as $manager) { $newManager = new ShelterManager(); $newManager->name = $manager['name']; $newManager->responsibility = $manager['responsibility']; $newManager->phone = $manager['phone']; $newManager->whatsapp = $manager['whatsapp'] ?? null; $newManager->shelter()->associate($shelter); $newManager->save(); } } public function setRealOpenDate(ShelterRealOpenRequest $request): BaseServiceResponse { $data = $request->all(); $shelter = Shelter::find(['id' => $data['shelter_id']])->first(); $carbonDate = Carbon::parse($data['date'])->format('Y-m-d H:i:s'); $shelter->opening_date = $carbonDate; $shelter->update(); $data['type'] = TypeOfHistoricEnum::REAL_TIME_ADDED->value; $this->historicService->createHistoric($data); return $this->response( [], JsonResponse::HTTP_OK ); } public function convertIntoShelter(ConvertIntoShelterRequest $request): BaseServiceResponse { $data = $request->all(); $shelter = Shelter::find(['id' => $data['shelter_id']])->first(); $shelter->is_shelter = true; $shelter->update(); $data['type'] = TypeOfHistoricEnum::CONVERTED_INTO_A_SHELTER->value; $this->historicService->createHistoric($data); return $this->response( [], JsonResponse::HTTP_OK ); } public function convertIntoSuportPoint(ConvertIntoSuportPointRequest $request) { $data = $request->all(); $shelter = Shelter::find(['id' => $data['shelter_id']])->first(); $shelter->is_support_point = true; $shelter->update(); $data['type'] = TypeOfHistoricEnum::CONVERTED_INTO_A_SUPPORT_POINT->value; $this->historicService->createHistoric($data); return $this->response( [], JsonResponse::HTTP_OK ); } public function generateStatistics(Shelter $shelter): array { $peoples = $shelter->shelterMembersFamily; $countPeople = $peoples->count() + $shelter->shelterFamilies->count(); $countPets = $shelter->shelterPets->count(); $isCrowded = false; $openTimeDiff = null; if ($shelter->is_real_open && $shelter->opening_date != null) { $datetime1 = Carbon::parse($shelter->opening_date); $datetime2 = Carbon::parse(Carbon::now()); $diff = $datetime1->diff($datetime2); $openTimeDiff = [ 'years' => $diff->format('%y'), 'months' => $diff->format('%m'), 'days' => $diff->format('%d'), 'hours' => $diff->format('%h'), 'minutes' => $diff->format('%i'), 'seconds' => $diff->format('%s'), ]; } if ($countPeople >= $shelter->service_capacity) { $isCrowded = true; } $countVolunteers = $shelter->shelterVoluntaries->count(); $countPcd = 0; foreach ($peoples as $people) { if ($people->is_special_needs) { $countPcd++; } } return [ 'countPeople' => $countPeople, 'countPets' => $countPets, 'countVolunteers' => $countVolunteers, 'countPcd' => $countPcd, 'isCrowded' => $isCrowded, 'openingTimeDiff' => $openTimeDiff, ]; } public function getShelteredFamilies(string $id) { $relations = [ 'members', 'pets', 'shelter', 'donations', 'familyHealthQuestionnaires', 'benefit', 'maritalStatus', 'housingType', 'emergencyQuestionnaire', 'emergencyQuestionnaire.membersDeaths', 'emergencyQuestionnaire.missingMembers', 'emergencyQuestionnaire.membersIncomeLost', 'familyType' ]; $shelteredFamilies = ShelterFamily::where('shelter_id', $id); if (request()->has('search_term') || request()->has('name')) { $name = request()->get('name', request()->get('search_term')); $shelteredFamilies = $shelteredFamilies->whereRaw("LOWER(name) LIKE ?", ['%' . strtolower($name) . '%']); } $shelteredFamilies = $shelteredFamilies->with($relations)->paginate(); return $this->response( ShelterFamilyResource::collection($shelteredFamilies), JsonResponse::HTTP_OK ); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings