<?php
namespace App\Entity;
use App\Service\GmapsService;
use Doctrine\ORM\Events;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProspectDroppedRepository")
*/
class ProspectDropped
{
const TYPE_APPOINTMENT = 'appointment';
const TYPE_CHECKUP = 'checkup';
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $created;
/**
* @ORM\Column(type="smallint", nullable=true)
*/
private $gender;
/**
* @ORM\Column(type="string", length=255)
*/
private $firstname;
/**
* @ORM\Column(type="string", length=255)
*/
private $lastname;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $address;
/**
* @ORM\Column(type="string", length=5)
* @Assert\Regex(
* pattern="/^(([0-8][0-9])|(9[0-5])|(2[ab]))[0-9]{3}$/",
* message="Le code postal n'est pas valide"
* )
*/
private $postalcode;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $city;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\Email(
* message = "L'email '{{ value }}' n'est pas valide",
* mode = "strict"
* )
*/
private $email;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\Regex(pattern="/^(?:\+33|0)\s*[1-9](?:[\s.-]*\d{2}){4}$/", message="Le numéro de téléphone n'est pas valide.")
*/
private $phoneNumber;
/**
* @ORM\Column(type="string", length=4, nullable=true)
* @Assert\Regex(pattern="/^(19|20)\d{2}$/", message="L'année de naissance n'est pas valide.")
*/
private $yearOfBirth;
/**
* @ORM\Column(type="boolean")
*/
private $isOptin;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isPartnerOffer;
/**
* @ORM\Column(type="string", length=255)
*/
private $request;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $acquisitionMode;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $acquisitionBase;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $acquisitionKeyword;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $acquisitionUrl;
/**
* @ORM\Column(type="float", nullable=true)
*/
private $latitude;
/**
* @ORM\Column(type="float", nullable=true)
*/
private $longitude;
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $locationType;
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $countryCode;
/**
* Représente l'entité par défault
* @return string
*/
public function __toString(){
return 'Prospect ['.$this->getId().']';
}
/**
* Obtenir l'adresse complète
* @return string
*/
public function getFullAddress() {
return $this->getAddress() . ' ' . $this->getPostalcode() . ' ' . $this->getCity();
}
/**
* Représente l'entité dans le BO
* @return string
*/
public function getLabel(){
return '#'.$this->getId();
}
public function getId(): ?int
{
return $this->id;
}
public function getGender(): ?int
{
return $this->gender;
}
public function setGender(?int $gender): self
{
$this->gender = $gender;
return $this;
}
public function getFirstname(): ?string
{
return $this->firstname;
}
public function setFirstname(string $firstname): self
{
$this->firstname = $firstname;
return $this;
}
public function getLastname(): ?string
{
return $this->lastname;
}
public function setLastname(string $lastname): self
{
$this->lastname = $lastname;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getPhoneNumber(): ?string
{
return $this->phoneNumber;
}
public function setPhoneNumber(?string $phoneNumber): self
{
$phoneNumber = str_replace(' ', '', $phoneNumber);
$phoneNumber = str_replace('+33', '0', $phoneNumber);
$this->phoneNumber = $phoneNumber;
return $this;
}
public function getYearOfBirth(): ?string
{
return $this->yearOfBirth;
}
public function setYearOfBirth(?string $yearOfBirth): self
{
$this->yearOfBirth = $yearOfBirth;
return $this;
}
public function getDateFromYearOfBirth(): ?\DateTimeInterface {
return new \DateTime($this->getYearOfBirth() . '-01-01');
}
public function getRequest(): ?string
{
return $this->request;
}
public function setRequest(string $request): self
{
$this->request = $request;
return $this;
}
public function getIsOptin(): ?bool
{
return $this->isOptin;
}
public function setIsOptin(bool $isOptin): self
{
$this->isOptin = $isOptin;
return $this;
}
public function getIsPartnerOffer(): ?bool
{
return $this->isPartnerOffer;
}
public function setIsPartnerOffer(bool $isPartnerOffer): self
{
$this->isPartnerOffer = $isPartnerOffer;
return $this;
}
public function getAddress(): ?string
{
return $this->address;
}
public function setAddress(string $address): self
{
$this->address = $address;
return $this;
}
public function getPostalcode(): ?string
{
return $this->postalcode;
}
public function setPostalcode(string $postalcode): self
{
if(strlen($postalcode) === 4) {
$this->postalcode = str_pad($postalcode, 5, '0', STR_PAD_LEFT);
} else {
$this->postalcode = $postalcode;
}
return $this;
}
public function getCity(): ?string
{
return $this->city;
}
public function setCity(string $city): self
{
$this->city = $city;
return $this;
}
public function getCreated(): ?\DateTimeInterface
{
return $this->created;
}
public function setCreated(\DateTimeInterface $created): self
{
$this->created = $created;
return $this;
}
public function getAcquisitionMode(): ?string
{
return $this->acquisitionMode;
}
public function setAcquisitionMode(?string $acquisitionMode): self
{
$this->acquisitionMode = $acquisitionMode;
return $this;
}
public function getAcquisitionBase(): ?string
{
return $this->acquisitionBase;
}
public function setAcquisitionBase(?string $acquisitionBase): self
{
$this->acquisitionBase = $acquisitionBase;
return $this;
}
public function getAcquisitionUrl(): ?string
{
return $this->acquisitionUrl;
}
public function setAcquisitionUrl(?string $acquisitionUrl): self
{
$this->acquisitionUrl = $acquisitionUrl;
return $this;
}
public function getLatitude(): ?float
{
return $this->latitude;
}
public function setLatitude(?float $latitude): self
{
$this->latitude = $latitude;
return $this;
}
public function getLongitude(): ?float
{
return $this->longitude;
}
public function setLongitude(?float $longitude): self
{
$this->longitude = $longitude;
return $this;
}
public function getLocationType(): ?string
{
return $this->locationType;
}
public function setLocationType(?string $locationType): self
{
$this->locationType = $locationType;
return $this;
}
public function getCountryCode(): ?string
{
return $this->countryCode;
}
public function setCountryCode(?string $countryCode): self
{
$this->countryCode = $countryCode;
return $this;
}
public function getAcquisitionKeyword(): ?string
{
return $this->acquisitionKeyword;
}
public function setAcquisitionKeyword(?string $acquisitionKeyword): self
{
$this->acquisitionKeyword = $acquisitionKeyword;
return $this;
}
/**
* Recupérer les utm et la provenance d'une demande prospect
*
* @param $utmContent
* @param $utmSource
* @param $utmUrl
*/
public function serializeUtm($utmContent, $utmSource, $utmUrl, $utmKeyword) {
// sanitize GET parameter
$getUtmContent = preg_replace('/[^-a-zA-Z0-9_]/', '', $utmContent);
$getUtmSource = preg_replace('/[^-a-zA-Z0-9_]/', '', $utmSource);
$getUtmUrl = preg_replace('/[^-a-zA-Z0-9_]/', '', $utmUrl);
$getUtmKeyword = preg_replace('/[^-a-zA-Z0-9_]/', '', $utmKeyword);
$this->setAcquisitionMode($getUtmContent);
$this->setAcquisitionBase($getUtmSource);
$this->setAcquisitionKeyword($getUtmKeyword);
$this->setAcquisitionUrl($getUtmUrl);
}
}