OpenXE/classes/Modules/FiskalyApi/Data/CashPointClosing/CashPointClosingResponse.php
2021-05-21 08:49:41 +02:00

238 lines
7.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Xentral\Modules\FiskalyApi\Data\CashPointClosing;
use DateTime;
use DateTimeInterface;
use DateTimeZone;
use Exception;
use stdClass;
use Xentral\Modules\FiskalyApi\Data\ErrorMessage;
use Xentral\Modules\FiskalyApi\Data\MetaData;
class CashPointClosingResponse extends CashPointClosing
{
/** @var DateTimeInterface|null $timeCreation */
private $timeCreation;
/** @var DateTimeInterface|null $timeUpdate */
private $timeUpdate;
/** @var string|null $state */
private $state;
/** @var ErrorMessage|null $error */
private $error;
/** @var string|null $closingId */
private $closingId;
/**
* CashPointClosingResponse constructor.
*
* @param string $clientId
* @param int $cashPointClosingExportId
* @param CashPointClosingHead|null $head
* @param CashPointClosingCashStatement|null $cashStatement
* @param CashPointClosingTransactionCollection|null $transactions
* @param MetaData|null $metaData
* @param DateTimeInterface|null $timeCreation
* @param DateTimeInterface|null $timeUpdate
* @param string|null $state
* @param ErrorMessage|null $error
*/
public function __construct(
string $clientId,
int $cashPointClosingExportId,
?CashPointClosingHead $head,
?CashPointClosingCashStatement $cashStatement,
?CashPointClosingTransactionCollection $transactions,
?MetaData $metaData = null,
?DateTimeInterface $timeCreation = null,
?DateTimeInterface $timeUpdate = null,
?string $state = null,
?ErrorMessage $error = null
) {
parent::__construct($clientId, $cashPointClosingExportId, $head, $cashStatement, $transactions, $metaData);
$this->setTimeCreation($timeCreation);
$this->setTimeUpdate($timeUpdate);
$this->setState($state);
$this->setError($error);
}
/**
* @param $apiResult
*
* @throws Exception
* @return CashPointClosingResponse
*/
public static function fromApiResult(object $apiResult): CashPointClosingResponse
{
$instance = new self(
$apiResult->client_id,
(int)$apiResult->cash_point_closing_export_id,
empty($apiResult->head) ? null : CashPointClosingHead::fromApiResult($apiResult->head),
empty($apiResult->cash_statement) ? null : CashPointClosingCashStatement::fromApiResult($apiResult->cash_statement),
empty($apiResult->transactions) ? null : CashPointClosingTransactionCollection::fromApiResult($apiResult->transactions)
);
if (!empty($apiResult->time_creation)) {
$instance->setTimeCreation(
(new DateTime('now', new DateTimeZone('UTC')))->setTimestamp($apiResult->time_creation)
);
}
if (!empty($apiResult->time_update)) {
$instance->setTimeUpdate(
(new DateTime('now', new DateTimeZone('UTC')))->setTimestamp($apiResult->time_update)
);
}
if (!empty($apiResult->state)) {
$instance->setState($apiResult->state);
}
return $instance;
}
/**
* @param array $dbState
*
* @throws Exception
* @return CashPointClosingResponse
*/
public static function fromDbState(array $dbState): CashPointClosingResponse
{
$instance = new self(
$dbState['client_id'],
(int)$dbState['cash_point_closing_export_id'],
isset($dbState['head']) ? CashPointClosingHead::fromDbState($dbState['head']) : null,
isset($dbState['cash_statement']) ? CashPointClosingCashStatement::fromDbState(
$dbState['cash_statement']
) : null,
isset($dbState['transactions']) ? CashPointClosingTransactionCollection::fromDbState(
$dbState['transactions']
) : null
);
if (!empty($dbState['time_creation'])) {
$instance->setTimeCreation(
(new DateTime('now', new DateTimeZone('UTC')))->setTimestamp($dbState['time_creation'])
);
}
if (!empty($dbState['time_update'])) {
$instance->setTimeUpdate(
(new DateTime('now', new DateTimeZone('UTC')))->setTimestamp($dbState['time_update'])
);
}
if (!empty($dbState['state'])) {
$instance->setState($dbState['state']);
}
return $instance;
}
/**
* @return array
*/
public function toArray(): array
{
$dbState = parent::toArray();
if ($this->timeCreation !== null) {
$dbState['time_creation'] = $this->timeCreation->getTimestamp();
}
if ($this->timeUpdate !== null) {
$dbState['time_update'] = $this->timeUpdate->getTimestamp();
}
if ($this->state !== null) {
$dbState['state'] = $this->state;
}
if ($this->error !== null) {
$dbState['error'] = $this->error->toArray();
}
return $dbState;
}
/**
* @return stdClass
*/
public function toApiResult(): stdClass
{
$apiResult = parent::toApiResult();
if ($this->timeCreation !== null) {
$apiResult->time_creation = $this->timeCreation->getTimestamp();
}
if ($this->timeUpdate !== null) {
$apiResult->time_update = $this->timeUpdate->getTimestamp();
}
if ($this->state !== null) {
$apiResult->state = $this->state;
}
return $apiResult;
}
/**
* @return DateTimeInterface|null
*/
public function getTimeCreation(): ?DateTimeInterface
{
return $this->timeCreation;
}
/**
* @param DateTimeInterface|null $timeCreation
*/
public function setTimeCreation(?DateTimeInterface $timeCreation): void
{
$this->timeCreation = $timeCreation;
}
/**
* @return DateTimeInterface|null
*/
public function getTimeUpdate(): ?DateTimeInterface
{
return $this->timeUpdate;
}
/**
* @param DateTimeInterface|null $timeUpdate
*/
public function setTimeUpdate(?DateTimeInterface $timeUpdate): void
{
$this->timeUpdate = $timeUpdate;
}
/**
* @return string|null
*/
public function getState(): ?string
{
return $this->state;
}
/**
* @param string|null $state
*/
public function setState(?string $state): void
{
$this->state = $state;
}
/**
* @return ErrorMessage|null
*/
public function getError(): ?ErrorMessage
{
return $this->error === null ? null : ErrorMessage::fromDbState($this->error->toArray());
}
/**
* @param ErrorMessage|null $error
*/
public function setError(?ErrorMessage $error): void
{
$this->error = $error === null ? null : ErrorMessage::fromDbState($error->toArray());
}
}