<?php
namespace JanusHercules\SelfServiceTrafficCampaign\Domain\Entity;
use App\Entity\Membership\BillwerkComponentSubscription;
use App\Entity\RecurrentJob;
use App\Utility\DatabaseIdGenerator;
use App\Utility\DateTimeUtility;
use DateTime;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Exception;
use JanusHercules\SelfServiceTrafficCampaign\Domain\Enum\CampaignBookingCreationMode;
use JanusHercules\SelfServiceTrafficCampaign\Domain\Enum\CampaignProduct;
#[ORM\Entity]
#[ORM\Table(name: 'self_service_traffic_campaign_bookings')]
#[ORM\Index(columns: ['created_at'], name: 'created_at_idx')]
class SelfServiceTrafficCampaignBooking
{
/**
* @throws Exception
*/
public function __construct()
{
$this->createdAt = DateTimeUtility::createDateTimeUtc();
}
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: DatabaseIdGenerator::class)]
#[ORM\Column(
type : Types::GUID,
unique: true
)]
private ?string $id;
public function getId(): ?string
{
return $this->id;
}
public function setId(?string $id): void
{
$this->id = $id;
}
#[ORM\Column(
type : Types::DATETIME_MUTABLE,
nullable: false
)]
private DateTime $createdAt;
public function setCreatedAt(DateTime $createdAt): void
{
$this->createdAt = $createdAt;
}
public function getCreatedAt(): DateTime
{
return $this->createdAt;
}
#[ORM\ManyToOne(
targetEntity: RecurrentJob::class,
inversedBy: 'selfServiceTrafficCampaignBookings'
)]
#[ORM\JoinColumn(
name: 'recurrent_jobs_id',
referencedColumnName: 'id',
nullable: true,
onDelete: 'SET NULL'
)]
private ?RecurrentJob $recurrentJob;
public function getRecurrentJob(): ?RecurrentJob
{
return $this->recurrentJob;
}
public function setRecurrentJob(?RecurrentJob $recurrentJob): void
{
$this->recurrentJob = $recurrentJob;
}
#[ORM\Column(
type: Types::SMALLINT,
enumType: CampaignBookingCreationMode::class
)]
private CampaignBookingCreationMode $creationMode;
public function getCreationMode(): CampaignBookingCreationMode
{
return $this->creationMode;
}
public function setCreationMode(CampaignBookingCreationMode $mode): void
{
$this->creationMode = $mode;
}
#[ORM\OneToOne(
mappedBy: 'selfServiceTrafficCampaignBooking',
targetEntity: BillwerkComponentSubscription::class,
cascade: ['persist']
)]
private ?BillwerkComponentSubscription $billwerkComponentSubscription = null;
public function getBillwerkComponentSubscription(): ?BillwerkComponentSubscription
{
return $this->billwerkComponentSubscription;
}
public function setBillwerkComponentSubscription(?BillwerkComponentSubscription $billwerkComponentSubscription): void
{
$this->billwerkComponentSubscription = $billwerkComponentSubscription;
}
#[ORM\OneToOne(
mappedBy: 'booking',
targetEntity: SelfServiceTrafficCampaign::class
)]
private ?SelfServiceTrafficCampaign $campaign = null;
public function getCampaign(): ?SelfServiceTrafficCampaign
{
return $this->campaign;
}
public function setCampaign(?SelfServiceTrafficCampaign $campaign): void
{
$this->campaign = $campaign;
}
#[ORM\Column(
type: Types::INTEGER
)]
private int $price;
public function getPrice(): int
{
return $this->price;
}
public function setPrice(int $price): void
{
$this->price = $price;
}
#[ORM\Column(
type: Types::SMALLINT,
nullable: true,
enumType: CampaignProduct::class
)]
private ?CampaignProduct $campaignProduct;
public function getCampaignProduct(): ?CampaignProduct
{
return $this->campaignProduct;
}
public function setCampaignProduct(?CampaignProduct $campaignProduct): void
{
$this->campaignProduct = $campaignProduct;
}
#[ORM\Column(
type: Types::BOOLEAN,
)]
private bool $cancelled = false;
public function isCancelled(): bool
{
return $this->cancelled;
}
public function setCancelled(bool $cancelled): void
{
$this->cancelled = $cancelled;
}
}