<?phpnamespace Knitink\ManagementBundle\Listener;use Knitink\ManagementBundle\Domain\LicenseModuleManager;use Knitink\ManagementBundle\Domain\LicenseUniverseManager;use Knitink\ManagementBundle\Entity\DBAL\LicenseUniverseType;use Knitink\ManagementBundle\Entity\DBAL\ModuleType;use Knitink\ManagementBundle\Event\ModuleEvent;use Symfony\Component\EventDispatcher\EventSubscriberInterface;class ModuleSubscriber implements EventSubscriberInterface{ private $licenseUniverseManager; private $licenseModuleManager; public function __construct(LicenseUniverseManager $licenseUniverseManager, LicenseModuleManager $licenseModuleManager) { $this->licenseUniverseManager = $licenseUniverseManager; $this->licenseModuleManager = $licenseModuleManager; } /** * @inheritDoc */ public static function getSubscribedEvents() { return [ ModuleEvent::CREATE_SUCCESS => 'onCreateSuccess', ModuleEvent::CREATE_COMPLETED => 'onCreateCompleted', ModuleEvent::EDIT_SUCCESS => 'onEditSuccess', ModuleEvent::EDIT_COMPLETED => 'onEditCompleted', ModuleEvent::DELETE_SUCCESS => 'onDeleteSuccess', ModuleEvent::DELETE_COMPLETED => 'onDeleteCompleted' ]; } public function onCreateSuccess(ModuleEvent $event) { $this->checkLicense($event); } public function onCreateCompleted(ModuleEvent $event) { $module = $event->getModule(); $this->updateLicense($event); // Creación de la licencia Universe (suscripciones trimestrales): Basic / if($module->getType() == ModuleType::MONITORING_WEB ){ $team = $module->getTeam(); $numberUnits = 1; $moduleDataPlayers = $team->getModuleByType(ModuleType::DATA_PLAYERS); if($moduleDataPlayers != null){ $numberUnits += $moduleDataPlayers->getNumber(); } $licenseUniverse = $this->licenseUniverseManager->searchOneBy(["team" => $team]); if($licenseUniverse == null){ $client = $team->getClient(); //$dealer = $client->getDealer(); $licenseUniverse = $this->licenseUniverseManager->create(); $licenseUniverse->setTeam($team); $licenseUniverse->setType(LicenseUniverseType::getLicense(42/*$numberUnits*/)); } $licenseUniverse->setNumberUnits($numberUnits); $this->licenseUniverseManager->persist($licenseUniverse); } } public function onEditSuccess(ModuleEvent $event) { $this->checkLicense($event); } public function onEditCompleted(ModuleEvent $event) { $this->updateLicense($event); } public function onDeleteSuccess(ModuleEvent $event) { } public function onDeleteCompleted(ModuleEvent $event) { } private function checkLicense(ModuleEvent $event) { $parameters = $event->getParameters(); $object = $event->getModule(); if($object != null){ $team = $object->getTeam(); $dealer = $team->getClient()->getDealer(); $type = $object->getType(); }else{ $team = $parameters["team"]; $dealer = $team->getClient()->getDealer(); $type = $parameters["type"]; } $license = $this->licenseModuleManager->searchOneBy(["dealer"=>$dealer, "type" => $type]); $used = $parameters["number"]; if($object != null && $alreadyLicense = $license->existModule($object)){ $used -= $object->getNumber(); $used = ($used<0)?0:$used; } if($license == null || !$license->isFree($used)){ throw new \Exception('STR_MODULE_CREATE_NO_PERMISSION'); } } private function updateLicense(ModuleEvent $event) { $object = $event->getModule(); $team = $object->getTeam(); $dealer = $team->getClient()->getDealer(); $type = $object->getType(); $license = $this->licenseModuleManager->searchOneBy(["dealer"=>$dealer, "type" => $type]); $alreadyLicense = $license->existModule($object); if(!$alreadyLicense){ $license->addModule($object); $license->addUsed($object->getNumber()); }else{ $params = $event->getParameters(); if(is_array($params) && key_exists("used", $params)){ $license->setUsed($license->getUsed() + $params["used"]); }else{ $license->updateUsed(); } } $this->licenseModuleManager->persist($license); }}