From 7da7d258234b276e7efabecff18558b1601f31c9 Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Fri, 17 Apr 2020 20:09:09 +0800 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=B0?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D0=B2=D0=BE=D0=BA=20=D0=9D=D0=94=D0=A1=20?= =?UTF-8?q?+=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=8D=D0=BA=D1=81=D0=BF?= =?UTF-8?q?=D0=B5=D1=88=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/AtolOnline/Entities/VatArray.php | 47 ++++++++++++++----- .../Exceptions/AtolTooFewVatsException.php | 34 ++++++++++++++ 2 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 src/AtolOnline/Exceptions/AtolTooFewVatsException.php diff --git a/src/AtolOnline/Entities/VatArray.php b/src/AtolOnline/Entities/VatArray.php index 6badb1e..d19c54b 100644 --- a/src/AtolOnline/Entities/VatArray.php +++ b/src/AtolOnline/Entities/VatArray.php @@ -9,6 +9,8 @@ namespace AtolOnline\Entities; +use AtolOnline\Api\SellSchema; +use AtolOnline\Exceptions\AtolTooFewVatsException; use AtolOnline\Exceptions\AtolTooManyVatsException; /** @@ -18,11 +20,6 @@ use AtolOnline\Exceptions\AtolTooManyVatsException; */ class VatArray extends AtolEntity { - /** - * Максимальное количество элементов в массиве - */ - public const MAX_COUNT = 6; - /** * @var Vat[] Массив ставок НДС */ @@ -32,6 +29,7 @@ class VatArray extends AtolEntity * VatArray constructor. * * @param Vat[]|null $vats Массив ставок НДС + * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ public function __construct(array $vats = null) @@ -46,6 +44,7 @@ class VatArray extends AtolEntity * * @param Vat[] $vats Массив ставок НДС * @return $this + * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ public function set(array $vats) @@ -61,6 +60,7 @@ class VatArray extends AtolEntity * * @param Vat $vat Объект ставки НДС * @return $this + * @throws AtolTooFewVatsException Слишком мало ставок НДС * @throws AtolTooManyVatsException Слишком много ставок НДС */ public function add(Vat $vat) @@ -94,18 +94,39 @@ class VatArray extends AtolEntity } /** - * Проверяет количество элементов в массиве + * Проверяет количество налоговых ставок * - * @param array|null $vats Если передать массив, то проверит количество его элементов. - * Иначе проверит количество уже присвоенных элементов. - * @return bool + * @param Vat[]|null $vats Если передать массив, то проверит количество его элементов. + * Иначе проверит количество уже присвоенных элементов. + * @return bool true если всё хорошо, иначе выбрасывает исключение + * @throws AtolTooFewVatsException Слишком мало ставок НДС * @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) { - throw new AtolTooManyVatsException(self::MAX_COUNT); + return empty($vats) + ? $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; } } \ No newline at end of file diff --git a/src/AtolOnline/Exceptions/AtolTooFewVatsException.php b/src/AtolOnline/Exceptions/AtolTooFewVatsException.php new file mode 100644 index 0000000..991bd37 --- /dev/null +++ b/src/AtolOnline/Exceptions/AtolTooFewVatsException.php @@ -0,0 +1,34 @@ +