Проверка количества предметов расчёта в массиве в соотв. со схемой (не тестировалось)

This commit is contained in:
Anthony Axenov 2020-04-15 21:39:23 +08:00
parent f161dc59f7
commit db4b777648
2 changed files with 48 additions and 3 deletions

View File

@ -9,6 +9,8 @@
namespace AtolOnline\Entities;
use AtolOnline\Api\SellSchema;
use AtolOnline\Exceptions\AtolTooFewItemsException;
use AtolOnline\Exceptions\AtolTooManyItemsException;
/**
@ -20,8 +22,10 @@ class ItemArray extends AtolEntity
{
/**
* Максимальное количество элементов в массиве
* По документации ограничение по количеству предметов расчёта = от 1 до 100,
* однако в схеме sell не указан receipt.properties.items.maxItems
*/
const MAX_COUNT = 100;
public const MAX_COUNT = 100;
/**
* @var \AtolOnline\Entities\Item[] Массив предметов расчёта
@ -99,13 +103,20 @@ class ItemArray extends AtolEntity
* @param array|null $items Если передать массив, то проверит количество его элементов.
* Иначе проверит количество уже присвоенных элементов.
* @return bool
* @throws \AtolOnline\Exceptions\AtolTooFewItemsException Слишком мало предметов расчёта
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
*/
protected function validateCount(array $items = null)
{
if (($items && is_array($items) && count($items) >= self::MAX_COUNT) || count($this->items) == self::MAX_COUNT) {
throw new AtolTooManyItemsException(self::MAX_COUNT);
}
if (!empty($is_items) && is_array($items)) {
if (count($items) < SellSchema::get()->receipt->properties->items->minItems) {
throw new AtolTooFewItemsException(SellSchema::get()->receipt->properties->items->minItems);
} elseif (count($items) <= self::MAX_COUNT) { // maxItems отстутствует в схеме sell
return true;
}
} elseif (count($this->items) > self::MAX_COUNT) {
throw new AtolTooManyItemsException(self::MAX_COUNT);
}
return false;
}
}

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 AtolTooFewItemsException extends AtolException
{
/**
* AtolTooFewItemsException 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);
}
}