Рефакторинг исключений, новые константы ограничений

Описывать все слишком долго, TLDR:
- упрощены корневые AtolException, {BasicTooLongException => TooLongException}, {BasicTooManyException => TooManyException}
- InvalidSnoException заменён на InvalidEnumValueException
- добавлены новые константы, общий порядок изменён в соответствии с порядком упоминания в документации, ссылки на которую тоже добавлены с указанием страниц

Помимо этого, в enum-ах теперь должен быть предусмотрен метод getFfdTags()
This commit is contained in:
2021-11-22 14:51:10 +08:00
parent e1303f4fdb
commit 3bf8667437
48 changed files with 482 additions and 603 deletions

View File

@@ -12,7 +12,6 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Exception;
use Throwable;
/**
* Исключение, возникающее при работе с АТОЛ Онлайн
@@ -25,28 +24,15 @@ class AtolException extends Exception
protected array $ffd_tags = [];
/**
* AtolException constructor.
* Конструктор
*
* @param string $message
* @param int $code
* @param Throwable|null $previous
* @param string $message Сообщение
* @param int[] $ffd_tags Переопредление тегов ФФД
*/
public function __construct($message = "", $code = 0, Throwable $previous = null)
public function __construct(string $message = '', array $ffd_tags = [])
{
$message = $message ?: $this->message;
if ($this->getFfdTags()) {
$message .= ' [FFD tags: '.implode(', ', $this->getFfdTags()).']';
}
parent::__construct($message, $code, $previous);
parent::__construct(
($message ?: $this->message) . ' [Теги ФФД: ' . implode(', ', $ffd_tags ?: $this->ffd_tags) . ']'
);
}
/**
* Возвращает теги ФФД, с которыми связано исключение
*
* @return array
*/
protected function getFfdTags(): array
{
return $this->ffd_tags;
}
}
}

View File

@@ -13,7 +13,6 @@ namespace AtolOnline\Exceptions;
use AtolOnline\Api\KktResponse;
use Exception;
use Throwable;
/**
* Исключение, возникающее при неудачной авторизации
@@ -25,17 +24,9 @@ class AuthFailedException extends Exception
*
* @param KktResponse $response
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct(KktResponse $response, $message = "", $code = 0, Throwable $previous = null)
public function __construct(KktResponse $response, string $message = '')
{
$message = $response->isValid()
? $message
: '[' . $response->error->code . '] ' . $response->error->text .
'. ERROR_ID: ' . $response->error->error_id .
'. TYPE: ' . $response->error->type;
$code = $response->isValid() ? $code : $response->error->code;
parent::__construct($message, $code, $previous);
parent::__construct(($message ?: 'Ошибка авторизации: ') . ': ' . $response);
}
}

View File

@@ -1,40 +0,0 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при попытке указать слишком длинное что-либо
*/
class BasicTooLongException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Parameter is too long';
/**
* AtolTooLongException constructor.
*
* @param $string
* @param $max
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct($string, $max, $message = "", int $code = 0, Throwable $previous = null)
{
parent::__construct($message ?: $this->message . ' (max length - ' . $max . ', actual length - ' .
mb_strlen($string), $code, $previous);
}
}

View File

@@ -11,13 +11,12 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Entities\CorrectionInfo;
/**
* Исключение, возникающее при попытке зарегистрировать документ без данных коррекции
* Исключение, возникающее при попытке зарегистрировать документ коррекции без соотв. данных
*/
class EmptyCorrectionInfoException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Document must have correction info';
}
protected $message = 'Документ должен содержать объект ' . CorrectionInfo::class;
}

View File

@@ -13,19 +13,10 @@ namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать пустой email
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
*/
class EmptyEmailException extends AtolException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1008,
1117,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Email cannot be empty';
}
protected $message = 'Email не может быть пустым';
protected array $ffd_tags = [1008, 1117];
}

View File

@@ -12,12 +12,10 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать пустой логин ККТ
* Исключение, возникающее при попытке указать пустой логин
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 12
*/
class EmptyLoginException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'KKT login cannot be empty';
}
protected $message = 'Логин не может быть пустым';
}

View File

@@ -16,8 +16,5 @@ namespace AtolOnline\Exceptions;
*/
class EmptyMonitorDataException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Cannot create KKT entity without data from monitor';
}
protected $message = 'Не возможно создать объект ККт без данных от мониторинга';
}

View File

@@ -12,12 +12,10 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать пустой пароль ККТ
* Исключение, возникающее при попытке указать пустой пароль
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 12
*/
class EmptyPasswordException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'KKT password cannot be empty';
}
protected $message = 'Пароль не может быть пустым';
}

View File

