src/Subscriber/Balance/Webmaster/IncomeProvisionSubscriber.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Balance\Webmaster;
  3. use App\Dictionary\BalanceType;
  4. use App\Event\Balance\BalanceAmateurProvisionCreatedEvent;
  5. use App\Event\Balance\BalanceWebmasterProvisionCreatedEvent;
  6. use App\Event\Payment\PaymentReleasedEvent;
  7. use App\Lib\Payment\PayMethod\AdminBonusMethod;
  8. use App\Service\Webmaster\BalanceWebmasterService;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. /*
  11.  * Provisionen für Einnahmen
  12.  */
  13. class IncomeProvisionSubscriber implements EventSubscriberInterface
  14. {
  15.     protected BalanceWebmasterService $balanceWebmasterService;
  16.     /**
  17.      * IncomeProvisionSubscriber constructor.
  18.      */
  19.     public function __construct(BalanceWebmasterService $balanceWebmasterService)
  20.     {
  21.         $this->balanceWebmasterService $balanceWebmasterService;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             BalanceWebmasterProvisionCreatedEvent::class => [
  27.                 ['createProvisionOnBalanceWebmasterProvision'0],
  28.             ],
  29.             BalanceAmateurProvisionCreatedEvent::class => [
  30.                 ['createProvisionOnBalanceAmateurProvision'0],
  31.             ],
  32.             PaymentReleasedEvent::class => [
  33.                 ['onOnHoldPaymentReleased'0],
  34.             ],
  35.         ];
  36.     }
  37.     protected function getService(): BalanceWebmasterService
  38.     {
  39.         return $this->balanceWebmasterService;
  40.     }
  41.     /**
  42.      * @throws \Doctrine\ORM\ORMException
  43.      * @throws \Doctrine\ORM\OptimisticLockException
  44.      */
  45.     public function createProvisionOnBalanceWebmasterProvision(BalanceWebmasterProvisionCreatedEvent $event)
  46.     {
  47.         $income $event->getBalance();
  48.         if (BalanceType::INCOME !== $income->getType()) {
  49.             return;
  50.         }
  51.         $originWebmaster $income->getWebmaster();
  52.         $advertisedBy $originWebmaster->getAccount()->getAdvertisedBy();
  53.         // webmaster. who received a provision (origin), was not advertised by -another- webmaster
  54.         if (!$advertisedBy) {
  55.             return;
  56.         }
  57.         $service $this->getService();
  58.         $provision $service->createProvisionForWebmasterByBalanceWebmaster($advertisedBy$income);
  59.         $service->storeEntity($provision);
  60.     }
  61.     /**
  62.      * @throws \Doctrine\ORM\ORMException
  63.      * @throws \Doctrine\ORM\OptimisticLockException
  64.      */
  65.     public function createProvisionOnBalanceAmateurProvision(BalanceAmateurProvisionCreatedEvent $event)
  66.     {
  67.         $income $event->getBalance();
  68.         if (BalanceType::INCOME !== $income->getType()) {
  69.             return;
  70.         }
  71.         $amateur $income->getMember();
  72.         $webmaster $amateur->getAccount()->getAdvertisedBy();
  73.         if (!$webmaster) {
  74.             return;
  75.         }
  76.         $service $this->getService();
  77.         $provision $service->createProvisionForWebmasterByBalanceAmateur($webmaster$income);
  78.         $service->storeEntity($provision);
  79.     }
  80.     /**
  81.      * @throws \Doctrine\ORM\ORMException
  82.      * @throws \Doctrine\ORM\OptimisticLockException
  83.      */
  84.     public function onOnHoldPaymentReleased(PaymentReleasedEvent $event)
  85.     {
  86.         $payment $event->getPayment();
  87.         if ($payment->getOnHold() || AdminBonusMethod::NAME == $payment->getMethod()) {
  88.             return;
  89.         }
  90.         if ($webmaster $payment->getAccount()->getAdvertisedBy()) {
  91.             $service $this->getService();
  92.             $income $service->createProvisionForWebmasterByPayment($webmaster$payment);
  93.             $service->storeBalanceWebmaster($income);
  94.         }
  95.     }
  96. }