<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity
* @ORM\Table(name="mmpp_preinscription")
* @ORM\Entity(repositoryClass="App\Repository\PreinscriptionRepository");
* @ORM\HasLifecycleCallbacks
*/
class Preinscription
{
CONST PREINSCRIPTIONS_STATES = [
1 => 'Créés',
2 => 'File d\'attente',
3 => 'Stages',
4 => 'Payés & annulés',
5 => 'Internat',
];
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
* @var string
*/
protected $firstname;
/**
* @ORM\Column(type="string")
* @var string
*/
protected $lastname;
/**
* @ORM\Column(name="generated_key", type="string", length=255)
* @var String
*/
protected $generatedKey;
/**
* @ORM\Column(type="boolean")
* @var boolean
*/
protected $validated;
/**
* @ORM\Column(type="boolean", nullable=true)
* @var boolean
*/
protected $deleted;
/**
* @ORM\Column(name="email_send", type="boolean")
* @var boolean
*/
protected $emailSend;
/**
* @ORM\Column(type="datetime", name="created_on")
* @var \DateTime
*/
protected $createdOn;
/**
* @ORM\Column(type="datetime", name="updated_on")
* @var \DateTime
*/
protected $updatedOn;
/**
* @ORM\Column(type="string", name="payment_type")
* @var string
*/
private $paymentType;
/**
* @ORM\ManyToOne(targetEntity="Center", inversedBy="preinscriptions")
* @ORM\JoinColumn(name="center_id", referencedColumnName="id")
*/
protected $center;
/**
* @ORM\ManyToOne(targetEntity="Formulaire", inversedBy="preinscriptions")
* @ORM\JoinColumn(name="formulaire_id", referencedColumnName="id")
*/
protected $formulaire;
/**
* @ORM\OneToMany(targetEntity="PreinscriptionData", mappedBy="preinscription")
*/
protected $datas;
/**
* @ORM\OneToMany(targetEntity="InscriptionFileLog", mappedBy="preinscription")
* @var InscriptionFileLog[]
*/
protected $logs;
/**
* @ORM\OneToMany(targetEntity="Transaction", mappedBy="preinscription")
* @ORM\OrderBy({"transactionDatetime": "desc"})
*/
protected $transactions;
/**
* @ORM\ManyToOne(targetEntity="Periode", inversedBy="preinscriptions")
* @ORM\JoinColumn(name="periode_id", referencedColumnName="id")
*/
protected $periode;
/**
* @ORM\Column(name="email_reminder_first", type="datetime", nullable=true)
* @var \DateTime
*/
protected $emailReminderFirst;
/**
* @ORM\Column(name="email_reminder_second", type="datetime", nullable=true)
* @var \DateTime
*/
protected $emailReminderSecond;
/**
* @ORM\Column(name="email_ar_send", type="datetime", nullable=true)
* @var \DateTime
*/
protected $emailArSend;
/**
* @ORM\Column(name="email_pr_link_send", type="datetime", nullable=true)
* @var \DateTime
*/
protected $emailPrLinkSend;
/**
* @ORM\Column(name="email_pr_ar_send", type="datetime", nullable=true)
* @var \DateTime
*/
protected $emailPrArSend;
/**
* @ORM\Column(name="memo", type="string", nullable=true, length=255)
* @var String
*/
protected $memo;
/**
* @ORM\Column(name="state", type="integer", length=1)
* @var integer
*/
protected $state = 0;
/**
* @ORM\Column(name="cancelled_at", type="datetime", nullable=true)
* @var \DateTime
*/
protected $cancelledAt;
public function __construct()
{
$this->datas = new ArrayCollection();
$this->logs = new ArrayCollection();
$this->transactions = new ArrayCollection();
}
/**
* Get name for display
*/
public function getName()
{
return $this->lastname.' '.$this->firstname;
}
/**
* Get email to send inscription
*/
public function getEmail()
{
$email = null;
foreach ($this->datas as $data) {
if ($data->getKey() == 'Adresse e-mail') {
$email = $data->getValue();
}
if ($data->getKey() == "Adresse e-mail de l'étudiant") {
$email = $data->getValue();
}
}
return $email;
}
public function getEmailParent()
{
$email = null;
foreach ($this->datas as $data) {
if ($data->getKey() == 'Adresse e-mail des parents') {
$email = $data->getValue();
}
}
return $email;
}
public function getLieu()
{
$lieu = null;
foreach ($this->datas as $data) {
if ($data->getKey() == 'Lieu') {
$lieu = $data->getValue();
}
}
return $lieu;
}
public function hasSuccessfulTransaction()
{
/** @var Transaction $transaction */
foreach ($this->getTransactions() as $transaction) {
if ($transaction->getResponseCode() === '00' || $transaction->getResponseCode() === '00000000') {
return true;
}
}
return false;
}
public function hasAValidPayment(): bool
{
if ($this->getPaymentType() === 'manual' || $this->getPaymentType() === 'check') {
return true;
}
/** @var Transaction $transaction */
foreach ($this->getTransactions() as $transaction) {
if ($transaction->getResponseCode() === '00' || $transaction->getResponseCode() === '00000000') {
return true;
}
}
return false;
}
public function hasPreRentree()
{
/** @var Transaction $transaction */
foreach ($this->getDatas() as $data) {
if(str_contains($data->getKey(), 'Stage pré-rentrée')){
if(strtoupper($data->getValue()) == 'OUI'){
return true;
}
}
}
return false;
}
public function getSuccessfulTransaction()
{
foreach ($this->getTransactions() as $transaction) {
if ($transaction->getResponseCode() === '00' || $transaction->getResponseCode() === '00000000') {
return $transaction;
}
}
return null;
}
public function isValidated(): ?bool
{
return $this->validated;
}
public function isDeleted(): ?bool
{
return $this->deleted;
}
public function isEmailSend(): ?bool
{
return $this->emailSend;
}
public function getId(): ?int
{
return $this->id;
}
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 getGeneratedKey(): ?string
{
return $this->generatedKey;
}
public function setGeneratedKey(string $generatedKey): self
{
$this->generatedKey = $generatedKey;
return $this;
}
public function setValidated(bool $validated): self
{
$this->validated = $validated;
return $this;
}
public function setDeleted(?bool $deleted): self
{
$this->deleted = $deleted;
return $this;
}
public function setEmailSend(bool $emailSend): self
{
$this->emailSend = $emailSend;
return $this;
}
public function getCreatedOn(): ?\DateTimeInterface
{
return $this->createdOn;
}
public function setCreatedOn(\DateTimeInterface $createdOn): self
{
$this->createdOn = $createdOn;
return $this;
}
public function getUpdatedOn(): ?\DateTimeInterface
{
return $this->updatedOn;
}
public function setUpdatedOn(\DateTimeInterface $updatedOn): self
{
$this->updatedOn = $updatedOn;
return $this;
}
public function getPaymentType(): ?string
{
return $this->paymentType;
}
public function setPaymentType(string $paymentType): self
{
$this->paymentType = $paymentType;
return $this;
}
public function getEmailReminderFirst(): ?\DateTimeInterface
{
return $this->emailReminderFirst;
}
public function setEmailReminderFirst(?\DateTimeInterface $emailReminderFirst): self
{
$this->emailReminderFirst = $emailReminderFirst;
return $this;
}
public function getEmailReminderSecond(): ?\DateTimeInterface
{
return $this->emailReminderSecond;
}
public function setEmailReminderSecond(?\DateTimeInterface $emailReminderSecond): self
{
$this->emailReminderSecond = $emailReminderSecond;
return $this;
}
public function getEmailArSend(): ?\DateTimeInterface
{
return $this->emailArSend;
}
public function setEmailArSend(?\DateTimeInterface $emailArSend): self
{
$this->emailArSend = $emailArSend;
return $this;
}
public function getMemo(): ?string
{
return $this->memo;
}
public function setMemo(?string $memo): self
{
$this->memo = $memo;
return $this;
}
public function getState(): ?int
{
return $this->state;
}
public function setState(int $state): self
{
$this->state = $state;
return $this;
}
public function getCenter(): ?Center
{
return $this->center;
}
public function setCenter(?Center $center): self
{
$this->center = $center;
return $this;
}
public function getFormulaire(): ?Formulaire
{
return $this->formulaire;
}
public function setFormulaire(?Formulaire $formulaire): self
{
$this->formulaire = $formulaire;
return $this;
}
/**
* @return Collection<int, PreinscriptionData>
*/
public function getDatas(): Collection
{
return $this->datas;
}
public function addData(PreinscriptionData $data): self
{
if (!$this->datas->contains($data)) {
$this->datas->add($data);
$data->setPreinscription($this);
}
return $this;
}
public function removeData(PreinscriptionData $data): self
{
if ($this->datas->removeElement($data)) {
// set the owning side to null (unless already changed)
if ($data->getPreinscription() === $this) {
$data->setPreinscription(null);
}
}
return $this;
}
/**
* @return Collection<int, InscriptionFileLog>
*/
public function getLogs(): Collection
{
return $this->logs;
}
public function addLog(InscriptionFileLog $log): self
{
if (!$this->logs->contains($log)) {
$this->logs->add($log);
$log->setPreinscription($this);
}
return $this;
}
public function removeLog(InscriptionFileLog $log): self
{
if ($this->logs->removeElement($log)) {
// set the owning side to null (unless already changed)
if ($log->getPreinscription() === $this) {
$log->setPreinscription(null);
}
}
return $this;
}
/**
* @return Collection<int, Transaction>
*/
public function getTransactions(): Collection
{
return $this->transactions;
}
public function addTransaction(Transaction $transaction): self
{
if (!$this->transactions->contains($transaction)) {
$this->transactions->add($transaction);
$transaction->setPreinscription($this);
}
return $this;
}
public function removeTransaction(Transaction $transaction): self
{
if ($this->transactions->removeElement($transaction)) {
// set the owning side to null (unless already changed)
if ($transaction->getPreinscription() === $this) {
$transaction->setPreinscription(null);
}
}
return $this;
}
public function getPeriode(): ?Periode
{
return $this->periode;
}
public function setPeriode(?Periode $periode): self
{
$this->periode = $periode;
return $this;
}
/**
* @return \DateTime
*/
public function getEmailPrLinkSend(): ?\DateTime
{
return $this->emailPrLinkSend;
}
/**
* @param \DateTime $emailPrLinkSend
*/
public function setEmailPrLinkSend(\DateTime $emailPrLinkSend): void
{
$this->emailPrLinkSend = $emailPrLinkSend;
}
/**
* @return \DateTime
*/
public function getEmailPrArSend(): ?\DateTime
{
return $this->emailPrArSend;
}
/**
* @param \DateTime $emailPrArSend
*/
public function setEmailPrArSend(\DateTime $emailPrArSend): void
{
$this->emailPrArSend = $emailPrArSend;
}
public function getCancelledAt(): ?\DateTime
{
return $this->cancelledAt;
}
public function setCancelledAt(\DateTime $cancelledAt): void
{
$this->cancelledAt = $cancelledAt;
}
public function getFullName(): string
{
return $this->firstname . ' ' . $this->lastname;
}
}