src/Subscriber/Balance/Webmaster/ChargebackProvisionSubscriber.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Balance\Webmaster;
  3. use App\Dictionary\BalanceType;
  4. use App\Dictionary\PaymentType;
  5. use App\Event\Balance\BalanceAmateurProvisionCreatedEvent;
  6. use App\Event\Payment\PaymentCreatedEvent;
  7. use App\Service\Webmaster\BalanceWebmasterService;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class ChargebackProvisionSubscriber implements EventSubscriberInterface
  10. {
  11.     protected BalanceWebmasterService $balanceWebmasterService;
  12.     /**
  13.      * ChargebackProvisionSubscriber constructor.
  14.      */
  15.     public function __construct(BalanceWebmasterService $balanceWebmasterService)
  16.     {
  17.         $this->balanceWebmasterService $balanceWebmasterService;
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             PaymentCreatedEvent::class => [
  23.                 ['revokeWebmasterProvision'0],
  24.             ],
  25.             BalanceAmateurProvisionCreatedEvent::class => [
  26.                 ['revokeAdvertisedWebmasterProvisionOnChargeback'0],
  27.             ],
  28.         ];
  29.     }
  30.     protected function getService(): BalanceWebmasterService
  31.     {
  32.         return $this->balanceWebmasterService;
  33.     }
  34.     /**
  35.      * @throws \Doctrine\ORM\ORMException
  36.      * @throws \Doctrine\ORM\OptimisticLockException
  37.      */
  38.     public function revokeWebmasterProvision(PaymentCreatedEvent $event)
  39.     {
  40.         $chargeback $event->getPayment();
  41.         if (PaymentType::CHARGEBACK !== $chargeback->getType()) {
  42.             return;
  43.         }
  44.         // account has not been advertised by a webmaster
  45.         $advertiser $chargeback->getAccount()->getAdvertisedBy();
  46.         if (!$advertiser) {
  47.             return;
  48.         }
  49.         $service $this->getService();
  50.         $payment $event->getPayment();
  51.         $balance $service->createProvisionByWebmaster($advertiserBalanceType::CHARGEBACK);
  52.         $balance->setPayment($payment);
  53.         $balance->setAmount($payment->getAmount() * $advertiser->getProvisionPercent() / 100);
  54.         $service->storeBalanceWebmaster($balance);
  55.     }
  56.     /**
  57.      * @throws \Doctrine\ORM\ORMException
  58.      * @throws \Doctrine\ORM\OptimisticLockException
  59.      */
  60.     public function revokeAdvertisedWebmasterProvisionOnChargeback(BalanceAmateurProvisionCreatedEvent $event)
  61.     {
  62.         $provisionChargeback $event->getBalance();
  63.         if (BalanceType::CHARGEBACK !== $provisionChargeback->getType()) {
  64.             return;
  65.         }
  66.         $amateur $provisionChargeback->getMember()->getAccount();
  67.         if (!$amateur->getAdvertisedBy()) {
  68.             return;
  69.         }
  70.         $service $this->getService();
  71.         $advertiser $amateur->getAdvertisedBy();
  72.         $chargeback $service->createProvisionByWebmaster($advertiserBalanceType::CHARGEBACK);
  73.         $chargeback->getBalanceDetail()->setSeller($provisionChargeback->getMember());
  74.         $amount $provisionChargeback->getAmount() * $advertiser->getAmateurProvisionPercent() / 100;
  75.         $chargeback->setAmount($amount);
  76.         if ($provisionChargeback->getPayment()) {
  77.             $chargeback->setPayment($provisionChargeback->getPayment());
  78.         }
  79.         $service->storeEntity($chargeback);
  80.     }
  81. }