Parcourir la source

feat: :sparkles: feat (notificacoes-parceiro) criada tela de notificacoes parceiro

foi criada a tela de notificacoes para o parceiro com opcao de marcar como lido

fase:dev | origin:escopo
Gustavo Zanatta il y a 3 semaines
Parent
commit
9dd9b4ff58

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

@@ -105,4 +105,18 @@ class AppointmentController extends Controller
         $item = $this->service->reject($id);
         return $this->successResponse(payload: new AppointmentResource($item), message: __('messages.updated'));
     }
+
+    public function approveByPartner(int $id): JsonResponse
+    {
+        $item = $this->service->approveByPartner($id, Auth::id());
+        if (!$item) return $this->errorResponse(message: __('messages.not_found'), code: 404);
+        return $this->successResponse(payload: new AppointmentResource($item), message: __('messages.updated'));
+    }
+
+    public function rejectByPartner(int $id): JsonResponse
+    {
+        $item = $this->service->rejectByPartner($id, Auth::id());
+        if (!$item) return $this->errorResponse(message: __('messages.not_found'), code: 404);
+        return $this->successResponse(payload: new AppointmentResource($item), message: __('messages.updated'));
+    }
 }

+ 16 - 0
app/Services/AppointmentService.php

@@ -119,6 +119,22 @@ class AppointmentService
         return $model->fresh(['user', 'partnerAgreement', 'partnerAgreementService']);
     }
 
+    public function approveByPartner(int $id, int $userId): ?Appointment
+    {
+        $model = Appointment::whereHas('partnerAgreement', fn($q) => $q->where('user_id', $userId))->find($id);
+        if (!$model) return null;
+        $model->update(['status' => AppointmentStatusEnum::CONFIRMADO]);
+        return $model->fresh(['user', 'partnerAgreement', 'partnerAgreementService']);
+    }
+
+    public function rejectByPartner(int $id, int $userId): ?Appointment
+    {
+        $model = Appointment::whereHas('partnerAgreement', fn($q) => $q->where('user_id', $userId))->find($id);
+        if (!$model) return null;
+        $model->update(['status' => AppointmentStatusEnum::RECUSADO]);
+        return $model->fresh(['user', 'partnerAgreement', 'partnerAgreementService']);
+    }
+
     private function generateOrderNumber(): string
     {
         do {

+ 1 - 1
database/seeders/UserTypePermissionSeeder.php

@@ -53,7 +53,7 @@ class UserTypePermissionSeeder extends Seeder
                         ['scope' => 'dashboard',            'bits' => Permission::VIEW | Permission::MENU],
                         ['scope' => 'parceiro',             'bits' => Permission::VIEW | Permission::EDIT | Permission::MENU],
                         ['scope' => 'parceiro.carteirinha', 'bits' => Permission::VIEW | Permission::MENU],
-                        ['scope' => 'parceiro.agendamento', 'bits' => Permission::VIEW | Permission::MENU],
+                        ['scope' => 'parceiro.agendamento', 'bits' => Permission::VIEW | Permission::EDIT | Permission::MENU],
                         ['scope' => 'parceiro.dados',       'bits' => Permission::VIEW | Permission::EDIT | Permission::MENU],
                         ['scope' => 'parceiro.servico',     'bits' => Permission::VIEW | Permission::ADD | Permission::EDIT | Permission::DELETE],
                         ['scope' => 'parceiro.notificacao', 'bits' => Permission::VIEW | Permission::MENU],

+ 4 - 2
routes/authRoutes/parceiro_appointment.php

@@ -4,6 +4,8 @@ use App\Http\Controllers\AppointmentController;
 use Illuminate\Support\Facades\Route;
 
 Route::controller(AppointmentController::class)->prefix('parceiro/appointment')->group(function () {
-    Route::get('/',       'partnerAppointments')->middleware('permission:parceiro.agendamento,view');
-    Route::get('/{id}',   'show')               ->middleware('permission:parceiro.agendamento,view');
+    Route::get('/',                'partnerAppointments')->middleware('permission:parceiro.agendamento,view');
+    Route::get('/{id}',            'show')               ->middleware('permission:parceiro.agendamento,view');
+    Route::put('/{id}/approve',    'approveByPartner')   ->middleware('permission:parceiro.agendamento,edit');
+    Route::put('/{id}/reject',     'rejectByPartner')    ->middleware('permission:parceiro.agendamento,edit');
 });