src/Knitink/ManagementBundle/Listener/ModuleSubscriber.php line 74

Open in your IDE?
  1. <?php
  2. namespace Knitink\ManagementBundle\Listener;
  3. use Knitink\ManagementBundle\Domain\LicenseModuleManager;
  4. use Knitink\ManagementBundle\Domain\LicenseUniverseManager;
  5. use Knitink\ManagementBundle\Entity\DBAL\LicenseUniverseType;
  6. use Knitink\ManagementBundle\Entity\DBAL\ModuleType;
  7. use Knitink\ManagementBundle\Event\ModuleEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class ModuleSubscriber implements EventSubscriberInterface
  10. {
  11.     private $licenseUniverseManager;
  12.     private $licenseModuleManager;
  13.     public function __construct(LicenseUniverseManager $licenseUniverseManagerLicenseModuleManager $licenseModuleManager)
  14.     {
  15.         $this->licenseUniverseManager $licenseUniverseManager;
  16.         $this->licenseModuleManager $licenseModuleManager;
  17.     }
  18.     /**
  19.      * @inheritDoc
  20.      */
  21.     public static function getSubscribedEvents()
  22.     {
  23.         return [
  24.             ModuleEvent::CREATE_SUCCESS => 'onCreateSuccess',
  25.             ModuleEvent::CREATE_COMPLETED => 'onCreateCompleted',
  26.             ModuleEvent::EDIT_SUCCESS => 'onEditSuccess',
  27.             ModuleEvent::EDIT_COMPLETED => 'onEditCompleted',
  28.             ModuleEvent::DELETE_SUCCESS => 'onDeleteSuccess',
  29.             ModuleEvent::DELETE_COMPLETED => 'onDeleteCompleted'
  30.         ];
  31.     }
  32.     public function onCreateSuccess(ModuleEvent $event)
  33.     {
  34.         $this->checkLicense($event);
  35.     }
  36.     public function onCreateCompleted(ModuleEvent $event)
  37.     {
  38.         $module $event->getModule();
  39.         $this->updateLicense($event);
  40.         // Creación de la licencia Universe (suscripciones trimestrales): Basic /
  41.         if($module->getType() == ModuleType::MONITORING_WEB ){
  42.             $team $module->getTeam();
  43.             $numberUnits 1;
  44.             $moduleDataPlayers $team->getModuleByType(ModuleType::DATA_PLAYERS);
  45.             if($moduleDataPlayers != null){
  46.                 $numberUnits += $moduleDataPlayers->getNumber();
  47.             }
  48.             $licenseUniverse $this->licenseUniverseManager->searchOneBy(["team" => $team]);
  49.             if($licenseUniverse == null){
  50.                 $client $team->getClient();
  51.                 //$dealer = $client->getDealer();
  52.                 $licenseUniverse $this->licenseUniverseManager->create();
  53.                 $licenseUniverse->setTeam($team);
  54.                 $licenseUniverse->setType(LicenseUniverseType::getLicense(42/*$numberUnits*/));
  55.             }
  56.             $licenseUniverse->setNumberUnits($numberUnits);
  57.             $this->licenseUniverseManager->persist($licenseUniverse);
  58.         }
  59.     }
  60.     public function onEditSuccess(ModuleEvent $event)
  61.     {
  62.         $this->checkLicense($event);
  63.     }
  64.     public function onEditCompleted(ModuleEvent $event)
  65.     {
  66.         $this->updateLicense($event);
  67.     }
  68.     public function onDeleteSuccess(ModuleEvent $event)
  69.     {
  70.     }
  71.     public function onDeleteCompleted(ModuleEvent $event)
  72.     {
  73.     }
  74.     private function checkLicense(ModuleEvent $event)
  75.     {
  76.         $parameters $event->getParameters();
  77.         $object $event->getModule();
  78.         if($object != null){
  79.             $team $object->getTeam();
  80.             $dealer $team->getClient()->getDealer();
  81.             $type $object->getType();
  82.         }else{
  83.             $team $parameters["team"];
  84.             $dealer $team->getClient()->getDealer();
  85.             $type $parameters["type"];
  86.         }
  87.         $license $this->licenseModuleManager->searchOneBy(["dealer"=>$dealer"type" => $type]);
  88.         $used $parameters["number"];
  89.         if($object != null && $alreadyLicense $license->existModule($object)){
  90.             $used -= $object->getNumber();
  91.             $used = ($used<0)?0:$used;
  92.         }
  93.         if($license == null || !$license->isFree($used)){
  94.             throw new \Exception('STR_MODULE_CREATE_NO_PERMISSION');
  95.         }
  96.     }
  97.     private function updateLicense(ModuleEvent $event)
  98.     {
  99.         $object $event->getModule();
  100.         $team $object->getTeam();
  101.         $dealer $team->getClient()->getDealer();
  102.         $type $object->getType();
  103.         $license $this->licenseModuleManager->searchOneBy(["dealer"=>$dealer"type" => $type]);
  104.         $alreadyLicense $license->existModule($object);
  105.         if(!$alreadyLicense){
  106.             $license->addModule($object);
  107.             $license->addUsed($object->getNumber());
  108.         }else{
  109.             $params $event->getParameters();
  110.             if(is_array($params) && key_exists("used"$params)){
  111.                 $license->setUsed($license->getUsed() + $params["used"]);
  112.             }else{
  113.                 $license->updateUsed();
  114.             }
  115.         }
  116.         $this->licenseModuleManager->persist($license);
  117.     }
  118. }