OpenXE/classes/Modules/Report/Data/ReportColumn.php

303 lines
6.7 KiB
PHP
Raw Normal View History

2021-05-21 08:49:41 +02:00
<?php
namespace Xentral\Modules\Report\Data;
use JsonSerializable;
class ReportColumn implements JsonSerializable
{
/** @var string ALIGN_LEFT */
public const ALIGN_LEFT = 'left';
/** @var string ALIGN_RIGHT */
public const ALIGN_RIGHT = 'right';
/** @var string ALIGN_CENTER */
public const ALIGN_CENTER = 'center';
/** @var string ALIGN_JUSTIFY */
public const ALIGN_JUSTIFY = 'justify';
/** @var string SORT_NUMERIC */
public const SORT_NUMERIC = 'numeric';
/** @var string SORT_ALPHABETIC */
public const SORT_ALPHABETIC = 'alphabetic';
/** @var string FORMAT_SUM_MONEY_DE */
public const FORMAT_SUM_MONEY_DE = 'sum_money_de';
/** @var string FORMAT_SUM_MONEY_EN */
public const FORMAT_SUM_MONEY_EN = 'sum_money_en';
/** @var string FORMAT_DATE_DMY */
public const FORMAT_DATE_DMY = 'date_dmy';
/** @var string FORMAT_DATE_YMD */
public const FORMAT_DATE_YMD = 'date_ymd';
/** @var string FORMAT_DATE_DMYHIS */
public const FORMAT_DATE_DMYHIS = 'date_dmyhis';
/** @var string FORMAT_DATE_YMDHIS */
public const FORMAT_DATE_YMDHIS = 'date_ymdhis';
/** @var string FORMAT_CUSTOM */
public const FORMAT_CUSTOM = 'custom';
/** @var string $key */
private $key;
/** @var string $title */
private $title;
/** @var string size */
private $width;
/** @var string $alignment */
private $alignment;
/** @var bool $isSumColumn */
private $isSumColumn;
/** @var int $id */
private $id;
/** @var int $sequence */
private $sequence;
/** @var string $sorting */
private $sorting;
/** @var string|null $formatType */
private $formatType;
/** @var string|null $formatStatement */
private $formatStatement;
/**
* @param string $key
* @param string $title
* @param string $width
* @param string $alignment
* @param bool $isSumColumn
* @param int $id
* @param int $sequence
* @param string $sorting
* @param string|null $formatType
* @param null $formatStatement
*/
public function __construct(
$key,
$title,
$width = '30',
$alignment = self::ALIGN_LEFT,
$isSumColumn = false,
$id = 0,
$sequence = 0,
$sorting = 'numeric',
$formatType = null,
$formatStatement = null
) {
$this->key = $key;
$this->title = $title;
$this->width = $width;
$this->alignment = $alignment;
$this->isSumColumn = $isSumColumn;
$this->id = $id;
$this->sequence = $sequence;
$this->sorting = $sorting;
$this->formatType = $formatType;
$this->formatStatement = $formatStatement;
}
/**
* @param $data
*
* @return ReportColumn|null
*/
public static function fromDbState($data)
{
if (!isset($data['key_name'])) {
return null;
}
if (!isset($data['title'])) {
return null;
}
$key = (string)$data['key_name'];
$title = (string)$data['title'];
$width = '';
if (isset($data['width'])) {
$width = $data['width'];
}
$alignment = '';
if (isset($data['alignment'])) {
$alignment = $data['alignment'];
}
$sorting = 'numeric';
if (isset($data['sorting'])) {
$sorting = $data['sorting'];
}
$sequence = 0;
if (isset($data['sequence'])) {
$sequence = $data['sequence'];
}
$format = null;
if (array_key_exists('format_type', $data)) {
$format = $data['format_type'];
}
$formatStatement = null;
if (array_key_exists('format_statement', $data)) {
$formatStatement = $data['format_statement'];
}
$sum = false;
if (isset($data['sum']) && $data['sum'] === 1) {
$sum = true;
}
$id = 0;
if (isset($data['id'])) {
$id = $data['id'];
}
return new self(
$key,
$title,
$width,
$alignment,
$sum,
$id,
$sequence,
$sorting,
$format,
$formatStatement
);
}
/**
* @return array
*/
public function toArray(): array
{
return [
'key_name' => $this->getKey(),
'title' => $this->getTitle(),
'width' => $this->getWidth(),
'alignment' => $this->getAlignment(),
'sorting' => $this->getSorting(),
'sum' => $this->isSumColumn(),
'id' => $this->getId(),
'sequence' => $this->getSequence(),
'format_type' => $this->getFormatType(),
'format_statement' => $this->getFormatStatement(),
];
}
/**
* Specify data which should be serialized to JSON
*
* @return mixed data which can be serialized by <b>json_encode</b>,
*/
public function jsonSerialize()
{
$data = $this->toArray();
unset($data['id'], $data['sequence']);
return $data;
}
/**
* @return string
*/
public function getKey()
{
return $this->key;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @return string
*/
public function getWidth()
{
return $this->width;
}
/**
* @return string
*/
public function getAlignment()
{
return $this->alignment;
}
/**
* @return bool
*/
public function isSumColumn()
{
return $this->isSumColumn;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return int
*/
public function getSequence()
{
return $this->sequence;
}
/**
* @return string
*/
public function getSorting()
{
return $this->sorting;
}
/**
* Changes sequence number and returns old sequence number.
*
* @param int $sequence
*
* @return int previous sequence number
*/
public function changeSequence($sequence)
{
$oldSequence = $this->getSequence();
$this->sequence = $sequence;
return $oldSequence;
}
/**
* @return string|null
*/
public function getFormatType(): ?string
{
return $this->formatType;
}
/**
* @return string|null
*/
public function getFormatStatement(): ?string
{
return $this->formatStatement;
}
}