Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
tbfguestbe.tbf.ro
/
app
/
Http
/
Controllers
/
Api
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
PositionController.php
| Size :
12.89
KB
Copy
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Http\Requests\PositionAddUserRequest; use App\Http\Requests\PositionFormRequest; use App\Http\Resources\PositionAdminIndexCollection; use App\Http\Resources\PositionCentralizerCollection; use App\Http\Resources\PositionCentralizerResource; use App\Http\Resources\PositionCollection; use App\Http\Resources\PositionEditResource; use App\Http\Resources\PositionResource; use App\Jobs\GenerateActivitySuggestionJob; use App\Jobs\GenerateResponsibilityJob; use App\Jobs\ProcessPositionActivitiesJob; use App\Mail\UserAddedOnPositionMail; use App\Managers\PromptManager; use App\Managers\UserManager; use App\Models\Instance; use App\Models\Module; use App\Models\Position; use App\Models\Role; use App\Models\StatusType; use App\Models\User; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; class PositionController extends Controller { /** * Display a listing of the resource. * * @param Instance $instance * * @return PositionCollection|PositionAdminIndexCollection */ public function index(Instance $instance) { $user = auth()->user(); if ($user->isSuperAdmin()) { $positions = $instance->positions; } else if ($user && $user->isAdmin()) { $positions = $instance->positions; } else { $positions = $instance->positions() ->where(function ($query) use ($user) { $query->whereHas('users', function ($subquery) use ($user) { $subquery->where('users.id', $user->id); }); }) ->orWhere(function ($query) use ($user) { $query->whereHas('admins', function ($subquery) use ($user) { $subquery->where('users.id', $user->id); }); }) ->get(); } if ($user->isSuperAdmin()) { return new PositionAdminIndexCollection($positions); } return new PositionCollection($positions); } /** * Store a newly created resource in storage. * * @param PositionFormRequest $request * * @return JsonResponse */ public function store(PositionFormRequest $request): JsonResponse { $data = $request->validated(); $instance = auth()->user()->instance; $data['emoji'] = PromptManager::generateEmoji($data['name'], $instance); $position = Position::create($data); $position->options()->sync($data['options']); foreach ($data['users'] as $userData) { $user = UserManager::storeOrUpdateUsers($userData, Module::RESPONSIBILITIES); $positionUser['status'] = StatusType::ONGOING; $positionUser['user_id'] = $user->id; $positionUser['is_responsible'] = $userData['is_responsible'] ?? 0; if (!$user->new) { // Trimiteți un email pentru a informa că utilizatorul a fost adăugat pe poziție Mail::to($user)->queue(new UserAddedOnPositionMail($user, $position)); } $position->users()->syncWithoutDetaching([$positionUser]); } if (isset($data['admins'])) { foreach ($data['admins'] as $adminData) { $user = UserManager::storeOrUpdateUsers($adminData, Module::RESPONSIBILITIES); $positionUser['status'] = StatusType::COMPLETED; $positionUser['user_id'] = $user->id; $positionUser['is_admin'] = true; $position->admins()->syncWithoutDetaching([$positionUser]); } } GenerateActivitySuggestionJob::dispatch($position)->onQueue('high'); return response()->json([ 'status' => 'success', 'data' => new PositionResource($position) ]); } /** * Display the specified resource. * * @param Instance $instance * @param Position $position * * @return PositionResource */ public function show(Instance $instance, Position $position): PositionResource { return new PositionResource($position); } /** * Display the specified resource. * * @param Instance $instance * @param Position $position * * @return PositionEditResource */ public function edit(Instance $instance, Position $position): PositionEditResource { return new PositionEditResource($position); } /** * Update the specified resource in storage. * * @param PositionFormRequest $request * @param Instance $instance * @param Position $position * * @return JsonResponse */ public function update(PositionFormRequest $request, Instance $instance, Position $position): JsonResponse { $data = $request->validated(); $position->update($data); $position->options()->sync($data['options']); $existingUsers = $position->users->pluck('id')->toArray(); $newUsers = []; foreach ($data['users'] as $userData) { $user = UserManager::storeOrUpdateUsers($userData, Module::RESPONSIBILITIES); array_push($newUsers, $user->id); $positionUser['status'] = StatusType::ONGOING; $positionUser['user_id'] = $user->id; $positionUser['is_responsible'] = $userData['is_responsible'] ?? 0; if (!$position->users->contains('id', $user->id)) { // Trimiteți un email pentru a informa că utilizatorul a fost adăugat pe poziție Mail::to($user)->queue(new UserAddedOnPositionMail($user, $position)); } $position->users()->syncWithoutDetaching([ $user->id => [ 'status' => StatusType::ONGOING, 'is_responsible' => $userData['is_responsible'] ?? 0, ] ]); } foreach ($data['admins'] as $adminData) { $user = UserManager::storeOrUpdateUsers($adminData, Module::RESPONSIBILITIES); $position->admins()->syncWithoutDetaching([ $user->id => [ 'status' => StatusType::COMPLETED, 'is_admin' => true ] ]); } if (count($data['admins']) == 0) { $position->admins()->detach(); } $difference = array_diff($existingUsers, $newUsers); $position->users()->detach($difference); return response()->json([ 'status' => 'success', 'data' => new PositionResource($position->refresh()), ], 200); } /** * Add user to resource * * @param PositionAddUserRequest $request * @param Instance $instance * @param Position $position * * @return JsonResponse */ public function addUser(PositionAddUserRequest $request, Instance $instance, Position $position): JsonResponse { $data = $request->validated(); $data['status'] = StatusType::ONGOING; if (isset($data['is_responsible']) && $data['is_responsible'] == 1) { foreach ($position->users as $user) { $position->users()->updateExistingPivot($user->id, [ 'is_responsible' => false, ]); } } $position->users()->attach([$data]); return response()->json([ 'status' => 'success', 'data' => new PositionResource($position), ], 200); } /** * Remove user from this resource. * * @param Instance $instance * @param Position $position * @param User $user * * @return JsonResponse */ public function removeUser(Instance $instance, Position $position, User $user): JsonResponse { $position->users()->updateExistingPivot($user->id, ['deleted_at' => Carbon::now()]); return response()->json([ 'status' => 'success', 'data' => new PositionResource($position), ], 200); } /** * Remove the specified resource from storage. * * @param Instance $instance * @param Position $position * * @return JsonResponse */ public function destroy(Instance $instance, Position $position): JsonResponse { $position->delete(); return response()->json([ 'status' => 'success' ], 200); } /** * Update the specified resource in storage. * * @param PositionFormRequest $request * @param Position $position * @param User $user * * @return JsonResponse */ public function updateStatus(Request $request, Instance $instance, Position $position, User $user): JsonResponse { $validated = $request->validate([ 'status' => ['required', 'in:' . StatusType::COMPLETED . ',' . StatusType::ONGOING], ]); $position->users()->where('user_id', $user->id)->update([ 'status' => $validated['status'], ]); if ($validated['status'] == StatusType::ONGOING) { $position->update([ 'status' => Position::IN_PROGRESS, 'evaluation_completed' => false ]); } $ongoingUsers = $position->users()->where('status', 'ongoing')->count(); if (!$ongoingUsers) { $position->update(['status' => Position::PROCESSING]); ProcessPositionActivitiesJob::dispatch($position); } return response()->json([ 'status' => 'success', ], 200); } /** * Update the specified resource in storage. * * @param PositionFormRequest $request * @param Position $position * * @return JsonResponse */ public function finalizeEvaluation(Instance $instance, Position $position): JsonResponse { $position->update([ 'evaluation_completed' => true, ]); // GenerateResponsibilityJob::dispatch($position); return response()->json([ 'status' => 'success', 'data' => new PositionResource($position), ], 200); } /** * Update status and start activity process. * * @param PositionFormRequest $request * @param Position $position * * @return JsonResponse */ public function regenerate(Instance $instance, Position $position): JsonResponse { $position->update([ 'status' => Position::PROCESSING, 'evaluation_completed' => false ]); ProcessPositionActivitiesJob::dispatch($position); return response()->json([ 'status' => 'success', ], 200); } /** * Update the specified resource in storage. * * @param Instance $instance * @param Position $position * * @return JsonResponse */ public function checkStatus(Instance $instance, Position $position): JsonResponse { return response()->json([ 'status' => $position->status ], 200); } /** * Get the centralizer for all positions * * @param Instance $instance * * @return JsonResponse */ public function centralizer(Instance $instance): PositionCentralizerCollection { $positions = $instance->positions()->with('activities', 'responsibilities', 'procedures')->get(); return new PositionCentralizerCollection($positions); } /** * Get the centralizer for one position * * @param Instance $instance * @param Position $position * * @return JsonResponse */ public function positionCentralizer(Instance $instance, Position $position): JsonResponse { $user = auth()->user()->load('modules'); // rights for impersonation $impersonationAccess = false; $currentAccessToken = $user->currentAccessToken(); if ($currentAccessToken->name == 'IMPERSONATION token') { $impersonationAccess = true; } return response()->json([ 'data' => new PositionCentralizerResource($position), 'meta' => [ 'responsibility_active' => $user->modules->contains('id', Module::RESPONSIBILITIES) && ($impersonationAccess ? true : $instance->enable_responsibility) && $position->responsibilities()->exists(), 'procedure_active' => /*$user->modules->contains('id', Module::PROCEDURES) &&*/ ($impersonationAccess ? true : $instance->enable_procedure) && $position->procedures()->exists(), 'recruitment_active' => $user->modules->contains('id', Module::RECRUITMENT) && ($impersonationAccess ? true : $instance->enable_recruitment) && $position->recruitment()->exists() && $position->need_for_recruitment, ], ], 200); } }
Back