123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?php
- namespace FTTHBundle\Entity;
- use Base\AdminBundle\Traits\TenancyIdTrait;
- use Base\AdminBundle\Traits\TenancyIdTraitInterface;
- use Doctrine\ORM\Mapping as ORM;
- use ExtraDataBundle\Entity\Traits\ExtraDataWithParentTrait;
- use MapBundle\Entity\Interfaces\LocationInterface;
- use MapBundle\Entity\Traits\LocationTrait;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- use Symfony\Component\Validator\Constraints as Assert;
- /**
- * @ORM\Table
- * @ORM\Entity
- */
- class NAP implements TenancyIdTraitInterface, LocationInterface
- {
- use ExtraDataWithParentTrait;
- use ONUTrait;
- use TenancyIdTrait;
- use LocationTrait;
- // Cantidad máxima de ONU por NAP
- const MAX_NUMBER_ONU = 64;
- /**
- * @var int
- *
- * @ORM\Column(name="id", type="integer")
- * @ORM\Id
- * @ORM\GeneratedValue(strategy="AUTO")
- */
- private $id;
- /**
- * @var string
- *
- * @ORM\Column(type="string", length=255)
- *
- * @Assert\NotNull
- */
- private $name;
- /**
- * @ORM\ManyToOne(targetEntity="NAP", fetch="EXTRA_LAZY")
- */
- protected $parent;
- /**
- * @ORM\OneToMany(targetEntity="ONU", mappedBy="nap", fetch="EXTRA_LAZY")
- */
- protected $onus;
- /**
- * @var ContainerInterface
- */
- private $container;
- /**
- * @return string
- */
- public function __toString()
- {
- return (string)$this->name;
- }
- /**
- * Get id
- *
- * @return int
- */
- public function getId()
- {
- return $this->id;
- }
- /**
- * @param string $name
- *
- * @return Node
- */
- public function setName($name)
- {
- $this->name = $name;
- return $this;
- }
- /**
- * @return string
- */
- public function getName()
- {
- return $this->name;
- }
- /**
- * @return NAP
- */
- public function getParent()
- {
- return $this->parent;
- }
- /**
- * @param NAP $parent
- *
- * @return $this
- */
- public function setParent($parent = null)
- {
- $this->parent = $parent;
- return $this;
- }
- /**
- * @return ContainerInterface
- */
- public function getContainer()
- {
- return $this->container;
- }
- /**
- * @param ContainerInterface $container
- */
- public function setContainer(ContainerInterface $container)
- {
- $this->container = $container;
- }
- /**
- * @return int Retorna la cantidad de puertos libres.
- */
- public function getFreePort()
- {
- $em = $this->getContainer()->get("doctrine.orm.entity_manager");
- $query = $em->createQuery('SELECT n.id, COUNT(DISTINCT n.id) AS usedPort FROM ' . ONU::class . ' o JOIN o.nap n where n.id = ' . $this->getId());
- $onusQuery = $query->getResult();
- $freePort = $this::MAX_NUMBER_ONU;
- foreach ($onusQuery as $key => $nap) {
- if (is_numeric($nap['usedPort'])) {
- $freePort = NAP::MAX_NUMBER_ONU - $nap['usedPort'];
- }
- }
- return $freePort;
- }
- }
|