<?php
namespace App\Entity;
use App\Entity\Interfaces\SpotHitCampainInterface;
use App\Traits\DateTrait;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
*
* @ORM\Table(uniqueConstraints={
* @ORM\UniqueConstraint(columns={"nom"})
* })
* @UniqueEntity(fields={"nom"})
*/
class SmsSpotHitCampain implements SpotHitCampainInterface
{
use DateTrait;
/**
* @var int|null
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected ?int $id = null;
/**
* @var integer|null
*
* @ORM\Column(type="integer", nullable=true)
*
* @Assert\GreaterThanOrEqual(value = 1)
* @Assert\Type(type="integer")
*/
protected ?int $idSpotHit = null;
/**
* @var string
*
* @ORM\Column(type="string")
*
* @Assert\NotBlank
* @Assert\Type(type="string")
*
*/
protected string $message = '';
/**
* @var array|string[]
*
* @ORM\Column(type="json")
*
* @Assert\All({
* @Assert\Type(type="string"),
* })
*
* @Assert\NotBlank
*/
protected array $destinataires = [];
/**
* @var string|null
*
* Si vide, l'expéditeur du SMS sera un numéro court à 5 chiffres auxquels les destinataires peuvent répondre
*
* @ORM\Column(type="string", length=11, nullable=true)
*
* @Assert\Length(min=1, max=11)
* @Assert\Type(type="string")
*/
protected ?string $expediteur = null;
/**
* @var \DateTime|null
*
* @ORM\Column(type="datetime", nullable=true)
*
* @Assert\Type(type="\DateTime")
*/
protected ?\DateTime $date = null;
/**
* @var boolean
*
* Si true, autorise l'envoi de SMS supérieur à 160 caractères
*
* @ORM\Column(type="boolean")
* @Assert\Type(type="bool")
*/
protected bool $smslong = true;
/**
* @var integer|null
*
* Permet de vérifier la taille du SMS long envoyé. Doit correspondre au nombre de caractères su sms, Si le compteur spothit indique un nombre différent, le message sera rejeté.
*
* @ORM\Column(type="integer", nullable=true)
*
* @Assert\GreaterThanOrEqual(value = 1)
* @Assert\Type(type="integer")
*/
protected ?int $smslongnbr = null;
/**
* @var boolean
*
* Si true, tronque automatiquement le message à 160 caractères.
*
* @ORM\Column(type="boolean")
* @Assert\Type(type="bool")
*/
protected bool $tronque = false;
/**
* @var string|null
*
* "auto" => UTF8, "ucs2" => unicode
*
* @ORM\Column(type="string", nullable=true)
*
* @Assert\Choice({"auto", "ucs2", null})
* @Assert\Type(type="string")
*/
protected ?string $encodage = null;
/**
* @var string|null
*
* nom de la campagne
*
* @ORM\Column(type="string", nullable=true)
*
* @Assert\Length(min=1, max=50)
* @Assert\Type(type="string")
*/
protected ?string $nom = null;
/**
* @var string|null
*
* "all" => sélection de tous les contacts du compte
* "groupe" => sélection de tous les contacts des groupes fournis dans le champ « destinataires »
* "datas" => permet d'ajouter des données personnalisées aux « destinataires » pour les utiliser dans votre message (exemple : "Bonjour {nom} {prenom}")
* il faut que le champ « destinataires » soit un tableau de cette forme : ["+33600000001" => ["nom" => "Nom 1", "prenom" => "Prénom 1"], "+33600000002" => ["nom" => "Nom 2", "prenom" => "Prénom 2"] ...]
*
* @ORM\Column(type="string", nullable=true)
*
* @Assert\Choice({"all", "groupe", "datas", null})
* @Assert\Type(type="string")
*/
protected ?string $destinatairesType = 'datas';
/**
* @var string|null
*
* Adresse URL de votre serveur pour la réception en "push" des statuts après l'envoi.
* Vous devez déjà avoir une adresse paramétrée sur votre compte pour activer les retours "push".
* Si ce paramètre est renseigné, cette URL sera appelée pour cet envoi sinon l'adresse du compte est utilisée.
*
* @ORM\Column(type="string", nullable=true)
*
* @Assert\Type(type="string")
*/
protected ?string $url = null;
/**
* @var \DateTime|null
*
* Obligatoire pour l'envoi échelonné
*
* @ORM\Column(type="datetime", nullable=true)
*
* @Assert\Type(type="\DateTime")
*/
protected ?\DateTime $dateDebut = null;
/**
* @var \DateTime|null
*
* Obligatoire pour l'envoi échelonné
*
* @ORM\Column(type="datetime", nullable=true)
*
* @Assert\Type(type="\DateTime")
*/
protected ?\DateTime $dateFin = null;
/**
* @var array|int[]|null
*
* Obligatoire pour l'envoi échelonné
* Heure(s) d'envois (du lundi au samedi de 8h00 à 22h00 hors jours fériés)
* Tableau avec 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
* La campagne sera fractionnée proportionnellement aux nombres de créneaux entre le jour et l'heure de démarrage, et le jour et l'heure de fin souhaitée.
*
* @ORM\Column(type="json", nullable=true)
*
* @Assert\All({
* @Assert\Type(type="int"),
* })
*
* @Assert\NotBlank(allowNull=true)
*/
protected ?array $creneaux = null;
/**
* @var integer|null
*
* Obligatoire pour l'envoi échelonné
* 1,2,3,4 ou 6
* Nombre d'envoi(s) par heure
*
* @ORM\Column(type="integer", nullable=true)
*
* @Assert\Choice({1, 2, 3, 4, 6})
* @Assert\Type(type="integer")
*/
protected ?int $creneauxHeure = null;
/**
* @var integer|null
*
* Obligatoire pour l'envoi échelonné
* Tableau avec 1,2,3,4,5,6
* Jours d'envoi (1 représentant lundi). Pas d'envoi le dimanche.
*
* @ORM\Column(type="integer", nullable=true)
*
* @Assert\Length(min=1, max=6)
* @Assert\Type(type="integer")
*/
protected ?int $jours = null;
/**
* @var string|null
*
* Fuseau horaire
*
* @ORM\Column(type="string", nullable=true)
*
* @Assert\Type(type="string")
*/
protected ?string $timezone = null;
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return string
*/
public function getMessage(): string
{
return $this->message;
}
/**
* @param string $message
*
* @return $this
*/
public function setMessage(string $message): SmsSpotHitCampain
{
$this->message = $message;
return $this;
}
/**
* @return array|string[]
*/
public function getDestinataires(): array
{
return $this->destinataires;
}
/**
* @param array $destinataires
*
* @return $this
*/
public function setDestinataires(array $destinataires): SmsSpotHitCampain
{
$this->destinataires = $destinataires;
return $this;
}
/**
* @return string|null
*/
public function getExpediteur(): ?string
{
return $this->expediteur;
}
/**
* @param string|null $expediteur
*
* @return $this
*/
public function setExpediteur(?string $expediteur): SmsSpotHitCampain
{
$this->expediteur = $expediteur;
return $this;
}
/**
* @return bool
*/
public function isSmslong(): bool
{
return $this->smslong;
}
/**
* @param bool $smslong
*
* @return $this
*/
public function setSmslong(bool $smslong): SmsSpotHitCampain
{
$this->smslong = $smslong;
return $this;
}
/**
* @return int|null
*/
public function getSmslongnbr(): ?int
{
return $this->smslongnbr;
}
/**
* @param int|null $smslongnbr
*
* @return $this
*/
public function setSmslongnbr(?int $smslongnbr): SmsSpotHitCampain
{
$this->smslongnbr = $smslongnbr;
return $this;
}
/**
* @return bool
*/
public function isTronque(): bool
{
return $this->tronque;
}
/**
* @param bool $tronque
*
* @return $this
*/
public function setTronque(bool $tronque): SmsSpotHitCampain
{
$this->tronque = $tronque;
return $this;
}
/**
* @return string|null
*/
public function getEncodage(): ?string
{
return $this->encodage;
}
/**
* @param string|null $encodage
*
* @return $this
*/
public function setEncodage(?string $encodage): SmsSpotHitCampain
{
$this->encodage = $encodage;
return $this;
}
/**
* @return string|null
*/
public function getNom(): ?string
{
return $this->nom;
}
/**
* @param string|null $nom
*
* @return $this
*/
public function setNom(?string $nom): SmsSpotHitCampain
{
$this->nom = $nom;
return $this;
}
/**
* @return string|null
*/
public function getDestinatairesType(): ?string
{
return $this->destinatairesType;
}
/**
* @param string|null $destinatairesType
*
* @return $this
*/
public function setDestinatairesType(?string $destinatairesType): SmsSpotHitCampain
{
$this->destinatairesType = $destinatairesType;
return $this;
}
/**
* @return string|null
*/
public function getUrl(): ?string
{
return $this->url;
}
/**
* @param string|null $url
*
* @return $this
*/
public function setUrl(?string $url): SmsSpotHitCampain
{
$this->url = $url;
return $this;
}
/**
* @return array|int[]|null
*/
public function getCreneaux(): ?array
{
return $this->creneaux;
}
/**
* @param array|null $creneaux
*
* @return $this
*/
public function setCreneaux(?array $creneaux): SmsSpotHitCampain
{
$this->creneaux = $creneaux;
return $this;
}
/**
* @return int|null
*/
public function getCreneauxHeure(): ?int
{
return $this->creneauxHeure;
}
/**
* @param int|null $creneauxHeure
*
* @return $this
*/
public function setCreneauxHeure(?int $creneauxHeure): SmsSpotHitCampain
{
$this->creneauxHeure = $creneauxHeure;
return $this;
}
/**
* @return int|null
*/
public function getJours(): ?int
{
return $this->jours;
}
/**
* @param int|null $jours
*
* @return $this
*/
public function setJours(?int $jours): SmsSpotHitCampain
{
$this->jours = $jours;
return $this;
}
/**
* @return string|null
*/
public function getTimezone(): ?string
{
return $this->timezone;
}
/**
* @param string|null $timezone
*
* @return $this
*/
public function setTimezone(?string $timezone): SmsSpotHitCampain
{
$this->timezone = $timezone;
return $this;
}
/**
* @return \DateTime|null
*/
public function getDate(): ?\DateTime
{
return $this->date;
}
/**
* @param \DateTime|null $date
*
* @return $this
*/
public function setDate(?\DateTime $date): SmsSpotHitCampain
{
$this->date = $date;
return $this;
}
/**
* @return \DateTime|null
*/
public function getDateDebut(): ?\DateTime
{
return $this->dateDebut;
}
/**
* @param \DateTime|null $dateDebut
*
* @return $this
*/
public function setDateDebut(?\DateTime $dateDebut): SmsSpotHitCampain
{
$this->dateDebut = $dateDebut;
return $this;
}
/**
* @return \DateTime|null
*/
public function getDateFin(): ?\DateTime
{
return $this->dateFin;
}
/**
* @param \DateTime|null $dateFin
*
* @return $this
*/
public function setDateFin(?\DateTime $dateFin): SmsSpotHitCampain
{
$this->dateFin = $dateFin;
return $this;
}
/**
* @return int|null
*/
public function getIdSpotHit(): ?int
{
return $this->idSpotHit;
}
/**
* @param int|null $idSpotHit
*
* @return $this
*/
public function setIdSpotHit(?int $idSpotHit): SmsSpotHitCampain
{
$this->idSpotHit = $idSpotHit;
return $this;
}
/**
* @return string
*/
public function getProduit(): string
{
return SpotHitCampainInterface::PRODUIT_SMS;
}
}