<?php
namespace App\Entity\ExternalPartner;
use App\Utility\ReflectionHelper;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Exception;
/**
* @ORM\Entity
*
* @ORM\Table(
* name="integrated_external_partner_customer_campaigns"
* )
*/
class IntegratedExternalPartnerCustomerCampaign
{
public const CALCULATION_TYPE_TOTAL_VOLUME_FOR_FORWARDS = 0;
public const CALCULATION_TYPE_PRICE_PER_RECURRENT_JOB = 1;
/** @throws Exception */
public function __construct(IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer, string $name, DateTime $startDate, DateTime $endDate, int $calculationType, float $price)
{
if (!ReflectionHelper::hasConstWithValue(self::class, 'CALCULATION_TYPE_', $calculationType)) {
throw new Exception('Value ' . $calculationType . ' not allowed for $calculationType.');
}
$this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
$this->name = $name;
$this->calculationType = $calculationType;
$this->price = $price;
$this->endDate = $endDate;
$this->startDate = $startDate;
}
/**
* @ORM\GeneratedValue(strategy="CUSTOM")
*
* @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
*
* @ORM\Column(name="id", type="guid")
*
* @ORM\Id
*/
protected string $id;
public function getId(): string
{
return $this->id;
}
/**
* @ORM\Column(name="name", type="string", length=1024)
*/
protected string $name;
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
/**
* @ORM\Column(name="calculation_type", type="integer")
*/
private int $calculationType;
public function getCalculationType(): int
{
return $this->calculationType;
}
public function setCalculationType(int $calculationType): void
{
$this->calculationType = $calculationType;
}
/**
* @ORM\Column(name="price", type="float")
*/
private float $price;
public function getPrice(): float
{
return $this->price;
}
public function setPrice(float $price): void
{
$this->price = $price;
}
/**
* @ORM\Column(name="end_date", type="datetime", nullable=false)
*/
protected DateTime $endDate;
public function setEndDate(DateTime $endDate): void
{
$this->endDate = $endDate;
}
public function getEndDate(): DateTime
{
return $this->endDate;
}
/**
* @ORM\Column(name="start_date", type="datetime", nullable=false)
*/
protected DateTime $startDate;
public function setStartDate(DateTime $startDate): void
{
$this->startDate = $startDate;
}
public function getStartDate(): DateTime
{
return $this->startDate;
}
/**
* @ORM\ManyToOne(targetEntity="App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer", inversedBy="campaigns", cascade={"persist"})
*
* @ORM\JoinColumn(name="integrated_external_partner_customers_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer;
public function getIntegratedExternalPartnerCustomer(): IntegratedExternalPartnerCustomer
{
return $this->integratedExternalPartnerCustomer;
}
public function setIntegratedExternalPartnerCustomer(IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer): void
{
$this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
}
}