<?php
namespace App\Entity;
use App\Entity\Abstracts\SpotHitStatus;
use App\Traits\DateTrait;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
/**
* @ORM\Entity
*/
class SmsSpotHitStatus extends SpotHitStatus
{
use DateTrait;
const STATUT_EN_ATTENTE = 0;
const STATUT_LIVRE = 1;
const STATUT_ENVOYE = 2;
const STATUT_EN_COURS = 3;
const STATUT_ECHEC = 4;
const STATUT_EXPIRE = 5;
/**
* @var int|null
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected ?int $id = null;
/**
* @var integer|null
*
* Identifiant unique du message pour ce numéro
*
* @ORM\Column(type="integer", nullable=true)
*
* @Assert\GreaterThan(0)
* @Assert\Type(type="integer")
*/
protected ?int $idAccuse = null;
/**
* @var integer|null
*
* Identifiant commun en cas d'envoi d'un message groupé.
*
* @ORM\Column(type="integer", nullable=true)
*
* @Assert\GreaterThan(0)
* @Assert\Type(type="integer")
*/
protected ?int $idMessage = null;
/**
* @var string
*
* @ORM\Column(type="string")
*
* @Assert\Type(type="string")
* @Assert\NotBlank
*/
protected string $numero = '';
/**
* @var integer
*
* 0 = En attente
* Le SMS est en attente d'envoi, généralement il concerne une campagne programmée
* 1 = Livré
* Le SMS a bien été livré sur un mobile allumé. Avec 95% de taux de lecture moyen (étude Médiamétrie AFMM), il est fort probable qu'il soit également lu par le destinataire dans les minutes qui suivent la réception
* 2 = Envoyé
* Le SMS a bien été envoyé sur un numéro valide, mais le mobile est pour l’instant injoignable (éteint, pas de réseau, SIM pleine...). Durant 48h, les opérateurs essayent de livrer à nouveau le SMS sur le mobile. Si ce dernier reste injoignable après ce délai, le statut se transformera en « expiré »
* 3 = En cours
* Le SMS est en cours d'envoi, ce statut évoluera rapidement
* 4 = Echec
* Le SMS a expiré, car le mobile du destinataire reste injoignable après 48h. Le numéro de téléphone est annoncé valide par les opérateurs, si le mobile est de nouveau joignable lors des prochaines campagnes le SMS sera correctement reçu
* 5 = Expiré
* Le SMS n'a pas pu être délivré, car le numéro est annoncé inaccessible par les opérateurs
*
* (Les statuts 1, 4 et 5 sont définitifs.)
*
* @ORM\Column(type="integer")
*
* @Assert\Choice({0, 1, 2, 3, 4, 5})
* @Assert\Type(type="integer")
*/
protected int $statut = self::STATUT_EN_ATTENTE;
/**
* @var \DateTime|null
*
* @ORM\Column(type="datetime")
*
* @Assert\Type(type="\DateTime")
* @Assert\NotBlank
*/
protected ?\DateTime $dateEnvoi = null;
/**
* @var \DateTime|null
*
* Date de dernière mise à jour du statut
*
* @ORM\Column(type="datetime")
*
* @Assert\Type(type="\DateTime")
* @Assert\NotBlank
*/
protected ?\DateTime $dateUpdate = null;
/**
* @var integer
*
* Statut détaillé de 0 à 9999 (détails à demander au gestionnaire de compte)
*
* @ORM\Column(type="integer")
*
* @Assert\Length(min=0, max=9999)
* @Assert\Type(type="integer")
*/
protected int $statutCode = -1;
/**
* @var SmsSpotHitCampaign|null
*
* @ORM\ManyToOne(targetEntity="SmsSpotHitCampaign")
* @ORM\JoinColumn(nullable=false)
*
* @Assert\Valid
* @Assert\Type(type="App\Entity\smsSpotHitCampaign")
* @Assert\NotBlank
*/
protected ?SmsSpotHitCampaign $campaign = null;
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context)
{
if(empty($this->idAccuse) && empty($this->idMessage))
{
$context->buildViolation("L'identifiant du sms doit être renseigné")
->atPath('idAccuse')
->addViolation();
}
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return int|null
*/
public function getIdAccuse(): ?int
{
return $this->idAccuse;
}
/**
* @param int|null $idAccuse
* @return $this
*/
public function setIdAccuse(?int $idAccuse): SmsSpotHitStatus
{
$this->idAccuse = $idAccuse;
return $this;
}
/**
* @return int|null
*/
public function getIdMessage(): ?int
{
return $this->idMessage;
}
/**
* @param int|null $idMessage
* @return $this
*/
public function setIdMessage(?int $idMessage): SmsSpotHitStatus
{
$this->idMessage = $idMessage;
return $this;
}
/**
* @return string
*/
public function getNumero(): string
{
return $this->numero;
}
/**
* @param string $numero
* @return $this
*/
public function setNumero(string $numero): SmsSpotHitStatus
{
$this->numero = $numero;
return $this;
}
/**
* @return int
*/
public function getStatut(): int
{
return $this->statut;
}
/**
* @param int $statut
* @return $this
*/
public function setStatut(int $statut): SmsSpotHitStatus
{
$this->statut = $statut;
return $this;
}
/**
* @return \DateTime|null
*/
public function getDateEnvoi(): ?\DateTime
{
return $this->dateEnvoi;
}
/**
* @param \DateTime|null $dateEnvoi
* @return $this
*/
public function setDateEnvoi(?\DateTime $dateEnvoi): SmsSpotHitStatus
{
$this->dateEnvoi = $dateEnvoi;
return $this;
}
/**
* @return \DateTime|null
*/
public function getDateUpdate(): ?\DateTime
{
return $this->dateUpdate;
}
/**
* @param \DateTime|null $dateUpdate
* @return $this
*/
public function setDateUpdate(?\DateTime $dateUpdate): SmsSpotHitStatus
{
$this->dateUpdate = $dateUpdate;
return $this;
}
/**
* @return int
*/
public function getStatutCode(): int
{
return $this->statutCode;
}
/**
* @param int $statutCode
* @return $this
*/
public function setStatutCode(int $statutCode): SmsSpotHitStatus
{
$this->statutCode = $statutCode;
return $this;
}
/**
* @return SmsSpotHitCampaign|null
*/
public function getCampaign(): ?SmsSpotHitCampaign
{
return $this->campaign;
}
/**
* @param SmsSpotHitCampaign $campaign
*
* @return $this
*/
public function setCampaign(SmsSpotHitCampaign $campaign): SmsSpotHitStatus
{
$this->campaign = $campaign;
return $this;
}
}