@@ -16,8 +16,5 @@ namespace AtolOnline\Exceptions;
*/
class InvalidCallbackUrlException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Invalid callback URL';
}
protected $message = 'Невалидный callback_url';
}

View File

@@ -1,38 +0,0 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Enums\DocumentTypes;
use Throwable;
/**
* Исключение, возникающее при попытке указать некорректный тип документа
*/
class InvalidDocumentTypeException extends AtolException
{
/**
* Конструктор
*
* @param string $type
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct($type = '', $message = "", $code = 0, Throwable $previous = null)
{
parent::__construct(
$message ?: "Wrong document type: '$type'. Valid ones: " . implode(', ', DocumentTypes::toArray()),
$code,
$previous
);
}
}

View File

@@ -11,31 +11,21 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при ошибке валидации email
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
*/
class InvalidEmailException extends AtolException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1008,
1117,
];
protected array $ffd_tags = [1008, 1117];
/**
* AtolEmailValidateException constructor.
* Конструктор
*
* @param string $email
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct(string $email = '', $message = "", $code = 0, Throwable $previous = null)
public function __construct(string $email = '')
{
parent::__construct($message ?: "Invalid email: '$email'", $code, $previous);
parent::__construct("Невалидный email: '$email'");
}
}
}

View File

@@ -0,0 +1,38 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Enum;
/**
* Исключение, возникающее при ошибке валидации типа агента
*/
class InvalidEnumValueException extends AtolException
{
/**
* Конструктор
*
* @param string $enum
* @param mixed $value
* @param string $message
* @param array $ffd_tags
*/
public function __construct(string $enum, mixed $value, string $message = '', array $ffd_tags = [])
{
/** @var $enum Enum */
parent::__construct(
($message ?: "Некорректное значение $enum::$value.") .
" Допустимые значения: " . implode(', ', $enum::toArray()),
$ffd_tags ?: $enum::getFfdTags()
);
}
}

View File

@@ -11,37 +11,23 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при попытке указать ИНН некорректной длины
*/
class InvalidInnLengthException extends AtolException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1016,
1018,
1226,
1228,
];
protected array $ffd_tags = [1016, 1018, 1226, 1228];
/**
* AtolInnWrongLengthException constructor.
* Конструктор
*
* @param string $inn
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct($inn = '', $message = "", $code = 0, Throwable $previous = null)
public function __construct(string $inn = '', string $message = '')
{
parent::__construct(
$message ?: 'INN length must be 10 or 12 digits only, actual is ' . strlen($inn),
$code,
$previous
$message ?: 'Длина ИНН должна быть 10 или 12 цифр, фактически - ' . strlen($inn),
);
}
}
}

View File

@@ -11,26 +11,16 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при работе с невалидным JSON
*/
class InvalidJsonException extends AtolException
{
/**
* AtolInnWrongLengthException constructor.
*
* @param string $message
* @param int $code
* @param Throwable|null $previous
* Конструктор
*/
public function __construct($message = "", $code = 0, Throwable $previous = null)
public function __construct()
{
parent::__construct(
$message ?: 'Invalid JSON: [' . json_last_error() . '] ' . json_last_error_msg(),
$code,
$previous
);
parent::__construct('[' . json_last_error() . '] ' . json_last_error_msg());
}
}
}

View File

@@ -11,34 +11,22 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при попытке указать некорректный платёжный адрес
* Исключение, возникающее при попытке указать некорректный адрес места расчётов
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35
*/
class InvalidPaymentAddressException extends AtolException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1187,
];
protected array $ffd_tags = [1187];
/**
* Конструктор
*
* @param string $address
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct($address = '', $message = "", $code = 0, Throwable $previous = null)
public function __construct($address = '', $message = "")
{
parent::__construct(
$message ?: "Wrong payment address: '$address'",
$code,
$previous
);
parent::__construct($message ?: "Некорректный адрес места расчётов: '$address'");
}
}
}

View File

@@ -1,45 +0,0 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Enums\SnoTypes;
use Throwable;
/**
* Исключение, возникающее при попытке указать некорректную СНО
*/
class InvalidSnoException extends AtolException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1055,
];
/**
* Конструктор
*
* @param string $sno
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct($sno = '', $message = "", $code = 0, Throwable $previous = null)
{
parent::__construct(
$message ?: "Wrong SNO: '$sno'. Valid ones: " . implode(', ', SnoTypes::toArray()),
$code,
$previous
);
}
}

View File

@@ -11,23 +11,21 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при ошибке валидации UUID
*/
class InvalidUuidException extends AtolException
{
/**
* AtolInvalidUuidException constructor.
* Конструктор
*
* @param $uuid
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct($uuid, $message = "", $code = 0, Throwable $previous = null)
public function __construct(?string $uuid = null)
{
parent::__construct($message ?: 'Invalid UUID: '.$uuid, $code, $previous);
parent::__construct('Невалидный UUID' . ($uuid ? ': ' . $uuid : ''));
}
}
}

View File

@@ -11,8 +11,6 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при попытке создать объект ККТ с неполными данными от монитора
*/
@@ -21,18 +19,16 @@ class NotEnoughMonitorDataException extends AtolException
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Cannot create KKT entity without these properties: ';
protected $message = 'Невозможно создать объект ККТ без следующих атрибутов: ';
/**
* Конструктор
*
* @param array $props_diff
* @param string $message
* @param int $code
* @param Throwable|null $previous
*/
public function __construct(array $props_diff, $message = "", int $code = 0, Throwable $previous = null)
public function __construct(array $props_diff, string $message = '')
{
parent::__construct($message ?: $this->message . implode(', ', $props_diff), $code, $previous);
parent::__construct($message ?: $this->message . implode(', ', $props_diff));
}
}
}

