mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-22 19:44:34 +00:00
Улучшена валидация количества оплат + новый экспешн
Также мелкофиксы по другим массивам
This commit is contained in:
parent
c9ed0bf467
commit
025351a8ae
@ -28,17 +28,18 @@ class ItemArray extends Entity
|
|||||||
public const MAX_COUNT = 100;
|
public const MAX_COUNT = 100;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \AtolOnline\Entities\Item[] Массив предметов расчёта
|
* @var Item[] Массив предметов расчёта
|
||||||
*/
|
*/
|
||||||
private $items = [];
|
private $items = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ItemArray constructor.
|
* ItemArray constructor.
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Item[]|null $items Массив предметов расчёта
|
* @param Item[]|null $items Массив предметов расчёта
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws AtolTooFewItemsException Слишком мало предметов расчёта
|
||||||
|
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
*/
|
*/
|
||||||
public function __construct(array $items = null)
|
public function __construct(?array $items = null)
|
||||||
{
|
{
|
||||||
if ($items) {
|
if ($items) {
|
||||||
$this->set($items);
|
$this->set($items);
|
||||||
@ -48,9 +49,10 @@ class ItemArray extends Entity
|
|||||||
/**
|
/**
|
||||||
* Устанавливает массив предметов расчёта
|
* Устанавливает массив предметов расчёта
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Item[] $items Массив предметов расчёта
|
* @param Item[] $items Массив предметов расчёта
|
||||||
* @return $this
|
* @return $this
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws AtolTooFewItemsException Слишком мало предметов расчёта
|
||||||
|
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
*/
|
*/
|
||||||
public function set(array $items)
|
public function set(array $items)
|
||||||
{
|
{
|
||||||
@ -63,9 +65,10 @@ class ItemArray extends Entity
|
|||||||
/**
|
/**
|
||||||
* Добавляет предмет расчёта в массив
|
* Добавляет предмет расчёта в массив
|
||||||
*
|
*
|
||||||
* @param \AtolOnline\Entities\Item $item Объект предмета расчёта
|
* @param Item $item Объект предмета расчёта
|
||||||
* @return $this
|
* @return $this
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws AtolTooFewItemsException Слишком мало предметов расчёта
|
||||||
|
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
*/
|
*/
|
||||||
public function add(Item $item)
|
public function add(Item $item)
|
||||||
{
|
{
|
||||||
@ -78,7 +81,7 @@ class ItemArray extends Entity
|
|||||||
/**
|
/**
|
||||||
* Возвращает массив предметов расчёта
|
* Возвращает массив предметов расчёта
|
||||||
*
|
*
|
||||||
* @return \AtolOnline\Entities\Item[]
|
* @return Item[]
|
||||||
*/
|
*/
|
||||||
public function get()
|
public function get()
|
||||||
{
|
{
|
||||||
@ -100,13 +103,13 @@ class ItemArray extends Entity
|
|||||||
/**
|
/**
|
||||||
* Проверяет количество предметов расчёта
|
* Проверяет количество предметов расчёта
|
||||||
*
|
*
|
||||||
* @param array|null $items Если передать массив, то проверит количество его элементов.
|
* @param Item[]|null $items Если передать массив, то проверит количество его элементов.
|
||||||
* Иначе проверит количество уже присвоенных элементов.
|
* Иначе проверит количество уже присвоенных элементов.
|
||||||
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooFewItemsException Слишком мало предметов расчёта
|
* @throws AtolTooFewItemsException Слишком мало предметов расчёта
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
*/
|
*/
|
||||||
protected function validateCount(array $items = null)
|
protected function validateCount(?array $items = null)
|
||||||
{
|
{
|
||||||
return empty($items)
|
return empty($items)
|
||||||
? $this->checkCount($this->items)
|
? $this->checkCount($this->items)
|
||||||
@ -116,18 +119,18 @@ class ItemArray extends Entity
|
|||||||
/**
|
/**
|
||||||
* Проверяет количество элементов в указанном массиве
|
* Проверяет количество элементов в указанном массиве
|
||||||
*
|
*
|
||||||
* @param array|null $items
|
* @param array|null $elements
|
||||||
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooFewItemsException Слишком мало предметов расчёта
|
* @throws AtolTooFewItemsException Слишком мало предметов расчёта
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
*/
|
*/
|
||||||
protected function checkCount(?array $items = null)
|
protected function checkCount(?array $elements = null)
|
||||||
{
|
{
|
||||||
$min_count = SellSchema::get()->receipt->properties->items->minItems;
|
$min_count = SellSchema::get()->receipt->properties->items->minItems;
|
||||||
$max_count = self::MAX_COUNT; // maxItems отстутствует в схеме sell
|
$max_count = self::MAX_COUNT; // maxItems отсутствует в схеме sell
|
||||||
if (empty($items) || count($items) < $min_count) {
|
if (empty($elements) || count($elements) < $min_count) {
|
||||||
throw new AtolTooFewItemsException($min_count);
|
throw new AtolTooFewItemsException($min_count);
|
||||||
} elseif (count($items) >= $max_count) {
|
} elseif (count($elements) >= $max_count) {
|
||||||
throw new AtolTooManyItemsException($max_count);
|
throw new AtolTooManyItemsException($max_count);
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
|
use AtolOnline\Api\SellSchema;
|
||||||
|
use AtolOnline\Exceptions\AtolTooFewPaymentsException;
|
||||||
use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,11 +20,6 @@ use AtolOnline\Exceptions\AtolTooManyPaymentsException;
|
|||||||
*/
|
*/
|
||||||
class PaymentArray extends Entity
|
class PaymentArray extends Entity
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Максимальное количество элементов в массиве
|
|
||||||
*/
|
|
||||||
const MAX_COUNT = 10;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Payment[] Массив оплат
|
* @var Payment[] Массив оплат
|
||||||
*/
|
*/
|
||||||
@ -32,9 +29,10 @@ class PaymentArray extends Entity
|
|||||||
* ItemArray constructor.
|
* ItemArray constructor.
|
||||||
*
|
*
|
||||||
* @param Payment[]|null $payments Массив оплат
|
* @param Payment[]|null $payments Массив оплат
|
||||||
|
* @throws AtolTooFewPaymentsException Слишком мало оплат
|
||||||
* @throws AtolTooManyPaymentsException Слишком много оплат
|
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||||
*/
|
*/
|
||||||
public function __construct(array $payments = null)
|
public function __construct(?array $payments = null)
|
||||||
{
|
{
|
||||||
if ($payments) {
|
if ($payments) {
|
||||||
$this->set($payments);
|
$this->set($payments);
|
||||||
@ -46,6 +44,7 @@ class PaymentArray extends Entity
|
|||||||
*
|
*
|
||||||
* @param Payment[] $payments
|
* @param Payment[] $payments
|
||||||
* @return $this
|
* @return $this
|
||||||
|
* @throws AtolTooFewPaymentsException Слишком мало оплат
|
||||||
* @throws AtolTooManyPaymentsException Слишком много оплат
|
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||||
*/
|
*/
|
||||||
public function set(array $payments)
|
public function set(array $payments)
|
||||||
@ -61,6 +60,7 @@ class PaymentArray extends Entity
|
|||||||
*
|
*
|
||||||
* @param Payment $payment Объект оплаты
|
* @param Payment $payment Объект оплаты
|
||||||
* @return $this
|
* @return $this
|
||||||
|
* @throws AtolTooFewPaymentsException Слишком мало оплат
|
||||||
* @throws AtolTooManyPaymentsException Слишком много оплат
|
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||||
*/
|
*/
|
||||||
public function add(Payment $payment)
|
public function add(Payment $payment)
|
||||||
@ -94,18 +94,39 @@ class PaymentArray extends Entity
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверяет количество элементов в массиве
|
* Проверяет количество налоговых ставок
|
||||||
*
|
*
|
||||||
* @param Payment[]|null $payments Если передать массив, то проверит количество его элементов.
|
* @param Payment[]|null $payments Если передать массив, то проверит количество его элементов.
|
||||||
* Иначе проверит количество уже присвоенных элементов.
|
* Иначе проверит количество уже присвоенных элементов.
|
||||||
* @return bool
|
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||||
|
* @throws AtolTooFewPaymentsException Слишком мало оплат
|
||||||
* @throws AtolTooManyPaymentsException Слишком много оплат
|
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||||
*/
|
*/
|
||||||
protected function validateCount(array $payments = null)
|
protected function validateCount(?array $payments = null)
|
||||||
{
|
{
|
||||||
if (($payments && is_array($payments) && count($payments) >= self::MAX_COUNT) || count($this->payments) == self::MAX_COUNT) {
|
return empty($payments)
|
||||||
throw new AtolTooManyPaymentsException(self::MAX_COUNT);
|
? $this->checkCount($this->payments)
|
||||||
|
: $this->checkCount($payments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяет количество элементов в указанном массиве
|
||||||
|
*
|
||||||
|
* @param array $elements
|
||||||
|
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||||
|
* @throws AtolTooFewPaymentsException Слишком мало оплат
|
||||||
|
* @throws AtolTooManyPaymentsException Слишком много оплат
|
||||||
|
*/
|
||||||
|
protected function checkCount(?array $elements = null)
|
||||||
|
{
|
||||||
|
$min_count = SellSchema::get()->receipt->properties->payments->minItems;
|
||||||
|
$max_count = SellSchema::get()->receipt->properties->payments->maxItems;
|
||||||
|
if (empty($elements) || count($elements) < $min_count) {
|
||||||
|
throw new AtolTooFewPaymentsException($min_count);
|
||||||
|
} elseif (count($elements) >= $max_count) {
|
||||||
|
throw new AtolTooManyPaymentsException($max_count);
|
||||||
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -32,7 +32,7 @@ class VatArray extends Entity
|
|||||||
* @throws AtolTooFewVatsException Слишком мало ставок НДС
|
* @throws AtolTooFewVatsException Слишком мало ставок НДС
|
||||||
* @throws AtolTooManyVatsException Слишком много ставок НДС
|
* @throws AtolTooManyVatsException Слишком много ставок НДС
|
||||||
*/
|
*/
|
||||||
public function __construct(array $vats = null)
|
public function __construct(?array $vats = null)
|
||||||
{
|
{
|
||||||
if ($vats) {
|
if ($vats) {
|
||||||
$this->set($vats);
|
$this->set($vats);
|
||||||
@ -112,18 +112,18 @@ class VatArray extends Entity
|
|||||||
/**
|
/**
|
||||||
* Проверяет количество элементов в указанном массиве
|
* Проверяет количество элементов в указанном массиве
|
||||||
*
|
*
|
||||||
* @param Vat[]|null $vats
|
* @param array|null $elements
|
||||||
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
* @return bool true если всё хорошо, иначе выбрасывает исключение
|
||||||
* @throws AtolTooFewVatsException Слишком мало ставок НДС
|
* @throws AtolTooFewVatsException Слишком мало ставок НДС
|
||||||
* @throws AtolTooManyVatsException Слишком много ставок НДС
|
* @throws AtolTooManyVatsException Слишком много ставок НДС
|
||||||
*/
|
*/
|
||||||
protected function checkCount(?array $vats = null)
|
protected function checkCount(?array $elements = null)
|
||||||
{
|
{
|
||||||
$min_count = SellSchema::get()->receipt->properties->vats->minItems;
|
$min_count = SellSchema::get()->receipt->properties->vats->minItems;
|
||||||
$max_count = SellSchema::get()->receipt->properties->vats->maxItems;
|
$max_count = SellSchema::get()->receipt->properties->vats->maxItems;
|
||||||
if (empty($vats) || count($vats) < $min_count) {
|
if (empty($elements) || count($elements) < $min_count) {
|
||||||
throw new AtolTooFewVatsException($min_count);
|
throw new AtolTooFewVatsException($min_count);
|
||||||
} elseif (count($vats) >= $max_count) {
|
} elseif (count($elements) >= $max_count) {
|
||||||
throw new AtolTooManyVatsException($max_count);
|
throw new AtolTooManyVatsException($max_count);
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
34
src/AtolOnline/Exceptions/AtolTooFewPaymentsException.php
Normal file
34
src/AtolOnline/Exceptions/AtolTooFewPaymentsException.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) Антон Аксенов (aka Anthony Axenov)
|
||||||
|
*
|
||||||
|
* This code is licensed under MIT.
|
||||||
|
* Этот код распространяется по лицензии MIT.
|
||||||
|
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace AtolOnline\Exceptions;
|
||||||
|
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Исключение, возникающее в случае если платежей в массиве слишком мало
|
||||||
|
*
|
||||||
|
* @package AtolOnline\Exceptions
|
||||||
|
*/
|
||||||
|
class AtolTooFewPaymentsException extends AtolException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* AtolTooFewPaymentsException constructor.
|
||||||
|
*
|
||||||
|
* @param int $min
|
||||||
|
* @param string $message
|
||||||
|
* @param int $code
|
||||||
|
* @param Throwable|null $previous
|
||||||
|
*/
|
||||||
|
public function __construct($min, $message = "", $code = 0, Throwable $previous = null)
|
||||||
|
{
|
||||||
|
$message = $message ?: 'Слишком много платежей (мин. '.$min.')';
|
||||||
|
parent::__construct($message, $code, $previous);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user