Merge branch 'main' into #22-vacation-calendar
# Conflicts: # resources/js/Pages/Dashboard.vue # resources/js/Shared/Layout/AppLayout.vue # resources/js/Shared/MainMenu.vue # routes/web.php
This commit is contained in:
		| @@ -7,7 +7,8 @@ namespace Toby\Infrastructure\Http\Controllers; | ||||
| use Illuminate\Http\RedirectResponse; | ||||
| use Illuminate\Http\Request; | ||||
| use Inertia\Response; | ||||
| use Toby\Domain\EmploymentForm; | ||||
| use Toby\Domain\Enums\EmploymentForm; | ||||
| use Toby\Domain\Enums\Role; | ||||
| use Toby\Eloquent\Models\User; | ||||
| use Toby\Infrastructure\Http\Requests\UserRequest; | ||||
| use Toby\Infrastructure\Http\Resources\UserFormDataResource; | ||||
| @@ -35,6 +36,7 @@ class UserController extends Controller | ||||
|     { | ||||
|         return inertia("Users/Create", [ | ||||
|             "employmentForms" => EmploymentForm::casesToSelect(), | ||||
|             "roles" => Role::casesToSelect(), | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
| @@ -52,6 +54,7 @@ class UserController extends Controller | ||||
|         return inertia("Users/Edit", [ | ||||
|             "user" => new UserFormDataResource($user), | ||||
|             "employmentForms" => EmploymentForm::casesToSelect(), | ||||
|             "roles" => Role::casesToSelect(), | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,102 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Toby\Infrastructure\Http\Controllers; | ||||
|  | ||||
| use Illuminate\Http\RedirectResponse; | ||||
| use Illuminate\Http\Request; | ||||
| use Inertia\Response; | ||||
| use Toby\Domain\Enums\VacationRequestState; | ||||
| use Toby\Domain\Enums\VacationType; | ||||
| use Toby\Domain\VacationRequestStateManager; | ||||
| use Toby\Domain\Validation\VacationRequestValidator; | ||||
| use Toby\Eloquent\Models\VacationRequest; | ||||
| use Toby\Infrastructure\Http\Requests\VacationRequestRequest; | ||||
| use Toby\Infrastructure\Http\Resources\VacationRequestActivityResource; | ||||
| use Toby\Infrastructure\Http\Resources\VacationRequestResource; | ||||
|  | ||||
| class VacationRequestController extends Controller | ||||
| { | ||||
|     public function index(Request $request): Response | ||||
|     { | ||||
|         $vacationRequests = $request->user() | ||||
|             ->vacationRequests() | ||||
|             ->latest() | ||||
|             ->states(VacationRequestState::filterByStatus($request->query("status", "all"))) | ||||
|             ->paginate(); | ||||
|  | ||||
|         return inertia("VacationRequest/Index", [ | ||||
|             "requests" => VacationRequestResource::collection($vacationRequests), | ||||
|             "filters" => $request->only("status"), | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function show(VacationRequest $vacationRequest): Response | ||||
|     { | ||||
|         return inertia("VacationRequest/Show", [ | ||||
|             "request" => new VacationRequestResource($vacationRequest), | ||||
|             "activities" => VacationRequestActivityResource::collection($vacationRequest->activities), | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function create(): Response | ||||
|     { | ||||
|         return inertia("VacationRequest/Create", [ | ||||
|             "vacationTypes" => VacationType::casesToSelect(), | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function store( | ||||
|         VacationRequestRequest $request, | ||||
|         VacationRequestValidator $vacationRequestValidator, | ||||
|         VacationRequestStateManager $stateManager, | ||||
|     ): RedirectResponse { | ||||
|         /** @var VacationRequest $vacationRequest */ | ||||
|         $vacationRequest = $request->user()->vacationRequests()->make($request->data()); | ||||
|  | ||||
|         $vacationRequestValidator->validate($vacationRequest); | ||||
|  | ||||
|         $vacationRequest->save(); | ||||
|         $stateManager->markAsCreated($vacationRequest); | ||||
|  | ||||
|         return redirect() | ||||
|             ->route("vacation.requests.index"); | ||||
|     } | ||||
|  | ||||
|     public function reject( | ||||
|         VacationRequest $vacationRequest, | ||||
|         VacationRequestStateManager $stateManager, | ||||
|     ): RedirectResponse { | ||||
|         $stateManager->reject($vacationRequest); | ||||
|  | ||||
|         return redirect()->back(); | ||||
|     } | ||||
|  | ||||
|     public function cancel( | ||||
|         VacationRequest $vacationRequest, | ||||
|         VacationRequestStateManager $stateManager, | ||||
|     ): RedirectResponse { | ||||
|         $stateManager->cancel($vacationRequest); | ||||
|  | ||||
|         return redirect()->back(); | ||||
|     } | ||||
|  | ||||
|     public function acceptAsTechnical( | ||||
|         VacationRequest $vacationRequest, | ||||
|         VacationRequestStateManager $stateManager, | ||||
|     ): RedirectResponse { | ||||
|         $stateManager->acceptAsTechnical($vacationRequest); | ||||
|  | ||||
|         return redirect()->back(); | ||||
|     } | ||||
|  | ||||
|     public function acceptAsAdministrative( | ||||
|         VacationRequest $vacationRequest, | ||||
|         VacationRequestStateManager $stateManager, | ||||
|     ): RedirectResponse { | ||||
|         $stateManager->acceptAsAdministrative($vacationRequest); | ||||
|  | ||||
|         return redirect()->back(); | ||||
|     } | ||||
| } | ||||
| @@ -23,6 +23,7 @@ use Illuminate\Routing\Middleware\ValidateSignature; | ||||
| use Illuminate\Session\Middleware\AuthenticateSession; | ||||
| use Illuminate\Session\Middleware\StartSession; | ||||
| use Illuminate\View\Middleware\ShareErrorsFromSession; | ||||
| use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful; | ||||
| use Toby\Infrastructure\Http\Middleware\Authenticate; | ||||
| use Toby\Infrastructure\Http\Middleware\HandleInertiaRequests; | ||||
| use Toby\Infrastructure\Http\Middleware\RedirectIfAuthenticated; | ||||
| @@ -52,6 +53,7 @@ class Kernel extends HttpKernel | ||||
|             HandleInertiaRequests::class, | ||||
|         ], | ||||
|         "api" => [ | ||||
|             EnsureFrontendRequestsAreStateful::class, | ||||
|             "throttle:api", | ||||
|             SubstituteBindings::class, | ||||
|         ], | ||||
|   | ||||
| @@ -7,7 +7,8 @@ namespace Toby\Infrastructure\Http\Requests; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Validation\Rule; | ||||
| use Illuminate\Validation\Rules\Enum; | ||||
| use Toby\Domain\EmploymentForm; | ||||
| use Toby\Domain\Enums\EmploymentForm; | ||||
| use Toby\Domain\Enums\Role; | ||||
|  | ||||
| class UserRequest extends FormRequest | ||||
| { | ||||
| @@ -17,6 +18,7 @@ class UserRequest extends FormRequest | ||||
|             "firstName" => ["required", "min:3", "max:80"], | ||||
|             "lastName" => ["required", "min:3", "max:80"], | ||||
|             "email" => ["required", "email", Rule::unique("users", "email")->ignore($this->user)], | ||||
|             "role" => ["required", new Enum(Role::class)], | ||||
|             "employmentForm" => ["required", new Enum(EmploymentForm::class)], | ||||
|             "employmentDate" => ["required", "date_format:Y-m-d"], | ||||
|         ]; | ||||
| @@ -28,6 +30,7 @@ class UserRequest extends FormRequest | ||||
|             "first_name" => $this->get("firstName"), | ||||
|             "last_name" => $this->get("lastName"), | ||||
|             "email" => $this->get("email"), | ||||
|             "role" => $this->get("role"), | ||||
|             "employment_form" => $this->get("employmentForm"), | ||||
|             "employment_date" => $this->get("employmentDate"), | ||||
|         ]; | ||||
|   | ||||
							
								
								
									
										33
									
								
								app/Infrastructure/Http/Requests/VacationRequestRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								app/Infrastructure/Http/Requests/VacationRequestRequest.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Toby\Infrastructure\Http\Requests; | ||||
|  | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Validation\Rules\Enum; | ||||
| use Toby\Domain\Enums\VacationType; | ||||
| use Toby\Infrastructure\Http\Rules\YearPeriodExists; | ||||
|  | ||||
| class VacationRequestRequest extends FormRequest | ||||
| { | ||||
|     public function rules(): array | ||||
|     { | ||||
|         return [ | ||||
|             "type" => ["required", new Enum(VacationType::class)], | ||||
|             "from" => ["required", "date_format:Y-m-d", new YearPeriodExists()], | ||||
|             "to" => ["required", "date_format:Y-m-d", new YearPeriodExists()], | ||||
|             "comment" => ["nullable"], | ||||
|         ]; | ||||
|     } | ||||
|  | ||||
|     public function data(): array | ||||
|     { | ||||
|         return [ | ||||
|             "type" => $this->get("type"), | ||||
|             "from" => $this->get("from"), | ||||
|             "to" => $this->get("to"), | ||||
|             "comment" => $this->get("comment"), | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
| @@ -15,6 +15,7 @@ class HolidayResource extends JsonResource | ||||
|         return [ | ||||
|             "id" => $this->id, | ||||
|             "name" => $this->name, | ||||
|             "date" => $this->date->toDateString(), | ||||
|             "displayDate" => $this->date->toDisplayString(), | ||||
|             "dayOfWeek" => $this->date->dayName, | ||||
|         ]; | ||||
|   | ||||
| @@ -17,8 +17,9 @@ class UserFormDataResource extends JsonResource | ||||
|             "firstName" => $this->first_name, | ||||
|             "lastName" => $this->last_name, | ||||
|             "email" => $this->email, | ||||
|             "role" => $this->role, | ||||
|             "employmentForm" => $this->employment_form, | ||||
|             "employmentDate" => $this->employment_date, | ||||
|             "employmentDate" => $this->employment_date->toDateString(), | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -16,7 +16,7 @@ class UserResource extends JsonResource | ||||
|             "id" => $this->id, | ||||
|             "name" => $this->fullName, | ||||
|             "email" => $this->email, | ||||
|             "role" => "Human Resources Manager", | ||||
|             "role" => $this->role->label(), | ||||
|             "avatar" => asset($this->avatar), | ||||
|             "deleted" => $this->trashed(), | ||||
|             "employmentForm" => $this->employment_form->label(), | ||||
|   | ||||
| @@ -0,0 +1,21 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Toby\Infrastructure\Http\Resources; | ||||
|  | ||||
| use Illuminate\Http\Resources\Json\JsonResource; | ||||
|  | ||||
| class VacationRequestActivityResource extends JsonResource | ||||
| { | ||||
|     public static $wrap = null; | ||||
|  | ||||
|     public function toArray($request): array | ||||
|     { | ||||
|         return [ | ||||
|             "date" => $this->created_at->toDisplayString(), | ||||
|             "who" => $this->user ? $this->user->fullName : __("System"), | ||||
|             "to" => $this->to->label(), | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,26 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Toby\Infrastructure\Http\Resources; | ||||
|  | ||||
| use Illuminate\Http\Resources\Json\JsonResource; | ||||
|  | ||||
| class VacationRequestResource extends JsonResource | ||||
| { | ||||
|     public static $wrap = null; | ||||
|  | ||||
|     public function toArray($request): array | ||||
|     { | ||||
|         return [ | ||||
|             "id" => $this->id, | ||||
|             "name" => $this->name, | ||||
|             "user" => new UserResource($this->user), | ||||
|             "type" => $this->type->label(), | ||||
|             "state" => $this->state->label(), | ||||
|             "from" => $this->from->toDisplayString(), | ||||
|             "to" => $this->to->toDisplayString(), | ||||
|             "comment" => $this->comment, | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user