View File

@@ -14,7 +14,7 @@ namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать слишком высокую цену (сумму)
*/
class TooHighPriceException extends BasicTooManyException
class TooHighPriceException extends TooManyException
{
/**
* @inheritDoc

View File

@@ -11,13 +11,13 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинный callback_url
*/
class TooLongCallbackUrlException extends BasicTooLongException
class TooLongCallbackUrlException extends TooLongException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Callback URL is too long';
}
protected $message = 'Слишком длинный адрес колбека';
protected int $max = Constraints::MAX_LENGTH_CALLBACK_URL;
}

View File

@@ -11,20 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинное имя кассира
*/
class TooLongCashierException extends BasicTooLongException
class TooLongCashierException extends TooLongException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1021,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Cashier name is too long';
}
protected $message = 'Слишком длинное имя кассира';
protected int $max = Constraints::MAX_LENGTH_CASHIER_NAME;
protected array $ffd_tags = [1021];
}

View File

@@ -11,24 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинный телефон
* Исключение, возникающее при попытке указать слишком длинный телефон или email покупателя
*/
class TooLongPhoneException extends BasicTooLongException
class TooLongClientContactException extends TooLongException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1008,
1073,
1074,
1075,
1171,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Phone is too long';
}
protected $message = 'Cлишком длинный телефон или email покупателя';
protected int $max = Constraints::MAX_LENGTH_CLIENT_CONTACT;
protected array $ffd_tags = [1008];
}

View File

@@ -0,0 +1,24 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинное наименование покупателя
*/
class TooLongClientNameException extends TooLongException
{
protected $message = 'Cлишком длинное наименование покупателя';
protected int $max = Constraints::MAX_LENGTH_CLIENT_NAME;
protected array $ffd_tags = [1227];
}

View File

@@ -11,21 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинный email
*/
class TooLongEmailException extends BasicTooLongException
class TooLongEmailException extends TooLongException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1008,
1117,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Email is too long';
}
protected $message = 'Слишком длинный email';
protected int $max = Constraints::MAX_LENGTH_EMAIL;
protected array $ffd_tags = [1008, 1117];
}

View File

@@ -0,0 +1,44 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать слишком длинное что-либо
*/
class TooLongException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Слишком длинное значение';
/**
* @var int Максимальная длина строки
*/
protected int $max = 0;
/**
* Конструктор
*
* @param string $value
* @param string $message
* @param int $max
*/
public function __construct(string $value, string $message = '', int $max = 0)
{
$message = ($message ?: $this->message) . ': '. $value;
if ($max > 0 || $this->max > 0) {
$message .= ' (макс. = ' . ($max ?? $this->max) . ', фактически = ' . mb_strlen($value) . ')';
}
parent::__construct($message);
}
}

View File

@@ -11,24 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинное имя
*/
class TooLongNameException extends BasicTooLongException
class TooLongItemNameException extends TooLongException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1026,
1030,
1085,
1225,
1227,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Name is too long';
}
protected $message = 'Слишком длинное наименование предмета расчёта';
protected int $max = Constraints::MAX_LENGTH_ITEM_NAME;
protected array $ffd_tags = [1030];
}

View File

@@ -11,13 +11,13 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинный логин ККТ
*/
class TooLongLoginException extends BasicTooLongException
class TooLongLoginException extends TooLongException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'KKT login is too long';
}
protected $message = 'Слишком длинный логин';
protected int $max = Constraints::MAX_LENGTH_LOGIN;
}

View File

@@ -11,13 +11,13 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинный пароль ККТ
*/
class TooLongPasswordException extends BasicTooLongException
class TooLongPasswordException extends TooLongException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'KKT password is too long';
}
protected $message = 'Слишком длинный пароль';
protected int $max = Constraints::MAX_LENGTH_PASSWORD;
}

