mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-22 16:14:34 +00:00
Проверка количества предметов расчёта в массиве в соотв. со схемой (не тестировалось)
This commit is contained in:
parent
f161dc59f7
commit
db4b777648
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
namespace AtolOnline\Entities;
|
namespace AtolOnline\Entities;
|
||||||
|
|
||||||
|
use AtolOnline\Api\SellSchema;
|
||||||
|
use AtolOnline\Exceptions\AtolTooFewItemsException;
|
||||||
use AtolOnline\Exceptions\AtolTooManyItemsException;
|
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[] Массив предметов расчёта
|
* @var \AtolOnline\Entities\Item[] Массив предметов расчёта
|
||||||
@ -99,13 +103,20 @@ class ItemArray extends AtolEntity
|
|||||||
* @param array|null $items Если передать массив, то проверит количество его элементов.
|
* @param array|null $items Если передать массив, то проверит количество его элементов.
|
||||||
* Иначе проверит количество уже присвоенных элементов.
|
* Иначе проверит количество уже присвоенных элементов.
|
||||||
* @return bool
|
* @return bool
|
||||||
|
* @throws \AtolOnline\Exceptions\AtolTooFewItemsException Слишком мало предметов расчёта
|
||||||
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
|
||||||
*/
|
*/
|
||||||
protected function validateCount(array $items = null)
|
protected function validateCount(array $items = null)
|
||||||
{
|
{
|
||||||
if (($items && is_array($items) && count($items) >= self::MAX_COUNT) || count($this->items) == 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);
|
throw new AtolTooManyItemsException(self::MAX_COUNT);
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
34
src/AtolOnline/Exceptions/AtolTooFewItemsException.php
Normal file
34
src/AtolOnline/Exceptions/AtolTooFewItemsException.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 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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user