<?php
namespace Sq\Entity\Schema\ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Sq\Entity\Affiliate\AffiliateTier;
#[ORM\Table(name: 'leaddyno_affiliate')]
#[ORM\UniqueConstraint(name: 'lda_m_id', columns: ['lda_m_id'])]
#[ORM\UniqueConstraint(name: 'lda_affiliate_code', columns: ['lda_affiliate_code'])]
#[ORM\Entity(repositoryClass: 'Sq\Service\Repository\ORM\LeadDynoAffiliateRepository')]
class LeadDynoAffiliate
{
/**
* @var int
*/
#[ORM\Id]
#[ORM\Column(name: 'lda_affiliate_extid', type: 'integer', nullable: false, options: ['unsigned' => true, 'comment' => 'Affiliate ID returned by LeadDynoApi, primary key'])]
#[ORM\OneToMany(targetEntity: LeadDynoLead::class, mappedBy: 'leadDynoAffiliate')]
#[ORM\JoinColumn(name: 'lda_affiliate_extid', referencedColumnName: 'ldl_referring_affiliate_extid', nullable: true)]
private $affiliateExternalId;
/**
* @var ?Member
*
* Note: we can store affiliates who don't have a member account, if they signed up at LeadDyno directly, or as an overhaul User
*/
#[ORM\OneToOne(targetEntity: Member::class, inversedBy: 'leadDynoAffiliate')]
#[ORM\JoinColumn(name: 'lda_m_id', referencedColumnName: 'm_id', nullable: true)]
private ?Member $member = null;
/**
* @var string|null
*/
#[ORM\Column(name: 'lda_email', type: 'binary_aes_encrypted', nullable: true)]
private ?string $email = '';
/**
* @var string|null
*/
#[ORM\Column(name: 'lda_first_name', type: 'string', length: 45, nullable: true)]
private ?string $firstName;
/**
* @var string|null
*/
#[ORM\Column(name: 'lda_last_name', type: 'string', length: 45, nullable: true)]
private ?string $lastName;
/**
* @var int|null
*/
#[ORM\Column(name: 'lda_referring_affiliate_extid', type: 'integer', nullable: true, options: ['unsigned' => true, 'comment' => 'Referring Affiliate ID returned by LeadDynoApi'])]
private ?int $referringAffiliateExternalId;
/**
* @var \DateTimeInterface
*/
#[ORM\Column(name: 'lda_date_created', type: 'datetime', nullable: true)]
private \DateTimeInterface $dateCreated;
/**
* @var \DateTimeInterface
*/
#[ORM\Column(name: 'lda_date_updated', type: 'datetime', nullable: true)]
private \DateTimeInterface $dateUpdated;
/**
* @var ?User
*
* Not used - we always store affiliates against their linked m_id.
*/
#[ORM\OneToOne(targetEntity: User::class, inversedBy: 'leadDynoAffiliate')]
#[ORM\JoinColumn(name: 'lda_u_id', referencedColumnName: 'u_id', nullable: true)]
private ?User $user = null;
/**
* @var string
*/
#[ORM\Column(name: 'lda_affiliate_code', type: 'string', length: 191, nullable: false, options: ['comment' => 'Affiliate code returned by LeadDynoApi'])]
private string $affiliateCode;
/**
* @var string
*/
#[ORM\Column(name: 'lda_affiliate_tier', type: 'string', length: 191, nullable: false, options: ['default' => 'bronze', 'comment' => 'Affiliate tier'])]
private string $affiliateTier;
/**
* @var string
*/
#[ORM\Column(name: 'lda_affiliate_dashboard_url', type: 'string', length: 191, nullable: false, options: ['comment' => "The affiliate's dashboard"])]
private string $affiliateDashboardUrl;
/**
* @var int|null
*/
#[ORM\Column(name: 'lda_mautic_id', type: 'integer', options: ['unsigned' => true])]
private $mauticId;
/**
* @var string|null
*/
#[ORM\Column(name: 'lda_status', type: 'string', length: 64, nullable: true)]
private $status;
/**
* @var string|null
*/
#[ORM\Column(name: 'lda_paypal_email', type: 'binary_aes_encrypted', nullable: true)]
private ?string $paypalEmail = '';
/**
* @var bool|null
*/
#[ORM\Column(name: 'lda_unsubscribed', type: 'boolean', nullable: true)]
private $unsubscribed;
/**
* @var bool|null
*/
#[ORM\Column(name: 'lda_archived', type: 'boolean', nullable: true)]
private $archived;
/**
* @var bool|null
*/
#[ORM\Column(name: 'lda_pending_approval', type: 'boolean', nullable: true)]
private $pendingApproval;
#[ORM\OneToMany(targetEntity: LeadDynoLead::class, mappedBy: 'leadDynoReferringAffiliate')]
private $leadDynoLeads;
public function __construct(int $affiliateExternalId, string $affiliateCode, string $affiliateDashboardUrl, AffiliateTier $affiliateTier)
{
$this->leadDynoLeads = new ArrayCollection();
$this->affiliateExternalId = $affiliateExternalId;
$this->affiliateCode = $affiliateCode;
$this->affiliateDashboardUrl = $affiliateDashboardUrl;
$this->affiliateTier = $affiliateTier->getName();
}
/**
* Affiliate may have signed up directly on LeadDyno, and not have a member account - so allow null.
*
* @return Member|null
*/
public function getMember(): ?Member
{
return $this->member;
}
public function setMember(Member $member): self
{
$this->member = $member;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(?string $email): self
{
$this->email = $email;
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 getReferringAffiliateExternalId(): ?int
{
return $this->referringAffiliateExternalId;
}
public function setReferringAffiliateExternalId(?int $referringAffiliateExternalId = null): self
{
$this->referringAffiliateExternalId = $referringAffiliateExternalId;
return $this;
}
public function getDateCreated(): ?\DateTimeInterface
{
return $this->dateCreated;
}
public function setDateCreated(\DateTimeInterface $dateCreated): self
{
$this->dateCreated = $dateCreated;
return $this;
}
public function getDateUpdated(): ?\DateTimeInterface
{
return $this->dateUpdated;
}
public function setDateUpdated(\DateTimeInterface $dateUpdated): self
{
$this->dateUpdated = $dateUpdated;
return $this;
}
/**
* Affiliate may have signed up directly on LeadDyno, and not have a user account - so allow null.
*
* @return User|null
*/
public function getUser(): ?User
{
return $this->user;
}
public function setUser(User $user): self
{
$this->user = $user;
return $this;
}
public function getAffiliateExternalId(): ?int
{
return $this->affiliateExternalId;
}
public function setAffiliateExternalId(int $affiliateExternalId): self
{
$this->affiliateExternalId = $affiliateExternalId;
return $this;
}
public function getAffiliateCode(): ?string
{
return $this->affiliateCode;
}
public function setAffiliateCode(string $affiliateCode): self
{
$this->affiliateCode = $affiliateCode;
return $this;
}
public function getAffiliateTier(): string
{
return $this->affiliateTier;
}
public function setAffiliateTier(AffiliateTier $affiliateTier): self
{
$this->affiliateTier = $affiliateTier->getName();
return $this;
}
public function getAffiliateDashboardUrl(): ?string
{
return $this->affiliateDashboardUrl;
}
public function setAffiliateDashboardUrl(string $affiliateDashboardUrl): self
{
$this->affiliateDashboardUrl = $affiliateDashboardUrl;
return $this;
}
public function getMauticId(): ?int
{
return $this->mauticId;
}
public function setMauticId(?int $mauticId): self
{
$this->mauticId = $mauticId;
return $this;
}
/**
* @return string|null
*/
public function getStatus(): ?string
{
return $this->status;
}
/**
* @param string|null $status
*
* @return LeadDynoAffiliate
*/
public function setStatus(?string $status): LeadDynoAffiliate
{
$this->status = $status;
return $this;
}
/**
* @return string|null
*/
public function getPaypalEmail(): ?string
{
return $this->paypalEmail;
}
/**
* @param string|null $paypalEmail
*
* @return LeadDynoAffiliate
*/
public function setPaypalEmail(?string $paypalEmail): self
{
$this->paypalEmail = $paypalEmail;
return $this;
}
/**
* @return bool|null
*/
public function getUnsubscribed(): ?bool
{
return $this->unsubscribed;
}
/**
* @param bool|null $unsubscribed
*
* @return LeadDynoAffiliate
*/
public function setUnsubscribed(?bool $unsubscribed): self
{
$this->unsubscribed = $unsubscribed;
return $this;
}
/**
* @return bool|null
*/
public function getArchived(): ?bool
{
return $this->archived;
}
/**
* @param bool|null $archived
*
* @return LeadDynoAffiliate
*/
public function setArchived(?bool $archived): self
{
$this->archived = $archived;
return $this;
}
/**
* @return bool|null
*/
public function getPendingApproval(): ?bool
{
return $this->pendingApproval;
}
/**
* @param bool|null $pendingApproval
*
* @return LeadDynoAffiliate
*/
public function setPendingApproval(?bool $pendingApproval): self
{
$this->pendingApproval = $pendingApproval;
return $this;
}
/**
* @return Collection|LeadDynoLead[]
*/
public function getLeadDynoLeads(): Collection
{
return $this->leadDynoLeads;
}
}