Улучшена валидация количества оплат + новый экспешн

Также мелкофиксы по другим массивам
This commit is contained in:
Anthony Axenov 2020-04-17 20:53:03 +08:00
parent c9ed0bf467
commit 025351a8ae
4 changed files with 96 additions and 38 deletions

View File

@ -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;

View File

@ -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;
} }
} }
}

View File

@ -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;

View 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);
}
}