src/Entity/Context.php line 42

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Leo BANNHOLTZER (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace App\Entity;
  9. use Symfony\Component\Uid\Uuid;
  10. use Doctrine\ORM\Mapping as ORM;
  11. use App\Repository\ContextRepository;
  12. use Gedmo\Mapping\Annotation as Gedmo;
  13. use App\EventListener\ContextSaveListener;
  14. use App\DoctrineExtensions\IsDefaultEntity;
  15. use Doctrine\Common\Collections\Collection;
  16. use Doctrine\Common\Collections\ArrayCollection;
  17. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  18. use Symfony\Component\Validator\Constraints as Assert;
  19. use App\DoctrineExtensions\Timestampable\Traits\UserTimestampableEntity;
  20. use App\DoctrineExtensions\SoftDeleteable\Traits\UserSoftDeleteableEntity;
  21. /**
  22.  * @ORM\Entity(repositoryClass=ContextRepository::class)
  23.  * @ORM\Table(name="context", indexes={
  24.  *  @ORM\Index(name="name", columns={"name"}),
  25.  *  @ORM\Index(name="postcode", columns={"postcode"}),
  26.  *  @ORM\Index(name="vat_number", columns={"vat_number"}),
  27.  *  @ORM\Index(name="email", columns={"email"}),
  28.  *  @ORM\Index(name="is_default", columns={"is_default"}),
  29.  *  @ORM\Index(name="deleted_at", columns={"deleted_at"}),
  30.  *  @ORM\Index(name="created_at", columns={"created_at"}),
  31.  *  @ORM\Index(name="updated_at", columns={"updated_at"}),
  32.  *  @ORM\Index(name="position", columns={"position"})
  33.  * })
  34.  * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=false)
  35.  * @ORM\EntityListeners({ContextSaveListener::class})
  36.  */
  37. class Context
  38. {
  39.     use UserTimestampableEntity;
  40.     use UserSoftDeleteableEntity;
  41.     use IsDefaultEntity;
  42.     /**
  43.      * @ORM\Id
  44.      * @ORM\Column(type="uuid")
  45.      * @ORM\GeneratedValue(strategy="CUSTOM")
  46.      * @ORM\CustomIdGenerator(class=UuidGenerator::class)
  47.      */
  48.     private ?Uuid $id null;
  49.     /**
  50.      * @ORM\Column(type="string", length=128)
  51.      */
  52.     private string $name;
  53.     /**
  54.      * @ORM\Column(type="string", length=128)
  55.      */
  56.     private string $companyName;
  57.     /**
  58.      * @ORM\Column(type="string", length=128, nullable=true)
  59.      */
  60.     private ?string $address;
  61.     /**
  62.      * @ORM\Column(type="string", length=128, nullable=true)
  63.      */
  64.     private ?string $address2;
  65.     /**
  66.      * @ORM\Column(type="string", length=32, nullable=true)
  67.      */
  68.     private ?string $postcode;
  69.     /**
  70.      * @ORM\Column(type="string", length=128, nullable=true)
  71.      */
  72.     private ?string $city;
  73.     /**
  74.      * @ORM\Column(type="string", length=32, nullable=true)
  75.      */
  76.     private ?string $phone;
  77.     /**
  78.      * @ORM\Column(type="string", length=255, nullable=true)
  79.      * @Assert\Email
  80.      */
  81.     private ?string $email;
  82.     /**
  83.      * @ORM\Column(type="string", length=255, nullable=true)
  84.      */
  85.     private ?string $website;
  86.     /**
  87.      * @ORM\Column(type="string", length=32, nullable=true)
  88.      */
  89.     private ?string $vat_number;
  90.     /**
  91.      * @ORM\Column(type="string", length=16, nullable=true)
  92.      */
  93.     private ?string $siren;
  94.     /**
  95.      * @ORM\Column(type="string", length=16, nullable=true)
  96.      */
  97.     private ?string $siret;
  98.     /**
  99.      * @ORM\Column(type="string", length=8, nullable=true)
  100.      */
  101.     private ?string $ape;
  102.     /**
  103.      * @ORM\ManyToOne(targetEntity=Currency::class, inversedBy="contexts")
  104.      * @ORM\JoinColumn(nullable=false)
  105.      */
  106.     private Currency $currency;
  107.     /**
  108.      * @ORM\ManyToOne(targetEntity=Country::class, inversedBy="contexts")
  109.      */
  110.     private ?Country $country;
  111.     /**
  112.      * @ORM\ManyToOne(targetEntity=CountryState::class, inversedBy="contexts")
  113.      */
  114.     private ?CountryState $country_state;
  115.     /**
  116.      * @ORM\OneToMany(targetEntity=Configuration::class, mappedBy="context", fetch="EXTRA_LAZY")
  117.      */
  118.     private Collection $configurations;
  119.     /**
  120.      * @ORM\OneToMany(targetEntity=UserContext::class, mappedBy="context", fetch="EXTRA_LAZY")
  121.      */
  122.     private Collection $users;
  123.     /**
  124.      * @ORM\OneToMany(targetEntity=MailServer::class, mappedBy="context", fetch="EXTRA_LAZY")
  125.      */
  126.     private Collection $mail_servers;
  127.     /**
  128.      * @ORM\OneToMany(targetEntity=Establishment::class, mappedBy="context")
  129.      */
  130.     private ?Collection $establishments null;
  131.     /**
  132.      * @ORM\Column(type="boolean", options={"default" : "0"})
  133.      */
  134.     private bool $isFranchise false;
  135.     /**
  136.      * @ORM\Column(type="integer")
  137.      */
  138.     private ?int $position null;
  139.     public function __construct()
  140.     {
  141.         $this->configurations = new ArrayCollection();
  142.         $this->users = new ArrayCollection();
  143.         $this->mail_servers = new ArrayCollection();
  144.         $this->establishments = new ArrayCollection();
  145.     }
  146.     /**
  147.      * @return Uuid|null
  148.      */
  149.     public function getId(): ?Uuid
  150.     {
  151.         return $this->id;
  152.     }
  153.     /**
  154.      * @return string
  155.      */
  156.     public function getName(): string
  157.     {
  158.         return $this->name;
  159.     }
  160.     /**
  161.      * @param string $name
  162.      * @return $this
  163.      */
  164.     public function setName(string $name): self
  165.     {
  166.         $this->name $name;
  167.         return $this;
  168.     }
  169.     /**
  170.      * @return string
  171.      */
  172.     public function getCompanyName(): string
  173.     {
  174.         return $this->companyName;
  175.     }
  176.     /**
  177.      * @param string $companyName
  178.      * @return $this
  179.      */
  180.     public function setCompanyName(string $companyName): self
  181.     {
  182.         $this->companyName $companyName;
  183.         return $this;
  184.     }
  185.     /**
  186.      * @return string|null
  187.      */
  188.     public function getAddress(): ?string
  189.     {
  190.         return $this->address;
  191.     }
  192.     /**
  193.      * @param string|null $address
  194.      * @return $this
  195.      */
  196.     public function setAddress(?string $address): self
  197.     {
  198.         $this->address $address;
  199.         return $this;
  200.     }
  201.     /**
  202.      * @return string|null
  203.      */
  204.     public function getAddress2(): ?string
  205.     {
  206.         return $this->address2;
  207.     }
  208.     /**
  209.      * @param string|null $address2
  210.      * @return $this
  211.      */
  212.     public function setAddress2(?string $address2): self
  213.     {
  214.         $this->address2 $address2;
  215.         return $this;
  216.     }
  217.     /**
  218.      * @return string|null
  219.      */
  220.     public function getPostcode(): ?string
  221.     {
  222.         return $this->postcode;
  223.     }
  224.     /**
  225.      * @param string|null $postcode
  226.      * @return $this
  227.      */
  228.     public function setPostcode(?string $postcode): self
  229.     {
  230.         $this->postcode $postcode;
  231.         return $this;
  232.     }
  233.     /**
  234.      * @return string|null
  235.      */
  236.     public function getCity(): ?string
  237.     {
  238.         return $this->city;
  239.     }
  240.     /**
  241.      * @param string|null $city
  242.      * @return $this
  243.      */
  244.     public function setCity(?string $city): self
  245.     {
  246.         $this->city $city;
  247.         return $this;
  248.     }
  249.     /**
  250.      * @return string|null
  251.      */
  252.     public function getPhone(): ?string
  253.     {
  254.         return $this->phone;
  255.     }
  256.     /**
  257.      * @param string|null $phone
  258.      * @return $this
  259.      */
  260.     public function setPhone(?string $phone): self
  261.     {
  262.         $this->phone preg_replace('/[^0-9]/'''$phone);
  263.         return $this;
  264.     }
  265.     /**
  266.      * @return string|null
  267.      */
  268.     public function getEmail(): ?string
  269.     {
  270.         return $this->email;
  271.     }
  272.     /**
  273.      * @param string|null $email
  274.      * @return $this
  275.      */
  276.     public function setEmail(?string $email): self
  277.     {
  278.         $this->email $email;
  279.         return $this;
  280.     }
  281.     /**
  282.      * @return string|null
  283.      */
  284.     public function getWebsite(): ?string
  285.     {
  286.         return $this->website;
  287.     }
  288.     /**
  289.      * @param string|null $website
  290.      * @return $this
  291.      */
  292.     public function setWebsite(?string $website): self
  293.     {
  294.         $this->website $website;
  295.         return $this;
  296.     }
  297.     /**
  298.      * @return string|null
  299.      */
  300.     public function getVatNumber(): ?string
  301.     {
  302.         return $this->vat_number;
  303.     }
  304.     /**
  305.      * @param string|null $vat_number
  306.      * @return $this
  307.      */
  308.     public function setVatNumber(?string $vat_number): self
  309.     {
  310.         $this->vat_number $vat_number;
  311.         return $this;
  312.     }
  313.     /**
  314.      * @return string|null
  315.      */
  316.     public function getSiren(): ?string
  317.     {
  318.         return $this->siren;
  319.     }
  320.     /**
  321.      * @param string|null $siren
  322.      * @return $this
  323.      */
  324.     public function setSiren(?string $siren): self
  325.     {
  326.         $this->siren $siren;
  327.         return $this;
  328.     }
  329.     /**
  330.      * @return string|null
  331.      */
  332.     public function getSiret(): ?string
  333.     {
  334.         return $this->siret;
  335.     }
  336.     /**
  337.      * @param string|null $siret
  338.      * @return $this
  339.      */
  340.     public function setSiret(?string $siret): self
  341.     {
  342.         $this->siret $siret;
  343.         return $this;
  344.     }
  345.     /**
  346.      * @return string|null
  347.      */
  348.     public function getApe(): ?string
  349.     {
  350.         return $this->ape;
  351.     }
  352.     /**
  353.      * @param string|null $ape
  354.      * @return $this
  355.      */
  356.     public function setApe(?string $ape): self
  357.     {
  358.         $this->ape $ape;
  359.         return $this;
  360.     }
  361.     /**
  362.      * @return Currency
  363.      */
  364.     public function getCurrency(): Currency
  365.     {
  366.         return $this->currency;
  367.     }
  368.     /**
  369.      * @param Currency $currency
  370.      * @return $this
  371.      */
  372.     public function setCurrency(Currency $currency): self
  373.     {
  374.         $this->currency $currency;
  375.         return $this;
  376.     }
  377.     /**
  378.      * @return Country|null
  379.      */
  380.     public function getCountry(): ?Country
  381.     {
  382.         return $this->country;
  383.     }
  384.     /**
  385.      * @param Country|null $country
  386.      * @return $this
  387.      */
  388.     public function setCountry(?Country $country): self
  389.     {
  390.         $this->country $country;
  391.         return $this;
  392.     }
  393.     /**
  394.      * @return CountryState|null
  395.      */
  396.     public function getCountryState(): ?CountryState
  397.     {
  398.         return $this->country_state;
  399.     }
  400.     /**
  401.      * @param CountryState|null $country_state
  402.      * @return $this
  403.      */
  404.     public function setCountryState(?CountryState $country_state): self
  405.     {
  406.         $this->country_state $country_state;
  407.         return $this;
  408.     }
  409.     /**
  410.      * @return Collection|Configuration[]
  411.      */
  412.     public function getConfigurations(): Collection
  413.     {
  414.         return $this->configurations;
  415.     }
  416.     /**
  417.      * @param Configuration $configuration
  418.      * @return $this
  419.      */
  420.     public function addConfiguration(Configuration $configuration): self
  421.     {
  422.         if (!$this->configurations->contains($configuration)) {
  423.             $this->configurations[] = $configuration;
  424.             $configuration->setContext($this);
  425.         }
  426.         return $this;
  427.     }
  428.     /**
  429.      * @param Configuration $configuration
  430.      * @return $this
  431.      */
  432.     public function removeConfiguration(Configuration $configuration): self
  433.     {
  434.         if ($this->configurations->removeElement($configuration)) {
  435.             if ($configuration->getContext() === $this) {
  436.                 $configuration->setContext(null);
  437.             }
  438.         }
  439.         return $this;
  440.     }
  441.     /**
  442.      * @return Collection|UserContext[]
  443.      */
  444.     public function getUsers(): Collection
  445.     {
  446.         return $this->users;
  447.     }
  448.     /**
  449.      * @param UserContext $user
  450.      * @return $this
  451.      */
  452.     public function addUser(UserContext $user): self
  453.     {
  454.         if (!$this->users->contains($user)) {
  455.             $this->users[] = $user;
  456.             $user->setContext($this);
  457.         }
  458.         return $this;
  459.     }
  460.     /**
  461.      * @param UserContext $user
  462.      * @return $this
  463.      */
  464.     public function removeUser(UserContext $user): self
  465.     {
  466.         if ($this->users->removeElement($user)) {
  467.             if ($user->getContext() === $this) {
  468.                 $user->setContext(null);
  469.             }
  470.         }
  471.         return $this;
  472.     }
  473.     /**
  474.      * @return Collection|MailServer[]
  475.      */
  476.     public function getMailServers(): Collection
  477.     {
  478.         return $this->mail_servers;
  479.     }
  480.     /**
  481.      * @return MailServer|null
  482.      */
  483.     public function getMailServer(): ?MailServer
  484.     {
  485.         return !$this->getMailServers()->isEmpty() ? $this->getMailServers()->first() : null;
  486.     }
  487.     /**
  488.      * @param User|null $user
  489.      * @return Collection|Establishment[]
  490.      */
  491.     public function getEstablishments(?User $user null): ?Collection
  492.     {
  493.         $establishments $this->establishments;
  494.         if (!$user) {
  495.             return $establishments;
  496.         }
  497.         return $establishments->filter(function (Establishment $establishment) use ($user) {
  498.             return $establishment->getUsersEstablishments()->isEmpty()
  499.                 || !$establishment->getUsersEstablishments()->filter(function (UsersEstablishments $userE) use ($user) {
  500.                     return $userE->getUser()->getId() === $user->getId();
  501.                 })->isEmpty()
  502.             ;
  503.         });
  504.     }
  505.     public function addEstablishment(Establishment $establishment): self
  506.     {
  507.         if (!$this->establishments->contains($establishment)) {
  508.             $this->establishments[] = $establishment;
  509.             $establishment->setContext($this);
  510.         }
  511.         return $this;
  512.     }
  513.     public function removeEstablishment(Establishment $establishment): self
  514.     {
  515.         if ($this->establishments->removeElement($establishment)) {
  516.             // set the owning side to null (unless already changed)
  517.             if ($establishment->getContext() === $this) {
  518.                 $establishment->setContext(null);
  519.             }
  520.         }
  521.         return $this;
  522.     }
  523.     /**
  524.      * @return bool|null
  525.      */
  526.     public function getIsFranchise(): ?bool
  527.     {
  528.         return $this->isFranchise;
  529.     }
  530.     /**
  531.      * @param bool $isFranchise
  532.      * @return $this
  533.      */
  534.     public function setIsFranchise(bool $isFranchise): self
  535.     {
  536.         $this->isFranchise $isFranchise;
  537.         return $this;
  538.     }
  539.     /**
  540.      * @return int|null
  541.      */
  542.     public function getPosition(): ?int
  543.     {
  544.         return $this->position;
  545.     }
  546.     /**
  547.      * @param int|null $position
  548.      * @return self
  549.      */
  550.     public function setPosition(?int $position): self
  551.     {
  552.         $this->position $position;
  553.         return $this;
  554.     }
  555. }