<?php
namespace App\Entity\GuardianRegister;
use App\Entity\Admin;
use App\Entity\EarlyPayment;
use App\Entity\Guardian;
use App\Entity\GuardianContract;
use App\Entity\MontonioLog;
use App\Repository\GuardianRegister\GuardianRegisterRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=GuardianRegisterRepository::class)
* @ORM\Table(name="guardian_register", indexes={
* @ORM\Index(name="gr_sales_person_idx", columns={"sales_person_id"}),
* @ORM\Index(name="gr_guardian_idx", columns={"guardian_id"})
* })
*/
class GuardianRegister
{
const STATUS_NEW = [
'value' => "NEW",
'text' => 'Naujas',
'color' => '#f8d7da'
];
const STATUS_IGNORED = [
'value' => "IGNORED",
'text' => 'Nepakėlė',
'color' => '#fff3cd'
];
const STATUS_SENT = [
'value' => "SENT",
'text' => 'Išsiųsta',
'color' => '#d4edda'
];
const STATUS_SLEEP = [
'value' => "SLEEP",
'text' => 'Sleep',
'color' => '#FF0000'
];
const STATUS_DECLINED = [
'value' => "DECLINED",
'text' => 'Atmesta',
'color' => '#ffa600'
];
const STATUS_CONFIRMED = [
'value' => "CONFIRMED",
'text' => 'Patvirtinta',
'color' => '#ffa600'
];
const STATUS_LOST = [
'value' => "LOST",
'text' => 'Lost',
'color' => '#45C6F6'
];
const STATUS_UNTARGETED = [
'value' => "UNTARGETED",
'text' => 'Netikslinė',
'color' => '#c75b5b'
];
//Laukiama - kai uždedame varnele, jog mokėjimas į priekį ir klientas gauna laišką. Max šitą statusą turi 48 val. Jeigu neapmoka.
//Lost 48 - klientas laiške paspaudė, kad jo nedomina.
//Apmokėta pirma - tokį statusą rodome, kai apmokėta pirma pamoka, klientas jau atsiranda ir Tėvai/Klientai, bet dar vis lieka ir tabe Registracijos, jos SALES galėtų matyti ir apmokės ir toliau po pirmos pamokos.
//Nesumokėta 48 - klientų statusas, kurie neapmokėjo už pirmą pamoką per 48 val.
//Neapmokėta - klientai po 24 val. Po pirmos pamokos gauna laiška, kuriame yra visa arba dalinė mėnesio užsiėmimų saskaita. Jeigu po to laiško gavimo klientas neapmoką per 48 val. Užsideda šitas statusas.
const STATUS_WAITING = [
'value' => "WAITING",
'text' => 'Laukiama',
'color' => '#d4edda'
];
const STATUS_LOST_48 = [
'value' => "LOST_48",
'text' => 'Lost 48',
'color' => '#45C6F6'
];
const STATUS_PAID_FIRST = [
'value' => "PAID_FIRST",
'text' => 'Apmokėta pirma',
'color' => '#28a745'
];
const STATUS_NOT_PAID = [
'value' => "NOT_PAID",
'text' => 'Neapmokėta',
'color' => '#f8d7da'
];
const STATUS_NOT_PAID_48 = [
'value' => "NOTPAID_48",
'text' => 'Nesumokėta 48',
'color' => '#FF0000'
];
const STATUS_LEFT_EARLY_PAYMENT = [
'value' => "LEFT_EARLY_PAYMENT",
'text' => 'Išėjęs mok. į priekį',
'color' => '#FF0000'
];
const GUARDIAN_REGISTER_STATUSES = [
self::STATUS_NEW,
self::STATUS_IGNORED,
self::STATUS_SENT,
self::STATUS_SLEEP,
self::STATUS_DECLINED,
self::STATUS_CONFIRMED,
self::STATUS_LOST,
self::STATUS_UNTARGETED,
self::STATUS_WAITING,
self::STATUS_LOST_48,
self::STATUS_PAID_FIRST,
self::STATUS_NOT_PAID,
self::STATUS_NOT_PAID_48,
self::STATUS_LEFT_EARLY_PAYMENT,
];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"GuardianRegisterList"})
*/
private $id;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $isGuardian = true;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $email = 'nesuvestasemailas@gmail.com';
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $name;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $lastname;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $phone = '8888888888';
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $guardianName;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $guardianLastname;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $guardianPhone;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $guardianEmail;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $createdAt;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $status = self::STATUS_NEW['value'];
/**
* @ORM\ManyToOne(targetEntity=Admin::class, inversedBy="guardianRegisters")
* @Groups({"GuardianRegisterList", "ChildPreferenceAssignmentList","GuardianList"})
*/
private $salesPerson;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $ignoredEmailCount = 0;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $sign = true;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $contractToken;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $cancelToken;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $contractGeneratedAt;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $marksignUrl;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $marksignDocumentId;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $contractEmailCount = 0;
/**
* @ORM\OneToMany(targetEntity=GuardianRegisterChild::class, mappedBy="guardianRegister")
*/
private $guardianRegisterChildren;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $signedContractUrl;
/**
* @ORM\OneToOne(targetEntity=Guardian::class, inversedBy="guardianRegister", cascade={"persist", "remove"})
* @Groups({"GuardianRegisterList"})
*/
private $guardian;
/**
* @ORM\Column(type="float", nullable=true)
*/
private $priceChange;
/**
* @ORM\ManyToOne(targetEntity=GuardianContract::class, inversedBy="guardianRegisters")
*/
private $guardianContract;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $currentGuardianFoundBy;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $salesAssignedAt;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $contractSentAt;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $contractSignedAt;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $comment;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"GuardianRegisterList"})
*/
private $recallAt;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $lostAt;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $ignoredAt;
/**
* @ORM\Column(type="boolean", nullable=true,options={"default" : "0"})
*/
private $isDeleted = false;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $flagTrial;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $guardianPriceDiscount;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"GuardianRegisterList", "ChildPreferenceAssignmentList"})
*/
private $referralCode;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $referralBonusUsed;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $googleSessionId;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $googleClientId;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $ad;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $referer;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $refererCategory;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $utmSource;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $utmMedium;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $utmCampaign;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $landingPage;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $flagManualAssignment;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $flagEarlyPayment;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $earlyPaymentDay;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $earlyPaymentToken;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $earlyPaymentTokenValidTo;
/**
* @ORM\OneToMany(targetEntity=EarlyPayment::class, mappedBy="guardianRegister")
*/
private $earlyPayments;
/**
* @ORM\OneToMany(targetEntity=MontonioLog::class, mappedBy="guardianRegister")
*/
private $montonioLogs;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $earlyPaymentSentAt;
/**
* @ORM\Column(type="json", nullable=true)
*/
private $data;
public function __construct()
{
$this->createdAt = new \DateTime();
$this->guardianRegisterChildren = new ArrayCollection();
$this->earlyPayments = new ArrayCollection();
$this->montonioLogs = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getIsGuardian(): ?bool
{
return $this->isGuardian;
}
public function setIsGuardian(?bool $isGuardian): self
{
$this->isGuardian = $isGuardian;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(?string $email): self
{
$this->email = $email;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): self
{
$this->name = $name;
return $this;
}
public function getLastname(): ?string
{
return $this->lastname;
}
public function setLastname(?string $lastname): self
{
$this->lastname = $lastname;
return $this;
}
public function getPhone(): ?string
{
return $this->phone;
}
public function setPhone(?string $phone): self
{
$phone = str_replace(' ', '', $phone);
$this->phone = $phone;
return $this;
}
public function getGuardianName(): ?string
{
return $this->guardianName;
}
public function setGuardianName(?string $guardianName): self
{
$this->guardianName = $guardianName;
return $this;
}
public function getGuardianLastname(): ?string
{
return $this->guardianLastname;
}
public function setGuardianLastname(?string $guardianLastname): self
{
$this->guardianLastname = $guardianLastname;
return $this;
}
public function getGuardianPhone(): ?string
{
return $this->guardianPhone;
}
public function setGuardianPhone(?string $guardianPhone): self
{
$guardianPhone = str_replace(' ', '', $guardianPhone);
$this->guardianPhone = $guardianPhone;
return $this;
}
public function getGuardianEmail(): ?string
{
return $this->guardianEmail;
}
public function setGuardianEmail(?string $guardianEmail): self
{
$this->guardianEmail = $guardianEmail;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(?\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(?string $status): self
{
$this->status = $status;
return $this;
}
public function getSalesPerson(): ?Admin
{
return $this->salesPerson;
}
public function setSalesPerson(?Admin $salesPerson): self
{
$this->salesPerson = $salesPerson;
return $this;
}
public function getIgnoredEmailCount(): ?int
{
return $this->ignoredEmailCount;
}
public function setIgnoredEmailCount(?int $ignoredEmailCount): self
{
$this->ignoredEmailCount = $ignoredEmailCount;
return $this;
}
public function getSign(): ?bool
{
return $this->sign;
}
public function setSign(?bool $sign): self
{
$this->sign = $sign;
return $this;
}
public function getContractToken(): ?string
{
return $this->contractToken;
}
public function setContractToken(?string $contract_token): self
{
$this->contractToken = $contract_token;
return $this;
}
public function getCancelToken(): ?string
{
return $this->cancelToken;
}
public function setCancelToken(?string $cancel_token): self
{
$this->cancelToken = $cancel_token;
return $this;
}
public function getContractGeneratedAt(): ?\DateTimeInterface
{
return $this->contractGeneratedAt;
}
public function setContractGeneratedAt(?\DateTimeInterface $contractGeneratedAt): self
{
$this->contractGeneratedAt = $contractGeneratedAt;
return $this;
}
public function getMarksignUrl(): ?string
{
return $this->marksignUrl;
}
public function setMarksignUrl(?string $marksignUrl): self
{
$this->marksignUrl = $marksignUrl;
return $this;
}
public function getMarksignDocumentId(): ?string
{
return $this->marksignDocumentId;
}
public function setMarksignDocumentId(?string $marksignDocumentId): self
{
$this->marksignDocumentId = $marksignDocumentId;
return $this;
}
public function getContractEmailCount(): ?int
{
return $this->contractEmailCount;
}
public function setContractEmailCount(?int $contractEmailCount): self
{
$this->contractEmailCount = $contractEmailCount;
return $this;
}
/**
* @return Collection<int, GuardianRegisterChild>
*/
public function getGuardianRegisterChildren(): Collection
{
return $this->guardianRegisterChildren;
}
public function addGuardianRegisterChild(GuardianRegisterChild $guardianRegisterChild): self
{
if (!$this->guardianRegisterChildren->contains($guardianRegisterChild)) {
$this->guardianRegisterChildren[] = $guardianRegisterChild;
$guardianRegisterChild->setGuardianRegister($this);
}
return $this;
}
public function removeGuardianRegisterChild(GuardianRegisterChild $guardianRegisterChild): self
{
if ($this->guardianRegisterChildren->removeElement($guardianRegisterChild)) {
// set the owning side to null (unless already changed)
if ($guardianRegisterChild->getGuardianRegister() === $this) {
$guardianRegisterChild->setGuardianRegister(null);
}
}
return $this;
}
public function getSignedContractUrl(): ?string
{
return $this->signedContractUrl;
}
public function setSignedContractUrl(?string $signedContractUrl): self
{
$this->signedContractUrl = $signedContractUrl;
return $this;
}
public function getGuardian(): ?Guardian
{
return $this->guardian;
}
public function setGuardian(?Guardian $guardian): self
{
$this->guardian = $guardian;
return $this;
}
public function getPriceChange(): ?float
{
return $this->priceChange;
}
public function setPriceChange(?float $priceChange): self
{
$this->priceChange = $priceChange;
return $this;
}
public function getGuardianContract(): ?GuardianContract
{
return $this->guardianContract;
}
public function setGuardianContract(?GuardianContract $guardianContract): self
{
$this->guardianContract = $guardianContract;
return $this;
}
public function getCurrentGuardianFoundBy(): ?string
{
return $this->currentGuardianFoundBy;
}
public function setCurrentGuardianFoundBy(?string $currentGuardianFoundBy): self
{
$this->currentGuardianFoundBy = $currentGuardianFoundBy;
return $this;
}
public function getSalesAssignedAt(): ?\DateTimeInterface
{
return $this->salesAssignedAt;
}
public function setSalesAssignedAt(?\DateTimeInterface $salesAssignedAt): self
{
$this->salesAssignedAt = $salesAssignedAt;
return $this;
}
public function getContractSentAt(): ?\DateTimeInterface
{
return $this->contractSentAt;
}
public function setContractSentAt(?\DateTimeInterface $contractSentAt): self
{
$this->contractSentAt = $contractSentAt;
return $this;
}
public function getContractSignedAt(): ?\DateTimeInterface
{
return $this->contractSignedAt;
}
public function setContractSignedAt(?\DateTimeInterface $contractSignedAt): self
{
$this->contractSignedAt = $contractSignedAt;
return $this;
}
public function getComment(): ?string
{
return $this->comment;
}
public function setComment(?string $comment): self
{
$this->comment = $comment;
return $this;
}
public function getRecallAt(): ?\DateTimeInterface
{
return $this->recallAt;
}
public function setRecallAt(?\DateTimeInterface $recallAt): self
{
$this->recallAt = $recallAt;
return $this;
}
public function getLostAt(): ?\DateTimeInterface
{
return $this->lostAt;
}
public function setLostAt(?\DateTimeInterface $lostAt): self
{
$this->lostAt = $lostAt;
return $this;
}
public function getIgnoredAt(): ?\DateTimeInterface
{
return $this->ignoredAt;
}
public function setIgnoredAt(?\DateTimeInterface $ignoredAt): self
{
$this->ignoredAt = $ignoredAt;
return $this;
}
public function getIsDeleted(): ?bool
{
return $this->isDeleted;
}
public function setIsDeleted(?bool $isDeleted): self
{
$this->isDeleted = $isDeleted;
return $this;
}
public function getFlagTrial(): ?bool
{
return $this->flagTrial;
}
public function setFlagTrial(?bool $flagTrial): self
{
$this->flagTrial = $flagTrial;
return $this;
}
public function getGuardianPriceDiscount(): ?int
{
return $this->guardianPriceDiscount;
}
public function setGuardianPriceDiscount(?int $guardianPriceDiscount): self
{
$this->guardianPriceDiscount = $guardianPriceDiscount;
return $this;
}
public function getReferralCode(): ?string
{
return $this->referralCode;
}
public function setReferralCode(?string $referralCode): self
{
$this->referralCode = $referralCode;
return $this;
}
public function isReferralBonusUsed(): ?bool
{
return $this->referralBonusUsed;
}
public function setReferralBonusUsed(?bool $referralBonusUsed): self
{
$this->referralBonusUsed = $referralBonusUsed;
return $this;
}
public function getGoogleSessionId(): ?string
{
return $this->googleSessionId;
}
public function setGoogleSessionId(?string $googleSessionId): self
{
$this->googleSessionId = $googleSessionId;
return $this;
}
public function getGoogleClientId(): ?string
{
return $this->googleClientId;
}
public function setGoogleClientId(?string $googleClientId): self
{
$this->googleClientId = $googleClientId;
return $this;
}
public function getAd(): ?string
{
return $this->ad;
}
public function setAd(?string $ad): self
{
$this->ad = $ad;
return $this;
}
public function getReferer(): ?string
{
return $this->referer;
}
public function setReferer(?string $referer): self
{
$this->referer = $referer;
return $this;
}
public function getRefererCategory(): ?string
{
return $this->refererCategory;
}
public function setRefererCategory(?string $refererCategory): self
{
$this->refererCategory = $refererCategory;
return $this;
}
public function getUtmSource(): ?string
{
return $this->utmSource;
}
public function setUtmSource(?string $utmSource): self
{
$this->utmSource = $utmSource;
return $this;
}
public function getUtmMedium(): ?string
{
return $this->utmMedium;
}
public function setUtmMedium(?string $utmMedium): self
{
$this->utmMedium = $utmMedium;
return $this;
}
public function getUtmCampaign(): ?string
{
return $this->utmCampaign;
}
public function setUtmCampaign(?string $utmCampaign): self
{
$this->utmCampaign = $utmCampaign;
return $this;
}
public function getLandingPage(): ?string
{
return $this->landingPage;
}
public function setLandingPage(?string $landingPage): self
{
$this->landingPage = $landingPage;
return $this;
}
public function isFlagManualAssignment(): ?bool
{
return $this->flagManualAssignment;
}
public function setFlagManualAssignment(?bool $flagManualAssignment): self
{
$this->flagManualAssignment = $flagManualAssignment;
return $this;
}
public function isFlagEarlyPayment(): ?bool
{
return $this->flagEarlyPayment;
}
public function setFlagEarlyPayment(?bool $flagEarlyPayment): self
{
$this->flagEarlyPayment = $flagEarlyPayment;
return $this;
}
public function getEarlyPaymentDay(): ?int
{
return $this->earlyPaymentDay;
}
public function setEarlyPaymentDay(?int $earlyPaymentDay): self
{
$this->earlyPaymentDay = $earlyPaymentDay;
return $this;
}
public function getEarlyPaymentToken(): ?string
{
return $this->earlyPaymentToken;
}
public function setEarlyPaymentToken(?string $earlyPaymentToken): self
{
$this->earlyPaymentToken = $earlyPaymentToken;
return $this;
}
public function getEarlyPaymentTokenValidTo(): ?\DateTimeInterface
{
return $this->earlyPaymentTokenValidTo;
}
public function setEarlyPaymentTokenValidTo(?\DateTimeInterface $earlyPaymentTokenValidTo): self
{
$this->earlyPaymentTokenValidTo = $earlyPaymentTokenValidTo;
return $this;
}
/**
* @return Collection<int, EarlyPayment>
*/
public function getEarlyPayments(): Collection
{
return $this->earlyPayments;
}
public function addEarlyPayment(EarlyPayment $earlyPayment): self
{
if (!$this->earlyPayments->contains($earlyPayment)) {
$this->earlyPayments[] = $earlyPayment;
$earlyPayment->setGuardianRegister($this);
}
return $this;
}
public function removeEarlyPayment(EarlyPayment $earlyPayment): self
{
if ($this->earlyPayments->removeElement($earlyPayment)) {
// set the owning side to null (unless already changed)
if ($earlyPayment->getGuardianRegister() === $this) {
$earlyPayment->setGuardianRegister(null);
}
}
return $this;
}
/**
* @return Collection<int, MontonioLog>
*/
public function getMontonioLogs(): Collection
{
return $this->montonioLogs;
}
public function addMontonioLog(MontonioLog $montonioLog): self
{
if (!$this->montonioLogs->contains($montonioLog)) {
$this->montonioLogs[] = $montonioLog;
$montonioLog->setGuardianRegister($this);
}
return $this;
}
public function removeMontonioLog(MontonioLog $montonioLog): self
{
if ($this->montonioLogs->removeElement($montonioLog)) {
// set the owning side to null (unless already changed)
if ($montonioLog->getGuardianRegister() === $this) {
$montonioLog->setGuardianRegister(null);
}
}
return $this;
}
public function getEarlyPaymentSentAt(): ?\DateTimeInterface
{
return $this->earlyPaymentSentAt;
}
public function setEarlyPaymentSentAt(?\DateTimeInterface $earlyPaymentSentAt): self
{
$this->earlyPaymentSentAt = $earlyPaymentSentAt;
return $this;
}
public function getData(): ?array
{
return $this->data;
}
public function setData(?array $data): self
{
$this->data = $data;
return $this;
}
}