diff --git a/app/Domain/Actions/VacationRequest/ApproveAction.php b/app/Domain/Actions/VacationRequest/ApproveAction.php index 3d55542..a6d5896 100644 --- a/app/Domain/Actions/VacationRequest/ApproveAction.php +++ b/app/Domain/Actions/VacationRequest/ApproveAction.php @@ -7,6 +7,7 @@ namespace Toby\Domain\Actions\VacationRequest; use Toby\Domain\Enums\Role; use Toby\Domain\Notifications\VacationRequestStatusChangedNotification; use Toby\Domain\VacationRequestStateManager; +use Toby\Domain\VacationTypeConfigRetriever; use Toby\Eloquent\Models\User; use Toby\Eloquent\Models\VacationRequest; use Toby\Infrastructure\Jobs\SendVacationRequestDaysToGoogleCalendar; @@ -15,15 +16,18 @@ class ApproveAction { public function __construct( protected VacationRequestStateManager $stateManager, + protected VacationTypeConfigRetriever $configRetriever, ) {} public function execute(VacationRequest $vacationRequest, ?User $user = null): void { $this->stateManager->approve($vacationRequest, $user); - SendVacationRequestDaysToGoogleCalendar::dispatch($vacationRequest); + if ($this->configRetriever->isVacation($vacationRequest->type)) { + SendVacationRequestDaysToGoogleCalendar::dispatch($vacationRequest); - $this->notify($vacationRequest); + $this->notify($vacationRequest); + } } protected function notify(VacationRequest $vacationRequest): void diff --git a/app/Domain/Actions/VacationRequest/CancelAction.php b/app/Domain/Actions/VacationRequest/CancelAction.php index 508f5b0..d608844 100644 --- a/app/Domain/Actions/VacationRequest/CancelAction.php +++ b/app/Domain/Actions/VacationRequest/CancelAction.php @@ -7,6 +7,7 @@ namespace Toby\Domain\Actions\VacationRequest; use Toby\Domain\Enums\Role; use Toby\Domain\Notifications\VacationRequestStatusChangedNotification; use Toby\Domain\VacationRequestStateManager; +use Toby\Domain\VacationTypeConfigRetriever; use Toby\Eloquent\Models\User; use Toby\Eloquent\Models\VacationRequest; use Toby\Infrastructure\Jobs\ClearVacationRequestDaysInGoogleCalendar; @@ -15,6 +16,7 @@ class CancelAction { public function __construct( protected VacationRequestStateManager $stateManager, + protected VacationTypeConfigRetriever $configRetriever, ) {} public function execute(VacationRequest $vacationRequest, User $user): void @@ -23,7 +25,9 @@ class CancelAction ClearVacationRequestDaysInGoogleCalendar::dispatch($vacationRequest); - $this->notify($vacationRequest); + if ($this->configRetriever->isVacation($vacationRequest->type)) { + $this->notify($vacationRequest); + } } protected function notify(VacationRequest $vacationRequest): void diff --git a/app/Domain/Actions/VacationRequest/CreateAction.php b/app/Domain/Actions/VacationRequest/CreateAction.php index 3915d6e..8a823e3 100644 --- a/app/Domain/Actions/VacationRequest/CreateAction.php +++ b/app/Domain/Actions/VacationRequest/CreateAction.php @@ -32,7 +32,10 @@ class CreateAction { $vacationRequest = $this->createVacationRequest($data, $creator); $this->handleCreatedVacationRequest($vacationRequest); - $this->notify($vacationRequest); + + if ($this->configRetriever->isVacation($vacationRequest->type)) { + $this->notify($vacationRequest); + } return $vacationRequest; } diff --git a/app/Domain/Actions/VacationRequest/WaitForAdminApprovalAction.php b/app/Domain/Actions/VacationRequest/WaitForAdminApprovalAction.php index 833b470..f36449e 100644 --- a/app/Domain/Actions/VacationRequest/WaitForAdminApprovalAction.php +++ b/app/Domain/Actions/VacationRequest/WaitForAdminApprovalAction.php @@ -23,10 +23,12 @@ class WaitForAdminApprovalAction { $this->stateManager->waitForAdministrative($vacationRequest); - $this->waitForAdminApprovers($vacationRequest); + if ($this->configRetriever->isVacation($vacationRequest->type)) { + $this->notifyAdminApprovers($vacationRequest); + } } - protected function waitForAdminApprovers(VacationRequest $vacationRequest): void + protected function notifyAdminApprovers(VacationRequest $vacationRequest): void { $users = User::query() ->whereIn("role", [Role::AdministrativeApprover, Role::Administrator]) diff --git a/app/Domain/Actions/VacationRequest/WaitForTechApprovalAction.php b/app/Domain/Actions/VacationRequest/WaitForTechApprovalAction.php index 1686698..8035acd 100644 --- a/app/Domain/Actions/VacationRequest/WaitForTechApprovalAction.php +++ b/app/Domain/Actions/VacationRequest/WaitForTechApprovalAction.php @@ -23,7 +23,9 @@ class WaitForTechApprovalAction { $this->stateManager->waitForTechnical($vacationRequest); - $this->notifyTechApprovers($vacationRequest); + if ($this->configRetriever->isVacation($vacationRequest->type)) { + $this->notifyTechApprovers($vacationRequest); + } } protected function notifyTechApprovers(VacationRequest $vacationRequest): void diff --git a/app/Domain/Enums/VacationType.php b/app/Domain/Enums/VacationType.php index 71bdd41..a93ca3d 100644 --- a/app/Domain/Enums/VacationType.php +++ b/app/Domain/Enums/VacationType.php @@ -18,6 +18,7 @@ enum VacationType: string case TimeInLieu = "time_in_lieu"; case Sick = "sick_vacation"; case Absence = "absence"; + case HomeOffice = "home_office"; public function label(): string { diff --git a/app/Domain/UserVacationStatsRetriever.php b/app/Domain/UserVacationStatsRetriever.php index 21967cb..7c11a29 100644 --- a/app/Domain/UserVacationStatsRetriever.php +++ b/app/Domain/UserVacationStatsRetriever.php @@ -34,10 +34,10 @@ class UserVacationStatsRetriever public function getUsedVacationDaysByMonth(User $user, YearPeriod $yearPeriod): Collection { return $user->vacations() + ->whereBelongsTo($yearPeriod) ->whereRelation( "vacationRequest", fn(Builder $query): Builder => $query - ->whereBelongsTo($yearPeriod) ->whereIn("type", $this->getLimitableVacationTypes()) ->states(VacationRequestStatesRetriever::successStates()), ) @@ -69,11 +69,21 @@ class UserVacationStatsRetriever "vacationRequest", fn(Builder $query): Builder => $query ->whereIn("type", $this->getNotLimitableVacationTypes()) + ->whereNot("type", VacationType::HomeOffice) ->states(VacationRequestStatesRetriever::successStates()), ) ->count(); } + public function getHomeOfficeDays(User $user, YearPeriod $yearPeriod): int + { + return $user + ->vacations() + ->whereBelongsTo($yearPeriod) + ->whereRelation("vacationRequest", "type", VacationType::HomeOffice) + ->count(); + } + public function getRemainingVacationDays(User $user, YearPeriod $yearPeriod): int { $limit = $this->getVacationDaysLimit($user, $yearPeriod); diff --git a/app/Domain/VacationTypeConfigRetriever.php b/app/Domain/VacationTypeConfigRetriever.php index 213fcc8..7865d41 100644 --- a/app/Domain/VacationTypeConfigRetriever.php +++ b/app/Domain/VacationTypeConfigRetriever.php @@ -15,6 +15,7 @@ class VacationTypeConfigRetriever public const KEY_BILLABLE = "billable"; public const KEY_HAS_LIMIT = "has_limit"; public const KEY_AVAILABLE_FOR = "available_for"; + public const KEY_IS_VACATION = "is_vacation"; public function __construct( protected Repository $config, @@ -40,6 +41,11 @@ class VacationTypeConfigRetriever return $this->getConfigFor($type)[static::KEY_HAS_LIMIT]; } + public function isVacation(VacationType $type): bool + { + return $this->getConfigFor($type)[static::KEY_IS_VACATION]; + } + public function isAvailableFor(VacationType $type, EmploymentForm $employmentForm): bool { return in_array($employmentForm, $this->getConfigFor($type)[static::KEY_AVAILABLE_FOR], true); diff --git a/app/Domain/Validation/Rules/VacationTypeCanBeSelected.php b/app/Domain/Validation/Rules/VacationTypeCanBeSelected.php new file mode 100644 index 0000000..2a7050f --- /dev/null +++ b/app/Domain/Validation/Rules/VacationTypeCanBeSelected.php @@ -0,0 +1,31 @@ +user->profile->employment_form; + + $availableTypes = VacationType::all() + ->filter(fn(VacationType $type) => $this->configRetriever->isAvailableFor($type, $employmentForm)); + + return $availableTypes->contains($vacationRequest->type); + } + + public function errorMessage(): string + { + return __("You cannot create vacation request of this type."); + } +} diff --git a/app/Domain/Validation/VacationRequestValidator.php b/app/Domain/Validation/VacationRequestValidator.php index 57f8fa8..de87941 100644 --- a/app/Domain/Validation/VacationRequestValidator.php +++ b/app/Domain/Validation/VacationRequestValidator.php @@ -12,6 +12,7 @@ use Toby\Domain\Validation\Rules\NoApprovedVacationRequestsInRange; use Toby\Domain\Validation\Rules\NoPendingVacationRequestInRange; use Toby\Domain\Validation\Rules\VacationRangeIsInTheSameYearRule; use Toby\Domain\Validation\Rules\VacationRequestRule; +use Toby\Domain\Validation\Rules\VacationTypeCanBeSelected; use Toby\Eloquent\Models\VacationRequest; class VacationRequestValidator @@ -19,6 +20,7 @@ class VacationRequestValidator protected array $rules = [ VacationRangeIsInTheSameYearRule::class, MinimumOneVacationDayRule::class, + VacationTypeCanBeSelected::class, DoesNotExceedLimitRule::class, NoPendingVacationRequestInRange::class, NoApprovedVacationRequestsInRange::class, diff --git a/app/Eloquent/Models/Vacation.php b/app/Eloquent/Models/Vacation.php index a602042..9410764 100644 --- a/app/Eloquent/Models/Vacation.php +++ b/app/Eloquent/Models/Vacation.php @@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Carbon; +use Illuminate\Support\Collection; use Toby\Domain\VacationRequestStatesRetriever; /** @@ -58,4 +59,12 @@ class Vacation extends Model fn(Builder $query): Builder => $query->states(VacationRequestStatesRetriever::pendingStates()), ); } + + public function scopeWhereTypes(Builder $query, Collection $types): Builder + { + return $query->whereRelation( + "vacationRequest", + fn(Builder $query): Builder => $query->whereIn("type", $types), + ); + } } diff --git a/app/Infrastructure/Http/Controllers/DashboardController.php b/app/Infrastructure/Http/Controllers/DashboardController.php index a0fb994..33bf1aa 100644 --- a/app/Infrastructure/Http/Controllers/DashboardController.php +++ b/app/Infrastructure/Http/Controllers/DashboardController.php @@ -7,14 +7,16 @@ namespace Toby\Infrastructure\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Inertia\Response; +use Toby\Domain\Enums\VacationType; use Toby\Domain\UserVacationStatsRetriever; use Toby\Domain\VacationRequestStatesRetriever; +use Toby\Domain\VacationTypeConfigRetriever; use Toby\Eloquent\Helpers\YearPeriodRetriever; use Toby\Eloquent\Models\Vacation; use Toby\Eloquent\Models\VacationRequest; -use Toby\Infrastructure\Http\Resources\AbsenceResource; use Toby\Infrastructure\Http\Resources\HolidayResource; use Toby\Infrastructure\Http\Resources\VacationRequestResource; +use Toby\Infrastructure\Http\Resources\VacationResource; class DashboardController extends Controller { @@ -22,6 +24,7 @@ class DashboardController extends Controller Request $request, YearPeriodRetriever $yearPeriodRetriever, UserVacationStatsRetriever $vacationStatsRetriever, + VacationTypeConfigRetriever $configRetriever, ): Response { $user = $request->user(); $now = Carbon::now(); @@ -31,6 +34,14 @@ class DashboardController extends Controller ->with(["user", "vacationRequest"]) ->whereDate("date", $now) ->approved() + ->whereTypes(VacationType::all()->filter(fn(VacationType $type) => $configRetriever->isVacation($type))) + ->get(); + + $remoteDays = Vacation::query() + ->with(["user", "vacationRequest"]) + ->whereDate("date", $now) + ->approved() + ->whereTypes(VacationType::all()->filter(fn(VacationType $type) => !$configRetriever->isVacation($type))) ->get(); if ($user->can("listAll", VacationRequest::class)) { @@ -57,11 +68,13 @@ class DashboardController extends Controller $limit = $vacationStatsRetriever->getVacationDaysLimit($user, $yearPeriod); $used = $vacationStatsRetriever->getUsedVacationDays($user, $yearPeriod); $pending = $vacationStatsRetriever->getPendingVacationDays($user, $yearPeriod); + $homeOffice = $vacationStatsRetriever->getHomeOfficeDays($user, $yearPeriod); $other = $vacationStatsRetriever->getOtherApprovedVacationDays($user, $yearPeriod); $remaining = $limit - $used - $pending; return inertia("Dashboard", [ - "absences" => AbsenceResource::collection($absences), + "absences" => VacationResource::collection($absences), + "remoteDays" => VacationResource::collection($remoteDays), "vacationRequests" => VacationRequestResource::collection($vacationRequests), "holidays" => HolidayResource::collection($holidays), "stats" => [ @@ -69,6 +82,7 @@ class DashboardController extends Controller "remaining" => $remaining, "used" => $used, "pending" => $pending, + "homeOffice" => $homeOffice, "other" => $other, ], "can" => [ diff --git a/app/Infrastructure/Http/Controllers/TimesheetController.php b/app/Infrastructure/Http/Controllers/TimesheetController.php index 3408bf5..16af5f6 100644 --- a/app/Infrastructure/Http/Controllers/TimesheetController.php +++ b/app/Infrastructure/Http/Controllers/TimesheetController.php @@ -35,7 +35,8 @@ class TimesheetController extends Controller $types = VacationType::all() ->filter( - fn(VacationType $type) => $configRetriever->isAvailableFor($type, EmploymentForm::EmploymentContract), + fn(VacationType $type) => $configRetriever->isAvailableFor($type, EmploymentForm::EmploymentContract) + && $configRetriever->isVacation($type), ); $filename = "{$carbonMonth->translatedFormat("F Y")}.xlsx"; diff --git a/app/Infrastructure/Http/Controllers/VacationLimitController.php b/app/Infrastructure/Http/Controllers/VacationLimitController.php index cb3c8ef..29c333e 100644 --- a/app/Infrastructure/Http/Controllers/VacationLimitController.php +++ b/app/Infrastructure/Http/Controllers/VacationLimitController.php @@ -11,7 +11,7 @@ use Toby\Eloquent\Helpers\YearPeriodRetriever; use Toby\Eloquent\Models\VacationLimit; use Toby\Eloquent\Models\YearPeriod; use Toby\Infrastructure\Http\Requests\VacationLimitRequest; -use Toby\Infrastructure\Http\Resources\SimpleUserResource; +use Toby\Infrastructure\Http\Resources\UserResource; class VacationLimitController extends Controller { @@ -32,7 +32,7 @@ class VacationLimitController extends Controller $limitsResource = $limits->map(fn(VacationLimit $limit) => [ "id" => $limit->id, - "user" => new SimpleUserResource($limit->user), + "user" => new UserResource($limit->user), "hasVacation" => $limit->hasVacation(), "days" => $limit->days, "remainingLastYear" => $previousYearPeriod diff --git a/app/Infrastructure/Http/Controllers/VacationRequestController.php b/app/Infrastructure/Http/Controllers/VacationRequestController.php index 64dfc56..3ae5187 100644 --- a/app/Infrastructure/Http/Controllers/VacationRequestController.php +++ b/app/Infrastructure/Http/Controllers/VacationRequestController.php @@ -12,6 +12,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Response as LaravelResponse; use Illuminate\Validation\ValidationException; use Inertia\Response; +use Symfony\Component\HttpFoundation\Response as SymfonyResponse; use Toby\Domain\Actions\VacationRequest\AcceptAsAdministrativeAction; use Toby\Domain\Actions\VacationRequest\AcceptAsTechnicalAction; use Toby\Domain\Actions\VacationRequest\CancelAction; @@ -23,6 +24,7 @@ use Toby\Domain\States\VacationRequest\AcceptedByTechnical; use Toby\Domain\States\VacationRequest\Cancelled; use Toby\Domain\States\VacationRequest\Rejected; use Toby\Domain\VacationRequestStatesRetriever; +use Toby\Domain\VacationTypeConfigRetriever; use Toby\Eloquent\Helpers\YearPeriodRetriever; use Toby\Eloquent\Models\User; use Toby\Eloquent\Models\VacationRequest; @@ -148,8 +150,14 @@ class VacationRequestController extends Controller /** * @throws AuthorizationException */ - public function download(VacationRequest $vacationRequest): LaravelResponse - { + public function download( + VacationRequest $vacationRequest, + VacationTypeConfigRetriever $configRetriever, + ): LaravelResponse { + if (!$configRetriever->isVacation($vacationRequest->type)) { + return abort(SymfonyResponse::HTTP_NOT_FOUND); + } + $this->authorize("show", $vacationRequest); $pdf = PDF::loadView("pdf.vacation-request", [ diff --git a/app/Infrastructure/Http/Resources/AbsenceResource.php b/app/Infrastructure/Http/Resources/AbsenceResource.php deleted file mode 100644 index e15d2fc..0000000 --- a/app/Infrastructure/Http/Resources/AbsenceResource.php +++ /dev/null @@ -1,21 +0,0 @@ - $this->id, - "user" => new SimpleUserResource($this->user), - "date" => $this->date->toDisplayString(), - ]; - } -} diff --git a/app/Infrastructure/Http/Resources/VacationRequestResource.php b/app/Infrastructure/Http/Resources/VacationRequestResource.php index ddd6f4b..ddcafe7 100644 --- a/app/Infrastructure/Http/Resources/VacationRequestResource.php +++ b/app/Infrastructure/Http/Resources/VacationRequestResource.php @@ -5,10 +5,19 @@ declare(strict_types=1); namespace Toby\Infrastructure\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; +use Toby\Domain\VacationTypeConfigRetriever; class VacationRequestResource extends JsonResource { public static $wrap = null; + protected VacationTypeConfigRetriever $configRetriever; + + public function __construct($resource) + { + parent::__construct($resource); + + $this->configRetriever = app(VacationTypeConfigRetriever::class); + } public function toArray($request): array { @@ -17,6 +26,7 @@ class VacationRequestResource extends JsonResource "name" => $this->name, "user" => new SimpleUserResource($this->user), "type" => $this->type, + "isVacation" => $this->configRetriever->isVacation($this->type), "state" => $this->state, "from" => $this->from->toDisplayString(), "to" => $this->to->toDisplayString(), diff --git a/app/Infrastructure/Http/Resources/VacationResource.php b/app/Infrastructure/Http/Resources/VacationResource.php index e9590e3..fed9e76 100644 --- a/app/Infrastructure/Http/Resources/VacationResource.php +++ b/app/Infrastructure/Http/Resources/VacationResource.php @@ -14,6 +14,7 @@ class VacationResource extends JsonResource { return [ "id" => $this->id, + "user" => new SimpleUserResource($this->user), "displayDate" => $this->date->toDisplayString(), "date" => $this->date->toDateString(), ]; diff --git a/config/vacation_types.php b/config/vacation_types.php index e9b4402..806cbbc 100644 --- a/config/vacation_types.php +++ b/config/vacation_types.php @@ -15,6 +15,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::OnRequest->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -24,6 +25,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::TimeInLieu->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => false, @@ -33,6 +35,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Sick->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => false, @@ -42,6 +45,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Unpaid->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -51,6 +55,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Special->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -60,6 +65,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Childcare->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -69,6 +75,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Training->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -78,6 +85,18 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, + ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, + VacationType::Volunteering->value => [ + VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, + VacationTypeConfigRetriever::KEY_ADMINISTRATIVE_APPROVAL => true, + VacationTypeConfigRetriever::KEY_BILLABLE => true, + VacationTypeConfigRetriever::KEY_HAS_LIMIT => false, + VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ + EmploymentForm::EmploymentContract, + ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Volunteering->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -87,15 +106,7 @@ return [ VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ EmploymentForm::EmploymentContract, ], - ], - VacationType::Volunteering->value => [ - VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, - VacationTypeConfigRetriever::KEY_ADMINISTRATIVE_APPROVAL => true, - VacationTypeConfigRetriever::KEY_BILLABLE => true, - VacationTypeConfigRetriever::KEY_HAS_LIMIT => false, - VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ - EmploymentForm::EmploymentContract, - ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, ], VacationType::Absence->value => [ VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => true, @@ -107,5 +118,19 @@ return [ EmploymentForm::B2bContract, EmploymentForm::BoardMemberContract, ], + VacationTypeConfigRetriever::KEY_IS_VACATION => true, + ], + VacationType::HomeOffice->value => [ + VacationTypeConfigRetriever::KEY_TECHNICAL_APPROVAL => false, + VacationTypeConfigRetriever::KEY_ADMINISTRATIVE_APPROVAL => false, + VacationTypeConfigRetriever::KEY_BILLABLE => true, + VacationTypeConfigRetriever::KEY_HAS_LIMIT => false, + VacationTypeConfigRetriever::KEY_AVAILABLE_FOR => [ + EmploymentForm::EmploymentContract, + EmploymentForm::CommissionContract, + EmploymentForm::B2bContract, + EmploymentForm::BoardMemberContract, + ], + VacationTypeConfigRetriever::KEY_IS_VACATION => false, ], ]; diff --git a/resources/js/Composables/vacationTypeInfo.js b/resources/js/Composables/vacationTypeInfo.js index 4f154cb..3ed7591 100644 --- a/resources/js/Composables/vacationTypeInfo.js +++ b/resources/js/Composables/vacationTypeInfo.js @@ -8,6 +8,7 @@ import HandHeartOutlineIcon from 'vue-material-design-icons/HandHeartOutline.vue import CalendarCheckIcon from 'vue-material-design-icons/CalendarCheck.vue' import MedicalBagIcon from 'vue-material-design-icons/MedicalBag.vue' import CalendarRemoveIcon from 'vue-material-design-icons/CalendarRemove.vue' +import LaptopIcon from 'vue-material-design-icons/Laptop.vue' const types = [ { @@ -80,6 +81,13 @@ const types = [ color: 'text-cyan-500', border: 'border-cyan-500', }, + { + text: 'Praca zdalna', + value: 'home_office', + icon: LaptopIcon, + color: 'text-fuchsia-500', + border: 'border-fuchsia-500', + }, ] export default function useVacationTypeInfo() { diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index ae4a270..c048343 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -15,9 +15,13 @@ :requests="vacationRequests.data" /> + -
  • +
  • {{ role.label }} @@ -188,14 +188,14 @@ as="template" :value="employmentForm" > -
  • +
  • {{ employmentForm.label }} diff --git a/resources/js/Pages/Users/Edit.vue b/resources/js/Pages/Users/Edit.vue index 05505d2..3ede6b9 100644 --- a/resources/js/Pages/Users/Edit.vue +++ b/resources/js/Pages/Users/Edit.vue @@ -136,7 +136,7 @@ :value="role" >
  • {{ role.label }} @@ -144,7 +144,7 @@ @@ -194,7 +194,7 @@ :value="employmentForm" >
  • {{ employmentForm.label }} @@ -202,7 +202,7 @@ diff --git a/resources/js/Pages/VacationRequest/Create.vue b/resources/js/Pages/VacationRequest/Create.vue index 212ab31..fe39c11 100644 --- a/resources/js/Pages/VacationRequest/Create.vue +++ b/resources/js/Pages/VacationRequest/Create.vue @@ -72,7 +72,7 @@ as="template" :value="user" > -
  • +
  • @@ -142,7 +142,9 @@ :class="{ 'border-red-300 text-red-900 focus:ring-red-500 focus:border-red-500': form.errors.type, 'focus:ring-blumilk-500 focus:border-blumilk-500 sm:text-sm border-gray-300': !form.errors.type }" >