src/Entity/SearchAlert.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Validator\MinimumPropertiesFilled;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Gedmo\Mapping\Annotation as Gedmo;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  9. /**
  10.  * @ORM\Entity(repositoryClass="App\Repository\SearchAlertRepository")
  11.  *
  12.  * @ORM\Table(name="search_alert")
  13.  *
  14.  * @MinimumPropertiesFilled(min=3, excludeTerm="Label")
  15.  */
  16. class SearchAlert
  17. {
  18.     public const TERMS_SEPARATOR_DISPLAY ', ';
  19.     public const TERMS_SEPARATOR ',';
  20.     /** @var string|null */
  21.     public $formattedName;
  22.     /**
  23.      * @ORM\Id
  24.      *
  25.      * @ORM\Column(type="bigint")
  26.      *
  27.      * @ORM\GeneratedValue(strategy="AUTO")
  28.      */
  29.     protected $id;
  30.     /**
  31.      * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="selections")
  32.      *
  33.      * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
  34.      */
  35.     protected $user;
  36.     /**
  37.      * @ORM\Column(type="array", nullable=true)
  38.      */
  39.     protected $maker = [];
  40.     /**
  41.      * Store ids of MODNatCode column in order to bind to MODName,
  42.      * see model table in eurotax database.
  43.      *
  44.      * @ORM\Column(type="array", nullable=true)
  45.      */
  46.     protected $modelGroup = [];
  47.     /**
  48.      * @ORM\Column(type="array", nullable=true)
  49.      */
  50.     protected $segmentSize = [];
  51.     /**
  52.      * @ORM\Column(type="array", nullable=true)
  53.      */
  54.     protected $energy;
  55.     /**
  56.      * @ORM\Column(type="array", nullable=true)
  57.      */
  58.     protected $segmentTransmission;
  59.     /**
  60.      * @ORM\Column(type="array", nullable=true)
  61.      */
  62.     protected $segmentTransmissionLabel;
  63.     /**
  64.      * @ORM\Column(type="integer", nullable=true)
  65.      *
  66.      * @Assert\Regex(
  67.      *     pattern="/[a-z]+/i",
  68.      *     match=false,
  69.      *     message="search_alert.constraint.kilometers.integer.min"
  70.      * )
  71.      */
  72.     protected $kilometersMin;
  73.     /**
  74.      * @ORM\Column(type="integer", nullable=true)
  75.      *
  76.      * @Assert\Regex(
  77.      *     pattern="/[a-z]+/i",
  78.      *     match=false,
  79.      *     message="search_alert.constraint.kilometers.integer.max"
  80.      * )
  81.      */
  82.     protected $kilometersMax;
  83.     /**
  84.      * @ORM\Column(type="integer", nullable=true)
  85.      *
  86.      * @Assert\Regex(
  87.      *     pattern="/[a-z]+/i",
  88.      *     match=false,
  89.      *     message="search_alert.constraint.millesime.integer.min"
  90.      * )
  91.      */
  92.     protected $millesimeMin;
  93.     /**
  94.      * @ORM\Column(type="integer", nullable=true)
  95.      *
  96.      * @Assert\Regex(
  97.      *     pattern="/[a-z]+/i",
  98.      *     match=false,
  99.      *     message="search_alert.constraint.millesime.integer.max"
  100.      * )
  101.      */
  102.     protected $millesimeMax;
  103.     /**
  104.      * @ORM\Column(type="integer", nullable=true)
  105.      *
  106.      * @Assert\Regex(
  107.      *     pattern="/[a-z]+/i",
  108.      *     match=false,
  109.      *     message="search_alert.constraint.price.integer.min"
  110.      * )
  111.      */
  112.     protected $priceMin;
  113.     /**
  114.      * @ORM\Column(type="integer", nullable=true)
  115.      *
  116.      * @Assert\Regex(
  117.      *     pattern="/[a-z]+/i",
  118.      *     match=false,
  119.      *     message="search_alert.constraint.price.integer.max"
  120.      * )
  121.      */
  122.     protected $priceMax;
  123.     /**
  124.      * @ORM\Column(type="array", nullable=true)
  125.      */
  126.     protected $options = [];
  127.     /**
  128.      * @Gedmo\Timestampable(on="create")
  129.      *
  130.      * @ORM\Column(type="datetime", name="created_at")
  131.      */
  132.     protected $createdAt;
  133.     /**
  134.      * @Gedmo\Timestampable(on="update")
  135.      *
  136.      * @ORM\Column(type="datetime", name="updated_at")
  137.      */
  138.     protected $updatedAt;
  139.     /**
  140.      * @ORM\Column(type="array", nullable=true)
  141.      */
  142.     protected $seatCount = [];
  143.     /**
  144.      * @ORM\Column(type="array", nullable=true)
  145.      */
  146.     protected $co2 = [];
  147.     /**
  148.      * @ORM\Column(type="array", nullable=true)
  149.      */
  150.     protected $euroEmissionStandard = [];
  151.     /**
  152.      * @ORM\Column(type="boolean", nullable=true)
  153.      */
  154.     protected $vat;
  155.     /**
  156.      * @param ArrayCollection $category
  157.      */
  158.     public function __construct(User $user/**
  159.      * @ORM\ManyToMany(targetEntity="App\Entity\Category")
  160.      */
  161.         protected $category = [])
  162.     {
  163.         $this->user $user;
  164.     }
  165.     /**
  166.      * @Assert\Callback
  167.      */
  168.     public function validate(ExecutionContextInterface $context): void
  169.     {
  170.         foreach (['kilometers''millesime''price'] as $value) {
  171.             if ((intval($this->{$value.'Min'}) > && intval($this->{$value.'Max'}) > 0) && (intval($this->{$value.'Min'}) > intval($this->{$value.'Max'}))) {
  172.                 $context
  173.                     ->buildViolation(sprintf('search_alert.constraint.%s.range_error'$value))
  174.                     ->atPath(sprintf('%sMin'$value))
  175.                     ->addViolation();
  176.             }
  177.         }
  178.     }
  179.     /**
  180.      * Get id.
  181.      *
  182.      * @return int
  183.      */
  184.     public function getId()
  185.     {
  186.         return $this->id;
  187.     }
  188.     /**
  189.      * Set user.
  190.      *
  191.      * @return VehicleAlert
  192.      */
  193.     public function setUser(User $user)
  194.     {
  195.         $this->user $user;
  196.         return $this;
  197.     }
  198.     /**
  199.      * Get user.
  200.      *
  201.      * @return User
  202.      */
  203.     public function getUser()
  204.     {
  205.         return $this->user;
  206.     }
  207.     public function setCategory($category): void
  208.     {
  209.         $this->category $category;
  210.     }
  211.     public function getCategory()
  212.     {
  213.         return $this->category;
  214.     }
  215.     public function setMaker($maker): void
  216.     {
  217.         $this->maker $maker;
  218.     }
  219.     public function getMaker()
  220.     {
  221.         return $this->maker;
  222.     }
  223.     public function setModelGroup($modelGroup): void
  224.     {
  225.         $this->modelGroup $modelGroup;
  226.     }
  227.     public function getModelGroup()
  228.     {
  229.         return $this->modelGroup;
  230.     }
  231.     public function setSegmentSize($segmentSize): void
  232.     {
  233.         $this->segmentSize $segmentSize;
  234.     }
  235.     public function getSegmentSize()
  236.     {
  237.         return $this->segmentSize;
  238.     }
  239.     public function setEnergy($energy): void
  240.     {
  241.         $this->energy $energy;
  242.     }
  243.     public function getEnergy()
  244.     {
  245.         return $this->energy;
  246.     }
  247.     public function setSegmentTransmission($segmentTransmission): void
  248.     {
  249.         $this->segmentTransmission $segmentTransmission;
  250.     }
  251.     public function getSegmentTransmission()
  252.     {
  253.         return $this->segmentTransmission;
  254.     }
  255.     public function setSegmentTransmissionLabel($segmentTransmissionLabel)
  256.     {
  257.         if (null !== $segmentTransmissionLabel && !is_array($segmentTransmissionLabel)) {
  258.             $segmentTransmissionLabel explode(',', (string) $segmentTransmissionLabel);
  259.         }
  260.         $this->segmentTransmissionLabel $segmentTransmissionLabel;
  261.         return $this;
  262.     }
  263.     /**
  264.      * Get segmentTransmissionLabel.
  265.      *
  266.      * @return string
  267.      */
  268.     public function getSegmentTransmissionLabel()
  269.     {
  270.         if (!is_array($this->segmentTransmissionLabel)) {
  271.             return '';
  272.         }
  273.         return implode(','$this->segmentTransmissionLabel);
  274.     }
  275.     /**
  276.      * Set kilometersMin.
  277.      *
  278.      * @param int $kilometersMin
  279.      *
  280.      * @return VehicleAlert
  281.      */
  282.     public function setKilometersMin($kilometersMin)
  283.     {
  284.         $this->kilometersMin $kilometersMin;
  285.         return $this;
  286.     }
  287.     /**
  288.      * Get kilometersMin.
  289.      *
  290.      * @return int
  291.      */
  292.     public function getKilometersMin()
  293.     {
  294.         return $this->kilometersMin;
  295.     }
  296.     /**
  297.      * Set kilometersMax.
  298.      *
  299.      * @param int $kilometersMax
  300.      *
  301.      * @return VehicleAlert
  302.      */
  303.     public function setKilometersMax($kilometersMax)
  304.     {
  305.         $this->kilometersMax $kilometersMax;
  306.         return $this;
  307.     }
  308.     /**
  309.      * Get kilometersMax.
  310.      *
  311.      * @return int
  312.      */
  313.     public function getKilometersMax()
  314.     {
  315.         return $this->kilometersMax;
  316.     }
  317.     /**
  318.      * Set millesimeMin.
  319.      *
  320.      * @param int $millesimeMin
  321.      *
  322.      * @return VehicleAlert
  323.      */
  324.     public function setMillesimeMin($millesimeMin)
  325.     {
  326.         $this->millesimeMin $millesimeMin;
  327.         return $this;
  328.     }
  329.     /**
  330.      * Get millesimeMin.
  331.      *
  332.      * @return int
  333.      */
  334.     public function getMillesimeMin()
  335.     {
  336.         return $this->millesimeMin;
  337.     }
  338.     /**
  339.      * Set millesimeMax.
  340.      *
  341.      * @param int $millesimeMax
  342.      *
  343.      * @return VehicleAlert
  344.      */
  345.     public function setMillesimeMax($millesimeMax)
  346.     {
  347.         $this->millesimeMax $millesimeMax;
  348.         return $this;
  349.     }
  350.     /**
  351.      * Get millesimeMax.
  352.      *
  353.      * @return int
  354.      */
  355.     public function getMillesimeMax()
  356.     {
  357.         return $this->millesimeMax;
  358.     }
  359.     /**
  360.      * Set priceMin.
  361.      *
  362.      * @param int $priceMin
  363.      *
  364.      * @return VehicleAlert
  365.      */
  366.     public function setPriceMin($priceMin)
  367.     {
  368.         $this->priceMin $priceMin;
  369.         return $this;
  370.     }
  371.     /**
  372.      * Get priceMin.
  373.      *
  374.      * @return int
  375.      */
  376.     public function getPriceMin()
  377.     {
  378.         return $this->priceMin;
  379.     }
  380.     /**
  381.      * Set priceMax.
  382.      *
  383.      * @param int $priceMax
  384.      *
  385.      * @return VehicleAlert
  386.      */
  387.     public function setPriceMax($priceMax)
  388.     {
  389.         $this->priceMax $priceMax;
  390.         return $this;
  391.     }
  392.     /**
  393.      * Get priceMax.
  394.      *
  395.      * @return int
  396.      */
  397.     public function getPriceMax()
  398.     {
  399.         return $this->priceMax;
  400.     }
  401.     /**
  402.      * Set options.
  403.      *
  404.      * @param array $options
  405.      *
  406.      * @return VehicleAlert
  407.      */
  408.     public function setOptions($options)
  409.     {
  410.         $this->options $options;
  411.         return $this;
  412.     }
  413.     /**
  414.      * Get options.
  415.      *
  416.      * @return array
  417.      */
  418.     public function getOptions()
  419.     {
  420.         return $this->options;
  421.     }
  422.     /**
  423.      * Set createdAt.
  424.      *
  425.      * @param \DateTime $createdAt
  426.      *
  427.      * @return VehicleAlert
  428.      */
  429.     public function setCreatedAt($createdAt)
  430.     {
  431.         $this->createdAt $createdAt;
  432.         return $this;
  433.     }
  434.     /**
  435.      * Get createdAt.
  436.      *
  437.      * @return \DateTime
  438.      */
  439.     public function getCreatedAt()
  440.     {
  441.         return $this->createdAt;
  442.     }
  443.     /**
  444.      * Set updatedAt.
  445.      *
  446.      * @param \DateTime $updatedAt
  447.      *
  448.      * @return VehicleAlert
  449.      */
  450.     public function setUpdatedAt($updatedAt)
  451.     {
  452.         $this->updatedAt $updatedAt;
  453.         return $this;
  454.     }
  455.     /**
  456.      * Get updatedAt.
  457.      *
  458.      * @return \DateTime
  459.      */
  460.     public function getUpdatedAt()
  461.     {
  462.         return $this->updatedAt;
  463.     }
  464.     public function getSeatCount()
  465.     {
  466.         return $this->seatCount;
  467.     }
  468.     public function setSeatCount($seatCount): void
  469.     {
  470.         $this->seatCount $seatCount;
  471.     }
  472.     public function getCo2()
  473.     {
  474.         return $this->co2;
  475.     }
  476.     public function setCo2($co2): void
  477.     {
  478.         $this->co2 $co2;
  479.     }
  480.     public function getEuroEmissionStandard()
  481.     {
  482.         return $this->euroEmissionStandard;
  483.     }
  484.     public function setEuroEmissionStandard($euroEmissionStandard): void
  485.     {
  486.         $this->euroEmissionStandard $euroEmissionStandard;
  487.     }
  488.     public function getVat()
  489.     {
  490.         return $this->vat;
  491.     }
  492.     public function setVat($vat): void
  493.     {
  494.         $this->vat $vat;
  495.     }
  496.     public function getName()
  497.     {
  498.         $name '';
  499.         if (count($this->segmentTransmission) > 0) {
  500.             $name .= (implode('|'$this->segmentTransmission).', ');
  501.         }
  502.         if (null !== $this->kilometersMin && null !== $this->kilometersMax) {
  503.             $name .= ('Km de '.$this->kilometersMin.' à '.$this->kilometersMax.', ');
  504.         } elseif (null !== $this->kilometersMin) {
  505.             $name .= ('Km min '.$this->kilometersMin.', ');
  506.         } elseif (null !== $this->kilometersMax) {
  507.             $name .= ('Km max '.$this->kilometersMax.', ');
  508.         }
  509.         if (null !== $this->millesimeMin && null !== $this->millesimeMax) {
  510.             $name .= ('Année de '.$this->millesimeMin.' à '.$this->millesimeMax.', ');
  511.         } elseif (null !== $this->millesimeMin) {
  512.             $name .= ('Année min '.$this->millesimeMin.', ');
  513.         } elseif (null !== $this->millesimeMax) {
  514.             $name .= ('Année max '.$this->millesimeMax.', ');
  515.         }
  516.         if (null !== $this->priceMin && null !== $this->priceMax) {
  517.             $name .= ('Prix de '.$this->priceMin.'€ à '.$this->priceMax.'€, ');
  518.         } elseif (null !== $this->priceMin) {
  519.             $name .= ('Prix min '.$this->priceMin.'€, ');
  520.         } elseif (null !== $this->priceMax) {
  521.             $name .= ('Prix max '.$this->priceMax.'€, ');
  522.         }
  523.         if (is_array($this->options) && count($this->options)) {
  524.             $name .= (implode('|'$this->options).', ');
  525.         }
  526.         $name substr($name0, -2);
  527.         return $name;
  528.     }
  529.     public function getCategoriesNames(): string
  530.     {
  531.         $names = [];
  532.         $categories $this->getCategory();
  533.         /** @var \Entity\Category $category */
  534.         foreach ($categories as $category) {
  535.             $names[] = $category->getName();
  536.         }
  537.         return implode(self::TERMS_SEPARATOR_DISPLAY$names);
  538.     }
  539.     public function getEnergiesNames(): string
  540.     {
  541.         $names = [];
  542.         $energies $this->getEnergy();
  543.         if (!is_array($energies)) {
  544.             $energies explode(self::TERMS_SEPARATOR, (string) $energies);
  545.         }
  546.         foreach ($energies as $energy) {
  547.             $names[] = $energy;
  548.         }
  549.         return implode(self::TERMS_SEPARATOR_DISPLAY$names);
  550.     }
  551. }