Parcourir la source

feat: nao exibe providers que nao tem dados bancarios para os clientes pois esses nao tem vinculo no pagarme pro split de pagamento

Gustavo Mantovani il y a 2 semaines
Parent
commit
d819c6e6d0

+ 8 - 0
app/Models/Provider.php

@@ -214,6 +214,14 @@ class Provider extends Model
 
   //
 
+  public function scopeVisibleToCustomers($query)
+  {
+      return $query
+          ->whereNotNull('providers.recipient_default_bank_account')
+          ->whereRaw("providers.recipient_default_bank_account::text <> '{}'")
+          ->whereRaw("providers.recipient_default_bank_account::text <> '[]'");
+  }
+
   public function ensureGatewayCode(): string
   {
       if (! empty($this->recipient_code)) {

+ 14 - 0
app/Rules/ScheduleBusinessRules.php

@@ -18,6 +18,20 @@ class ScheduleBusinessRules
 
     private const EXCLUDED_STATUSES = ['cancelled', 'rejected'];
 
+    public static function validateProviderVisibleToCustomers($providerId): bool
+    {
+        $provider = Provider::query()
+            ->visibleToCustomers()
+            ->where('providers.id', $providerId)
+            ->exists();
+
+        if (! $provider) {
+            throw new \Exception('Prestador indisponível para agendamento.');
+        }
+
+        return true;
+    }
+
     /**
      * Valida se o prestador pode ter mais um agendamento com o cliente na semana
      * Limite: 2 agendamentos por semana (domingo a sábado)

+ 3 - 0
app/Services/ClientFavoriteProviderService.php

@@ -12,6 +12,9 @@ class ClientFavoriteProviderService
     {
         return ClientFavoriteProvider::where('client_favorite_providers.client_id', $clientId)
             ->leftJoin('providers', 'providers.id', '=', 'client_favorite_providers.provider_id')
+            ->whereNotNull('providers.recipient_default_bank_account')
+            ->whereRaw("providers.recipient_default_bank_account::text <> '{}'")
+            ->whereRaw("providers.recipient_default_bank_account::text <> '[]'")
             ->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')

+ 7 - 0
app/Services/DashboardService.php

@@ -149,6 +149,9 @@ class DashboardService
 
         $favoriteProviders = ClientFavoriteProvider::where('client_favorite_providers.client_id', $cliente->id)
             ->leftJoin('providers', 'providers.id', '=', 'client_favorite_providers.provider_id')
+            ->whereNotNull('providers.recipient_default_bank_account')
+            ->whereRaw("providers.recipient_default_bank_account::text <> '{}'")
+            ->whereRaw("providers.recipient_default_bank_account::text <> '[]'")
             ->leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
             ->leftJoinSub(Address::preferredForProvider(), 'provider_address', fn($join) =>
                 $join->on('provider_address.source_id', '=', 'providers.id')
@@ -188,6 +191,7 @@ class DashboardService
         );
 
         $providersClose = Provider::leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
+            ->visibleToCustomers()
             ->leftJoin(DB::raw(
                 "(SELECT DISTINCT ON (source_id) * FROM addresses
                     WHERE source = 'provider'
@@ -297,6 +301,9 @@ class DashboardService
         $schedulesProposals = ScheduleProposal::query()
             ->leftJoin('schedules', 'schedule_proposals.schedule_id', '=', 'schedules.id')
             ->leftJoin('providers', 'schedule_proposals.provider_id', '=', 'providers.id')
+            ->whereNotNull('providers.recipient_default_bank_account')
+            ->whereRaw("providers.recipient_default_bank_account::text <> '{}'")
+            ->whereRaw("providers.recipient_default_bank_account::text <> '[]'")
             ->leftJoin('users', 'providers.user_id', '=', 'users.id')
             ->leftJoin(
                 DB::raw(

+ 2 - 0
app/Services/ScheduleService.php

@@ -471,6 +471,8 @@ class ScheduleService
         $date_ymd  = $date->format('Y-m-d');
         $period    = $startTime < '13:00:00' ? 'morning' : 'afternoon';
 
+        ScheduleBusinessRules::validateProviderVisibleToCustomers($provider_id);
+
         // bloqueio 2 schedules por semana para o mesmo client e provider
 
         ScheduleBusinessRules::validateWeeklyScheduleLimit(

+ 1 - 0
app/Services/SearchService.php

@@ -35,6 +35,7 @@ class SearchService
         );
 
         $baseQuery = Provider::leftJoin('users as provider_user', 'provider_user.id', '=', 'providers.user_id')
+            ->visibleToCustomers()
             ->leftJoin(DB::raw("
         (
           SELECT DISTINCT ON (source_id)