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

This commit is contained in:
Anthony Axenov 2020-04-17 20:09:09 +08:00
parent dc20d3e08e
commit 7da7d25823
2 changed files with 68 additions and 13 deletions

View File

@ -9,6 +9,8 @@
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Api\SellSchema;
use AtolOnline\Exceptions\AtolTooFewVatsException;
use AtolOnline\Exceptions\AtolTooManyVatsException; use AtolOnline\Exceptions\AtolTooManyVatsException;
/** /**
@ -18,11 +20,6 @@ use AtolOnline\Exceptions\AtolTooManyVatsException;
*/ */
class VatArray extends AtolEntity class VatArray extends AtolEntity
{ {
/**
* Максимальное количество элементов в массиве
*/
public const MAX_COUNT = 6;
/** /**
* @var Vat[] Массив ставок НДС * @var Vat[] Массив ставок НДС
*/ */
@ -32,6 +29,7 @@ class VatArray extends AtolEntity
* VatArray constructor. * VatArray constructor.
* *
* @param Vat[]|null $vats Массив ставок НДС * @param Vat[]|null $vats Массив ставок НДС
* @throws AtolTooFewVatsException Слишком мало ставок НДС
* @throws AtolTooManyVatsException Слишком много ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС
*/ */
public function __construct(array $vats = null) public function __construct(array $vats = null)
@ -46,6 +44,7 @@ class VatArray extends AtolEntity
* *
* @param Vat[] $vats Массив ставок НДС * @param Vat[] $vats Массив ставок НДС
* @return $this * @return $this
* @throws AtolTooFewVatsException Слишком мало ставок НДС
* @throws AtolTooManyVatsException Слишком много ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС
*/ */
public function set(array $vats) public function set(array $vats)
@ -61,6 +60,7 @@ class VatArray extends AtolEntity
* *
* @param Vat $vat Объект ставки НДС * @param Vat $vat Объект ставки НДС
* @return $this * @return $this
* @throws AtolTooFewVatsException Слишком мало ставок НДС
* @throws AtolTooManyVatsException Слишком много ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС
*/ */
public function add(Vat $vat) public function add(Vat $vat)
@ -94,18 +94,39 @@ class VatArray extends AtolEntity
} }
/** /**
* Проверяет количество элементов в массиве * Проверяет количество налоговых ставок
* *
* @param array|null $vats Если передать массив, то проверит количество его элементов. * @param Vat[]|null $vats Если передать массив, то проверит количество его элементов.
* Иначе проверит количество уже присвоенных элементов. * Иначе проверит количество уже присвоенных элементов.
* @return bool * @return bool true если всё хорошо, иначе выбрасывает исключение
* @throws AtolTooFewVatsException Слишком мало ставок НДС
* @throws AtolTooManyVatsException Слишком много ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС
*/ */
protected function validateCount(array $vats = null) protected function validateCount(?array $vats = null)
{ {
if (($vats && is_array($vats) && count($vats) >= self::MAX_COUNT) || count($this->vats) == self::MAX_COUNT) { return empty($vats)
throw new AtolTooManyVatsException(self::MAX_COUNT); ? $this->checkCount($this->vats)
: $this->checkCount($vats);
}
/**
* Проверяет количество элементов в указанном массиве
*
* @param Vat[]|null $vats
* @return bool true если всё хорошо, иначе выбрасывает исключение
* @throws AtolTooFewVatsException Слишком мало ставок НДС
* @throws AtolTooManyVatsException Слишком много ставок НДС
*/
protected function checkCount(?array $vats = null)
{
$min_count = SellSchema::get()->receipt->properties->vats->minItems;
$max_count = SellSchema::get()->receipt->properties->vats->maxItems;
if (empty($vats) || count($vats) < $min_count) {
throw new AtolTooFewVatsException($min_count);
} elseif (count($vats) >= $max_count) {
throw new AtolTooManyVatsException($max_count);
} 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 AtolTooFewVatsException extends AtolException
{
/**
* AtolTooFewVatsException 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);
}
}