Кучад доработок, главным образом вокруг Item

- `Item` почти готов и весь покрыт тестами. Пока остались нереализованными `nomenclature_code` и `excise`
- `Client::setPhone()` теперь выбрасывает InvalidPhoneException
- доработка и создание новых исключений (не буду все перечислять, смотри диффы)
- мелочи по phpdoc и всяким текстовкам
This commit is contained in:
2021-12-01 20:11:08 +08:00
parent bce21f9658
commit 5ccb0e9db4
22 changed files with 1232 additions and 360 deletions

View File

@@ -31,8 +31,9 @@ class AtolException extends Exception
*/
public function __construct(string $message = '', array $ffd_tags = [])
{
$tags = implode(', ', $ffd_tags ?: $this->ffd_tags);
parent::__construct(
($message ?: $this->message) . ' [Теги ФФД: ' . implode(', ', $ffd_tags ?: $this->ffd_tags) . ']'
($message ?: $this->message) . ($tags ? ' [Теги ФФД: ' . $tags : '') . ']'
);
}
}

View File

@@ -0,0 +1,25 @@
<?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\Ffd105Tags;
/**
* Исключение, возникающее при пустом наименовании предмета расчёта
*
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/
class EmptyItemNameException extends AtolException
{
protected $message = 'Наименование предмета расчёта не может быть пустым';
protected array $ffd_tags = [Ffd105Tags::ITEM_NAME];
}

View File

@@ -0,0 +1,32 @@
<?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\Ffd105Tags;
/**
* Исключение, возникающее при ошибке валидации кода таможенной декларации
*/
class InvalidDeclarationNumberException extends AtolException
{
protected array $ffd_tags = [Ffd105Tags::ITEM_DECLARATION_NUMBER];
/**
* Конструктор
*
* @param string $code
*/
public function __construct(string $code = '')
{
parent::__construct("Невалидный код таможенной декларации: '$code'");
}
}

View File

@@ -14,7 +14,7 @@ namespace AtolOnline\Exceptions;
use AtolOnline\Enums\Enum;
/**
* Исключение, возникающее при ошибке валидации типа агента
* Исключение, возникающее при ошибке валидации перечислимых значений
*/
class InvalidEnumValueException extends AtolException
{
@@ -29,10 +29,11 @@ class InvalidEnumValueException extends AtolException
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()
);
$own_message = (
empty($value)
? "Значение из $enum не может быть пустым."
: "Некорректное значение $enum::$value."
) . " Допустимые значения: " . implode(', ', $enum::toArray());
parent::__construct($message ?: $own_message, $ffd_tags ?: $enum::getFfdTags());
}
}

View File

@@ -0,0 +1,34 @@
<?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\Ffd105Tags;
/**
* Исключение, возникающее при ошибке валидации кода страны происхождения товара
*
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 29
*/
class InvalidOKSMCodeException extends AtolException
{
protected array $ffd_tags = [Ffd105Tags::ITEM_COUNTRY_CODE];
/**
* Конструктор
*
* @param string $code
*/
public function __construct(string $code)
{
parent::__construct('Невалидный код страны происхождения товара: ' . $code);
}
}

View File

@@ -0,0 +1,33 @@
<?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\Ffd105Tags;
/**
* Исключение, возникающее при попытке указать предмету расчёта отрицательную цену
*/
class NegativeItemPriceException extends AtolException
{
protected array $ffd_tags = [Ffd105Tags::ITEM_PRICE];
/**
* Конструктор
*
* @param string $name
* @param float $price
*/
public function __construct(string $name, float $price)
{
parent::__construct("Предмет расчёта '$name' не может иметь отрицательную цену $price");
}
}

View File

@@ -0,0 +1,33 @@
<?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\Ffd105Tags;
/**
* Исключение, возникающее при попытке указать предмету расчёта отрицательное количество
*/
class NegativeItemQuantityException extends AtolException
{
protected array $ffd_tags = [Ffd105Tags::ITEM_QUANTITY];
/**
* Конструктор
*
* @param string $name
* @param float $quantity
*/
public function __construct(string $name, float $quantity)
{
parent::__construct("Предмет расчёта '$name' не может иметь отрицательное количество $quantity");
}
}

View File

@@ -0,0 +1,35 @@
<?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;
use AtolOnline\Constants\Ffd105Tags;
/**
* Исключение, возникающее при попытке добавить слишком большое количество предмета расчёта
*/
class TooHighItemQuantityException extends TooManyException
{
protected float $max = Constraints::MAX_COUNT_ITEM_QUANTITY;
protected array $ffd_tags = [Ffd105Tags::ITEM_QUANTITY];
/**
* Конструктор
*
* @param string $name
* @param float $quantity
*/
public function __construct(string $name, float $quantity)
{
parent::__construct($quantity, "Слишком большое количество предмета расчёта '$name'");
}
}

View File

@@ -19,7 +19,17 @@ use AtolOnline\Constants\Ffd105Tags;
*/
class TooHighPriceException extends TooManyException
{
protected $message = 'Слишком высокая цена';
protected array $ffd_tags = [Ffd105Tags::ITEM_PRICE];
protected float $max = Constraints::MAX_COUNT_ITEM_PRICE;
/**
* Конструктор
*
* @param string $name
* @param float $price
*/
public function __construct(string $name, float $price)
{
parent::__construct($price, "Слишком высокая цена для предмета расчёта '$name'");
}
}

View File

@@ -0,0 +1,35 @@
<?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;
use AtolOnline\Constants\Ffd105Tags;
/**
* Исключение, возникающее при попытке получеиня слишком высокой стоимости
*/
class TooHighSumException extends TooManyException
{
protected array $ffd_tags = [Ffd105Tags::ITEM_SUM];
protected float $max = Constraints::MAX_COUNT_ITEM_PRICE;
/**
* Конструктор
*
* @param string $name
* @param float $sum
*/
public function __construct(string $name, float $sum)
{
parent::__construct($sum, "Слишком высокая стоимость предмета расчёта '$name'");
}
}

View File

@@ -17,7 +17,7 @@ use AtolOnline\Constants\Ffd105Tags;
/**
* Исключение, возникающее при попытке указать слишком длинную единицу измерения предмета расчёта
*/
class TooLongUnitException extends TooLongException
class TooLongMeasurementUnitException extends TooLongException
{
protected $message = 'Слишком длинная единица измерения предмета расчёта';
protected float $max = Constraints::MAX_LENGTH_MEASUREMENT_UNIT;

View File

@@ -31,14 +31,13 @@ class TooManyException extends AtolException
*
* @param float $value
* @param string $message
* @param float $max
* @param float|null $max
*/
public function __construct(float $value, string $message = '', float $max = 0)
public function __construct(float $value, string $message = '', ?float $max = null)
{
$message = ($message ?: $this->message) . ': ' . $value;
if ($max > 0 || $this->max > 0) {
$message .= ' (макс. = ' . ($max ?? $this->max) . ', фактически = ' . $value . ')';
}
parent::__construct($message);
parent::__construct(
($message ?: $this->message) . (((float)$max > 0 || (float)$this->max > 0) ?
' (макс = ' . ($max ?? $this->max) . ', фактически = ' . $value . ')' : '')
);
}
}