View File

@@ -0,0 +1,24 @@
<?php
/*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
*
* This code is licensed under MIT.
* Этот код распространяется по лицензии MIT.
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/
declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинную операцию для платёжного агента
*/
class TooLongPayingAgentOperationException extends TooLongException
{
protected $message = 'Слишком длинное yаименование операции платёжного агента';
protected int $max = Constraints::MAX_LENGTH_PAYING_AGENT_OPERATION;
protected array $ffd_tags = [1073];
}

View File

@@ -11,20 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать слишком длинный платёжный адрес
*/
class TooLongPaymentAddressException extends AtolException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1187,
];
use AtolOnline\Constants\Constraints;
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Payment address is too long';
}
/**
* Исключение, возникающее при попытке указать слишком длинный адрес места расчётов
*/
class TooLongPaymentAddressException extends TooLongException
{
protected $message = 'Слишком длинный адрес места расчётов';
protected int $max = Constraints::MAX_LENGTH_PAYMENT_ADDRESS;
protected array $ffd_tags = [1187];
}

View File

@@ -11,20 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
/**
* Исключение, возникающее при попытке указать слишком длинный телефон
*/
class TooLongUnitException extends BasicTooLongException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1197,
];
use AtolOnline\Constants\Constraints;
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Measurement unit is too long';
}
/**
* Исключение, возникающее при попытке указать слишком длинную единицу измерения предмета расчёта
*/
class TooLongUnitException extends TooLongException
{
protected $message = 'Слишком длинная единица измерения предмета расчёта';
protected int $max = Constraints::MAX_LENGTH_MEASUREMENT_UNIT;
protected array $ffd_tags = [1197];
}

View File

@@ -11,20 +11,14 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке указать слишком длинный дополнительный реквизит
*/
class TooLongUserdataException extends BasicTooLongException
class TooLongUserdataException extends TooLongException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1191,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'User data is too long';
}
protected $message = 'Слишком длинный дополнительный реквизит предмета расчёта';
protected int $max = Constraints::MAX_LENGTH_USER_DATA;
protected array $ffd_tags = [1191];
}

View File

@@ -11,33 +11,34 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use Throwable;
/**
* Исключение, возникающее при попытке указать слишком большое количество чего-либо
*/
class BasicTooManyException extends AtolException
class TooManyException extends AtolException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Quantity is too high';
protected $message = 'Слишком большое количество';
/**
* AtolTooManyException constructor.
*
* @param float $quantity
* @param float $max
* @param string $message
* @param int $code
* @param Throwable|null $previous
* @var int Максимальное количество
*/
public function __construct(float $quantity, float $max, $message = "", int $code = 0, Throwable $previous = null)
protected int $max = 0;
/**
* Конструктор
*
* @param float $value
* @param string $message
* @param float $max
*/
public function __construct(float $value, string $message = '', float $max = 0)
{
parent::__construct(
$message ?: $this->message . ' (max - ' . $max . ', actual - ' . $quantity . ')',
$code,
$previous
);
$message = ($message ?: $this->message) . ': ' . $value;
if ($max > 0 || $this->max > 0) {
$message .= ' (макс. = ' . ($max ?? $this->max) . ', фактически = ' . $value . ')';
}
parent::__construct($message);
}
}
}

View File

@@ -11,13 +11,13 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке добавить слишком много предметов расчёта в массив
*/
class TooManyItemsException extends BasicTooManyException
class TooManyItemsException extends TooManyException
{
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Too many items';
}
protected $message = 'Слишком много предметов расчёта в документе';
protected int $max = Constraints::MAX_COUNT_DOC_ITEMS;
}

View File

@@ -11,23 +11,13 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке добавить слишком много платежей в массив
*/
class TooManyPaymentsException extends BasicTooManyException
class TooManyPaymentsException extends TooManyException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1031,
1081,
1215,
1217,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Too many payments';
}
protected $message = 'Слишком много платежей в документе';
protected int $max = Constraints::MAX_COUNT_DOC_PAYMENTS;
}

View File

@@ -11,25 +11,13 @@ declare(strict_types = 1);
namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints;
/**
* Исключение, возникающее при попытке добавить слишком много ставок НДС в массив
*/
class TooManyVatsException extends BasicTooManyException
class TooManyVatsException extends TooManyException
{
/**
* @inheritDoc
*/
protected array $ffd_tags = [
1102,
1103,
1104,
1105,
1106,
1107,
];
/**
* @var string Сообщение об ошибке
*/
protected $message = 'Too many vats';
}
protected $message = 'Слишком много ставок НДС в документе';
protected int $max = Constraints::MAX_COUNT_DOC_VATS;
}