<?php
namespace App\Entity\System;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* SubscriptionLine
*
* @ORM\Table(name="subscriptions_lines")
*
* @ORM\Entity(repositoryClass="App\Repository\System\SubscriptionLineRepository")
*/
class SubscriptionLine
{
public const MANUAL_CHANGE = 'Cambio manual';
/**
* @var int
*
* @ORM\Id
*
* @ORM\GeneratedValue(strategy="AUTO")
*
* @ORM\Column(type="integer", name="id_subscription_lines")
*/
private $id;
/**
* @var Subscription
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\Subscription", inversedBy="subscriptionLines")
*
* @ORM\JoinColumn(referencedColumnName="id_subscription", name="id_subscription")
*/
private $subscription;
/**
* @var SubscriptionGroup
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\SubscriptionGroup")
*
* @ORM\JoinColumn(referencedColumnName="id_group", name="id_group")
*/
private $group;
/**
* @var string|null
*
* @ORM\Column(type="string", length=100, nullable=true)
*/
private $name;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
*/
private $dateCreate;
/**
* @var Customer|null
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\Customer", inversedBy="subscriptionLines")
*
* @ORM\JoinColumn(referencedColumnName="id_customer", name="id_customer")
*/
private $customer;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=true, options={"default": "0000-00-00 00:00:00"})
*/
private $dateDue;
/**
* @var float|null
*
* @ORM\Column(type="float", nullable=true)
*/
private $cost;
/**
* @var int
*
* @ORM\Column(type="integer", nullable=true)
*/
private $userCreate;
/**
* @var int
*
* @ORM\Column(type="integer", nullable=true)
*/
private $userMod;
/**
* @var int|null
*
* @ORM\Column(name="nintentos", columnDefinition="smallint(6)", type="integer", options={"default" : 0}, nullable=true)
*/
private $numberAttempts;
/**
* @var int|null
*
* @ORM\Column(type="boolean", columnDefinition="tinyint(4)", options={"default" : 0}, nullable=true)
*/
private $cycles;
/**
* @var int
*
* @ORM\Column(type="integer", nullable=true, options={"default": 0})
*/
private $numCycles;
/**
* @var string|null
*
* @ORM\Column(name="id_transaction", type="string", length=50, nullable=true)
*/
private $transaction;
/**
* @var array|ArrayCollection<int, SubscriptionCustomer>
*
* @ORM\OneToMany(targetEntity="App\Entity\System\SubscriptionCustomer", mappedBy="subscriptionLine", cascade={"persist"})
*/
private $subscriptionCustomers;
/**
* @ORM\Column(type="boolean", nullable=true, options={"default": 0})
*/
private bool $migrated = false;
/**
* @ORM\Column(type="string", length=64, name="internal_migration_status", nullable=true)
*/
private ?string $internalMigrationStatus;
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return Subscription
*/
public function getSubscription(): Subscription
{
return $this->subscription;
}
/**
* @param Subscription $subscription
*
* @return SubscriptionLine
*/
public function setSubscription(Subscription $subscription): SubscriptionLine
{
$this->subscription = $subscription;
return $this;
}
/**
* @return SubscriptionGroup
*/
public function getGroup(): SubscriptionGroup
{
return $this->group;
}
/**
* @param SubscriptionGroup $group
*
* @return SubscriptionLine
*/
public function setGroup(SubscriptionGroup $group): SubscriptionLine
{
$this->group = $group;
return $this;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @param string|null $name
*
* @return SubscriptionLine
*/
public function setName(?string $name): SubscriptionLine
{
$this->name = $name;
return $this;
}
/**
* @return \DateTime
*/
public function getDateCreate(): \DateTime
{
return $this->dateCreate;
}
/**
* @param \DateTime $dateCreate
*
* @return SubscriptionLine
*/
public function setDateCreate(\DateTime $dateCreate): SubscriptionLine
{
$this->dateCreate = $dateCreate;
return $this;
}
/**
* @return Customer
*/
public function getCustomer(): Customer
{
return $this->customer;
}
/**
* @param Customer|null $customer
*
* @return SubscriptionLine
*/
public function setCustomer(?Customer $customer): SubscriptionLine
{
$this->customer = $customer;
return $this;
}
/**
* @return \DateTime
*/
public function getDateDue(): ?\DateTime
{
return $this->dateDue;
}
/**
* @param \DateTime|null $dateDue
*
* @return SubscriptionLine
*/
public function setDateDue(?\DateTime $dateDue): SubscriptionLine
{
$this->dateDue = $dateDue;
return $this;
}
/**
* @return float
*/
public function getCost(): float
{
return $this->cost;
}
/**
* @param float|null $cost
*
* @return SubscriptionLine
*/
public function setCost(?float $cost): SubscriptionLine
{
$this->cost = $cost;
return $this;
}
/**
* @return int
*/
public function getUserCreate(): int
{
return $this->userCreate;
}
/**
* @param int $userCreate
*
* @return SubscriptionLine
*/
public function setUserCreate(int $userCreate): SubscriptionLine
{
$this->userCreate = $userCreate;
return $this;
}
/**
* @return int
*/
public function getUserMod(): int
{
return $this->userMod;
}
/**
* @param int $userMod
*
* @return SubscriptionLine
*/
public function setUserMod(int $userMod): SubscriptionLine
{
$this->userMod = $userMod;
return $this;
}
/**
* @return int|null
*/
public function getNumberAttempts(): ?int
{
return $this->numberAttempts;
}
/**
* @param int|null $numberAttempts
*
* @return SubscriptionLine
*/
public function setNumberAttempts(?int $numberAttempts): SubscriptionLine
{
$this->numberAttempts = $numberAttempts;
return $this;
}
/**
* @return int|null
*/
public function getCycles(): ?int
{
return $this->cycles;
}
/**
* @param int|null $cycles
*
* @return SubscriptionLine
*/
public function setCycles(?int $cycles): SubscriptionLine
{
$this->cycles = $cycles;
return $this;
}
/**
* @return int|null
*/
public function getNumCycles(): ?int
{
return $this->numCycles;
}
/**
* @param int|null $numCycles
*
* @return SubscriptionLine
*/
public function setNumCycles(?int $numCycles): SubscriptionLine
{
$this->numCycles = $numCycles;
return $this;
}
/**
* @return string|null
*/
public function getTransaction(): ?string
{
return $this->transaction;
}
/**
* @param string|null $transaction
*
* @return SubscriptionLine
*/
public function setTransaction(?string $transaction): SubscriptionLine
{
$this->transaction = $transaction;
return $this;
}
public function cancelSubscriptionLine(): void
{
$this->name = 'Cancel';
$this->dateDue = null;
}
public function incrementNumberAttempts(int $days): void
{
$this->numberAttempts++;
$this->dateDue->modify("+$days Days");
}
public function isMigrated(): bool
{
return $this->migrated;
}
public function setMigrated(bool $migrated): SubscriptionLine
{
$this->migrated = $migrated;
return $this;
}
/**
* @return array|ArrayCollection<int, SubscriptionCustomer>
*/
public function getSubscriptionCustomers()
{
return $this->subscriptionCustomers;
}
public function setSubscriptionCustomers(array $subscriptionCustomers): SubscriptionLine
{
$this->subscriptionCustomers = $subscriptionCustomers;
return $this;
}
public function getInternalMigrationStatus(): ?string
{
return $this->internalMigrationStatus;
}
public function setInternalMigrationStatus(?string $internalMigrationStatus): SubscriptionLine
{
$this->internalMigrationStatus = $internalMigrationStatus;
return $this;
}
public function setSubscriptionToMigrated(): self
{
$this->migrated = true;
$this->internalMigrationStatus = 'migrated';
return $this;
}
}