vendor/bluue/customers-bundle/src/Entity/Customer.php line 58

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Léo 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 Bluue\CustomersBundle\Entity;
  9. use App\Entity\Context;
  10. use App\Entity\Country;
  11. use App\Entity\CountryState;
  12. use App\Entity\Currency;
  13. use App\Entity\Traits\EntityManagerServiceEntity;
  14. use App\Services\SoftdeleteFilter;
  15. use DateTime;
  16. use DateTimeInterface;
  17. use Doctrine\ORM\NonUniqueResultException;
  18. use Exception;
  19. use Symfony\Component\Uid\Uuid;
  20. use Doctrine\ORM\Mapping as ORM;
  21. use Gedmo\Mapping\Annotation as Gedmo;
  22. use Doctrine\Common\Collections\Collection;
  23. use JsonSerializable as JsonSerializableAlias;
  24. use Doctrine\Common\Collections\ArrayCollection;
  25. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  26. use Bluue\CustomersBundle\Repository\CustomerRepository;
  27. use App\DoctrineExtensions\Timestampable\Traits\UserTimestampableEntity;
  28. use App\DoctrineExtensions\SoftDeleteable\Traits\UserSoftDeleteableEntity;
  29. use Bluue\CustomersBundle\EventListener\CustomerListener;
  30. /**
  31.  * @ORM\Entity(repositoryClass=CustomerRepository::class)
  32.  * @ORM\Table(name="customers_bundle__customer", indexes={
  33.  *  @ORM\Index(name="name", columns={"name"}),
  34.  *  @ORM\Index(name="firstname", columns={"firstname"}),
  35.  *  @ORM\Index(name="lastname", columns={"lastname"}),
  36.  *  @ORM\Index(name="postcode", columns={"postcode"}),
  37.  *  @ORM\Index(name="city", columns={"city"}),
  38.  *  @ORM\Index(name="phone", columns={"phone"}),
  39.  *  @ORM\Index(name="phone_mobile", columns={"phone_mobile"}),
  40.  *  @ORM\Index(name="email", columns={"email"}),
  41.  *  @ORM\Index(name="contact", columns={"contact"}),
  42.  *  @ORM\Index(name="job", columns={"job"}),
  43.  *  @ORM\Index(name="reference", columns={"reference"}),
  44.  *  @ORM\Index(name="birthday", columns={"birthday"}),
  45.  *  @ORM\Index(name="deleted_at", columns={"deleted_at"}),
  46.  *  @ORM\Index(name="created_at", columns={"created_at"}),
  47.  *  @ORM\Index(name="updated_at", columns={"updated_at"}),
  48.  *  @ORM\Index(name="service_code", columns={"service_code"})
  49.  * })
  50.  * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=false)
  51.  * @ORM\EntityListeners({CustomerListener::class})
  52.  */
  53. class Customer implements JsonSerializableAlias
  54. {
  55.     use UserTimestampableEntity;
  56.     use UserSoftDeleteableEntity;
  57.     use EntityManagerServiceEntity;
  58.     /**
  59.      * @ORM\Id
  60.      * @ORM\Column(type="uuid")
  61.      * @ORM\GeneratedValue(strategy="CUSTOM")
  62.      * @ORM\CustomIdGenerator(class=UuidGenerator::class)
  63.      */
  64.     private ?Uuid $id null;
  65.     /**
  66.      * @ORM\ManyToOne(targetEntity=CustomerType::class, inversedBy="customers")
  67.      */
  68.     private ?CustomerType $customer_type null;
  69.     /**
  70.      * @ORM\ManyToOne(targetEntity=CustomerGroup::class, inversedBy="default_customers")
  71.      */
  72.     private ?CustomerGroup $customer_group null;
  73.     /**
  74.      * @ORM\ManyToMany(targetEntity=CustomerGroup::class, inversedBy="customers")
  75.      * @ORM\JoinTable(name="customers_bundle__customer_group_customer")
  76.      */
  77.     private $customerGroups;
  78.     /**
  79.      * @ORM\Column(type="string", length=255)
  80.      */
  81.     private string $name;
  82.     /**
  83.      * @ORM\Column(type="string", length=128, nullable=true)
  84.      */
  85.     private ?string $firstname null;
  86.     /**
  87.      * @ORM\Column(type="string", length=128, nullable=true)
  88.      */
  89.     private ?string $lastname null;
  90.     /**
  91.      * @ORM\Column(type="integer", nullable=true)
  92.      */
  93.     private ?int $nature null;// 1 => Professionnel | 2 => Particulier
  94.     /**
  95.      * @ORM\Column(type="string", length=128, nullable=true)
  96.      */
  97.     private ?string $address null;
  98.     /**
  99.      * @ORM\Column(type="string", length=128, nullable=true)
  100.      */
  101.     private ?string $address_2 null;
  102.     /**
  103.      * @ORM\Column(type="string", length=25, nullable=true)
  104.      */
  105.     private ?string $postcode null;
  106.     /**
  107.      * @ORM\Column(type="string", length=64, nullable=true)
  108.      */
  109.     private ?string $city null;
  110.     /**
  111.      * @ORM\ManyToOne(targetEntity=Country::class)
  112.      */
  113.     private ?Country $country null;
  114.     /**
  115.      * @ORM\ManyToOne(targetEntity=CountryState::class)
  116.      */
  117.     private ?CountryState $country_state null;
  118.     /**
  119.      * @ORM\Column(type="string", length=32, nullable=true)
  120.      */
  121.     private ?string $vat_number null;
  122.     /**
  123.      * @ORM\Column(type="string", length=14, nullable=true)
  124.      */
  125.     private ?string $siret;
  126.     /**
  127.      * @ORM\Column(type="string", length=16, nullable=true)
  128.      */
  129.     private ?string $siren;
  130.     /**
  131.      * @ORM\Column(type="string", length=5, nullable=true)
  132.      */
  133.     private ?string $ape;
  134.     /**
  135.      * @ORM\Column(type="string", length=32, nullable=true)
  136.      */
  137.     private ?string $phone null;
  138.     /**
  139.      * @ORM\Column(type="string", length=32, nullable=true)
  140.      */
  141.     private ?string $phone_mobile null;
  142.     /**
  143.      * @ORM\Column(type="string", length=255, nullable=true)
  144.      */
  145.     private ?string $email null;
  146.     /**
  147.      * @ORM\Column(type="string", length=128, nullable=true)
  148.      */
  149.     private ?string $website null;
  150.     /**
  151.      * @ORM\Column(type="text", nullable=true)
  152.      */
  153.     private ?string $internal_note null;
  154.     /**
  155.      * @ORM\Column(type="boolean")
  156.      */
  157.     private bool $blocked false;
  158.     /**
  159.      * @ORM\OneToMany(targetEntity="Customer", mappedBy="parent")
  160.      */
  161.     private ?Collection $children;
  162.     /**
  163.      * @ORM\ManyToOne(targetEntity="Customer", inversedBy="children")
  164.      * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
  165.      */
  166.     private ?Customer $parent null;
  167.     /**
  168.      * @ORM\ManyToOne(targetEntity=Context::class)
  169.      */
  170.     private ?Context $context null;
  171.     /**
  172.      * @ORM\ManyToOne(targetEntity=Currency::class)
  173.      */
  174.     private ?Currency $currency null;
  175.     /**
  176.      * @ORM\Column(type="string", length=255, nullable=true)
  177.      */
  178.     private ?string $relay_number null;
  179.     /**
  180.      * @ORM\Column(type="boolean", options={"default":"0"})
  181.      */
  182.     private bool $contact false;
  183.     /**
  184.      * @ORM\Column(type="string", length=255, nullable=true)
  185.      */
  186.     private ?string $job null;
  187.     /**
  188.      * @ORM\Column(type="string", length=128, nullable="true")
  189.      */
  190.     private ?string $reference null;
  191.     /**
  192.      * @ORM\Column(type="date", nullable="true")
  193.      */
  194.     private ?DateTimeInterface $birthday null;
  195.     /**
  196.      * @ORM\Column(type="string", length=128, nullable="true")
  197.      */
  198.     private ?string $serviceCode null;
  199.     /**
  200.      * @ORM\Column(type="json", nullable="true")
  201.      */
  202.     private ?array $options = [];
  203.     /**
  204.      * @ORM\Column(type="boolean", options={"default":"0"})
  205.      */
  206.     private bool $isUnsubmit false;
  207.     /**
  208.      * @ORM\ManyToOne(targetEntity=Context::class)
  209.      */
  210.     private ?Context $purchasingContext null;
  211.     public function __construct()
  212.     {
  213.         $this->children = new ArrayCollection();
  214.         $this->customerGroups = new ArrayCollection();
  215.     }
  216.     /**
  217.      * @return Uuid|null
  218.      */
  219.     public function getId(): ?Uuid
  220.     {
  221.         return $this->id;
  222.     }
  223.     /**
  224.      * @return string
  225.      */
  226.     public function getName(): string
  227.     {
  228.         return $this->name;
  229.     }
  230.     /**
  231.      * @param string $name
  232.      * @return $this
  233.      */
  234.     public function setName(string $name): self
  235.     {
  236.         $this->name $name;
  237.         return $this;
  238.     }
  239.     /**
  240.      * @return string|null
  241.      */
  242.     public function getFirstname(): ?string
  243.     {
  244.         return $this->firstname;
  245.     }
  246.     /**
  247.      * @param string|null $firstname
  248.      * @return $this
  249.      */
  250.     public function setFirstname(?string $firstname): self
  251.     {
  252.         $this->firstname $firstname;
  253.         return $this;
  254.     }
  255.     /**
  256.      * @return string|null
  257.      */
  258.     public function getLastname(): ?string
  259.     {
  260.         return $this->lastname;
  261.     }
  262.     /**
  263.      * @param string|null $lastname
  264.      * @return $this
  265.      */
  266.     public function setLastname(?string $lastname): self
  267.     {
  268.         if ($lastname) {
  269.             $lastname mb_convert_case($lastnameMB_CASE_UPPER_SIMPLE'UTF-8');
  270.         }
  271.         $this->lastname $lastname;
  272.         return $this;
  273.     }
  274.     /**
  275.      * 1 => Professionnel | 2 => Particulier
  276.      * @return int|null
  277.      */
  278.     public function getNature(): ?int
  279.     {
  280.         return $this->nature;
  281.     }
  282.     /**
  283.      * 1 => Professionnel | 2 => Particulier
  284.      * @param int|null $nature
  285.      * @return $this
  286.      */
  287.     public function setNature(?int $nature): self
  288.     {
  289.         $this->nature $nature;
  290.         return $this;
  291.     }
  292.     /**
  293.      * @return string|null
  294.      */
  295.     public function getAddress(): ?string
  296.     {
  297.         return $this->address;
  298.     }
  299.     /**
  300.      * @param string|null $address
  301.      * @return $this
  302.      */
  303.     public function setAddress(?string $address): self
  304.     {
  305.         $this->address $address;
  306.         return $this;
  307.     }
  308.     /**
  309.      * @return string|null
  310.      */
  311.     public function getAddress2(): ?string
  312.     {
  313.         return $this->address_2;
  314.     }
  315.     /**
  316.      * @param string|null $address_2
  317.      * @return $this
  318.      */
  319.     public function setAddress2(?string $address_2): self
  320.     {
  321.         $this->address_2 $address_2;
  322.         return $this;
  323.     }
  324.     /**
  325.      * @return string|null
  326.      */
  327.     public function getPostcode(): ?string
  328.     {
  329.         return $this->postcode;
  330.     }
  331.     /**
  332.      * @param string|null $postcode
  333.      * @return $this
  334.      */
  335.     public function setPostcode(?string $postcode): self
  336.     {
  337.         $this->postcode $postcode;
  338.         return $this;
  339.     }
  340.     /**
  341.      * @return string|null
  342.      */
  343.     public function getCity(): ?string
  344.     {
  345.         return $this->city;
  346.     }
  347.     /**
  348.      * @param string|null $city
  349.      * @return $this
  350.      */
  351.     public function setCity(?string $city): self
  352.     {
  353.         if ($city) {
  354.             $city mb_convert_case($cityMB_CASE_UPPER_SIMPLE'UTF-8');
  355.         }
  356.         $this->city $city;
  357.         return $this;
  358.     }
  359.     /**
  360.      * @return string|null
  361.      */
  362.     public function getVatNumber(): ?string
  363.     {
  364.         return $this->vat_number;
  365.     }
  366.     /**
  367.      * @param string|null $vat_number
  368.      * @return $this
  369.      */
  370.     public function setVatNumber(?string $vat_number): self
  371.     {
  372.         $this->vat_number $vat_number;
  373.         return $this;
  374.     }
  375.     /**
  376.      * @return string|null
  377.      */
  378.     public function getSiret(): ?string
  379.     {
  380.         return $this->siret;
  381.     }
  382.     /**
  383.      * @param string|null $siret
  384.      * @return $this
  385.      */
  386.     public function setSiret(?string $siret): self
  387.     {
  388.         $this->siret $siret;
  389.         return $this;
  390.     }
  391.     /**
  392.      * @return string|null
  393.      */
  394.     public function getSiren(): ?string
  395.     {
  396.         return $this->siren;
  397.     }
  398.     /**
  399.      * @param string|null $siren
  400.      * @return $this
  401.      */
  402.     public function setSiren(?string $siren): self
  403.     {
  404.         $this->siren $siren;
  405.         return $this;
  406.     }
  407.     /**
  408.      * @return string|null
  409.      */
  410.     public function getApe(): ?string
  411.     {
  412.         return $this->ape;
  413.     }
  414.     /**
  415.      * @param string|null $ape
  416.      * @return $this
  417.      */
  418.     public function setApe(?string $ape): self
  419.     {
  420.         $this->ape $ape;
  421.         return $this;
  422.     }
  423.     /**
  424.      * @return string|null
  425.      */
  426.     public function getPhone(): ?string
  427.     {
  428.         return $this->phone;
  429.     }
  430.     /**
  431.      * @param string|null $phone
  432.      * @return $this
  433.      */
  434.     public function setPhone(?string $phone): self
  435.     {
  436.         $this->phone preg_replace('/[^0-9]/'''$phone);
  437.         return $this;
  438.     }
  439.     /**
  440.      * @return string|null
  441.      */
  442.     public function getPhoneMobile(): ?string
  443.     {
  444.         return $this->phone_mobile;
  445.     }
  446.     /**
  447.      * @param string|null $phone_mobile
  448.      * @return $this
  449.      */
  450.     public function setPhoneMobile(?string $phone_mobile): self
  451.     {
  452.         $this->phone_mobile preg_replace('/[^0-9]/'''$phone_mobile);
  453.         return $this;
  454.     }
  455.     /**
  456.      * @return string|null
  457.      */
  458.     public function getEmail(): ?string
  459.     {
  460.         return $this->email;
  461.     }
  462.     /**
  463.      * @param string|null $email
  464.      * @return $this
  465.      */
  466.     public function setEmail(?string $email): self
  467.     {
  468.         $this->email $email;
  469.         return $this;
  470.     }
  471.     /**
  472.      * @return string|null
  473.      */
  474.     public function getWebsite(): ?string
  475.     {
  476.         return $this->website;
  477.     }
  478.     /**
  479.      * @param string|null $website
  480.      * @return $this
  481.      */
  482.     public function setWebsite(?string $website): self
  483.     {
  484.         $this->website $website;
  485.         return $this;
  486.     }
  487.     /**
  488.      * @return string|null
  489.      */
  490.     public function getInternalNote(): ?string
  491.     {
  492.         return $this->internal_note;
  493.     }
  494.     /**
  495.      * @param string|null $internal_note
  496.      * @return $this
  497.      */
  498.     public function setInternalNote(?string $internal_note): self
  499.     {
  500.         $this->internal_note $internal_note;
  501.         return $this;
  502.     }
  503.     /**
  504.      * @return bool
  505.      */
  506.     public function isBlocked(): bool
  507.     {
  508.         return $this->blocked;
  509.     }
  510.     /**
  511.      * @param bool $blocked
  512.      * @return $this
  513.      */
  514.     public function setBlocked(bool $blocked): self
  515.     {
  516.         $this->blocked $blocked;
  517.         return $this;
  518.     }
  519.     /**
  520.      * @return Country|null
  521.      * @throws NonUniqueResultException
  522.      */
  523.     public function getCountry(): ?Country
  524.     {
  525.         if ($this->em && $this->country) {
  526.             SoftdeleteFilter::disable($this->em, [Country::class]);
  527.             $country $this->em->getRepository(Country::class)
  528.                 ->createQueryBuilder('c')
  529.                 ->where('c.id = :countryId')
  530.                 ->setParameter('countryId'$this->country->getId()->toBinary())
  531.                 ->getQuery()
  532.                 ->getOneOrNullResult();
  533.             SoftdeleteFilter::enable($this->em, [Country::class]);
  534.             return $country;
  535.         }
  536.         return $this->country;
  537.     }
  538.     /**
  539.      * @param Country|null $country
  540.      * @return $this
  541.      */
  542.     public function setCountry(?Country $country): self
  543.     {
  544.         $this->country $country;
  545.         return $this;
  546.     }
  547.     /**
  548.      * @return CountryState|null
  549.      */
  550.     public function getCountryState(): ?CountryState
  551.     {
  552.         return $this->country_state;
  553.     }
  554.     /**
  555.      * @param CountryState|null $country_state
  556.      * @return $this
  557.      */
  558.     public function setCountryState(?CountryState $country_state): self
  559.     {
  560.         $this->country_state $country_state;
  561.         return $this;
  562.     }
  563.     /**
  564.      * @return CustomerType|null
  565.      * @throws NonUniqueResultException
  566.      */
  567.     public function getCustomerType(): ?CustomerType
  568.     {
  569.         if ($this->em && $this->customer_type) {
  570.             SoftdeleteFilter::disable($this->em, [CustomerType::class]);
  571.             $customerType $this->em->getRepository(CustomerType::class)
  572.                 ->createQueryBuilder('ct')
  573.                 ->where('ct.id = :customerTypeId')
  574.                 ->setParameter('customerTypeId'$this->customer_type->getId()->toBinary())
  575.                 ->getQuery()
  576.                 ->getOneOrNullResult();
  577.             SoftdeleteFilter::enable($this->em, [CustomerType::class]);
  578.             return $customerType;
  579.         }
  580.         return $this->customer_type;
  581.     }
  582.     /**
  583.      * @param CustomerType|null $customer_type
  584.      * @return $this
  585.      */
  586.     public function setCustomerType(?CustomerType $customer_type): self
  587.     {
  588.         $this->customer_type $customer_type;
  589.         return $this;
  590.     }
  591.     /**
  592.      * @return Collection|Customer[]
  593.      */
  594.     public function getChildren(): Collection
  595.     {
  596.         return $this->children;
  597.     }
  598.     /**
  599.      * @param Customer $child
  600.      * @return $this
  601.      */
  602.     public function addChild(Customer $child): self
  603.     {
  604.         if (!$this->children->contains($child)) {
  605.             $this->children[] = $child;
  606.             $child->setParent($this);
  607.         }
  608.         return $this;
  609.     }
  610.     /**
  611.      * @param Customer $child
  612.      * @return $this
  613.      */
  614.     public function removeChild(Customer $child): self
  615.     {
  616.         if ($this->children->removeElement($child)) {
  617.             if ($child->getParent() === $this) {
  618.                 $child->setParent(null);
  619.             }
  620.         }
  621.         return $this;
  622.     }
  623.     /**
  624.      * @return $this|null
  625.      */
  626.     public function getParent(): ?self
  627.     {
  628.         return $this->parent;
  629.     }
  630.     /**
  631.      * @param Customer|null $parent
  632.      * @return $this
  633.      */
  634.     public function setParent(?self $parent): self
  635.     {
  636.         $this->parent $parent;
  637.         return $this;
  638.     }
  639.     /**
  640.      * @return Context|null
  641.      */
  642.     public function getContext(): ?Context
  643.     {
  644.         return $this->context;
  645.     }
  646.     /**
  647.      * @param Context|null $context
  648.      * @return $this
  649.      */
  650.     public function setContext(?Context $context): self
  651.     {
  652.         $this->context $context;
  653.         return $this;
  654.     }
  655.     /**
  656.      * @return array
  657.      */
  658.     public function jsonSerialize(): array
  659.     {
  660.         return [
  661.             'id' => $this->id,
  662.             'name' => $this->name,
  663.             'address' => $this->address,
  664.             'address2' => $this->address_2,
  665.             'postcode' => $this->postcode,
  666.             'city' => $this->city,
  667.             'vat_number' => $this->vat_number,
  668.             'phone' => $this->phone,
  669.             'phone_mobile' => $this->phone_mobile,
  670.             'email' => $this->email,
  671.             'website' => $this->website,
  672.             'internal_note' => $this->internal_note
  673.         ];
  674.     }
  675.     public function getCustomerGroup(): ?CustomerGroup
  676.     {
  677.         return $this->customer_group;
  678.     }
  679.     public function setCustomerGroup(?CustomerGroup $customer_group): self
  680.     {
  681.         $this->customer_group $customer_group;
  682.         return $this;
  683.     }
  684.     /**
  685.      * @return Collection<int, CustomerGroup>
  686.      */
  687.     public function getCustomerGroups(): Collection
  688.     {
  689.         return $this->customerGroups;
  690.     }
  691.     public function addCustomerGroup(CustomerGroup $customerGroup): self
  692.     {
  693.         if (!$this->customerGroups->contains($customerGroup)) {
  694.             $this->customerGroups[] = $customerGroup;
  695.         }
  696.         return $this;
  697.     }
  698.     public function removeCustomerGroup(CustomerGroup $customerGroup): self
  699.     {
  700.         $this->customerGroups->removeElement($customerGroup);
  701.         return $this;
  702.     }
  703.     /**
  704.      * @param Currency|null $currency
  705.      * @return Customer
  706.      */
  707.     public function setCurrency(?Currency $currency): self
  708.     {
  709.         $this->currency $currency;
  710.         return $this;
  711.     }
  712.     /**
  713.      * @return Currency|null
  714.      */
  715.     public function getCurrency(): ?Currency
  716.     {
  717.         return $this->currency;
  718.     }
  719.     /**
  720.      * @return string|null
  721.      */
  722.     public function getRelayNumber(): ?string
  723.     {
  724.         return $this->relay_number;
  725.     }
  726.     /**
  727.      * @param string|null $relay_number
  728.      * @return $this
  729.      */
  730.     public function setRelayNumber(?string $relay_number): self
  731.     {
  732.         $this->relay_number $relay_number;
  733.         return $this;
  734.     }
  735.     /**
  736.      * @return bool
  737.      */
  738.     public function isContact(): bool
  739.     {
  740.         return $this->contact;
  741.     }
  742.     /**
  743.      * @param bool $contact
  744.      * @return $this
  745.      */
  746.     public function setContact(bool $contact): self
  747.     {
  748.         $this->contact $contact;
  749.         return $this;
  750.     }
  751.     /**
  752.      * @return string|null
  753.      */
  754.     public function getJob(): ?string
  755.     {
  756.         return $this->job;
  757.     }
  758.     /**
  759.      * @param string|null $job
  760.      * @return $this
  761.      */
  762.     public function setJob(?string $job): self
  763.     {
  764.         $this->job $job;
  765.         return $this;
  766.     }
  767.     /**
  768.      * @return array
  769.      */
  770.     public function getOptions(): ?array
  771.     {
  772.         return $this->options;
  773.     }
  774.     /**
  775.      * @param array $options
  776.      * @return $this
  777.      */
  778.     public function setOptions(array $options): self
  779.     {
  780.         $this->options $options;
  781.         return $this;
  782.     }
  783.     /**
  784.      * @param array $options
  785.      * @return $this
  786.      */
  787.     public function addOptions(array $options): self
  788.     {
  789.         return $this->setOptions(array_merge_recursive($this->options$options));
  790.     }
  791.     /**
  792.      * @param string $key
  793.      * @param array $options
  794.      * @return $this
  795.      */
  796.     public function mergeOptions(string $key, array $options): self
  797.     {
  798.         $this->options[$key] = array_merge($options$this->options[$key] ?? []);
  799.         return $this;
  800.     }
  801.     /**
  802.      * @return string
  803.      */
  804.     public function getHtmlLabel(): string
  805.     {
  806.         $return "
  807.             <div class='select2-result-repository'>
  808.                 <div class='select2-result-repository__meta'>
  809.                     <div class='select2-result-repository__title'>" $this->getName();
  810.         if ($email $this->getEmail()) {
  811.             $return .= ' - ' $email;
  812.         }
  813.         $return .= "</div>";
  814.         if ($address $this->getAddress()) {
  815.             $return .= "<div class='select2-result-repository__subtitle'>" $address;
  816.         }
  817.         $postcode $this->getPostcode();
  818.         $city $this->getCity();
  819.         if ($postcode && $city) {
  820.             $stringPostcodeAndCity $postcode ' ' $city;
  821.         } elseif ($postcode && !$city) {
  822.             $stringPostcodeAndCity $postcode;
  823.         } elseif ($city && !$postcode) {
  824.             $stringPostcodeAndCity $city;
  825.         } else {
  826.             $stringPostcodeAndCity '';
  827.         }
  828.         if ($stringPostcodeAndCity) {
  829.             $return .= ' - ' $stringPostcodeAndCity;
  830.         }
  831.         return $return "</div</div></div>";
  832.     }
  833.     /**
  834.      * @return string
  835.      */
  836.     public function getNameWithCivility(): string
  837.     {
  838.         $return '';
  839.         if ($this->customer_type) {
  840.             $return .= $this->customer_type->getName();
  841.         }
  842.         return $return ' ' $this->name;
  843.     }
  844.     /**
  845.      * @return string|null
  846.      */
  847.     public function getReference(): ?string
  848.     {
  849.         return $this->reference;
  850.     }
  851.     /**
  852.      * @param string|null $reference
  853.      * @return Customer
  854.      */
  855.     public function setReference(?string $reference): self
  856.     {
  857.         $this->reference $reference;
  858.         return $this;
  859.     }
  860.     /**
  861.      * @return DateTimeInterface|null
  862.      */
  863.     public function getBirthday(): ?DateTimeInterface
  864.     {
  865.         return $this->birthday;
  866.     }
  867.     /**
  868.      * @param mixed $birthday
  869.      * @return Customer
  870.      * @throws Exception
  871.      */
  872.     public function setBirthday($birthday): self
  873.     {
  874.         if ($birthday instanceof DateTimeInterface) {
  875.             $this->birthday $birthday;
  876.         } elseif ($birthday) {
  877.             $this->birthday = new DateTime($birthday);
  878.         } else {
  879.             $this->birthday null;
  880.         }
  881.         return $this;
  882.     }
  883.     /**
  884.      * @return string|null
  885.      */
  886.     public function getServiceCode(): ?string
  887.     {
  888.         return $this->serviceCode;
  889.     }
  890.     /**
  891.      * @param string|null $serviceCode
  892.      * @return Customer
  893.      */
  894.     public function setServiceCode(?string $serviceCode): Customer
  895.     {
  896.         $this->serviceCode $serviceCode;
  897.         return $this;
  898.     }
  899.     /**
  900.      * @return bool
  901.      */
  902.     public function getIsUnsubmit(): ?bool
  903.     {
  904.         return $this->isUnsubmit;
  905.     }
  906.     /**
  907.      * @param bool $isUnsubmit
  908.      * @return $this
  909.      */
  910.     public function setIsUnsubmit(?bool $isUnsubmit): self
  911.     {
  912.         $this->isUnsubmit $isUnsubmit;
  913.         return $this;
  914.     }
  915.     /**
  916.      * @return Context|null
  917.      */
  918.     public function getPurchasingContext(): ?Context
  919.     {
  920.         return $this->purchasingContext;
  921.     }
  922.     /**
  923.      * @param Context|null $purchasingContext
  924.      * @return Customer
  925.      */
  926.     public function setPurchasingContext(?Context $purchasingContext): Customer
  927.     {
  928.         $this->purchasingContext $purchasingContext;
  929.         return $this;
  930.     }
  931. }