From e306585db2e8d272e1a7bdd71ef691af461c236d Mon Sep 17 00:00:00 2001 From: Kamil Date: Fri, 5 Jul 2024 14:14:18 +0200 Subject: [PATCH 01/11] #457 - feat: added checkbox for trashed users on vacations index --- app/Http/Controllers/UserController.php | 2 +- .../Controllers/VacationRequestController.php | 4 ++ lang/pl.json | 2 +- .../VacationRequest/IndexForApprovers.vue | 48 ++++++++++++------- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 72e81526..a518fba4 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -127,7 +127,7 @@ public function destroy(User $user): RedirectResponse $user->delete(); return back() - ->with("success", __("User deleted.")); + ->with("success", __("User blocked.")); } /** diff --git a/app/Http/Controllers/VacationRequestController.php b/app/Http/Controllers/VacationRequestController.php index 11762f84..46354dd0 100644 --- a/app/Http/Controllers/VacationRequestController.php +++ b/app/Http/Controllers/VacationRequestController.php @@ -105,10 +105,12 @@ public function indexForApprovers( $status = $request->get("status", "all"); $user = $request->get("user"); $type = $request->get("type"); + $withTrashedUsers = $request->boolean("withTrashedUsers") ?? false; $vacationRequests = VacationRequest::query() ->with(["vacations.user.profile", "user.permissions", "user.profile"]) ->whereBelongsTo($yearPeriod) + ->whereRelation("user", fn($query) => $query->withTrashed($withTrashedUsers)) ->when($user !== null, fn(Builder $query): Builder => $query->where("user_id", $user)) ->when($type !== null, fn(Builder $query): Builder => $query->where("type", $type)) ->states(VacationRequestStatesRetriever::filterByStatusGroup($status, $request->user())) @@ -116,6 +118,7 @@ public function indexForApprovers( ->paginate(); $users = User::query() + ->withTrashed($withTrashedUsers) ->orderByProfileField("last_name") ->orderByProfileField("first_name") ->get(); @@ -128,6 +131,7 @@ public function indexForApprovers( "status" => $status, "user" => (int)$user, "type" => $type, + "withTrashedUsers" => $withTrashedUsers, ], ]); } diff --git a/lang/pl.json b/lang/pl.json index 290a0eed..a0dec3d1 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -33,8 +33,8 @@ "The request must be for at least one day.": "Wniosek musi być co najmniej na jeden dzień.", "The request cannot be created at the turn of the year.": "Wniosek nie może zostać złożony na przełomie roku.", "User created.": "Użytkownik utworzony.", + "User blocked.": "Użytkownik zablokowany.", "User updated.": "Użytkownik zaktualizowany.", - "User deleted.": "Użytkownik usunięty.", "User restored.": "Użytkownik przywrócony.", "Permissions updated.": "Uprawnienia zaktualizowane.", "Holiday created.": "Dzień wolny utworzony.", diff --git a/resources/js/Pages/VacationRequest/IndexForApprovers.vue b/resources/js/Pages/VacationRequest/IndexForApprovers.vue index 4fc885cd..0e1397e5 100644 --- a/resources/js/Pages/VacationRequest/IndexForApprovers.vue +++ b/resources/js/Pages/VacationRequest/IndexForApprovers.vue @@ -2,7 +2,7 @@ import { CheckIcon, ChevronRightIcon, ChevronUpDownIcon } from '@heroicons/vue/24/solid' import Status from '@/Shared/Status.vue' import VacationType from '@/Shared/VacationType.vue' -import { watch, reactive } from 'vue' +import { reactive, watch } from 'vue' import { debounce } from 'lodash' import { Inertia } from '@inertiajs/inertia' import { Listbox, ListboxButton, ListboxLabel, ListboxOption, ListboxOptions } from '@headlessui/vue' @@ -43,6 +43,7 @@ const form = reactive({ user: props.users.data.find(user => user.id === props.filters.user) ?? null, status: statuses.find(status => status.value === props.filters.status) ?? statuses[0], type: props.types.find(type => type.value === props.filters.type) ?? null, + withTrashedUsers: props.filters.withTrashedUsers ?? false, }) watch(form, debounce(() => { @@ -50,6 +51,7 @@ watch(form, debounce(() => { user: form.user?.id, status: form.status.value, type: form.type?.value, + withTrashedUsers: form.withTrashedUsers, }, { preserveState: true, replace: true, @@ -68,8 +70,8 @@ watch(form, debounce(() => {
Dodaj wniosek @@ -116,8 +118,8 @@ watch(form, debounce(() => { >
  • { v-for="user in users.data" :key="user.id" v-slot="{ active }" - as="template" :value="user" + as="template" >
  • { v-for="status in statuses" :key="status.value" v-slot="{ active, selected }" - as="template" :value="status" + as="template" >
  • { >
  • { v-for="type in types" :key="type.value" v-slot="{ active }" - as="template" :value="type" + as="template" >
  • {
  • +
    + + +
    @@ -301,44 +317,44 @@ watch(form, debounce(() => { Numer Pracownik Rodzaj wniosku Od Do Dni urlopu Status @@ -349,8 +365,8 @@ watch(form, debounce(() => { @@ -402,8 +418,8 @@ watch(form, debounce(() => {