소스 검색

fix: :bug: correcoes layout dashboard cliente

corrigir layout dos blocos da dashboard do cliente com ajustes de informações a serem exibidas

fase:dev | origin: melhoria-interna
Gustavo Zanatta 3 주 전
부모
커밋
99e890a914
2개의 변경된 파일63개의 추가작업 그리고 39개의 파일을 삭제
  1. 22 1
      app/Models/Provider.php
  2. 41 38
      app/Services/DashboardService.php

+ 22 - 1
app/Models/Provider.php

@@ -5,6 +5,8 @@ namespace App\Models;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 use Illuminate\Database\Eloquent\SoftDeletes;
 
 /**
@@ -82,7 +84,26 @@ class Provider extends Model
     }
 
     /**
-     * @return \Illuminate\Database\Eloquent\Relations\HasMany
+     * @return HasMany
+     */
+    public function addresses(): HasMany
+    {
+        return $this->hasMany(Address::class, 'source_id')
+            ->where('source', 'provider');
+    }
+
+    /**
+     * @return HasOne
+     */
+    public function primaryAddress(): HasOne
+    {
+        return $this->hasOne(Address::class, 'source_id')
+            ->where('source', 'provider')
+            ->where('is_primary', true);
+    }
+
+    /**
+     * @return HasMany
      */
     public function blockedClients()
     {

+ 41 - 38
app/Services/DashboardService.php

@@ -64,16 +64,23 @@ class DashboardService
         'custom_schedules.address_type as custom_address_type',
       )
       ->orderBy('schedules.date', 'asc')
+      ->limit(5)
       ->get();
 
     $lastDoneSchedules = Schedule::where('schedules.client_id', $cliente->id)
       ->where('schedules.status', 'finished')
       ->leftJoin('providers', 'providers.id', '=', 'schedules.provider_id')
       ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
+      ->leftJoin('addresses as provider_address', function ($join) {
+        $join->on('provider_address.source_id', '=', 'providers.id')
+          ->where('provider_address.source', 'provider')
+          ->orderBy('provider_address.is_primary', 'desc');
+      })
       ->select(
         'schedules.id',
         'schedules.provider_id',
         'provider_user.name as provider_name',
+        'provider_address.district as provider_district',
       )
       ->orderBy('schedules.date', 'desc')
       ->limit(5)
@@ -82,6 +89,11 @@ class DashboardService
     $favoriteProviders = ClientFavoriteProvider::where('client_favorite_providers.client_id', $cliente->id)
       ->leftJoin('providers', 'providers.id', '=', 'client_favorite_providers.provider_id')
       ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
+      ->leftJoin('addresses as provider_address', function ($join) {
+        $join->on('provider_address.source_id', '=', 'providers.id')
+          ->where('provider_address.source', 'provider')
+          ->orderBy('provider_address.is_primary', 'desc');
+      })
       ->select(
         'providers.id as provider_id',
         'provider_user.name as provider_name',
@@ -90,35 +102,44 @@ class DashboardService
         'providers.daily_price_6h',
         'providers.daily_price_4h',
         'providers.daily_price_2h',
+        'provider_address.district as provider_district',
       )
+      ->orderBy('client_favorite_providers.created_at', 'desc')
+      ->limit(5)
       ->get();
 
     $blockedProviderIds       = ScheduleBusinessRules::getBlockedProviderIdsForClient($cliente->id);
     $providersWithWorkingDays = ScheduleBusinessRules::getProviderIdsWithWorkingDays();
 
+    $clientPrimaryAddress = Address::where('source', 'client')
+      ->where('source_id', $cliente->id)
+      ->where('is_primary', true)
+      ->first();
+
     $providersClose = Provider::leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
       ->leftJoin('addresses as provider_address', function ($join) {
         $join->on('provider_address.source_id', '=', 'providers.id')
-          ->where('provider_address.source', 'provider');
-      })
-      ->leftJoin('addresses as client_address', function ($join) use ($cliente) {
-        $join->where('client_address.source_id', $cliente->id)
-          ->where('client_address.source', 'client');
+          ->where('provider_address.source', 'provider')
+          ->whereNull('provider_address.deleted_at')
+          ->orderBy('provider_address.is_primary', 'desc');
       })
-      ->whereColumn('provider_address.city_id', '=', 'client_address.city_id')
+      ->whereNotNull('provider_address.id')
+      ->where('provider_address.city_id', $clientPrimaryAddress?->city_id)
       ->whereNotIn('providers.id', $blockedProviderIds)
       ->whereIn('providers.id', $providersWithWorkingDays)
-      ->where(function ($query) {
-        $query->whereNotNull('providers.daily_price_8h')
-          ->orWhereNotNull('providers.daily_price_6h')
-          ->orWhereNotNull('providers.daily_price_4h')
-          ->orWhereNotNull('providers.daily_price_2h');
-      })
+      ->whereNull('providers.deleted_at')
+
       ->select(
         'providers.id as provider_id',
         'provider_user.name as provider_name',
         'provider_address.district',
+        'provider_address.id as address_id',
         'providers.average_rating',
+        'providers.total_services',
+        'providers.daily_price_8h',
+        'providers.daily_price_6h',
+        'providers.daily_price_4h',
+        'providers.daily_price_2h',
         DB::raw("(
           SELECT COUNT(*)
           FROM reviews
@@ -126,11 +147,6 @@ class DashboardService
           WHERE reviews.origin = 'provider'
           AND schedules.provider_id = providers.id
         ) as total_reviews"),
-        'providers.total_services',
-        'providers.daily_price_8h',
-        'providers.daily_price_6h',
-        'providers.daily_price_4h',
-        'providers.daily_price_2h',
       )
       ->get();
 
@@ -236,31 +252,18 @@ class DashboardService
         'schedules.period_type',
         'schedules.schedule_type',
         'schedules.address_id',
-        'custom_schedules.address_type'
+        'custom_schedules.address_type',
+        DB::raw("CASE
+          WHEN schedules.period_type = '2' THEN {$provider->daily_price_2h}
+          WHEN schedules.period_type = '4' THEN {$provider->daily_price_4h}
+          WHEN schedules.period_type = '6' THEN {$provider->daily_price_6h}
+          WHEN schedules.period_type = '8' THEN {$provider->daily_price_8h}
+          ELSE 0
+        END as total_amount"),
       )
       ->orderBy('schedules.date', 'asc')
       ->get();
 
-    $opportunities = $opportunities->map(function ($item) use ($provider) {
-      $price = 0;
-      switch ($item->period_type) {
-        case 2:
-          $price = $provider->daily_price_2h;
-          break;
-        case 4:
-          $price = $provider->daily_price_4h;
-          break;
-        case 6:
-          $price = $provider->daily_price_6h;
-          break;
-        case 8:
-          $price = $provider->daily_price_8h;
-          break;
-      }
-      $item->total_amount = $price;
-      return $item;
-    });
-
     return [
       'headerBar' => $headerBar,
       'summaryInfos' => $summaryInfos,