Ver Fonte

refactor: insere verificacao de limites de antecipacao antes de pagamento

Gustavo Mantovani há 9 horas atrás
pai
commit
b68b5c901c

+ 19 - 2
app/Services/Pagarme/PagarmeAnticipationService.php

@@ -17,7 +17,10 @@ class PagarmeAnticipationService
 {
     use SendsPagarmeRequests;
 
-    public function createBulkAnticipation(Payment $payment): ?BulkAnticipationResponseData
+    public function createBulkAnticipation(
+        Payment $payment,
+        ?BulkAnticipationLimitsResponseData $limits = null,
+    ): ?BulkAnticipationResponseData
     {
         $provider = $payment->provider()->first();
 
@@ -47,7 +50,7 @@ class PagarmeAnticipationService
 
         $paymentDate = $this->getAnticipationPaymentDate();
 
-        $limits = $this->fetchAnticipationLimits($recipientId, $paymentDate);
+        $limits ??= $this->fetchAnticipationLimits($recipientId, $paymentDate);
 
         if ($limits && $limits->minimum->amount > 0 && $requestedAmount < $limits->minimum->amount) {
             Log::channel('pagarme')->warning('Antecipacao ignorada: valor abaixo do minimo do recebedor.', [
@@ -96,6 +99,20 @@ class PagarmeAnticipationService
         }
     }
 
+    public function fetchAnticipationLimitsForPayment(Payment $payment): ?BulkAnticipationLimitsResponseData
+    {
+        $provider = $payment->provider()->first();
+
+        if (! $provider || empty($provider->recipient_id)) {
+            return null;
+        }
+
+        return $this->fetchAnticipationLimits(
+            recipientId: $provider->recipient_id,
+            paymentDate: $this->getAnticipationPaymentDate(),
+        );
+    }
+
     private function fetchAnticipationLimits(string $recipientId, string $paymentDate): ?BulkAnticipationLimitsResponseData
     {
         try {

+ 3 - 1
app/Services/Pagarme/PagarmePaymentService.php

@@ -106,7 +106,9 @@ class PagarmePaymentService
                 options:    $orderOptions,
             );
 
-            $this->anticipationService->createBulkAnticipation($payment);
+            $anticipationLimits = $this->anticipationService->fetchAnticipationLimitsForPayment($payment);
+
+            $this->anticipationService->createBulkAnticipation($payment, $anticipationLimits);
 
             return $result;
         }