File manager - Edit - /var/www/html/spdc/api/app/Http/Services/ShelterFamilyService.php
Back
<?php namespace App\Http\Services; use App\Classes\BaseServiceResponse; use App\Http\Requests\ShelterFamilyRequest; use App\Http\Resources\ShelterFamilyResource; use App\Http\Resources\ShelterMemberFamilyResource; use App\Models\FamilyPet; use App\Models\MemberHealthQuestionnaire; use App\Models\Shelter; use App\Models\ShelterFamily; use App\Models\ShelterMemberFamily; use Carbon\Carbon; use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class ShelterFamilyService extends BaseService { private $relations = [ 'members', 'pets', 'shelter', 'donations', 'familyHealthQuestionnaires', 'benefit', 'maritalStatus', 'housingType', 'emergencyQuestionnaire', 'emergencyQuestionnaire.membersDeaths', 'emergencyQuestionnaire.missingMembers', 'emergencyQuestionnaire.membersIncomeLost', 'familyType' ]; public function index(): BaseServiceResponse { $families = new ShelterFamily(); if (request()->query->count() > 0) { $families = $this->filteredFamilies($families); } $families = $families->with($this->relations)->paginate(15); return $this->response( ShelterFamilyResource::collection($families), JsonResponse::HTTP_OK ); } public function filteredFamilies(ShelterFamily $query) { $filters = request()->except(['user', 'page']); foreach($filters as $key => $value) { if ($key == 'document') { $query = $query->where('cpf', 'like', '%' . $value . '%') ->orWhereHas('members', function ($query) use ($key, $value) { $query->where('document', 'like', '%' . $value . '%'); }); continue; } $query = $query->where($key, 'like', '%' . $value . '%') ->orWhereHas('members', function ($query) use ($key, $value) { $query->where($key, 'like', '%' . $value . '%'); }); } return $query; } public function show(string $id) { $families = ShelterFamily::findOrFail(['id' => $id])->first(); return $this->response( new ShelterFamilyResource($families->load($this->relations)), JsonResponse::HTTP_OK ); } public function store(ShelterFamilyRequest $request) { $data = $request->all(); try { DB::beginTransaction(); $family = $this->createFamily($data); if($request->has('members')) { $this->createMember($data, $family); } if($request->has('pets')) { $this->createPets($data, $family); } } catch(Exception $exception) { DB::rollBack(); return $this->response( ["error" => $exception->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } DB::commit(); return $this->response( new ShelterFamilyResource($family->load($this->relations)), JsonResponse::HTTP_OK ); } public function update(ShelterFamilyRequest $request, string $id) { $data = $request->all(); $family = ShelterFamily::where('id', $id)->first(); $data['is_sheltered'] = $request->has('is_sheltered') ? $request->is_sheltered : null; $data['is_unsheltered'] = $request->has('is_unsheltered') ? $request->is_unsheltered : null; $family->update($data); if ($request->has('shelter_id')) { $shelter = Shelter::find($data['shelter_id'])->first(); if($family->shelter->id != $data['shelter_id']) { $family->shelter_id = $shelter->id; } } if($request->has('members')) { $this->createMember($data, $family); } if($request->has('pets')) { $this->createPets($data, $family); } return $this->response( new ShelterFamilyResource($family->load($this->relations)), JsonResponse::HTTP_OK ); } public function createFamily(array $data): ShelterFamily { $modelFamily = ShelterFamily::create($data); return $modelFamily; } public function createMember(array $data, ShelterFamily $family) { if (isset($data['shelter_id'])) { $shelter = Shelter::find(['id' => $data['shelter_id']])->first(); } $ids = []; foreach($data['members'] as $member) { if (isset($member['id'])) { $modelMember = ShelterMemberFamily::where('id', $member['id'])->first(); } else { $modelMember = new ShelterMemberFamily(); } $modelMember->name = $member['name']; $modelMember->age = $member['age']; $modelMember->document = $member['document']; $modelMember->is_special_need = $member['is_special_need'] ?? false; $modelMember->special_need = $member['special_need'] ?? null; $modelMember->is_sheltered = $member['is_sheltered']; $modelMember->parental_relation = $member['parental_relation']; $modelMember->birth_date = $member['birth_date']; $modelMember->gender = $member['gender'] == "Masculino" ? "M" : "F"; $modelMember->ethnicity = $member['ethnicity']; $modelMember->mother_name = $member['mother_name']; $modelMember->nis = $member['nis'] ?? null; $modelMember->country = $member['country'] ?? null; $modelMember->city = $member['city'] ?? null; $modelMember->uf = $member['uf'] ?? null; $modelMember->education = $member['education']; $modelMember->occupation = $member['occupation'] ?? null; $modelMember->phone = $member['phone'] ?? null; $modelMember->income = $member['income'] ?? 0; $modelMember->is_dead = $member['is_dead'] ?? false; $modelMember->from_nursing_home = $member['from_nursing_home'] ?? false; $modelMember->family()->associate($family); if (isset($shelter)) { $modelMember->last_shelter_id = $shelter->id; } $modelMember->save(); } } public function createPets(array $data, ShelterFamily $family) { $ids = []; foreach($data['pets'] as $pet) { if (isset($pet['id'])) { $modelPet = FamilyPet::findOrFail($pet['id']); } else { $modelPet = new FamilyPet(); } $modelPet->name = $pet['name']; $modelPet->breed = $pet['breed']; $modelPet->is_sheltered = $pet['is_sheltered']; $modelPet->family()->associate($family); $modelPet->save(); $ids[] = $modelPet->id; } $family->pets()->whereNotIn('id', $ids)->delete(); } public function checkExistingAdress (Request $request) { $families = $this->adressFilter($request) ->with($this->relations) ->paginate(15); return $this->response( ShelterFamilyResource::collection($families), JsonResponse::HTTP_OK ); } public function getExistingAdressIndicator(Request $request) { $family = $this->adressFilter($request)->count(); return ['existing_adress_indicator' => $family]; } public function adressFilter(Request $request) { $adress['number'] = $request->get('number'); $adress['street'] = $request->get('street'); $adress['neighborhood'] = $request->get('neighborhood'); $adress['zip_code'] = $request->get('zip_code'); $adress['complement'] = $request->get('complement'); $query = ShelterFamily::where('number', $adress['number']) ->where('street', $adress['street']) ->where('neighborhood', $adress['neighborhood']) ->where('zip_code', $adress['zip_code']) ->where('complement', $adress['complement']); return $query; } public function getBooleanIndicators() { $indicators['is_sheltered'] = ShelterFamily::where('is_sheltered', true)->count(); $indicators['is_unsheltered'] = ShelterFamily::where('is_unsheltered', true)->count(); return $indicators; } public function getAffectedFamilies(): BaseServiceResponse { $query = ShelterFamily::whereNotNull('last_affected') ->with($this->relations); $name = trim(request()->get('name')); if (!empty($name)) { $query->where('name', 'LIKE', '%' . $name . '%'); } if (request()->has('is_sheltered')) { $value = request()->get('is_sheltered'); if ($value === '0' || $value === '1') { $query->where('is_sheltered', (int) $value); } } $families = $query->paginate(15); return $this->response( ShelterFamilyResource::collection($families), JsonResponse::HTTP_OK ); } public function getHealthCounters() { $counters['regular_user_of_medicine'] = MemberHealthQuestionnaire::where('regular_use_of_medicine', true)->count(); $counters['hypertension'] = MemberHealthQuestionnaire::where('hypertension', true)->count(); $counters['diabetes'] = MemberHealthQuestionnaire::where('diabetes', true)->count(); $counters['another_cronic_disease'] = MemberHealthQuestionnaire::where('another_cronic_disease', true)->count(); $counters['health_problems_currently'] = MemberHealthQuestionnaire::where('health_problems_currently', true)->count(); $counters['recent_surgery'] = MemberHealthQuestionnaire::where('recent_surgery', true)->count(); $counters['pregnant'] = MemberHealthQuestionnaire::where('pregnant', true)->count(); $counters['is_special_need'] = ShelterMemberFamily::where('is_special_need', true)->count(); $counters['in_bed_rest'] = ShelterMemberFamily::where('in_bed_rest', true)->count(); return $this->response( $counters, JsonResponse::HTTP_OK ); } public function getHealthList() { $filter = request()->query('filter'); if (!$filter) { return $this->response( ['message' => 'Filter can not be empty'], JsonResponse::HTTP_BAD_REQUEST ); } $avaibleFilters = [ 'regular_user_of_medicine', 'chronic_disease', 'health_problems_currently', 'recent_surgery', 'pregnant', 'is_special_need', 'in_bed_rest' ]; if (!in_array($filter, $avaibleFilters)) { return $this->response( ['message' => 'Filter not permitted'], JsonResponse::HTTP_BAD_REQUEST ); } if ($filter === 'is_special_need' || $filter === 'in_bed_rest') { $members = ShelterMemberFamily::where($filter, true)->paginate(15); return $this->response( ShelterMemberFamilyResource::collection($members), JsonResponse::HTTP_OK ); } if ($filter === 'chronic_disease') { $members = ShelterMemberFamily::whereHas('healthQuestionnares', function ($query) use ($filter) { $query->where('hypertension', true) ->orWhere('diabetes', true) ->orWhere('another_cronic_disease', true); })->paginate(15); return $this->response( ShelterMemberFamilyResource::collection($members), JsonResponse::HTTP_OK ); } $members = ShelterMemberFamily::whereHas('healthQuestionnares', function ($query) use ($filter) { $query->where($filter, true); })->paginate(15); return $this->response( ShelterMemberFamilyResource::collection($members), JsonResponse::HTTP_OK ); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings