OpenXE/classes/Modules/SubscriptionCycle/Data/SubscriptionCycleArticleData.php

559 lines
12 KiB
PHP
Raw Permalink Normal View History

2021-05-21 08:49:41 +02:00
<?php
declare(strict_types=1);
namespace Xentral\Modules\SubscriptionCycle\Data;
use Xentral\Modules\SubscriptionCycle\Exception\ValidationFailedException;
final class SubscriptionCycleArticleData
{
/** @var int $id */
private $id = 0;
/** @var int $sort */
private $sort = 0;
/** @var int $articleId */
private $articleId = 0;
/** @var string $articleName */
private $articleName = '';
/** @var string $articleNumber */
private $articleNumber = '';
/** @var float $amount */
private $amount = 0.0;
/** @var float $price */
private $price = 0.0;
/** @var string $taxClass */
private $taxClass = '';
/** @var float $discount */
private $discount = 0.0;
/** @var bool $cleared */
private $cleared = false;
/** @var string $startDate */
private $startDate = '0000-00-00';
/** @var string $deliveranceDate */
private $deliveranceDate = '0000-00-00';
/** @var string $clearedTill */
private $clearedTill = '0000-00-00';
/** @var bool $repeating */
private $repeating = false;
/** @var int $payCycle */
private $payCycle = 0;
/** @var string $clearedOn */
private $clearedOn = '0000-00-00';
/** @var int $invoiceId */
private $invoiceId = 0;
/** @var int $projectId */
private $projectId = 0;
/** @var int $adressId */
private $adressId = 0;
/** @var string $status */
private $status = 'angelegt';
/** @var string $text */
private $text = '';
/** @var string $logFile */
private $logFile = '0000-00-00';
/** @var string $description */
private $description = '';
/** @var string $document */
private $document = '';
/** @var string $priceType */
private $priceType = '';
/** @var string $endDate */
private $endDate = '0000-00-00';
/** @var int $createdBy */
private $createdBy = 0;
/** @var string $createdDate */
private $createdDate = '0000-00-00';
/** @var bool $expert */
private $expert = false;
/** @var string $currency */
private $currency = '';
/** @var bool $replaceDescription */
private $replaceDescription = false;
/** @var int $subscriptionCycleGroupId */
private $subscriptionCycleGroupId = 0;
private function __construct()
{
}
/**
* @param array $data
*
* @throws ValidationFailedException
*
* @return SubscriptionCycleArticleData
*/
public static function fromArray(array $data): SubscriptionCycleArticleData
{
$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['menge']) && !is_float($data['menge'])) {
$data['menge'] = (float)$data['menge'];
}
if (isset($data['preis']) && !is_float($data['preis'])) {
$data['preis'] = (float)$data['preis'];
}
if (isset($data['rabatt']) && !is_float($data['rabatt'])) {
$data['rabatt'] = (float)$data['rabatt'];
}
if (isset($data['abgerechnet']) && !is_bool($data['abgerechnet'])) {
$data['abgerechnet'] = (bool)$data['abgerechnet'];
}
if (isset($data['wiederholend']) && !is_bool($data['wiederholend'])) {
$data['wiederholend'] = (bool)$data['wiederholend'];
}
if (isset($data['beschreibungersetzten']) && !is_bool($data['beschreibungersetzten'])) {
$data['beschreibungersetzten'] = (bool)$data['beschreibungersetzten'];
}
if (isset($data['experte']) && !is_bool($data['experte'])) {
$data['experte'] = (bool)$data['experte'];
}
return self::fromDbState($data);
}
/**
* @param array $data
*
* @return array
*/
private static function validate(array $data): array
{
$errors = [];
if (!isset($data['artikel']) || empty($data['artikel'])) {
$errors['artikel'][] = 'Article_id is not set.';
}
if (!isset($data['menge']) || empty($data['menge'])) {
$errors['menge'][] = 'Amount is not set';
}
if (!isset($data['preis']) || empty($data['preis'])) {
$errors['preis'][] = 'Price is not set.';
}
if (!isset($data['dokument']) || empty($data['dokument'])) {
$errors['dokument'][] = 'Document is not set.';
}
if (!isset($data['preisart']) || empty($data['preisart'])) {
$errors['preisart'][] = 'Price-type is not set.';
}
return $errors;
}
/**
* @param array $data
*
* @return SubscriptionCycleArticleData
*/
public static function fromDbState(array $data): SubscriptionCycleArticleData
{
$instance = new self();
if (isset($data['id'])) {
$instance->id = $data['id'];
}
if (isset($data['sort'])) {
$instance->sort = $data['sort'];
}
if (isset($data['artikel'])) {
$instance->articleId = $data['artikel'];
}
if (isset($data['bezeichnung'])) {
$instance->articleName = $data['bezeichnung'];
}
if (isset($data['nummer'])) {
$instance->articleNumber = $data['nummer'];
}
if (isset($data['menge'])) {
$instance->amount = $data['menge'];
}
if (isset($data['preis'])) {
$instance->price = $data['preis'];
}
if (isset($data['steuerklasse'])) {
$instance->taxClass = $data['steuerklasse'];
}
if (isset($data['rabatt'])) {
$instance->discount = $data['rabatt'];
}
if (isset($data['abgerechnet'])) {
$instance->cleared = $data['abgerechnet'];
}
if (isset($data['startdatum'])) {
$instance->startDate = $data['startdatum'];
}
if (isset($data['lieferdatum'])) {
$instance->deliveranceDate = $data['lieferdatum'];
}
if (isset($data['abgerechnetbis'])) {
$instance->clearedTill = $data['abgerechnetbis'];
}
if (isset($data['wiederholend'])) {
$instance->repeating = $data['wiederholend'];
}
if (isset($data['zahlzyklus'])) {
$instance->payCycle = $data['zahlzyklus'];
}
if (isset($data['abgrechnetam'])) {
$instance->clearedOn = $data['abgrechnetam'];
}
if (isset($data['rechnung'])) {
$instance->invoiceId = $data['rechnung'];
}
if (isset($data['projekt'])) {
$instance->projectId = $data['projekt'];
}
if (isset($data['adresse'])) {
$instance->adressId = $data['adresse'];
}
if (isset($data['status'])) {
$instance->status = $data['status'];
}
if (isset($data['bemerkung'])) {
$instance->text = $data['bemerkung'];
}
if (isset($data['logdatei'])) {
$instance->logFile = $data['logdatei'];
}
if (isset($data['beschreibung'])) {
$instance->description = $data['beschreibung'];
}
if (isset($data['dokument'])) {
$instance->document = $data['dokument'];
}
if (isset($data['enddatum'])) {
$instance->endDate = $data['enddatum'];
}
if (isset($data['angelegtvon'])) {
$instance->createdBy = $data['angelegtvon'];
}
if (isset($data['angelegtam'])) {
$instance->createdDate = $data['angelegtam'];
}
if (isset($data['waehrung'])) {
$instance->currency = $data['waehrung'];
}
if (isset($data['beschreibungersetzten'])) {
$instance->replaceDescription = $data['beschreibungersetzten'];
}
if (isset($data['gruppe'])) {
$instance->subscriptionCycleGroupId = $data['gruppe'];
}
if (isset($data['preisart'])) {
$instance->priceType = $data['preisart'];
}
if (isset($data['experte'])) {
$instance->expert = $data['experte'];
}
return $instance;
}
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return int
*/
public function getSort(): int
{
return $this->sort;
}
/**
* @return int
*/
public function getArticleId(): int
{
return $this->articleId;
}
/**
* @return string
*/
public function getArticleName(): string
{
return $this->articleName;
}
/**
* @return string
*/
public function getArticleNumber(): string
{
return $this->articleNumber;
}
/**
* @return float
*/
public function getAmount(): float
{
return $this->amount;
}
/**
* @return float
*/
public function getPrice(): float
{
return $this->price;
}
/**
* @return string
*/
public function getTaxClass(): string
{
return $this->taxClass;
}
/**
* @return float
*/
public function getDiscount(): float
{
return $this->discount;
}
/**
* @return bool
*/
public function isCleared(): bool
{
return $this->cleared;
}
/**
* @return string
*/
public function getStartDate(): string
{
return $this->startDate;
}
/**
* @return string
*/
public function getDeliveranceDate(): string
{
return $this->deliveranceDate;
}
/**
* @return string
*/
public function getClearedTill(): string
{
return $this->clearedTill;
}
/**
* @return bool
*/
public function isRepeating(): bool
{
return $this->repeating;
}
/**
* @return int
*/
public function getPayCycle(): int
{
return $this->payCycle;
}
/**
* @return string
*/
public function getClearedOn(): string
{
return $this->clearedOn;
}
/**
* @return int
*/
public function getInvoiceId(): int
{
return $this->invoiceId;
}
/**
* @return int
*/
public function getProjectId(): int
{
return $this->projectId;
}
/**
* @return int
*/
public function getAdressId(): int
{
return $this->adressId;
}
/**
* @return string
*/
public function getStatus(): string
{
return $this->status;
}
/**
* @return string
*/
public function getText(): string
{
return $this->text;
}
/**
* @return string
*/
public function getLogFile(): string
{
return $this->logFile;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @return string
*/
public function getDocument(): string
{
return $this->document;
}
/**
* @return string
*/
public function getPriceType(): string
{
return $this->priceType;
}
/**
* @return string
*/
public function getEndDate(): string
{
return $this->endDate;
}
/**
* @return int
*/
public function getCreatedBy(): int
{
return $this->createdBy;
}
/**
* @return string
*/
public function getCreatedDate(): string
{
return $this->createdDate;
}
/**
* @return bool
*/
public function isExpert(): bool
{
return $this->expert;
}
/**
* @return string
*/
public function getCurrency(): string
{
return $this->currency;
}
/**
* @return bool
*/
public function isReplaceDescription(): bool
{
return $this->replaceDescription;
}
/**
* @return int
*/
public function getSubscriptionCycleGroupId(): int
{
return $this->subscriptionCycleGroupId;
}
}