OpenXE/classes/Modules/SubscriptionCycle/Data/SubscriptionCycleAutoSubscriptionData.php
2021-05-21 08:49:41 +02:00

297 lines
7.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Xentral\Modules\SubscriptionCycle\Data;
use Xentral\Modules\SubscriptionCycle\Exception\ValidationFailedException;
final class SubscriptionCycleAutoSubscriptionData
{
/** @var int $id */
private $id = 0;
/** @var int $projectId */
private $projectId = 0;
/** @var int $articleId */
private $articleId = 0;
/** @var string $priceCycle */
private $priceCycle = '';
/** @var string $documentType */
private $documentType = '';
/** @var int $subscriptionGroupId */
private $subscriptionGroupId = 0;
/** @var int $position */
private $position = 0;
/** @var string $firstDateType */
private $firstDateType = '';
/** @var bool $preventAutoDispatch */
private $preventAutoDispatch = true;
/** @var bool $autoEmailConfirmation */
private $autoEmailConfirmation = true;
/** @var int $businessLetterPatternId */
private $businessLetterPatternId = 0;
/** @var bool $addPdf */
private $addPdf = true;
private function __construct()
{
}
/**
* @param array $data
*
* @throws ValidationFailedException
*
* @return SubscriptionCycleAutoSubscriptionData
*/
public static function fromArray(array $data): SubscriptionCycleAutoSubscriptionData
{
$errors = self::validate($data);
if (!empty($errors)) {
throw ValidationFailedException::fromErrors($errors);
}
if (isset($data['id']) && !is_int($data['id'])) {
$data['id'] = (int)$data['id'];
}
if (isset($data['project_id']) && !is_int($data['project_id'])) {
$data['project_id'] = (int)$data['project_id'];
}
if (isset($data['article_id']) && !is_int($data['article_id'])) {
$data['article_id'] = (int)$data['article_id'];
}
if (isset($data['subscription_group_id']) && !is_int($data['subscription_group_id'])) {
$data['subscription_group_id'] = (int)$data['subscription_group_id'];
}
if (isset($data['position']) && !is_int($data['position'])) {
$data['position'] = (int)$data['position'];
}
if (isset($data['prevent_auto_dispatch']) && !is_bool($data['prevent_auto_dispatch'])) {
$data['prevent_auto_dispatch'] = (bool)$data['prevent_auto_dispatch'];
}
if (isset($data['auto_email_confirmation']) && !is_bool($data['auto_email_confirmation'])) {
$data['auto_email_confirmation'] = (bool)$data['auto_email_confirmation'];
}
if (isset($data['business_letter_pattern_id']) && !is_int($data['business_letter_pattern_id'])) {
$data['business_letter_pattern_id'] = (int)$data['business_letter_pattern_id'];
}
if (isset($data['add_pdf']) && !is_bool($data['add_pdf'])) {
$data['add_pdf'] = (bool)$data['add_pdf'];
}
return self::fromDbState($data);
}
/**
* @param array $data
*
* @return array
*/
private static function validate(array $data): array
{
$errors = [];
if (!isset($data['article_id']) || empty($data['article_id'])) {
$errors['article_id'][] = 'Article-id is not set.';
}
return $errors;
}
/**
* @param array $data
*
* @return SubscriptionCycleAutoSubscriptionData
*/
public static function fromDbState(array $data): SubscriptionCycleAutoSubscriptionData
{
$instance = new self();
if (isset($data['id'])) {
$instance->id = $data['id'];
}
if (isset($data['project_id'])) {
$instance->projectId = $data['project_id'];
}
if (isset($data['article_id'])) {
$instance->articleId = $data['article_id'];
}
if (isset($data['price_cycle'])) {
$instance->priceCycle = $data['price_cycle'];
}
if (isset($data['document_type'])) {
$instance->documentType = $data['document_type'];
}
if (isset($data['subscription_group_id'])) {
$instance->subscriptionGroupId = $data['subscription_group_id'];
}
if (isset($data['position'])) {
$instance->position = $data['position'];
}
if (isset($data['first_date_type'])) {
$instance->firstDateType = $data['first_date_type'];
}
if (isset($data['prevent_auto_dispatch'])) {
$instance->preventAutoDispatch = $data['prevent_auto_dispatch'];
}
if (isset($data['auto_email_confirmation'])) {
$instance->autoEmailConfirmation = $data['auto_email_confirmation'];
}
if (isset($data['business_letter_pattern_id'])) {
$instance->businessLetterPatternId = $data['business_letter_pattern_id'];
}
if (isset($data['add_pdf'])) {
$instance->addPdf = $data['add_pdf'];
}
return $instance;
}
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return int
*/
public function getProjectId(): int
{
return $this->projectId;
}
/**
* @return int
*/
public function getArticleId(): int
{
return $this->articleId;
}
/**
* @return string
*/
public function getPriceCycle(): string
{
return $this->priceCycle;
}
/**
* @return string
*/
public function getDocumentType(): string
{
return $this->documentType;
}
/**
* @return int
*/
public function getSubscriptionGroupId(): int
{
return $this->subscriptionGroupId;
}
/**
* @return int
*/
public function getPosition(): int
{
return $this->position;
}
/**
* @return string
*/
public function getFirstDateType(): string
{
return $this->firstDateType;
}
/**
* @return bool
*/
public function getPreventAutoDispatch(): bool
{
return $this->preventAutoDispatch;
}
/**
* @return bool
*/
public function getAutoEmailConfirmation(): bool
{
return $this->autoEmailConfirmation;
}
/**
* @return int
*/
public function getBusinessLetterPatternId(): int
{
return $this->businessLetterPatternId;
}
/**
* @return bool
*/
public function getAddPdf(): bool
{
return $this->addPdf;
}
/**
* @return array
*/
public function toArray(): array
{
return [
'id' => $this->id,
'project_id' => $this->projectId,
'article_id' => $this->articleId,
'price_cycle' => $this->priceCycle,
'document_type' => $this->documentType,
'subscription_group_id' => $this->subscriptionGroupId,
'position' => $this->position,
'first_date_type' => $this->firstDateType,
'prevent_auto_dispatch' => $this->preventAutoDispatch,
'auto_email_confirmation' => $this->autoEmailConfirmation,
'business_letter_pattern_id' => $this->businessLetterPatternId,
'add_pdf' => $this->addPdf,
];
}
}