src/Subscriber/Payment/PaymentReleasedSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Payment;
  3. use App\Event\Payment\PaymentReleasedEvent;
  4. use App\Event\User\PhoneNumberConfirmedEvent;
  5. use App\Service\Payment\PaymentService;
  6. use App\Service\User\BalanceMemberService;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. class PaymentReleasedSubscriber implements EventSubscriberInterface
  9. {
  10.     protected BalanceMemberService $service;
  11.     protected PaymentService $paymentService;
  12.     public function __construct(BalanceMemberService $balanceMemberServicePaymentService $paymentService)
  13.     {
  14.         $this->service $balanceMemberService;
  15.         $this->paymentService $paymentService;
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             PaymentReleasedEvent::class => [
  21.                 ['onOnHoldPaymentReleased'0],
  22.             ],
  23.             PhoneNumberConfirmedEvent::class => [
  24.                 ['releaseWhenPhoneNumberConfirmed'0],
  25.             ],
  26.         ];
  27.     }
  28.     /**
  29.      * @throws \Doctrine\ORM\ORMException
  30.      * @throws \Doctrine\ORM\OptimisticLockException
  31.      */
  32.     public function onOnHoldPaymentReleased(PaymentReleasedEvent $event)
  33.     {
  34.         $payment $event->getPayment();
  35.         if ($payment->getOnHold()) {
  36.             return;
  37.         }
  38.         $member $payment->getAccount()->getMember();
  39.         $balance $this->service->createIncomeForMember($member);
  40.         $balance->setPayment($payment);
  41.         if ($process $payment->getPaymentProcess()) {
  42.             $coins $process->getTariffObject()->getTotalCoins();
  43.         } else {
  44.             $coins $payment->getAmount() * 100;
  45.             $details $payment->getDetails(true);
  46.             if (is_array($details) && isset($details['overrideCoins'])) {
  47.                 $coins = (int) $details['overrideCoins'];
  48.             }
  49.         }
  50.         $balance->setAmount($coins);
  51.         $this->service->storeBalanceMember($balance);
  52.     }
  53.     public function releaseWhenPhoneNumberConfirmed(PhoneNumberConfirmedEvent $event)
  54.     {
  55.         $member $event->getPhoneNumber()->getMember();
  56.         $payments $this->paymentService->findOnHoldPayments($member->getAccount());
  57.         foreach ($payments as $payment) {
  58.             $this->paymentService->releaseOnHoldPayment($payment);
  59.         }
  60.     }
  61. }