Sfoglia il codice sorgente

funcao de afastamento + usuario afastado n consegue criar agendamento + usuario ativo cria agendamento aprovado automaticamente + associado afastado nao retorna na validacao de carteirinha

Gustavo Zanatta 21 ore fa
parent
commit
ce83c75a54

+ 1 - 0
app/Enums/UserStatusEnum.php

@@ -11,4 +11,5 @@ enum UserStatusEnum: string
     case ACTIVE = 'active';
     case INACTIVE = 'inactive';
     case PENDING = 'pending';
+    case ON_LEAVE = 'on_leave';
 }

+ 5 - 1
app/Http/Controllers/AppointmentController.php

@@ -7,6 +7,7 @@ use App\Http\Requests\AppointmentRequest;
 use App\Http\Resources\AppointmentResource;
 use App\Services\AppointmentService;
 use App\Enums\AppointmentStatusEnum;
+use App\Enums\UserStatusEnum;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -36,10 +37,13 @@ class AppointmentController extends Controller
     public function store(AppointmentRequest $request): JsonResponse
     {
         $data = $request->validated();
-        $creatingForOther = isset($data['user_id']) && (int) $data['user_id'] !== Auth::id();
+        $authUser = Auth::user();
+        $creatingForOther = isset($data['user_id']) && (int) $data['user_id'] !== $authUser->id;
 
         if ($creatingForOther) {
             $data['status'] = AppointmentStatusEnum::CONFIRMADO;
+        } elseif ($authUser->status === UserStatusEnum::ACTIVE) {
+            $data['status'] = AppointmentStatusEnum::CONFIRMADO;
         }
 
         $item = $this->service->create($data);

+ 14 - 0
app/Http/Controllers/UserController.php

@@ -111,4 +111,18 @@ class UserController extends Controller
             message: __("messages.updated"),
         );
     }
+
+    public function setOnLeave(int $id): JsonResponse
+    {
+        $item = $this->service->setOnLeave($id, Auth::id());
+
+        if (!$item) {
+            return $this->errorResponse(message: __('messages.not_found'), code: 404);
+        }
+
+        return $this->successResponse(
+            payload: new UserResource($item),
+            message: __("messages.updated"),
+        );
+    }
 }

+ 2 - 0
app/Http/Resources/UserResource.php

@@ -36,6 +36,8 @@ class UserResource extends JsonResource
             'photo_url'                  => $this->photo_path
                                                 ? Storage::disk('s3')->temporaryUrl($this->photo_path, now()->addHours(24))
                                                 : null,
+            'on_leave_at'                => $this->on_leave_at?->format('Y-m-d H:i:s'),
+            'on_leave_by_user_id'        => $this->on_leave_by_user_id,
             'unread_notifications_count' => (int) ($this->unread_notifications_count ?? 0),
             'created_at'                 => Carbon::parse($this->created_at)->format('Y-m-d H:i:s'),
             'updated_at'                 => Carbon::parse($this->updated_at)->format('Y-m-d H:i:s'),

+ 1 - 0
app/Models/User.php

@@ -79,6 +79,7 @@ class User extends Authenticatable
             "admission_date"    => "date",
             "expiry_date"       => "date",
             "excluded_at"       => "datetime",
+            "on_leave_at"       => "datetime",
         ];
     }
 

+ 14 - 0
app/Services/UserService.php

@@ -92,6 +92,20 @@ class UserService
         return $model->delete();
     }
 
+    public function setOnLeave(int $id, int $byUserId): ?User
+    {
+        $model = $this->findById($id);
+        if (!$model) return null;
+
+        $model->update([
+            'status'               => UserStatusEnum::ON_LEAVE,
+            'on_leave_at'          => now(),
+            'on_leave_by_user_id'  => $byUserId,
+        ]);
+
+        return $model->fresh();
+    }
+
     public function getUserTypes(): array
     {
         return UserTypeEnum::toArray();

+ 25 - 0
database/migrations/2026_06_16_000003_add_on_leave_fields_to_users_table.php

@@ -0,0 +1,25 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    public function up(): void
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->timestamp('on_leave_at')->nullable()->after('excluded_at');
+            $table->unsignedBigInteger('on_leave_by_user_id')->nullable()->after('on_leave_at');
+            $table->foreign('on_leave_by_user_id')->references('id')->on('users')->nullOnDelete();
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropForeign(['on_leave_by_user_id']);
+            $table->dropColumn(['on_leave_at', 'on_leave_by_user_id']);
+        });
+    }
+};

+ 2 - 0
routes/authRoutes/user.php

@@ -23,4 +23,6 @@ Route::controller(UserController::class)->prefix('user')->group(function () {
     Route::post('/my/avatar', 'uploadAvatar');
 
     Route::delete('/my/avatar', 'deleteAvatar');
+
+    Route::put('/{id}/on-leave', 'setOnLeave')->middleware('permission:config.user,edit');
 });