<?php
namespace App\Entity;
use App\Repository\SubscriptionRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=SubscriptionRepository::class)
* @ORM\Table(name="`subscription`")
*/
class Subscription
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string")
*/
private ?string $stripeId = null;
/**
* @ORM\OneToOne (targetEntity="App\Entity\User", inversedBy="subscription")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private ?User $user = null;
/**
* @ORM\Column(type="string")
*/
private ?string $stripeUser = null;
/**
* @ORM\Column(type="string", nullable=true)
*/
private ?string $stripePlan = null;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private ?\DateTime $periodStart = null;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private ?\DateTime $periodEnd = null;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private ?\DateTime $cancelAt = null;
/**
* @ORM\Column(type="string", nullable=true)
*/
private ?string $status = null;
/**
* @ORM\Column(type="datetime")
*/
private ?\DateTime $created = null;
public function __construct()
{
$this->created = new \DateTime();
}
public function getId(): ?int
{
return $this->id;
}
public function setId(?int $id): void
{
$this->id = $id;
}
public function getStripeId(): ?string
{
return $this->stripeId;
}
public function setStripeId(?string $stripeId): void
{
$this->stripeId = $stripeId;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): void
{
$this->user = $user;
$user->setSubscription($this);
}
public function getStripeUser(): ?string
{
return $this->stripeUser;
}
public function setStripeUser(?string $stripeUser): void
{
$this->stripeUser = $stripeUser;
}
public function getStripePlan(): ?string
{
return $this->stripePlan;
}
public function setStripePlan(?string $stripePlan): void
{
$this->stripePlan = $stripePlan;
}
public function getPeriodStart(): ?\DateTime
{
return $this->periodStart;
}
public function setPeriodStart(?\DateTime $periodStart): void
{
$this->periodStart = $periodStart;
}
public function getPeriodEnd(): ?\DateTime
{
return $this->periodEnd;
}
public function setPeriodEnd(?\DateTime $periodEnd): void
{
$this->periodEnd = $periodEnd;
}
public function getCancelAt(): ?\DateTime
{
return $this->cancelAt;
}
public function setCancelAt(?\DateTime $cancelAt): void
{
$this->cancelAt = $cancelAt;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(?string $status): void
{
$this->status = $status;
}
public function getCreated(): ?\DateTime
{
return $this->created;
}
public function setCreated(?\DateTime $created): void
{
$this->created = $created;
}
public function isValid(): bool
{
if (in_array($this->status, ['active', 'past_due'])) {
return true;
}
if ('canceled' === $this->status) {
return false;
}
return null === $this->cancelAt || new \DateTime() < $this->cancelAt;
}
public function __toString(): string
{
return $this->getStripeId() ?? '';
}
}