mirror of
https://github.com/anthonyaxenov/atol-online.git
synced 2024-11-22 20:54:34 +00:00
Улучшена валидация количества ставок НДС + новый экспешн
This commit is contained in:
parent
dc20d3e08e
commit
7da7d25823
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
34
src/AtolOnline/Exceptions/AtolTooFewVatsException.php
Normal file
34
src/AtolOnline/Exceptions/AtolTooFewVatsException.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 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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user