src/AppBundle/Entity/BloqueBanner.php line 17

  1. <?php
  2. namespace AppBundle\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Symfony\Component\Validator\Constraints as Assert;
  6. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  7. use Doctrine\Common\Collections\Criteria;
  8. /**
  9.  * Banner
  10.  *
  11.  * @ORM\Table(name="bloque_banner")
  12.  * @ORM\Entity(repositoryClass="AppBundle\Repository\BloqueBannerRepository")
  13.  */
  14. class BloqueBanner
  15. {
  16.     const PRINCIPAL         'MAINBAN';
  17.     const SECUNDARIO_X1     'SECUNX1';
  18.     const CATALOGO          'CATALOG';
  19.     const PRODUCTOS_NUEVOS  'NEWPROD';
  20.     const SECUNDARIO_X2     'SECUNX2';
  21.     const SECUNDARIO_2_1    'SECU2X1';
  22.     const SECUNDARIO_1_2    'SECU1X2';
  23.     const SECUNDARIO_X3     'SECUNX3';
  24.     /**
  25.      * @var int
  26.      *
  27.      * @ORM\Column(name="id", type="integer")
  28.      * @ORM\Id
  29.      * @ORM\GeneratedValue(strategy="AUTO")
  30.      */
  31.     private $id;
  32.     /**
  33.      * @var string
  34.      *
  35.      * @ORM\Column(name="nombre", type="string", length=255)
  36.      * @Assert\NotNull()
  37.      */
  38.     private $nombre;
  39.     /**
  40.      * @var string
  41.      *
  42.      * @ORM\Column(name="tipo", type="string", length=7, options={"fixed" = true})
  43.      * @Assert\Choice(callback = "getTipos")
  44.      * @Assert\NotNull(message = "Elija un tipo de banner")
  45.      */
  46.     private $tipo;
  47.     /**
  48.      * @var \DateTime
  49.      *
  50.      * @ORM\Column(name="fecha_desde", type="datetime", nullable=true)
  51.      */
  52.     private $fechaDesde;
  53.     /**
  54.      * @var \DateTime
  55.      *
  56.      * @ORM\Column(name="fecha_hasta", type="datetime", nullable=true)
  57.      */
  58.     private $fechaHasta;
  59.     /**
  60.      * @var bool
  61.      *
  62.      * @ORM\Column(name="activo", type="boolean")
  63.      * @Assert\NotNull()
  64.      */
  65.     private $activo false;
  66.     /**
  67.      * @var int
  68.      *
  69.      * @ORM\Column(name="orden", type="integer", nullable=true)
  70.      */
  71.     private $orden;
  72.     /**
  73.      * Un bloque tiene muchos banners.
  74.      * @ORM\OneToMany(targetEntity="Banner", mappedBy="bloque", cascade={"all"}, orphanRemoval=true)
  75.      * @ORM\OrderBy({"orden" = "ASC"})
  76.      * @Assert\Valid
  77.      */
  78.     protected $banners;
  79.     /**
  80.      * Muchos bloques tienen un Pais.
  81.      * @ORM\ManyToOne(targetEntity="Pais")
  82.      * @ORM\JoinColumn(name="pais_id", referencedColumnName="id")
  83.      */
  84.     private $pais;
  85.     public function __construct() {
  86.         $this->banners = new ArrayCollection();
  87.     }
  88.     /**
  89.      * Get id
  90.      *
  91.      * @return int
  92.      */
  93.     public function getId()
  94.     {
  95.         return $this->id;
  96.     }
  97.     /**
  98.      * Set nombre
  99.      *
  100.      * @param string $nombre
  101.      *
  102.      * @return Banner
  103.      */
  104.     public function setNombre($nombre)
  105.     {
  106.         $this->nombre $nombre;
  107.         return $this;
  108.     }
  109.     /**
  110.      * Get nombre
  111.      *
  112.      * @return string
  113.      */
  114.     public function getNombre()
  115.     {
  116.         return $this->nombre;
  117.     }
  118.     /**
  119.      * Set fechaDesde
  120.      *
  121.      * @param \DateTime $fechaDesde
  122.      *
  123.      * @return Banner
  124.      */
  125.     public function setFechaDesde($fechaDesde)
  126.     {
  127.         $this->fechaDesde $fechaDesde;
  128.         return $this;
  129.     }
  130.     /**
  131.      * Get fechaDesde
  132.      *
  133.      * @return \DateTime
  134.      */
  135.     public function getFechaDesde()
  136.     {
  137.         return $this->fechaDesde;
  138.     }
  139.     /**
  140.      * Set fechaHasta
  141.      *
  142.      * @param \DateTime $fechaHasta
  143.      *
  144.      * @return Banner
  145.      */
  146.     public function setFechaHasta($fechaHasta)
  147.     {
  148.         $this->fechaHasta $fechaHasta;
  149.         return $this;
  150.     }
  151.     /**
  152.      * Get fechaHasta
  153.      *
  154.      * @return \DateTime
  155.      */
  156.     public function getFechaHasta()
  157.     {
  158.         return $this->fechaHasta;
  159.     }
  160.     /**
  161.      * Set activo
  162.      *
  163.      * @param boolean $activo
  164.      *
  165.      * @return Banner
  166.      */
  167.     public function setActivo($activo)
  168.     {
  169.         $this->activo $activo;
  170.         return $this;
  171.     }
  172.     /**
  173.      * Get activo
  174.      *
  175.      * @return bool
  176.      */
  177.     public function getActivo()
  178.     {
  179.         return $this->activo;
  180.     }
  181.     /**
  182.      * Set tipo
  183.      *
  184.      * @param string $tipo
  185.      *
  186.      * @return Banner
  187.      */
  188.     public function setTipo($tipo)
  189.     {
  190.         $this->tipo $tipo;
  191.         return $this;
  192.     }
  193.     /**
  194.      * Get tipo
  195.      *
  196.      * @return string
  197.      */
  198.     public function getTipo()
  199.     {
  200.         return $this->tipo;
  201.     }
  202.     /**
  203.      * Set orden
  204.      *
  205.      * @param integer $orden
  206.      *
  207.      * @return Banner
  208.      */
  209.     public function setOrden($orden)
  210.     {
  211.         $this->orden $orden;
  212.         return $this;
  213.     }
  214.     /**
  215.      * Get orden
  216.      *
  217.      * @return integer
  218.      */
  219.     public function getOrden()
  220.     {
  221.         return $this->orden;
  222.     }
  223.     /**
  224.      * Set Pais
  225.      *
  226.      * @param integer $pais
  227.      *
  228.      * @return String
  229.      */
  230.     public function setPais($pais)
  231.     {
  232.         $this->pais $pais;
  233.         return $this;
  234.     }
  235.     /**
  236.      * Get Pais
  237.      *
  238.      * @return integer
  239.      */
  240.     public function getPais()
  241.     {
  242.         return $this->pais;
  243.     }
  244.     public static function getTipos(){
  245.         return array(
  246.             'Banner X1'                  => self::SECUNDARIO_X1,
  247.             'Catálogo de productos'      => self::CATALOGO,
  248.             'Productos Nuevos'           => self::PRODUCTOS_NUEVOS,
  249.             'Banner X2 Simetrico'        => self::SECUNDARIO_X2,
  250.             'Banner X2 Asimetrico ( 2/3 | 1/3 )' => self::SECUNDARIO_2_1,
  251.             'Banner X2 Asimetrico ( 1/3 | 2/3 )' => self::SECUNDARIO_1_2,
  252.             'Banner X3'                  => self::SECUNDARIO_X3,
  253.         );
  254.     }
  255.     public function getTipoDescripcion(){
  256.         foreach ($this->getTipos() as $descripcion => $tipo) {
  257.             if ($this->getTipo() == $tipo) {
  258.                 return $descripcion;
  259.             }
  260.         }
  261.     }
  262.     /**
  263.      * Add banner
  264.      *
  265.      * @param \AppBundle\Entity\Banner $banner
  266.      *
  267.      * @return BloqueBanner
  268.      */
  269.     public function addBanner(\AppBundle\Entity\Banner $banner)
  270.     {
  271.         if($banner->hasImageSet()){
  272.             $this->banners->add($banner);
  273.             $banner->setBloque($this);
  274.         }
  275.         return $this;
  276.     }
  277.     /**
  278.      * Remove banner
  279.      *
  280.      * @param \AppBundle\Entity\Banner $banner
  281.      */
  282.     public function removeBanner(\AppBundle\Entity\Banner $banner)
  283.     {
  284.         $this->banners->removeElement($banner);
  285.     }
  286.     /**
  287.      * Get banners
  288.      *
  289.      * @return \Doctrine\Common\Collections\Collection
  290.      */
  291.     public function getBanners()
  292.     {
  293.         $criteria Criteria::create()->orderBy(array("orden" => Criteria::ASC));
  294.         return $this->banners->matching($criteria);
  295.     }
  296.     /**
  297.      * Get banner
  298.      *
  299.      * @return \AppBundle\Entity\Banner
  300.      */
  301.     public function getBannerByOrden($orden)
  302.     {
  303.         foreach ($this->banners as $banner) {
  304.             if ($orden == $banner->getOrden()) {
  305.                 return $banner;
  306.             }
  307.         }
  308.     }
  309.     public function hasVariableBanners(){
  310.         return $this->getTipo() == self::PRINCIPAL;
  311.     }
  312.     public function estaVigente(){
  313.        $ahora = new \DateTime();
  314.         return $this->getFechaDesde() < $ahora
  315.             && $this->getFechaHasta() > $ahora;
  316.     }
  317.     /**
  318.      * @Assert\Callback
  319.      */
  320.     public function validarFechas(ExecutionContextInterface $context$payload)
  321.     {
  322.         if ($this->getFechaDesde() > $this->getFechaHasta()) {
  323.             $context->buildViolation('El campo "Fecha Desde" debe ser anterior a "Fecha Hasta" ')
  324.                 ->atPath('fechaDesde')
  325.                 ->addViolation();
  326.         }
  327.     }
  328.     /**
  329.      * @Assert\Callback
  330.      */
  331.     public function validarBanners(ExecutionContextInterface $context$payload)
  332.     {
  333.         $cant_banners 0;
  334.         $banners $this->getBanners();
  335.         foreach ($banners as $banner) {
  336.             $tiene_imagen_o_video $banner->getImagenEs() 
  337.                                     || $banner->getImagenEn() 
  338.                                     || $banner->getImagenArchivoEs() 
  339.                                     || $banner->getImagenArchivoEn();
  340.             $cant_banners += $tiene_imagen_o_video 0;
  341.         }
  342.         $tipo_bloque $this->getTipo();
  343.         if (self::PRINCIPAL == $tipo_bloque) {
  344.             if (== $cant_banners) {
  345.                 $context->buildViolation('Se requiere que se seleccione al menos 1 banner')
  346.                 ->atPath('banners')
  347.                 ->addViolation();
  348.             }
  349.         }elseif (self::SECUNDARIO_X2 == $tipo_bloque || self::SECUNDARIO_2_1 == $tipo_bloque || self::SECUNDARIO_1_2 == $tipo_bloque) {
  350.             if (!= $cant_banners) {
  351.                 $context->buildViolation('Se requiere que se seleccionen exactamente 2 banners')
  352.                 ->atPath('banners')
  353.                 ->addViolation();
  354.             }
  355.         }elseif (self::SECUNDARIO_X3 == $tipo_bloque) {
  356.             if (!= $cant_banners) {
  357.                 $context->buildViolation('Se requiere que se seleccionen exactamente 3 banners')
  358.                 ->atPath('banners')
  359.                 ->addViolation();
  360.             }
  361.         }
  362.     }
  363. }