src/Entity/Customer.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use DateTime;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. use Symfony\Component\HttpFoundation\File\File;
  9. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  10. /**
  11.  * @ORM\Entity(repositoryClass="App\Repository\CustomerRepository")
  12.  * @Vich\Uploadable
  13.  */
  14. class Customer implements UserInterface
  15. {
  16.   /**
  17.    * Roles customer
  18.    */
  19.   const ROLE_CUSTOMER "ROLE_CUSTOMER";
  20.   const ROLE_ADMIN_CLUB "ROLE_ADMIN_CLUB";
  21.   const ROLE_CUSTOMER_DEPENDENT "ROLE_CUSTOMER_DEPENDENT";
  22.   /** */
  23.   const TYPE_ACCOUNT_APP "APP";
  24.   const TYPE_ACCOUNT_FACEBOOK "FACEBOOK";
  25.   const TYPE_ACCOUNT_GOOGLE "GOOGLE";
  26.   /**
  27.    * @ORM\Id()
  28.    * @ORM\GeneratedValue()
  29.    * @ORM\Column(type="integer")
  30.    */
  31.   private $id;
  32.   /**
  33.    * @ORM\Column(type="string", length=180, unique=true)
  34.    */
  35.   private $email;
  36.   /**
  37.    * @ORM\Column(type="string", length=20, unique=true)
  38.    */
  39.   private $username;
  40.   /**
  41.    * @ORM\Column(type="json")
  42.    */
  43.   private $roles = [];
  44.   /**
  45.    * @var string The hashed password
  46.    * @ORM\Column(type="string")
  47.    */
  48.   private $password;
  49.   /**
  50.    * @ORM\Column(type="string", length=20, nullable=true)
  51.    */
  52.   private $plainPassword;
  53.   /**
  54.    * @ORM\Column(type="boolean")
  55.    */
  56.   private $enabled;
  57.   /**
  58.    * @ORM\Column(type="string")
  59.    */
  60.   private $name;
  61.   /**
  62.    * @ORM\Column(type="string",nullable=true)
  63.    */
  64.   private $surname;
  65.   /**
  66.    * @ORM\Column(type="string", nullable=true)
  67.    */
  68.   private $address;
  69.   /**
  70.    * @ORM\Column(type="string", nullable=true)
  71.    */
  72.   private $celular;
  73.   /**
  74.    * @ORM\Column(type="string", length=255, nullable=true)
  75.    * @var string
  76.    */
  77.   private $image;
  78.   /**
  79.    * @Vich\UploadableField(mapping="customer_images", fileNameProperty="image")
  80.    * @var File
  81.    */
  82.   private $imageFile;
  83.   /**
  84.    * @ORM\Column(type="datetime", nullable=true)
  85.    * @var \DateTime
  86.    */
  87.   private $createdAt;
  88.   /**
  89.    * @ORM\Column(type="datetime", nullable=true)
  90.    * @var \DateTime
  91.    */
  92.   private $updatedAt;
  93.   /**
  94.    * @ORM\OneToMany(targetEntity="App\Entity\Season", mappedBy="customer", cascade={"remove"})
  95.    */
  96.   private $season;
  97.   /**
  98.    * @ORM\ManyToOne(targetEntity="App\Entity\Country", inversedBy="customers")
  99.    */
  100.   private $country;
  101.   /**
  102.    *
  103.    * @ORM\Column(name="country_id", type="integer", nullable=true)
  104.    */
  105.   public $countryId;
  106.   /**
  107.    * @ORM\Column(type="integer", nullable=true)
  108.    */
  109.   public $seasonActive;
  110.   /**
  111.    * @ORM\OneToMany(targetEntity="App\Entity\Suggestion", mappedBy="customer", orphanRemoval=true)
  112.    */
  113.   private $suggestions;
  114.   /**
  115.    * @ORM\Column(type="string", length=255, nullable=true)
  116.    */
  117.   private $typeAccount;
  118.   /**
  119.    * @ORM\Column(type="boolean", nullable=true)
  120.    */
  121.   private $isPro;
  122.   /**
  123.    * @ORM\Column(type="text", nullable=true)
  124.    */
  125.   private $purchase;
  126.    /**
  127.    * @ORM\Column(type="text", nullable=true)
  128.    */
  129.   private $purchasePlatform;
  130.   /**
  131.    * @ORM\Column(type="string", length=255, nullable=true)
  132.    */
  133.   private $membershipId;
  134.   /**
  135.    * @ORM\OneToMany(targetEntity="App\Entity\CouponCustomer", mappedBy="customer", orphanRemoval=true)
  136.    * @ORM\OrderBy({"id" = "ASC"})
  137.    */
  138.   private $customerCoupons;
  139.   /**
  140.    * @ORM\Column(type="boolean", nullable=true)
  141.    */
  142.   private $couponStatus;
  143.   /**
  144.    * @ORM\Column(type="string", length=255, nullable=true)
  145.    */
  146.   private $phone;
  147.   /**
  148.    * @ORM\Column(type="string", length=16, nullable=true)
  149.    */
  150.   private $googleAuthCode;
  151.   /**
  152.    * @ORM\Column(type="boolean", nullable=true)
  153.    */
  154.   private $googleAuthCodeVerified;
  155.   /**
  156.    * @ORM\Column(type="datetime", length=255,nullable=true)
  157.    * @var \DateTime
  158.    */
  159.   private $dateOfBirth;
  160.   /**
  161.    * @ORM\ManyToMany(targetEntity="App\Entity\Notification", mappedBy="customers")
  162.    * @ORM\JoinColumn(nullable=false)
  163.    */
  164.   private $notifications;
  165.   /**
  166.    * @ORM\Column(type="datetime", nullable=true)
  167.    * @var \DateTime
  168.    */
  169.   private $deletedAt;
  170.   /**
  171.    * @ORM\Column(type="integer", nullable=true)
  172.    */
  173.   private $isDeleted;
  174.   /**
  175.    * @ORM\OneToMany(targetEntity=ExerciseQualification::class, mappedBy="customer_id")
  176.    */
  177.   private $exerciseQualifications;
  178.   /**
  179.    * @ORM\OneToMany(targetEntity=Strategy::class, mappedBy="customer", orphanRemoval=true)
  180.    */
  181.   private $strategies;
  182.   /**
  183.    * Customer constructor.
  184.    */
  185.   public function __construct()
  186.   {
  187.     $this->enabled true;
  188.     $this->roles = array();
  189.     $this->season = new ArrayCollection();
  190.     $this->suggestions = new ArrayCollection();
  191.     $this->customerCoupons = new ArrayCollection();
  192.     $this->notifications = new ArrayCollection();
  193.     $this->exerciseQualifications = new ArrayCollection();
  194.     $this->strategies = new ArrayCollection();
  195.   }
  196.   public function getId(): ?int
  197.   {
  198.     return $this->id;
  199.   }
  200.   public function getEmail(): ?string
  201.   {
  202.     if (empty($this->email)) {
  203.       return $this->username;
  204.     }
  205.     return $this->email;
  206.   }
  207.   public function setEmail(string $email): self
  208.   {
  209.     $this->email $email;
  210.     return $this;
  211.   }
  212.   public function getUsername(): ?string
  213.   {
  214.     if (empty($this->username)) {
  215.       return $this->email;
  216.     }
  217.     return $this->username;
  218.   }
  219.   public function setUsername(string $username): self
  220.   {
  221.     $this->username $username;
  222.     return $this;
  223.   }
  224.   /**
  225.    * @see UserInterface
  226.    */
  227.   public function getRoles(): array
  228.   {
  229.     $roles $this->roles;
  230.     // guarantee every user at least has ROLE_USER
  231.     //$roles[] = 'ROLE_USER';
  232.     return array_unique($roles);
  233.   }
  234.   public function setRoles(array $roles): self
  235.   {
  236.     $this->roles $roles;
  237.     return $this;
  238.   }
  239.   public function addRole($role)
  240.   {
  241.     $role strtoupper($role);
  242.     if (!in_array($role$this->rolestrue)) {
  243.       $this->roles[] = $role;
  244.     }
  245.     return $this;
  246.   }
  247.   /**
  248.    * @see UserInterface
  249.    */
  250.   public function getPassword(): string
  251.   {
  252.     return (string)$this->password;
  253.   }
  254.   public function setPassword(string $password): self
  255.   {
  256.     $this->password $password;
  257.     return $this;
  258.   }
  259.   public function getPlainPassword(): ?string
  260.   {
  261.     return $this->plainPassword;
  262.   }
  263.   public function setPlainPassword(string $plainPassword): self
  264.   {
  265.     $this->plainPassword $plainPassword;
  266.     return $this;
  267.   }
  268.   /**
  269.    * @see UserInterface
  270.    */
  271.   public function getSalt()
  272.   {
  273.     // not needed when using the "bcrypt" algorithm in security.yaml
  274.   }
  275.   /**
  276.    * @see UserInterface
  277.    */
  278.   public function eraseCredentials()
  279.   {
  280.     // If you store any temporary, sensitive data on the user, clear it here
  281.     $this->plainPassword null;
  282.   }
  283.   /**
  284.    * @return mixed
  285.    */
  286.   public function getEnabled()
  287.   {
  288.     return $this->enabled;
  289.   }
  290.   /**
  291.    * @param mixed $enabled
  292.    * @return Customer
  293.    */
  294.   public function setEnabled($enabled)
  295.   {
  296.     $this->enabled $enabled;
  297.     return $this;
  298.   }
  299.   /**
  300.    * @return mixed
  301.    */
  302.   public function getName()
  303.   {
  304.     return $this->name;
  305.   }
  306.   /**
  307.    * @param mixed $name
  308.    * @return Customer
  309.    */
  310.   public function setName(string $name)
  311.   {
  312.     $this->name $name;
  313.     return $this;
  314.   }
  315.   /**
  316.    * @return mixed
  317.    */
  318.   public function getSurname()
  319.   {
  320.     return $this->surname;
  321.   }
  322.   /**
  323.    * @param mixed $surname
  324.    * @return Customer
  325.    */
  326.   public function setSurname($surname)
  327.   {
  328.     $this->surname $surname;
  329.     return $this;
  330.   }
  331.   /**
  332.    * @return mixed
  333.    */
  334.   public function getAddress()
  335.   {
  336.     return $this->address;
  337.   }
  338.   /**
  339.    * @param mixed $address
  340.    * @return Customer
  341.    */
  342.   public function setAddress($address)
  343.   {
  344.     $this->address $address;
  345.     return $this;
  346.   }
  347.   /**
  348.    * @return mixed
  349.    */
  350.   public function getCelular()
  351.   {
  352.     return $this->celular;
  353.   }
  354.   /**
  355.    * @param mixed $celular
  356.    * @return Customer
  357.    */
  358.   public function setCelular($celular)
  359.   {
  360.     $this->celular $celular;
  361.     return $this;
  362.   }
  363.   /**
  364.    * @param File|null $image
  365.    * @return Customer
  366.    */
  367.   public function setImageFile(File $image null)
  368.   {
  369.     $this->imageFile $image;
  370.     // VERY IMPORTANT:
  371.     // It is required that at least one field changes if you are using Doctrine,
  372.     // otherwise the event listeners won't be called and the file is lost
  373.     if ($image) {
  374.       // if 'updatedAt' is not defined in your entity, use another property
  375.       $this->updatedAt = new \DateTime('now');
  376.     }
  377.     return $this;
  378.   }
  379.   public function getImageFile()
  380.   {
  381.     return $this->imageFile;
  382.   }
  383.   /**
  384.    * @param $image
  385.    * @return Customer
  386.    */
  387.   public function setImage($image)
  388.   {
  389.     $this->image $image;
  390.     return $this;
  391.   }
  392.   /**
  393.    * @return string
  394.    */
  395.   public function getImage()
  396.   {
  397.     return $this->image;
  398.   }
  399.   /**
  400.    * @return string
  401.    */
  402.   public function getNameTeam()
  403.   {
  404.     $name "";
  405.     /** @var Season $s */
  406.     $s $this->getSeasonActive();
  407.     if ($s && !empty($s->getTeam()))
  408.       $name $s->getTeam()->getName();
  409.     return $name;
  410.   }
  411.     /**
  412.    * @return ?string
  413.    */
  414.   public function getStadiumName()
  415.   {
  416.     $name null;
  417.     /** @var Season $s */
  418.     $s $this->getSeasonActive();
  419.     if ($s && !empty($s->getTeam()))
  420.       $name $s->getTeam()->getStadiumName();
  421.     return $name;
  422.   }
  423.   public function getMonthlyCostTeam()
  424.   {
  425.     $name null;
  426.     /** @var Season $s */
  427.     $s $this->getSeasonActive();
  428.     if ($s && !empty($s->getTeam()))
  429.       $name $s->getTeam()->getMonthlyCost();
  430.     return $name;
  431.   }
  432.   public function getKitPaymentCostTeam()
  433.   {
  434.     $name null;
  435.     /** @var Season $s */
  436.     $s $this->getSeasonActive();
  437.     if ($s && !empty($s->getTeam()))
  438.       $name $s->getTeam()->getKitPaymentCost();
  439.     return $name;
  440.   }
  441.   public function getOtherPaymentCostTeam()
  442.   {
  443.     $name null;
  444.     /** @var Season $s */
  445.     $s $this->getSeasonActive();
  446.     if ($s && !empty($s->getTeam()))
  447.       $name $s->getTeam()->getOtherPaymentCost();
  448.     return $name;
  449.   }
  450.   public function setNameTeam($name)
  451.   {
  452.     $this->nameTeam $name;
  453.     return $this;
  454.   }
  455.   public function setCategoryTeam($name)
  456.   {
  457.     $this->categoryTeam $name;
  458.     return $this;
  459.   }
  460.   /**
  461.    * @return string
  462.    */
  463.   public function getCategoryTeam()
  464.   {
  465.     $category "";
  466.     /** @var Season $s */
  467.     $s $this->getSeasonActive();
  468.     if ($s && !empty($s->getTeam()))
  469.       $category $s->getTeam()->getCategory();
  470.     return $category;
  471.   }
  472.   /**
  473.    * @return string
  474.    */
  475.   public function getTypeSoccerTeamId()
  476.   {
  477.     $typeSoccerTeamId "";
  478.     /** @var Season $s */
  479.     $s $this->getSeasonActive();
  480.     if ($s && !empty($s->getTeam())) {
  481.       $typeSoccerTeamId $s->getTeam()->getTypeSoccer();
  482.       if ($typeSoccerTeamId) {
  483.         $typeSoccerTeamId $typeSoccerTeamId->getId();
  484.       }
  485.     }
  486.     return $this->typeSoccerTeamId $typeSoccerTeamId;
  487.   }
  488.   /**
  489.    * @return string
  490.    */
  491.   public function getTypeSoccerTeamName()
  492.   {
  493.     $typeSoccerTeamName "";
  494.     /** @var Season $s */
  495.     $s $this->getSeasonActive();
  496.     if ($s && !empty($s->getTeam())) {
  497.       $typeSoccerTeamName $s->getTeam()->getTypeSoccer();
  498.       if ($typeSoccerTeamName) {
  499.         $typeSoccerTeamName $typeSoccerTeamName->getName();
  500.       }
  501.     }
  502.     return $this->typeSoccerTeamName $typeSoccerTeamName;
  503.   }
  504.   public function setTypeSoccerTeamId(int $typeId)
  505.   {
  506.     $this->typeSoccerTeamId $typeId;
  507.     return $this;
  508.   }
  509.   public function getTypeSoccer()
  510.   {
  511.     $typeSoccerName "";
  512.     /** @var Season $s */
  513.     $s $this->getSeasonActive();
  514.     if ($s && !empty($s->getTeam()))
  515.       $typeSoccerName $s->getTeam()->getTypeSoccer();
  516.     return $typeSoccerName;
  517.   }
  518.   /**
  519.    * @return Tactic
  520.    */
  521.   public function getAlignmentDefaultU7()
  522.   {
  523.     $typeSoccerName "";
  524.     /** @var Season $s */
  525.     $s $this->getSeasonActive();
  526.     if ($s && !empty($s->getTeam())) {
  527.       $aligment =  $s->getTeam()->getAlignmentDefaultU7();
  528.       return $aligment;
  529.     }
  530.     return $typeSoccerName;
  531.   }
  532.   /**
  533.    * @return Tactic
  534.    */
  535.   public function getAlignmentDefaultU8()
  536.   {
  537.     $typeSoccerName "";
  538.     /** @var Season $s */
  539.     $s $this->getSeasonActive();
  540.     if ($s && !empty($s->getTeam())) {
  541.       return $s->getTeam()->getAlignmentDefaultU8();
  542.     }
  543.     return $typeSoccerName;
  544.   }
  545.   /**
  546.    * @return Tactic
  547.    */
  548.   public function getAlignmentDefaultU11()
  549.   {
  550.     $typeSoccerName "";
  551.     /** @var Season $s */
  552.     $s $this->getSeasonActive();
  553.     if ($s && !empty($s->getTeam())) {
  554.       return  $s->getTeam()->getAlignmentDefaultU11();
  555.     }
  556.     return $typeSoccerName;
  557.   }
  558.   /**
  559.    * @return string
  560.    */
  561.   public function getImageTeam()
  562.   {
  563.     $img "";
  564.     /** @var Season $s */
  565.     $s $this->getSeasonActive();
  566.     if ($s && !empty($s->getTeam()))
  567.       $img $s->getTeam()->getImage();
  568.     return $img;
  569.   }
  570.   public function getImageTrainerTeam()
  571.   {
  572.     $img "";
  573.     /** @var Season $s */
  574.     $s $this->getSeasonActive();
  575.     if ($s && !empty($s->getTeam()))
  576.       $img $s->getTeam()->getImageTrainer();
  577.     return $img;
  578.   }
  579.   public function getNumberClubesLeague()
  580.   {
  581.     $numberClubesLeague 0;
  582.     /** @var Season $s */
  583.     $season $this->getSeasonActive();
  584.     if ($season && !empty($season->getTeam()))
  585.       $numberClubesLeague $season->getTeam()->getNumberClubesLeague();
  586.     return $numberClubesLeague;
  587.   }
  588.   /**
  589.    * @return \DateTime
  590.    */
  591.   public function getUpdatedAt(): \DateTime
  592.   {
  593.     return $this->updatedAt;
  594.   }
  595.   /**
  596.    * @param \DateTime $updatedAt
  597.    * @return Customer
  598.    */
  599.   public function setUpdatedAt(\DateTime $updatedAt): Customer
  600.   {
  601.     $this->updatedAt $updatedAt;
  602.     return $this;
  603.   }
  604.   /**
  605.    * @return \DateTime
  606.    */
  607.   public function getCreatedAt()
  608.   {
  609.     return $this->createdAt;
  610.   }
  611.   /**
  612.    * @param \DateTime $createdAt
  613.    * @return Customer
  614.    */
  615.   public function setCreatedAt(\DateTime $createdAt): Customer
  616.   {
  617.     $this->createdAt $createdAt;
  618.     return $this;
  619.   }
  620.   /**
  621.    * @return Collection|Season[]
  622.    */
  623.   public function getSeason(): Collection
  624.   {
  625.     return $this->season;
  626.   }
  627.   public function addSeason(Season $season): self
  628.   {
  629.     if (!$this->season->contains($season)) {
  630.       $this->season[] = $season;
  631.       $season->setCustomer($this);
  632.     }
  633.     return $this;
  634.   }
  635.   public function removeSeason(Season $season): self
  636.   {
  637.     if ($this->season->contains($season)) {
  638.       $this->season->removeElement($season);
  639.       // set the owning side to null (unless already changed)
  640.       if ($season->getCustomer() === $this) {
  641.         $season->setCustomer(null);
  642.       }
  643.     }
  644.     return $this;
  645.   }
  646.   public function getCountry(): ?Country
  647.   {
  648.     return $this->country;
  649.   }
  650.   public function setCountry(?Country $country): self
  651.   {
  652.     $this->country $country;
  653.     return $this;
  654.   }
  655.   public function getCountryId(): ?int
  656.   {
  657.     return $this->countryId;
  658.   }
  659.   public function getSeasonYear(): ?int
  660.   {
  661.     $s $this->getSeasonActive();
  662.     return $s $s->getYear() : null;
  663.   }
  664.   public function setSeasonYear($name)
  665.   {
  666.     $this->yearSeason $name;
  667.     return $this;
  668.   }
  669.   public function setCountryId(?int $countryId): self
  670.   {
  671.     $this->countryId $countryId;
  672.     return $this;
  673.   }
  674.   /**
  675.    * @return Season
  676.    */
  677.   public function getSeasonActive()
  678.   {
  679.     if (!empty($this->seasonActive)) {
  680.       /** @var Season $season */
  681.       foreach ($this->getSeason() as $season) {
  682.         if ($this->seasonActive == $season->getId()) {
  683.           return $season;
  684.         }
  685.       }
  686.     } else {
  687.       if (!empty($this->getSeason())) {
  688.         return $this->getSeason()->last();
  689.       }
  690.     }
  691.     return null;
  692.   }
  693.   public function setSeasonActive(?Season $seasonActive): self
  694.   {
  695.     $this->seasonActive $seasonActive->getId();
  696.     return $this;
  697.   }
  698.   /**
  699.    * @return Season|string
  700.    */
  701.   public function getSeasonActiveText()
  702.   {
  703.     $s $this->getSeasonActive();
  704.     return $s $s->getYear() . " / " . ($s->getYear() + 1) : "";
  705.   }
  706.   /**
  707.    * @return Collection|Suggestion[]
  708.    */
  709.   public function getSuggestions(): Collection
  710.   {
  711.     return $this->suggestions;
  712.   }
  713.   public function addSuggestion(Suggestion $suggestion): self
  714.   {
  715.     if (!$this->suggestions->contains($suggestion)) {
  716.       $this->suggestions[] = $suggestion;
  717.       $suggestion->setCustomer($this);
  718.     }
  719.     return $this;
  720.   }
  721.   public function removeSuggestion(Suggestion $suggestion): self
  722.   {
  723.     if ($this->suggestions->contains($suggestion)) {
  724.       $this->suggestions->removeElement($suggestion);
  725.       // set the owning side to null (unless already changed)
  726.       if ($suggestion->getCustomer() === $this) {
  727.         $suggestion->setCustomer(null);
  728.       }
  729.     }
  730.     return $this;
  731.   }
  732.   /**
  733.    * @return mixed
  734.    */
  735.   public function __toString()
  736.   {
  737.     return self::getEmail();
  738.   }
  739.   public function getTypeAccount(): ?string
  740.   {
  741.     return $this->typeAccount;
  742.   }
  743.   public function setTypeAccount(?string $typeAccount): self
  744.   {
  745.     $this->typeAccount $typeAccount;
  746.     return $this;
  747.   }
  748.   public function getIsPro(): ?bool
  749.   {
  750.     return $this->isPro;
  751.   }
  752.   public function setIsPro(?bool $isPro): self
  753.   {
  754.     $this->isPro $isPro;
  755.     return $this;
  756.   }
  757.   public function getPurchase(): ?string
  758.   {
  759.     return $this->purchase;
  760.   }
  761.   public function setPurchase(?string $purchase): self
  762.   {
  763.     $this->purchase $purchase;
  764.     return $this;
  765.   }
  766.   public function getPurchasePlatform(): ?string
  767.   {
  768.     return $this->purchasePlatform;
  769.   }
  770.   public function setPurchasePlatform(?string $platformPurchase): self
  771.   {
  772.     $this->purchasePlatform $platformPurchase;
  773.     return $this;
  774.   }
  775.   public function getMembershipId(): ?string
  776.   {
  777.     return $this->membershipId;
  778.   }
  779.   public function setMembershipId(?string $membershipId): self
  780.   {
  781.     $this->membershipId $membershipId;
  782.     return $this;
  783.   }
  784.   public function getDateOfBirth(): ?DateTime
  785.   {
  786.     return $this->dateOfBirth;
  787.   }
  788.   public function setDateOfBirth(?DateTime $dateOfBirth): self
  789.   {
  790.     $this->dateOfBirth $dateOfBirth;
  791.     return $this;
  792.   }
  793.   public function getPhone(): ?string
  794.   {
  795.     return $this->phone;
  796.   }
  797.   public function setPhone(?string $phone): self
  798.   {
  799.     $this->phone $phone;
  800.     return $this;
  801.   }
  802.   public function getGoogleAuthCode(): ?string
  803.   {
  804.     return $this->googleAuthCode;
  805.   }
  806.   public function setGoogleAuthCode(?string $googleAuthCode): self
  807.   {
  808.     $this->googleAuthCode $googleAuthCode;
  809.     return $this;
  810.   }
  811.   public function getGoogleAuthCodeVerified(): ?string
  812.   {
  813.     return $this->googleAuthCodeVerified;
  814.   }
  815.   public function setGoogleAuthCodeVerified(?string $googleAuthCodeVerified): self
  816.   {
  817.     $this->googleAuthCodeVerified $googleAuthCodeVerified;
  818.     return $this;
  819.   }
  820.   /**
  821.    * @return Collection|CouponCustomer[]
  822.    */
  823.   public function getCustomerCoupons(): Collection
  824.   {
  825.     return $this->customerCoupons;
  826.   }
  827.   public function getCouponStatus(): ?bool
  828.   {
  829.     /**
  830.      * Get last coupon used, notice relation is ordered by id asc
  831.      */
  832.     $lastCouponCustomer $this->getCustomerCoupons()->last();
  833.     if (!empty($lastCouponCustomer)) {
  834.       /**
  835.        * Valida la fecha de expiracion del cupon de membresia premium
  836.        */
  837.       $now = new \DateTime('now');
  838.       $expiredAtCoupon $lastCouponCustomer->getCoupon()->getExpiresAt();
  839.       return $now <= $expiredAtCoupon;
  840.     }
  841.     return false;
  842.   }
  843.   // public function setCouponStatus(?bool $couponStatus): self
  844.   // {
  845.   //     $this->couponStatus = $couponStatus;
  846.   //     return $this;
  847.   // }
  848.   public function __call($method$arguments)
  849.   {
  850.     $method = ('get' === substr($method03) || 'set' === substr($method03)) ? $method 'get' ucfirst($method);
  851.     return $this->proxyCurrentLocaleTranslation($method$arguments);
  852.   }
  853.   /**
  854.    * @return Collection|Notification[]
  855.    */
  856.   public function getNotifications(): Collection
  857.   {
  858.     return $this->notifications;
  859.   }
  860.   public function addNotification(Notification $notification): self
  861.   {
  862.     if (!$this->notifications->contains($notification)) {
  863.       $this->notifications[] = $notification;
  864.       $notification->setCustomer($this);
  865.     }
  866.     return $this;
  867.   }
  868.   public function removeNotification(Notification $notification): self
  869.   {
  870.     if ($this->notifications->contains($notification)) {
  871.       $this->notifications->removeElement($notification);
  872.       // set the owning side to null (unless already changed)
  873.       if ($notification->getNotification() === $this) {
  874.         $notification->removeCustomer($this);
  875.       }
  876.     }
  877.     return $this;
  878.   }
  879.   /**
  880.    * @return \DateTime
  881.    */
  882.   public function getDeletedAt()
  883.   {
  884.     return $this->deletedAt;
  885.   }
  886.   /**
  887.    * @param \DateTime $createdAt
  888.    * @return Customer
  889.    */
  890.   public function setDeletedAt(?\DateTime $deletedAt): Customer
  891.   {
  892.     $this->deletedAt $deletedAt;
  893.     return $this;
  894.   }
  895.   public function getIsDeleted(): ?int
  896.   {
  897.     return $this->isDeleted;
  898.   }
  899.   public function setIsDeleted(?int $isDeleted): self
  900.   {
  901.     $this->isDeleted $isDeleted;
  902.     return $this;
  903.   }
  904.   /**
  905.    * @return Collection|ExerciseQualification[]
  906.    */
  907.   public function getExerciseQualifications(): Collection
  908.   {
  909.     return $this->exerciseQualifications;
  910.   }
  911.   public function addExerciseQualification(ExerciseQualification $exerciseQualification): self
  912.   {
  913.     if (!$this->exerciseQualifications->contains($exerciseQualification)) {
  914.       $this->exerciseQualifications[] = $exerciseQualification;
  915.       $exerciseQualification->setCustomerId($this);
  916.     }
  917.     return $this;
  918.   }
  919.   public function removeExerciseQualification(ExerciseQualification $exerciseQualification): self
  920.   {
  921.     if ($this->exerciseQualifications->contains($exerciseQualification)) {
  922.       $this->exerciseQualifications->removeElement($exerciseQualification);
  923.       // set the owning side to null (unless already changed)
  924.       if ($exerciseQualification->getCustomerId() === $this) {
  925.         $exerciseQualification->setCustomerId(null);
  926.       }
  927.     }
  928.     return $this;
  929.   }
  930.   public function CountryName()
  931.   {
  932.     return  $this->getCountry() ? $this->getCountry()->getName() : null;
  933.   }
  934.   public function __toArray()
  935.   {
  936.     $result = [
  937.       'id' => $this->getId(),
  938.       'name' => $this->getName(),
  939.       'surname' => $this->getSurname(),
  940.       'email' => $this->getEmail(),
  941.       'phone' => $this->getPhone(),
  942.       'address' => $this->getAddress(),
  943.       'city' => $this->getCity(),
  944.       'zip' => $this->getZip(),
  945.       'country' => $this->getCountry() ? $this->getCountry()->getName() : "",
  946.       "phone" => $this->getPhone(),
  947.       "dateOfBirth" => $this->getDateOfBirth() ?  $this->getDateOfBirth()->format('Y-m-d') : null,
  948.     ];
  949.     return $result;
  950.   }
  951.   /**
  952.    * @return Collection<int, Strategy>
  953.    */
  954.   public function getStrategies(): Collection
  955.   {
  956.       return $this->strategies;
  957.   }
  958.   public function addStrategy(Strategy $strategy): self
  959.   {
  960.       if (!$this->strategies->contains($strategy)) {
  961.           $this->strategies[] = $strategy;
  962.           $strategy->setCustomer($this);
  963.       }
  964.       return $this;
  965.   }
  966.   public function removeStrategy(Strategy $strategy): self
  967.   {
  968.       if ($this->strategies->removeElement($strategy)) {
  969.           // set the owning side to null (unless already changed)
  970.           if ($strategy->getCustomer() === $this) {
  971.               $strategy->setCustomer(null);
  972.           }
  973.       }
  974.       return $this;
  975.   }
  976. }