소스 검색

feat: :sparkles: feat (agendamentos) criacao da tela de 'ver detalhes' proximos servicos

foi criada a tela para ver detalhes do agendamento no bloco dos proximos servicos, com possibilidade de cancelar e redirecionar ao chatbot

fase:dev | origin:escopo
Gustavo Zanatta 1 주 전
부모
커밋
f55324b112
3개의 변경된 파일59개의 추가작업 그리고 1개의 파일을 삭제
  1. 11 0
      app/Http/Controllers/DashboardController.php
  2. 47 1
      app/Services/DashboardService.php
  3. 1 0
      routes/authRoutes/dashboard.php

+ 11 - 0
app/Http/Controllers/DashboardController.php

@@ -26,6 +26,17 @@ class DashboardController extends Controller
     }
   }
 
+  public function scheduleClienteDetails(int $id): JsonResponse
+  {
+    try {
+      $dados = $this->service->getScheduleClienteDetails($id);
+      return $this->successResponse(payload: $dados);
+    } catch (\Exception $e) {
+      Log::error("Erro ao obter detalhes do schedule do cliente: " . $e->getMessage());
+      return $this->errorResponse(message: __("messages.error_fetching_data"), code: 500);
+    }
+  }
+
   public function dadosDashboardPrestador(): JsonResponse
   {
     try {

+ 47 - 1
app/Services/DashboardService.php

@@ -6,8 +6,10 @@ use App\Models\Address;
 use App\Models\Client;
 use App\Models\ClientFavoriteProvider;
 use App\Models\Provider;
+use App\Models\ProviderSpeciality;
 use App\Models\Review;
 use App\Models\Schedule;
+use App\Models\Speciality;
 use App\Rules\ScheduleBusinessRules;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -43,7 +45,7 @@ class DashboardService
         ->count(),
     ];
 
-    $nextSchedules = Schedule::with('address:district,address,number,source_id,source,id,address_type')
+    $nextSchedules = Schedule::with('address:district,address,complement,number,source_id,source,id,address_type')
       ->where('schedules.client_id', $cliente->id)
       ->whereIn('schedules.status', ['accepted', 'paid'])
       ->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
@@ -191,6 +193,50 @@ class DashboardService
     ];
   }
 
+  public function getScheduleClienteDetails(int $scheduleId): array
+  {
+    $user = Auth::user();
+    $cliente = Client::where('user_id', $user->id)->firstOrFail();
+
+    $schedule = Schedule::where('schedules.id', $scheduleId)
+      ->where('schedules.client_id', $cliente->id)
+      ->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
+      ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
+      ->leftJoin('custom_schedules', 'custom_schedules.schedule_id', '=', 'schedules.id')
+      ->leftJoin('media', 'media.id', '=', 'providers.profile_media_id')
+      ->select(
+        'schedules.provider_id',
+        'provider_user.name as provider_name',
+        'providers.birth_date as provider_birth_date',
+        'media.url as provider_photo',
+        'custom_schedules.offers_meal',
+      )
+      ->firstOrFail();
+
+    $allSpecialities = Speciality::where('active', true)
+      ->select('id', 'description')
+      ->orderBy('description')
+      ->get();
+
+    $providerSpecialityIds = ProviderSpeciality::where('provider_id', $schedule->provider_id)
+      ->pluck('speciality_id')
+      ->all();
+
+    $specialities = $allSpecialities->map(fn($sp) => [
+      'id'             => $sp->id,
+      'description'    => $sp->description,
+      'has_speciality' => in_array($sp->id, $providerSpecialityIds),
+    ])->values();
+
+    return [
+      'provider_name'       => $schedule->provider_name,
+      'provider_birth_date' => $schedule->provider_birth_date,
+      'provider_photo'      => $schedule->provider_photo,
+      'offers_meal'         => $schedule->offers_meal,
+      'specialities'        => $specialities,
+    ];
+  }
+
   public function dadosDashboardPrestador(): array
   {
     $user = Auth::user();

+ 1 - 0
routes/authRoutes/dashboard.php

@@ -4,4 +4,5 @@ use App\Http\Controllers\DashboardController;
 use Illuminate\Support\Facades\Route;
 
 Route::get('/dados-dashboard-cliente', [DashboardController::class, 'dadosDashboardCliente'])->middleware('permission:dashboard,view');
+Route::get('/dados-dashboard-cliente/schedule/{id}/detalhes', [DashboardController::class, 'scheduleClienteDetails'])->middleware('permission:dashboard,view');
 Route::get('/dados-dashboard-prestador', [DashboardController::class, 'dadosDashboardPrestador'])->middleware('permission:dashboard,view');