Миграция на php8.1

* enum-ы теперь enum-ы, а не говно -- теперь всё переведено на них, где это было возможно
* некоторые свойства классов объявлены в конструкторе
* некоторые классы перемещены в корневой неймспейс
* исправлен код-стайл, вычищен некоторый мусор, выправлены тесты... работы над этим продолжаются
dev
Anthony Axenov 2022-12-15 00:19:55 +08:00
parent 692ae43f9f
commit 4157ab68f5
Signed by: anthony
GPG Key ID: EA9EC32FF7CCD4EC
120 changed files with 1098 additions and 1401 deletions

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Api; namespace AtolOnline\Api;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
AuthFailedException, AuthFailedException,
EmptyLoginException, EmptyLoginException,

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
/** @noinspection PhpMultipleClassDeclarationsInspection */ /** @noinspection PhpMultipleClassDeclarationsInspection */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Api; namespace AtolOnline\Api;
@ -36,7 +37,7 @@ final class AtolResponse implements JsonSerializable, Stringable
/** /**
* @var object|array|null Содержимое ответа сервера * @var object|array|null Содержимое ответа сервера
*/ */
protected object|array|null $content; protected object | array | null $content;
/** /**
* @var array Заголовки ответа * @var array Заголовки ответа
@ -122,7 +123,8 @@ final class AtolResponse implements JsonSerializable, Stringable
/** /**
* @inheritDoc * @inheritDoc
*/ */
#[ArrayShape([ #[ArrayShape(
[
'code' => 'int', 'code' => 'int',
'headers' => 'array|\string[][]', 'headers' => 'array|\string[][]',
'body' => 'mixed', 'body' => 'mixed',

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Api; namespace AtolOnline\Api;
use AtolOnline\{ use AtolOnline\{
Constants\Constraints, Constraints,
TestEnvParams}; TestEnvParams};
use AtolOnline\Entities\{ use AtolOnline\Entities\{
Correction, Correction,
@ -320,7 +321,7 @@ final class Fiscalizer extends AtolClient
*/ */
protected function registerDocument( protected function registerDocument(
string $api_method, string $api_method,
Receipt|Correction $document, Receipt | Correction $document,
?string $external_id = null ?string $external_id = null
): ?AtolResponse { ): ?AtolResponse {
$this->isTestMode() && $document->getCompany() $this->isTestMode() && $document->getCompany()

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Api; namespace AtolOnline\Api;
@ -88,7 +89,7 @@ final class Monitor extends AtolClient
public function getAll(?int $limit = null, ?int $offset = null): Collection public function getAll(?int $limit = null, ?int $offset = null): Collection
{ {
$collection = collect($this->fetchAll($limit, $offset)->getContent()); $collection = collect($this->fetchAll($limit, $offset)->getContent());
return $collection->map(fn($data) => new Kkt($data)); return $collection->map(fn ($data) => new Kkt($data));
} }
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Collections; namespace AtolOnline\Collections;
@ -33,36 +34,38 @@ abstract class EntityCollection extends Collection
/** /**
* Проверяет количество элементов коллекции * Проверяет количество элементов коллекции
* *
* @return void * @return static
*/ */
public function checkCount(): void public function checkCount(): static
{ {
$this->isEmpty() && throw new (static::EMPTY_EXCEPTION_CLASS)(); $this->isEmpty() && throw new (static::EMPTY_EXCEPTION_CLASS)();
$this->count() > static::MAX_COUNT && throw new (static::TOO_MANY_EXCEPTION_CLASS)(static::MAX_COUNT); $this->count() > static::MAX_COUNT && throw new (static::TOO_MANY_EXCEPTION_CLASS)(static::MAX_COUNT);
return $this;
} }
/** /**
* Проверяет корректность класса элемента коллекции * Проверяет корректность класса элемента коллекции
* *
* @param mixed $item * @param mixed $item
* @return void * @return static
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
*/ */
public function checkItemClass(mixed $item): void public function checkItemClass(mixed $item): static
{ {
if (!is_object($item) || $item::class !== static::ENTITY_CLASS) { if (!is_object($item) || $item::class !== static::ENTITY_CLASS) {
throw new InvalidEntityInCollectionException(static::class, static::ENTITY_CLASS, $item); throw new InvalidEntityInCollectionException(static::class, static::ENTITY_CLASS, $item);
} }
return $this;
} }
/** /**
* Проверяет корректность классов элементов коллекции * Проверяет корректность классов элементов коллекции
* *
* @return $this * @return static
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
*/ */
public function checkItemsClasses(): self public function checkItemsClasses(): static
{ {
return $this->each(fn($item) => $this->checkItemClass($item)); return $this->each(fn ($item) => $this->checkItemClass($item));
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
namespace AtolOnline\Collections; namespace AtolOnline\Collections;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Entities\Item; use AtolOnline\Entities\Item;
use AtolOnline\Exceptions\EmptyItemsException; use AtolOnline\Exceptions\EmptyItemsException;
use AtolOnline\Exceptions\TooManyItemsException; use AtolOnline\Exceptions\TooManyItemsException;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
namespace AtolOnline\Collections; namespace AtolOnline\Collections;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Entities\Payment; use AtolOnline\Entities\Payment;
use AtolOnline\Exceptions\EmptyPaymentsException; use AtolOnline\Exceptions\EmptyPaymentsException;
use AtolOnline\Exceptions\TooManyPaymentsException; use AtolOnline\Exceptions\TooManyPaymentsException;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
namespace AtolOnline\Collections; namespace AtolOnline\Collections;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Entities\Vat; use AtolOnline\Entities\Vat;
use AtolOnline\Exceptions\EmptyVatsException; use AtolOnline\Exceptions\EmptyVatsException;
use AtolOnline\Exceptions\TooManyVatsException; use AtolOnline\Exceptions\TooManyVatsException;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,9 +8,9 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Constants; namespace AtolOnline;
/** /**
* Класс с константами ограничений * Класс с константами ограничений
@ -19,55 +20,55 @@ final class Constraints
/** /**
* Максимальная длина Callback URL * Максимальная длина Callback URL
*/ */
const MAX_LENGTH_CALLBACK_URL = 256; public const MAX_LENGTH_CALLBACK_URL = 256;
/** /**
* Максимальная длина email * Максимальная длина email
*/ */
const MAX_LENGTH_EMAIL = 64; public const MAX_LENGTH_EMAIL = 64;
/** /**
* Максимальная длина логина ККТ * Максимальная длина логина ККТ
*/ */
const MAX_LENGTH_LOGIN = 100; public const MAX_LENGTH_LOGIN = 100;
/** /**
* Максимальная длина пароля ККТ * Максимальная длина пароля ККТ
*/ */
const MAX_LENGTH_PASSWORD = 100; public const MAX_LENGTH_PASSWORD = 100;
/** /**
* Максимальная длина адреса места расчётов * Максимальная длина адреса места расчётов
*/ */
const MAX_LENGTH_PAYMENT_ADDRESS = 256; public const MAX_LENGTH_PAYMENT_ADDRESS = 256;
/** /**
* Максимальная длина наименования покупателя (1227) * Максимальная длина наименования покупателя (1227)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
*/ */
const MAX_LENGTH_CLIENT_NAME = 256; public const MAX_LENGTH_CLIENT_NAME = 256;
/** /**
* Максимальная длина наименования предмета расчёта (1030) * Максимальная длина наименования предмета расчёта (1030)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_LENGTH_ITEM_NAME = 128; public const MAX_LENGTH_ITEM_NAME = 128;
/** /**
* Максимальная цена за единицу предмета расчёта (1079) * Максимальная цена за единицу предмета расчёта (1079)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_COUNT_ITEM_PRICE = 42949672.95; public const MAX_COUNT_ITEM_PRICE = 42949672.95;
/** /**
* Максимальное количество (вес) единицы предмета расчёта (1023) * Максимальное количество (вес) единицы предмета расчёта (1023)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_COUNT_ITEM_QUANTITY = 99999.999; public const MAX_COUNT_ITEM_QUANTITY = 99999.999;
/** /**
* Максимальная стоимость всех предметов расчёта в документе прихода, расхода, * Максимальная стоимость всех предметов расчёта в документе прихода, расхода,
@ -75,122 +76,122 @@ final class Constraints
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_COUNT_ITEM_SUM = 42949672.95; public const MAX_COUNT_ITEM_SUM = 42949672.95;
/** /**
* Максимальная длина телефона или email покупателя (1008) * Максимальная длина телефона или email покупателя (1008)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 17
*/ */
const MAX_LENGTH_CLIENT_CONTACT = 64; public const MAX_LENGTH_CLIENT_CONTACT = 64;
/** /**
* Длина операции для платёжного агента (1044) * Длина операции для платёжного агента (1044)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 19 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 19
*/ */
const MAX_LENGTH_PAYING_AGENT_OPERATION = 24; public const MAX_LENGTH_PAYING_AGENT_OPERATION = 24;
/** /**
* Максимальное количество предметов расчёта в документе прихода, расхода, возврата прихода, возврата расхода * Максимальное количество предметов расчёта в документе прихода, расхода, возврата прихода, возврата расхода
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_COUNT_DOC_ITEMS = 100; public const MAX_COUNT_DOC_ITEMS = 100;
/** /**
* Максимальная длина единицы измерения предмета расчётов * Максимальная длина единицы измерения предмета расчётов
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_LENGTH_MEASUREMENT_UNIT = 16; public const MAX_LENGTH_MEASUREMENT_UNIT = 16;
/** /**
* Максимальная длина пользовательских данных для предмета расчётов (1191) * Максимальная длина пользовательских данных для предмета расчётов (1191)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 29 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 29
*/ */
const MAX_LENGTH_USER_DATA = 64; public const MAX_LENGTH_USER_DATA = 64;
/** /**
* Минимальная длина кода таможенной декларации (1231) * Минимальная длина кода таможенной декларации (1231)
* *
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/receipt/items/declaration_number" * @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/receipt/items/declaration_number"
*/ */
const MIN_LENGTH_DECLARATION_NUMBER = 1; public const MIN_LENGTH_DECLARATION_NUMBER = 1;
/** /**
* Максимальная длина кода таможенной декларации (1231) * Максимальная длина кода таможенной декларации (1231)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 30 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 30
*/ */
const MAX_LENGTH_DECLARATION_NUMBER = 32; public const MAX_LENGTH_DECLARATION_NUMBER = 32;
/** /**
* Максимальное количество платежей в любом документе * Максимальное количество платежей в любом документе
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 30 и 35 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 30 и 35
*/ */
const MAX_COUNT_DOC_PAYMENTS = 10; public const MAX_COUNT_DOC_PAYMENTS = 10;
/** /**
* Максимальное количество ставок НДС в любом документе * Максимальное количество ставок НДС в любом документе
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 31 и 36 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 31 и 36
*/ */
const MAX_COUNT_DOC_VATS = 6; public const MAX_COUNT_DOC_VATS = 6;
/** /**
* Максимальная сумма одной оплаты * Максимальная сумма одной оплаты
*/ */
const MAX_COUNT_PAYMENT_SUM = 99999.999; public const MAX_COUNT_PAYMENT_SUM = 99999.999;
/** /**
* Максимальная длина имени кассира (1021) * Максимальная длина имени кассира (1021)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32
*/ */
const MAX_LENGTH_CASHIER_NAME = 64; public const MAX_LENGTH_CASHIER_NAME = 64;
/** /**
* Максимальная длина кода товара в байтах (1162) * Максимальная длина кода товара в байтах (1162)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 21
*/ */
const MAX_LENGTH_ITEM_CODE = 32; public const MAX_LENGTH_ITEM_CODE = 32;
/** /**
* Максимальная длина значения дополнительного реквизита чека (1192) * Максимальная длина значения дополнительного реквизита чека (1192)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32
*/ */
const MAX_LENGTH_ADD_CHECK_PROP = 16; public const MAX_LENGTH_ADD_CHECK_PROP = 16;
/** /**
* Максимальная длина наименования дополнительного реквизита пользователя (1085) * Максимальная длина наименования дополнительного реквизита пользователя (1085)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32
*/ */
const MAX_LENGTH_ADD_USER_PROP_NAME = 64; public const MAX_LENGTH_ADD_USER_PROP_NAME = 64;
/** /**
* Максимальная длина значения дополнительного реквизита пользователя (1086) * Максимальная длина значения дополнительного реквизита пользователя (1086)
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 32
*/ */
const MAX_LENGTH_ADD_USER_PROP_VALUE = 256; public const MAX_LENGTH_ADD_USER_PROP_VALUE = 256;
/** /**
* Формат даты документа коррекции * Формат даты документа коррекции
*/ */
const CORRECTION_DATE_FORMAT = 'd.m.Y'; public const CORRECTION_DATE_FORMAT = 'd.m.Y';
/** /**
* Регулярное выражение для валидации строки ИНН * Регулярное выражение для валидации строки ИНН
* *
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/receipt/client/inn" * @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/receipt/client/inn"
*/ */
const PATTERN_INN public const PATTERN_INN
= /* @lang PhpRegExp */ = /* @lang PhpRegExp */
'/(^[\d]{10}$)|(^[\d]{12}$)/'; '/(^[\d]{10}$)|(^[\d]{12}$)/';
@ -199,14 +200,14 @@ final class Constraints
* *
* @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/definitions/phone_number" * @see https://online.atol.ru/possystem/v4/schema/sell Схема "#/definitions/phone_number"
*/ */
const PATTERN_PHONE public const PATTERN_PHONE
= /* @lang PhpRegExp */ = /* @lang PhpRegExp */
'/^([^\s\\\]{0,17}|\+[^\s\\\]{1,18})$/'; '/^([^\s\\\]{0,17}|\+[^\s\\\]{1,18})$/';
/** /**
* Регулярное выражение для валидации строки Callback URL * Регулярное выражение для валидации строки Callback URL
*/ */
const PATTERN_CALLBACK_URL public const PATTERN_CALLBACK_URL
= /* @lang PhpRegExp */ = /* @lang PhpRegExp */
'/^http(s?):\/\/[0-9a-zA-Zа-яА-Я]' . '/^http(s?):\/\/[0-9a-zA-Zа-яА-Я]' .
'([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-.?,\'\/\\\+&=%\$#_]*)?$/'; '([-.\w]*[0-9a-zA-Zа-яА-Я])*(:(0-9)*)*(\/?)([a-zAZ0-9а-яА-Я\-.?,\'\/\\\+&=%\$#_]*)?$/';
@ -214,7 +215,7 @@ final class Constraints
/** /**
* Регулярное выражение для валидации кода страны происхождения товара * Регулярное выражение для валидации кода страны происхождения товара
*/ */
const PATTERN_OKSM_CODE public const PATTERN_OKSM_CODE
= /* @lang PhpRegExp */ = /* @lang PhpRegExp */
'/^[\d]{3}$/'; '/^[\d]{3}$/';
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,21 +8,19 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
EmptyAddUserPropNameException, EmptyAddUserPropNameException,
EmptyAddUserPropValueException, EmptyAddUserPropValueException,
TooLongAddUserPropNameException, TooLongAddUserPropNameException,
TooLongAddUserPropValueException TooLongAddUserPropValueException};
};
use JetBrains\PhpStorm\{ use JetBrains\PhpStorm\{
ArrayShape, ArrayShape,
Pure Pure};
};
/** /**
* Класс, описывающий дополнительный реквизит пользователя * Класс, описывающий дополнительный реквизит пользователя
@ -30,16 +29,6 @@ use JetBrains\PhpStorm\{
*/ */
final class AdditionalUserProps extends Entity final class AdditionalUserProps extends Entity
{ {
/**
* @var string Наименование (1085)
*/
protected string $name;
/**
* @var string Значение (1086)
*/
protected string $value;
/** /**
* Конструктор объекта покупателя * Конструктор объекта покупателя
* *
@ -50,8 +39,10 @@ final class AdditionalUserProps extends Entity
* @throws TooLongAddUserPropNameException * @throws TooLongAddUserPropNameException
* @throws TooLongAddUserPropValueException * @throws TooLongAddUserPropValueException
*/ */
public function __construct(string $name, string $value) public function __construct(
{ protected string $name,
protected string $value,
) {
$this->setName($name)->setValue($value); $this->setName($name)->setValue($value);
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Enums\AgentTypes; use AtolOnline\Enums\AgentType;
use AtolOnline\Exceptions\InvalidEnumValueException;
/** /**
* Класс, описывающий данные агента * Класс, описывающий данные агента
@ -21,53 +21,29 @@ use AtolOnline\Exceptions\InvalidEnumValueException;
*/ */
final class AgentInfo extends Entity final class AgentInfo extends Entity
{ {
/**
* @var string|null Признак агента (1057)
*/
protected ?string $type = null;
/**
* @var PayingAgent|null Платёжный агент
*/
protected ?PayingAgent $paying_agent = null;
/**
* @var ReceivePaymentsOperator|null Оператор по приёму платежей
*/
protected ?ReceivePaymentsOperator $receive_payments_operator = null;
/**
* @var MoneyTransferOperator|null Оператор перевода
*/
protected ?MoneyTransferOperator $money_transfer_operator = null;
/** /**
* Конструктор * Конструктор
* *
* @param string|null $type Признак агента (1057) * @param AgentType|null $type Признак агента (1057)
* @param PayingAgent|null $pagent Платёжный агент * @param PayingAgent|null $payingAgent Платёжный агент
* @param ReceivePaymentsOperator|null $rp_operator Оператор по приёму платежей * @param ReceivePaymentsOperator|null $receivePaymentsOperator Оператор по приёму платежей
* @param MoneyTransferOperator|null $mt_operator Оператор перевода * @param MoneyTransferOperator|null $moneyTransferOperator Оператор перевода
* @throws InvalidEnumValueException
*/ */
public function __construct( public function __construct(
?string $type = null, protected ?AgentType $type = null,
?PayingAgent $pagent = null, protected ?PayingAgent $payingAgent = null,
?ReceivePaymentsOperator $rp_operator = null, protected ?ReceivePaymentsOperator $receivePaymentsOperator = null,
?MoneyTransferOperator $mt_operator = null, protected ?MoneyTransferOperator $moneyTransferOperator = null,
) { ) {
!is_null($type) && $this->setType($type); $this->setType($type);
!is_null($pagent) && $this->setPayingAgent($pagent);
!is_null($rp_operator) && $this->setReceivePaymentsOperator($rp_operator);
!is_null($mt_operator) && $this->setMoneyTransferOperator($mt_operator);
} }
/** /**
* Возвращает установленный признак оператора * Возвращает установленный признак оператора
* *
* @return string|null * @return AgentType|null
*/ */
public function getType(): ?string public function getType(): ?AgentType
{ {
return $this->type; return $this->type;
} }
@ -75,24 +51,23 @@ final class AgentInfo extends Entity
/** /**
* Устанавливает признак оператора * Устанавливает признак оператора
* *
* @param string|null $type * @param AgentType|null $type
* @return AgentInfo * @return AgentInfo
* @throws InvalidEnumValueException
*/ */
public function setType(?string $type): self public function setType(?AgentType $type): self
{ {
AgentTypes::isValid($type) && $this->type = $type; $this->type = $type;
return $this; return $this;
} }
/** /**
* Взвращает установленного платёжного агента * Возвращает установленного платёжного агента
* *
* @return PayingAgent|null * @return PayingAgent|null
*/ */
public function getPayingAgent(): ?PayingAgent public function getPayingAgent(): ?PayingAgent
{ {
return $this->paying_agent; return $this->payingAgent;
} }
/** /**
@ -103,7 +78,7 @@ final class AgentInfo extends Entity
*/ */
public function setPayingAgent(?PayingAgent $agent): self public function setPayingAgent(?PayingAgent $agent): self
{ {
$this->paying_agent = $agent; $this->payingAgent = $agent;
return $this; return $this;
} }
@ -114,7 +89,7 @@ final class AgentInfo extends Entity
*/ */
public function getReceivePaymentsOperator(): ?ReceivePaymentsOperator public function getReceivePaymentsOperator(): ?ReceivePaymentsOperator
{ {
return $this->receive_payments_operator; return $this->receivePaymentsOperator;
} }
/** /**
@ -125,7 +100,7 @@ final class AgentInfo extends Entity
*/ */
public function setReceivePaymentsOperator(?ReceivePaymentsOperator $operator): self public function setReceivePaymentsOperator(?ReceivePaymentsOperator $operator): self
{ {
$this->receive_payments_operator = $operator; $this->receivePaymentsOperator = $operator;
return $this; return $this;
} }
@ -136,7 +111,7 @@ final class AgentInfo extends Entity
*/ */
public function getMoneyTransferOperator(): ?MoneyTransferOperator public function getMoneyTransferOperator(): ?MoneyTransferOperator
{ {
return $this->money_transfer_operator; return $this->moneyTransferOperator;
} }
/** /**
@ -147,7 +122,7 @@ final class AgentInfo extends Entity
*/ */
public function setMoneyTransferOperator(?MoneyTransferOperator $operator): self public function setMoneyTransferOperator(?MoneyTransferOperator $operator): self
{ {
$this->money_transfer_operator = $operator; $this->moneyTransferOperator = $operator;
return $this; return $this;
} }
@ -157,13 +132,18 @@ final class AgentInfo extends Entity
public function jsonSerialize(): array public function jsonSerialize(): array
{ {
$json = []; $json = [];
$this->getType() && $json['type'] = $this->getType(); if ($this?->type) {
$this->getPayingAgent()?->jsonSerialize() && $json['paying_agent'] = $this $json['type'] = $this->getType();
->getPayingAgent()->jsonSerialize(); }
$this->getReceivePaymentsOperator()?->jsonSerialize() && $json['receive_payments_operator'] = $this if ($this->payingAgent?->jsonSerialize()) {
->getReceivePaymentsOperator()->jsonSerialize(); $json['paying_agent'] = $this->payingAgent->jsonSerialize();
$this->getMoneyTransferOperator()?->jsonSerialize() && $json['money_transfer_operator'] = $this }
->getMoneyTransferOperator()->jsonSerialize(); if ($this->receivePaymentsOperator?->jsonSerialize()) {
$json['receive_payments_operator'] = $this->receivePaymentsOperator->jsonSerialize();
}
if ($this->moneyTransferOperator?->jsonSerialize()) {
$json['money_transfer_operator'] = $this->moneyTransferOperator->jsonSerialize();
}
return $json; return $json;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
InvalidEmailException, InvalidEmailException,
InvalidInnLengthException, InvalidInnLengthException,
@ -30,17 +31,8 @@ use JetBrains\PhpStorm\Pure;
*/ */
final class Client extends Entity final class Client extends Entity
{ {
use HasEmail, HasInn; use HasEmail;
use HasInn;
/**
* @var string|null Наименование (1227)
*/
protected ?string $name = null;
/**
* @var string|null Телефон (1008)
*/
protected ?string $phone = null;
/** /**
* Конструктор объекта покупателя * Конструктор объекта покупателя
@ -56,9 +48,9 @@ final class Client extends Entity
* @throws TooLongEmailException * @throws TooLongEmailException
*/ */
public function __construct( public function __construct(
?string $name = null, protected ?string $name = null,
protected ?string $phone = null,
?string $email = null, ?string $email = null,
?string $phone = null,
?string $inn = null ?string $inn = null
) { ) {
!is_null($name) && $this->setName($name); !is_null($name) && $this->setName($name);
@ -116,8 +108,8 @@ final class Client extends Entity
public function setPhone(?string $phone): self public function setPhone(?string $phone): self
{ {
if (is_string($phone)) { if (is_string($phone)) {
$phone = preg_replace('/[^\d]/', '', trim($phone)); $phone = preg_replace('/\D/', '', trim($phone));
if (preg_match(Constraints::PATTERN_PHONE, $phone) != 1) { if (preg_match(Constraints::PATTERN_PHONE, $phone) !== 1) {
throw new InvalidPhoneException($phone); throw new InvalidPhoneException($phone);
} }
} }
@ -133,8 +125,8 @@ final class Client extends Entity
{ {
$json = []; $json = [];
!is_null($this->getName()) && $json['name'] = $this->getName(); !is_null($this->getName()) && $json['name'] = $this->getName();
!is_null($this->getEmail()) && $json['email'] = $this->getEmail();
!is_null($this->getPhone()) && $json['phone'] = $this->getPhone(); !is_null($this->getPhone()) && $json['phone'] = $this->getPhone();
!is_null($this->getEmail()) && $json['email'] = $this->getEmail();
!is_null($this->getInn()) && $json['inn'] = $this->getInn(); !is_null($this->getInn()) && $json['inn'] = $this->getInn();
return $json; return $json;
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,24 +8,21 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\{ use AtolOnline\{
Constants\Constraints, Constraints,
Enums\SnoTypes, Enums\SnoType,
Traits\HasEmail, Traits\HasEmail,
Traits\HasInn Traits\HasInn};
};
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
InvalidEmailException, InvalidEmailException,
InvalidEnumValueException,
InvalidInnLengthException, InvalidInnLengthException,
InvalidPaymentAddressException, InvalidPaymentAddressException,
TooLongEmailException, TooLongEmailException,
TooLongPaymentAddressException TooLongPaymentAddressException};
};
use JetBrains\PhpStorm\ArrayShape; use JetBrains\PhpStorm\ArrayShape;
/** /**
@ -34,47 +32,39 @@ use JetBrains\PhpStorm\ArrayShape;
*/ */
final class Company extends Entity final class Company extends Entity
{ {
use HasEmail, HasInn; use HasEmail;
use HasInn;
/**
* @var string|null Система налогообложения продавца (1055)
*/
protected ?string $sno;
/**
* @var string|null Место расчётов (адрес интернет-магазина) (1187)
*/
protected ?string $payment_address;
/** /**
* Конструктор * Конструктор
* *
* @param string $sno Система налогообложения продавца (1055)
* @param string $inn ИНН (1018) * @param string $inn ИНН (1018)
* @param string $payment_address Место расчётов (адрес интернет-магазина) (1187) * @param SnoType $sno Система налогообложения продавца (1055)
* @param string $paymentAddress Место расчётов (адрес интернет-магазина) (1187)
* @param string $email Почта (1117) * @param string $email Почта (1117)
* @throws InvalidEmailException * @throws InvalidEmailException
* @throws InvalidInnLengthException * @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
* @throws InvalidEnumValueException
* @throws TooLongEmailException * @throws TooLongEmailException
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
*/ */
public function __construct( public function __construct(
string $email, //TODO сделать необязательным здесь
string $sno, //TODO сделать необязательным здесь
string $inn, string $inn,
string $payment_address, protected SnoType $sno,
protected string $paymentAddress,
string $email,
) { ) {
$this->setEmail($email)->setSno($sno)->setInn($inn)->setPaymentAddress($payment_address); $this->setInn($inn)
->setPaymentAddress($paymentAddress)
->setEmail($email);
} }
/** /**
* Возвращает установленный тип налогообложения * Возвращает установленный тип налогообложения
* *
* @return string * @return SnoType
*/ */
public function getSno(): string public function getSno(): SnoType
{ {
return $this->sno; return $this->sno;
} }
@ -82,14 +72,12 @@ final class Company extends Entity
/** /**
* Устанавливает тип налогообложения * Устанавливает тип налогообложения
* *
* @param string $sno * @param SnoType $sno
* @return $this * @return $this
* @throws InvalidEnumValueException
*/ */
public function setSno(string $sno): self public function setSno(SnoType $sno): self
{ {
$sno = trim($sno); $this->sno = $sno;
SnoTypes::isValid($sno) && $this->sno = $sno;
return $this; return $this;
} }
@ -100,57 +88,45 @@ final class Company extends Entity
*/ */
public function getPaymentAddress(): string public function getPaymentAddress(): string
{ {
return $this->payment_address; return $this->paymentAddress;
} }
/** /**
* Устанавливает адрес места расчётов * Устанавливает адрес места расчётов
* *
* @param string $payment_address * @param string $paymentAddress
* @return $this * @return $this
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
*/ */
public function setPaymentAddress(string $payment_address): self public function setPaymentAddress(string $paymentAddress): self
{ {
$payment_address = trim($payment_address); $paymentAddress = trim($paymentAddress);
if (empty($payment_address)) { if (empty($paymentAddress)) {
throw new InvalidPaymentAddressException(); throw new InvalidPaymentAddressException();
} elseif (mb_strlen($payment_address) > Constraints::MAX_LENGTH_PAYMENT_ADDRESS) { } elseif (mb_strlen($paymentAddress) > Constraints::MAX_LENGTH_PAYMENT_ADDRESS) {
throw new TooLongPaymentAddressException($payment_address); throw new TooLongPaymentAddressException($paymentAddress);
} }
$this->payment_address = $payment_address; $this->paymentAddress = $paymentAddress;
return $this; return $this;
} }
/** /**
* @inheritDoc * @inheritDoc
* @throws InvalidEmailException
* @throws InvalidEnumValueException
* @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException
*/ */
#[ArrayShape([ #[ArrayShape([
'email' => 'string',
'sno' => 'string', 'sno' => 'string',
'email' => 'string',
'inn' => 'string', 'inn' => 'string',
'payment_address' => 'string', 'payment_address' => 'string',
])] ])]
public function jsonSerialize(): array public function jsonSerialize(): array
{ {
return [ return [
'email' => $this->email 'inn' => $this->getInn(),
? $this->getEmail() 'sno' => $this->getSno(),
: throw new InvalidEmailException(), 'payment_address' => $this->getPaymentAddress(),
'sno' => $this->sno 'email' => $this->getEmail(),
? $this->getSno()
: throw new InvalidEnumValueException(SnoTypes::class, 'null'),
'inn' => $this->inn
? $this->getInn()
: throw new InvalidInnLengthException(),
'payment_address' => $this->payment_address
? $this->getPaymentAddress()
: throw new InvalidPaymentAddressException(),
]; ];
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -14,7 +15,7 @@ use AtolOnline\{
Api\Fiscalizer, Api\Fiscalizer,
Collections\Payments, Collections\Payments,
Collections\Vats, Collections\Vats,
Constants\Constraints}; Constraints};
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
AuthFailedException, AuthFailedException,
EmptyLoginException, EmptyLoginException,
@ -40,49 +41,29 @@ final class Correction extends Entity
*/ */
public const DOC_TYPE = 'correction'; public const DOC_TYPE = 'correction';
/**
* @var Company Продавец
*/
protected Company $company;
/** /**
* @todo вынести в трейт? * @todo вынести в трейт?
* @var string|null ФИО кассира * @var string|null ФИО кассира
*/ */
protected ?string $cashier = null; protected ?string $cashier = null;
/**
* @var CorrectionInfo Данные коррекции
*/
protected CorrectionInfo $correction_info;
/**
* @var Payments Коллекция оплат
*/
protected Payments $payments;
/**
* @var Vats Коллекция ставок НДС
*/
protected Vats $vats;
/** /**
* Конструктор * Конструктор
* *
* @param Company $company * @param Company $company Продавец
* @param CorrectionInfo $correction_info * @param CorrectionInfo $correctionInfo Данные коррекции
* @param Payments $payments * @param Payments $payments Коллекция оплат
* @param Vats $vats * @param Vats $vats Коллекция ставок НДС
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
* @throws Exception * @throws Exception
*/ */
public function __construct( public function __construct(
Company $company, protected Company $company,
CorrectionInfo $correction_info, protected CorrectionInfo $correctionInfo,
Payments $payments, protected Payments $payments,
Vats $vats, protected Vats $vats,
) { ) {
$this->setCompany($company)->setCorrectionInfo($correction_info)->setPayments($payments)->setVats($vats); $this->setCompany($company)->setCorrectionInfo($correctionInfo)->setPayments($payments)->setVats($vats);
} }
/** /**
@ -143,18 +124,18 @@ final class Correction extends Entity
*/ */
public function getCorrectionInfo(): CorrectionInfo public function getCorrectionInfo(): CorrectionInfo
{ {
return $this->correction_info; return $this->correctionInfo;
} }
/** /**
* Устанавливает данные коррекции * Устанавливает данные коррекции
* *
* @param CorrectionInfo $correction_info * @param CorrectionInfo $correctionInfo
* @return Correction * @return Correction
*/ */
public function setCorrectionInfo(CorrectionInfo $correction_info): Correction public function setCorrectionInfo(CorrectionInfo $correctionInfo): Correction
{ {
$this->correction_info = $correction_info; $this->correctionInfo = $correctionInfo;
return $this; return $this;
} }
@ -177,8 +158,7 @@ final class Correction extends Entity
*/ */
public function setPayments(Payments $payments): self public function setPayments(Payments $payments): self
{ {
$payments->checkCount(); $payments->checkCount()->checkItemsClasses();
$payments->checkItemsClasses();
$this->payments = $payments; $this->payments = $payments;
return $this; return $this;
} }
@ -186,7 +166,7 @@ final class Correction extends Entity
/** /**
* Возвращает установленную коллекцию ставок НДС * Возвращает установленную коллекцию ставок НДС
* *
* @return Vats|null * @return Vats
*/ */
public function getVats(): Vats public function getVats(): Vats
{ {
@ -196,14 +176,13 @@ final class Correction extends Entity
/** /**
* Устанаваливает коллекцию ставок НДС * Устанаваливает коллекцию ставок НДС
* *
* @param Vats|null $vats * @param Vats $vats
* @return $this * @return $this
* @throws Exception * @throws Exception
*/ */
public function setVats(Vats $vats): self public function setVats(Vats $vats): self
{ {
$vats->checkCount(); $vats->checkCount()->checkItemsClasses();
$vats->checkItemsClasses();
$this->vats = $vats; $this->vats = $vats;
return $this; return $this;
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,21 +8,21 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Enums\CorrectionTypes; use AtolOnline\Enums\CorrectionType;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
EmptyCorrectionNumberException, EmptyCorrectionNumberException,
InvalidCorrectionDateException, InvalidCorrectionDateException,};
InvalidEnumValueException};
use DateTime; use DateTime;
use DateTimeImmutable;
use DateTimeInterface;
use Exception; use Exception;
use JetBrains\PhpStorm\{ use JetBrains\PhpStorm\{
ArrayShape, ArrayShape};
Pure};
/** /**
* Класс, описывающий данные коррекции * Класс, описывающий данные коррекции
@ -31,41 +32,35 @@ use JetBrains\PhpStorm\{
final class CorrectionInfo extends Entity final class CorrectionInfo extends Entity
{ {
/** /**
* @var string|null Тип коррекции (1173) * @var DateTimeImmutable Дата документа основания для коррекции (1178)
*/ */
protected ?string $type = null; protected DateTimeImmutable $date;
/**
* @var string|null Дата документа основания для коррекции (1178)
*/
protected ?string $date = null;
/**
* @var string|null Номер документа основания для коррекции (1179)
*/
protected ?string $number = null;
/** /**
* Конструктор * Конструктор
* *
* @param string $type Тип коррекции * @param CorrectionType $type Тип коррекции (1173)
* @param string $date Дата документа * @param DateTimeInterface|string $date Дата документа основания для коррекции (1178)
* @param string $number Номер документа * @param string $number Номер документа основания для коррекции (1179)
* @throws InvalidEnumValueException
* @throws InvalidCorrectionDateException * @throws InvalidCorrectionDateException
* @throws EmptyCorrectionNumberException * @throws EmptyCorrectionNumberException
*/ */
public function __construct(string $type, string $date, string $number) public function __construct(
{ protected CorrectionType $type,
$this->setType($type)->setDate($date)->setNumber($number); DateTimeInterface | string $date,
protected string $number,
) {
$this->setType($type)
->setDate($date)
->setNumber($number);
} }
/** /**
* Возвращает тип коррекции * Возвращает тип коррекции
* *
* @return string|null * @return CorrectionType|null
*/ */
public function getType(): ?string public function getType(): ?CorrectionType
{ {
return $this->type; return $this->type;
} }
@ -73,23 +68,21 @@ final class CorrectionInfo extends Entity
/** /**
* Устанавливает тип коррекции * Устанавливает тип коррекции
* *
* @param string $type * @param CorrectionType $type
* @return $this * @return $this
* @throws InvalidEnumValueException
*/ */
public function setType(string $type): self public function setType(CorrectionType $type): self
{ {
$type = trim($type); $this->type = $type;
CorrectionTypes::isValid($type) && $this->type = $type;
return $this; return $this;
} }
/** /**
* Возвращает дату документа основания для коррекции * Возвращает дату документа основания для коррекции
* *
* @return string|null * @return DateTimeImmutable
*/ */
public function getDate(): ?string public function getDate(): DateTimeImmutable
{ {
return $this->date; return $this->date;
} }
@ -97,17 +90,20 @@ final class CorrectionInfo extends Entity
/** /**
* Устанавливает дату документа основания для коррекции * Устанавливает дату документа основания для коррекции
* *
* @param DateTime|string $date Строковая дата в формате d.m.Y либо объект DateTime с датой * @param DateTimeInterface|string $date Строковая дата в формате d.m.Y либо объект DateTime с датой
* @return $this * @return $this
* @throws InvalidCorrectionDateException * @throws InvalidCorrectionDateException
*/ */
public function setDate(DateTime|string $date): self public function setDate(DateTimeInterface | string $date): self
{ {
try { try {
if (is_string($date)) { if (is_string($date)) {
$date = new DateTime(trim($date)); $this->date = new DateTimeImmutable(trim($date));
} elseif ($date instanceof DateTime) {
$this->date = DateTimeImmutable::createFromMutable($date);
} elseif ($date instanceof DateTimeImmutable) {
$this->date = $date;
} }
$this->date = $date->format(Constraints::CORRECTION_DATE_FORMAT);
} catch (Exception $e) { } catch (Exception $e) {
throw new InvalidCorrectionDateException($date, $e->getMessage()); throw new InvalidCorrectionDateException($date, $e->getMessage());
} }
@ -142,13 +138,16 @@ final class CorrectionInfo extends Entity
/** /**
* @inheritDoc * @inheritDoc
*/ */
#[Pure] #[ArrayShape([
#[ArrayShape(['type' => 'string', 'base_date' => 'string', 'base_number' => 'string'])] 'type' => 'string',
'base_date' => 'string',
'base_number' => 'string',
])]
public function jsonSerialize(): array public function jsonSerialize(): array
{ {
return [ return [
'type' => $this->getType(), 'type' => $this->getType(),
'base_date' => $this->getDate(), 'base_date' => $this->getDate()->format(Constraints::CORRECTION_DATE_FORMAT),
'base_number' => $this->getNumber(), 'base_number' => $this->getNumber(),
]; ];
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
/** @noinspection PhpMultipleClassDeclarationsInspection */ /** @noinspection PhpMultipleClassDeclarationsInspection */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
@ -74,7 +75,7 @@ abstract class Entity implements JsonSerializable, Stringable, Arrayable, ArrayA
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function offsetSet(mixed $offset, mixed $value) public function offsetSet(mixed $offset, mixed $value): void
{ {
throw new BadMethodCallException( throw new BadMethodCallException(
'Объект ' . static::class . ' нельзя изменять как массив. Следует использовать сеттеры.' 'Объект ' . static::class . ' нельзя изменять как массив. Следует использовать сеттеры.'

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,20 +8,18 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Enums\{ use AtolOnline\Enums\{
PaymentMethods, PaymentMethod,
PaymentObjects, PaymentObject,
VatTypes VatType};
};
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
EmptyItemNameException, EmptyItemNameException,
InvalidDeclarationNumberException, InvalidDeclarationNumberException,
InvalidEnumValueException,
InvalidOKSMCodeException, InvalidOKSMCodeException,
NegativeItemExciseException, NegativeItemExciseException,
NegativeItemPriceException, NegativeItemPriceException,
@ -32,8 +31,7 @@ use AtolOnline\Exceptions\{
TooLongItemNameException, TooLongItemNameException,
TooLongMeasurementUnitException, TooLongMeasurementUnitException,
TooLongUserdataException, TooLongUserdataException,
TooManyException TooManyException};
};
/** /**
* Предмет расчёта (товар, услуга) * Предмет расчёта (товар, услуга)
@ -42,21 +40,6 @@ use AtolOnline\Exceptions\{
*/ */
final class Item extends Entity final class Item extends Entity
{ {
/**
* @var string Наименование (1030)
*/
protected string $name;
/**
* @var float Цена в рублях (с учётом скидок и наценок) (1079)
*/
protected float $price;
/**
* @var float Количество/вес (1023)
*/
protected float $quantity;
/** /**
* @var string|null Единица измерения (1197) * @var string|null Единица измерения (1197)
*/ */
@ -70,22 +53,22 @@ final class Item extends Entity
/** /**
* @var string|null Код товара (1162) в форматированной шестнадцатиричной форме * @var string|null Код товара (1162) в форматированной шестнадцатиричной форме
*/ */
protected ?string $code_hex = null; protected ?string $codeHex = null;
/** /**
* @var string|null Признак способа расчёта (1214) * @var PaymentMethod|null Признак способа расчёта (1214)
*/ */
protected ?string $payment_method = null; protected ?PaymentMethod $paymentMethod = null;
/** /**
* @var string|null Признак предмета расчёта (1212) * @var PaymentObject|null Признак предмета расчёта (1212)
*/ */
protected ?string $payment_object = null; protected ?PaymentObject $paymentObject = null;
/** /**
* @var string|null Номер таможенной декларации (1321) * @var string|null Номер таможенной декларации (1321)
*/ */
protected ?string $declaration_number = null; protected ?string $declarationNumber = null;
/** /**
* @var Vat|null Ставка НДС * @var Vat|null Ставка НДС
@ -95,7 +78,7 @@ final class Item extends Entity
/** /**
* @var AgentInfo|null Атрибуты агента * @var AgentInfo|null Атрибуты агента
*/ */
protected ?AgentInfo $agent_info = null; protected ?AgentInfo $agentInfo = null;
/** /**
* @var Supplier|null Атрибуты поставшика * @var Supplier|null Атрибуты поставшика
@ -105,7 +88,7 @@ final class Item extends Entity
/** /**
* @var string|null Дополнительный реквизит (1191) * @var string|null Дополнительный реквизит (1191)
*/ */
protected ?string $user_data = null; protected ?string $userData = null;
/** /**
* @var float|null Сумма акциза, включенная в стоимость (1229) * @var float|null Сумма акциза, включенная в стоимость (1229)
@ -115,14 +98,14 @@ final class Item extends Entity
/** /**
* @var string|null Цифровой код страны происхождения товара (1230) * @var string|null Цифровой код страны происхождения товара (1230)
*/ */
protected ?string $country_code = null; protected ?string $countryCode = null;
/** /**
* Конструктор * Конструктор
* *
* @param string|null $name Наименование * @param string|null $name Наименование (1030)
* @param float|null $price Цена за одну единицу * @param float|null $price Цена в рублях (с учётом скидок и наценок) (1079)
* @param float|null $quantity Количество * @param float|null $quantity Количество/вес (1023)
* @throws TooLongItemNameException * @throws TooLongItemNameException
* @throws TooHighItemPriceException * @throws TooHighItemPriceException
* @throws TooManyException * @throws TooManyException
@ -131,9 +114,9 @@ final class Item extends Entity
* @throws NegativeItemQuantityException * @throws NegativeItemQuantityException
*/ */
public function __construct( public function __construct(
string $name = null, protected ?string $name = null,
float $price = null, protected ?float $price = null,
float $quantity = null, protected ?float $quantity = null,
) { ) {
!is_null($name) && $this->setName($name); !is_null($name) && $this->setName($name);
!is_null($price) && $this->setPrice($price); !is_null($price) && $this->setPrice($price);
@ -160,13 +143,10 @@ final class Item extends Entity
*/ */
public function setName(string $name): self public function setName(string $name): self
{ {
$name = trim($name); if (mb_strlen($name = trim($name)) > Constraints::MAX_LENGTH_ITEM_NAME) {
if (mb_strlen($name) > Constraints::MAX_LENGTH_ITEM_NAME) {
throw new TooLongItemNameException($name); throw new TooLongItemNameException($name);
} }
if (empty($name)) { empty($name) && throw new EmptyItemNameException();
throw new EmptyItemNameException();
}
$this->name = $name; $this->name = $name;
return $this; return $this;
} }
@ -193,12 +173,8 @@ final class Item extends Entity
public function setPrice(float $price): self public function setPrice(float $price): self
{ {
$price = round($price, 2); $price = round($price, 2);
if ($price > Constraints::MAX_COUNT_ITEM_PRICE) { $price > Constraints::MAX_COUNT_ITEM_PRICE && throw new TooHighItemPriceException($this->getName(), $price);
throw new TooHighItemPriceException($this->getName(), $price); $price < 0 && throw new NegativeItemPriceException($this->getName(), $price);
}
if ($price < 0) {
throw new NegativeItemPriceException($this->getName(), $price);
}
$this->price = $price; $this->price = $price;
$this->getVat()?->setSum($this->getSum()); $this->getVat()?->setSum($this->getSum());
return $this; return $this;
@ -229,9 +205,7 @@ final class Item extends Entity
if ($quantity > Constraints::MAX_COUNT_ITEM_QUANTITY) { if ($quantity > Constraints::MAX_COUNT_ITEM_QUANTITY) {
throw new TooHighItemQuantityException($this->getName(), $quantity); throw new TooHighItemQuantityException($this->getName(), $quantity);
} }
if ($quantity < 0) { $quantity < 0 && throw new NegativeItemQuantityException($this->getName(), $quantity);
throw new NegativeItemQuantityException($this->getName(), $quantity);
}
$this->quantity = $quantity; $this->quantity = $quantity;
$this->getVat()?->setSum($this->getSum()); $this->getVat()?->setSum($this->getSum());
return $this; return $this;
@ -296,7 +270,7 @@ final class Item extends Entity
*/ */
public function getCodeHex(): ?string public function getCodeHex(): ?string
{ {
return $this->code_hex; return $this->codeHex;
} }
/** /**
@ -318,57 +292,51 @@ final class Item extends Entity
$hex_string = trim(preg_replace('/([\dA-Fa-f]{2})/', '$1 ', $hex)); $hex_string = trim(preg_replace('/([\dA-Fa-f]{2})/', '$1 ', $hex));
} }
$this->code = $code ?: null; $this->code = $code ?: null;
$this->code_hex = $hex_string ?: null; $this->codeHex = $hex_string ?: null;
return $this; return $this;
} }
/** /**
* Возвращает признак способа оплаты * Возвращает признак способа оплаты
* *
* @return string|null * @return PaymentMethod|null
*/ */
public function getPaymentMethod(): ?string public function getPaymentMethod(): ?PaymentMethod
{ {
return $this->payment_method; return $this->paymentMethod;
} }
/** /**
* Устанавливает признак способа оплаты * Устанавливает признак способа оплаты
* *
* @param string|null $payment_method Признак способа оплаты * @param PaymentMethod|null $paymentMethod Признак способа оплаты
* @return $this * @return $this
* @throws InvalidEnumValueException
*/ */
public function setPaymentMethod(?string $payment_method): self public function setPaymentMethod(?PaymentMethod $paymentMethod): self
{ {
$payment_method = trim((string)$payment_method); $this->paymentMethod = $paymentMethod;
PaymentMethods::isValid($payment_method);
$this->payment_method = $payment_method ?: null;
return $this; return $this;
} }
/** /**
* Возвращает признак предмета расчёта * Возвращает признак предмета расчёта
* *
* @return string|null * @return PaymentObject|null
*/ */
public function getPaymentObject(): ?string public function getPaymentObject(): ?PaymentObject
{ {
return $this->payment_object; return $this->paymentObject;
} }
/** /**
* Устанавливает признак предмета расчёта * Устанавливает признак предмета расчёта
* *
* @param string|null $payment_object Признак предмета расчёта * @param PaymentObject|null $paymentObject Признак предмета расчёта
* @return $this * @return $this
* @throws InvalidEnumValueException
*/ */
public function setPaymentObject(?string $payment_object): self public function setPaymentObject(?PaymentObject $paymentObject): self
{ {
$payment_object = trim((string)$payment_object); $this->paymentObject = $paymentObject;
PaymentObjects::isValid($payment_object);
$this->payment_object = $payment_object ?: null;
return $this; return $this;
} }
@ -385,21 +353,19 @@ final class Item extends Entity
/** /**
* Устанавливает ставку НДС * Устанавливает ставку НДС
* *
* @param Vat|string|null $vat Объект ставки, одно из значений VatTypes или null для удаления ставки * @param Vat | VatType | null $vat Объект ставки, одно из значений VatTypes или null для удаления ставки
* @return $this * @return $this
* @throws TooHighItemSumException * @throws TooHighItemSumException
* @throws InvalidEnumValueException
*/ */
public function setVat(Vat|string|null $vat): self public function setVat(Vat | VatType | null $vat): self
{ {
if (is_string($vat)) { if (is_null($vat)) {
$vat = trim($vat); $this->vat = null;
empty($vat)
? $this->vat = null
: VatTypes::isValid($vat) && $this->vat = new Vat($vat, $this->getSum());
} elseif ($vat instanceof Vat) { } elseif ($vat instanceof Vat) {
$vat->setSum($this->getSum()); $vat->setSum($this->getSum());
$this->vat = $vat; $this->vat = $vat;
} else {
$this->vat = new Vat($vat, $this->getSum());
} }
return $this; return $this;
} }
@ -411,18 +377,18 @@ final class Item extends Entity
*/ */
public function getAgentInfo(): ?AgentInfo public function getAgentInfo(): ?AgentInfo
{ {
return $this->agent_info; return $this->agentInfo;
} }
/** /**
* Устанавливает атрибуты агента * Устанавливает атрибуты агента
* *
* @param AgentInfo|null $agent_info * @param AgentInfo|null $agentInfo
* @return Item * @return Item
*/ */
public function setAgentInfo(?AgentInfo $agent_info): self public function setAgentInfo(?AgentInfo $agentInfo): self
{ {
$this->agent_info = $agent_info; $this->agentInfo = $agentInfo;
return $this; return $this;
} }
@ -455,23 +421,23 @@ final class Item extends Entity
*/ */
public function getUserData(): ?string public function getUserData(): ?string
{ {
return $this->user_data; return $this->userData;
} }
/** /**
* Устанавливает дополнительный реквизит * Устанавливает дополнительный реквизит
* *
* @param string|null $user_data Дополнительный реквизит * @param string|null $userData Дополнительный реквизит
* @return $this * @return $this
* @throws TooLongUserdataException * @throws TooLongUserdataException
*/ */
public function setUserData(?string $user_data): self public function setUserData(?string $userData): self
{ {
$user_data = trim((string)$user_data); $userData = trim((string)$userData);
if (mb_strlen($user_data) > Constraints::MAX_LENGTH_USER_DATA) { if (mb_strlen($userData) > Constraints::MAX_LENGTH_USER_DATA) {
throw new TooLongUserdataException($user_data); throw new TooLongUserdataException($userData);
} }
$this->user_data = $user_data ?: null; $this->userData = $userData ?: null;
return $this; return $this;
} }
@ -512,25 +478,25 @@ final class Item extends Entity
*/ */
public function getCountryCode(): ?string public function getCountryCode(): ?string
{ {
return $this->country_code; return $this->countryCode;
} }
/** /**
* Устанавливает код страны происхождения товара * Устанавливает код страны происхождения товара
* *
* @param string|null $country_code * @param string|null $countryCode
* @return Item * @return Item
* @throws InvalidOKSMCodeException * @throws InvalidOKSMCodeException
* @see https://classifikators.ru/oksm * @see https://classifikators.ru/oksm
* @see https://ru.wikipedia.org/wiki/Общероссийский_классификатор_стран_мира * @see https://ru.wikipedia.org/wiki/Общероссийский_классификатор_стран_мира
*/ */
public function setCountryCode(?string $country_code): self public function setCountryCode(?string $countryCode): self
{ {
$country_code = trim((string)$country_code); $countryCode = trim((string)$countryCode);
if (preg_match(Constraints::PATTERN_OKSM_CODE, $country_code) != 1) { if (preg_match(Constraints::PATTERN_OKSM_CODE, $countryCode) != 1) {
throw new InvalidOKSMCodeException($country_code); throw new InvalidOKSMCodeException($countryCode);
} }
$this->country_code = $country_code ?: null; $this->countryCode = $countryCode ?: null;
return $this; return $this;
} }
@ -541,28 +507,27 @@ final class Item extends Entity
*/ */
public function getDeclarationNumber(): ?string public function getDeclarationNumber(): ?string
{ {
return $this->declaration_number; return $this->declarationNumber;
} }
/** /**
* Устанавливает код таможенной декларации * Устанавливает код таможенной декларации
* *
* @param string|null $declaration_number * @param string|null $declarationNumber
* @return Item * @return Item
* @throws InvalidDeclarationNumberException * @throws InvalidDeclarationNumberException
*/ */
public function setDeclarationNumber(?string $declaration_number): self public function setDeclarationNumber(?string $declarationNumber): self
{ {
if (is_string($declaration_number)) { if (is_string($declarationNumber)) {
$declaration_number = trim($declaration_number); $declarationNumber = trim($declarationNumber);
if ( $is_short = mb_strlen($declarationNumber) < Constraints::MIN_LENGTH_DECLARATION_NUMBER;
mb_strlen($declaration_number) < Constraints::MIN_LENGTH_DECLARATION_NUMBER $is_long = mb_strlen($declarationNumber) > Constraints::MAX_LENGTH_DECLARATION_NUMBER;
|| mb_strlen($declaration_number) > Constraints::MAX_LENGTH_DECLARATION_NUMBER if ($is_short || $is_long) {
) { throw new InvalidDeclarationNumberException($declarationNumber);
throw new InvalidDeclarationNumberException($declaration_number);
} }
} }
$this->declaration_number = $declaration_number; $this->declarationNumber = $declarationNumber;
return $this; return $this;
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,18 +8,16 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
InvalidInnLengthException, InvalidInnLengthException,
InvalidPhoneException InvalidPhoneException};
};
use AtolOnline\Traits\{ use AtolOnline\Traits\{
HasInn, HasInn,
HasPhones HasPhones};
};
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
@ -28,7 +27,8 @@ use Illuminate\Support\Collection;
*/ */
final class MoneyTransferOperator extends Entity final class MoneyTransferOperator extends Entity
{ {
use HasInn, HasPhones; use HasInn;
use HasPhones;
/** /**
* @var string|null Наименование (1026) * @var string|null Наименование (1026)
@ -64,7 +64,7 @@ final class MoneyTransferOperator extends Entity
?string $name = null, ?string $name = null,
?string $inn = null, ?string $inn = null,
?string $address = null, ?string $address = null,
array|Collection|null $phones = null, array | Collection | null $phones = null,
) { ) {
$this->setName($name); $this->setName($name);
$this->setInn($inn); $this->setInn($inn);

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
InvalidPhoneException, InvalidPhoneException,
TooLongPayingAgentOperationException}; TooLongPayingAgentOperationException};
@ -42,7 +43,7 @@ final class PayingAgent extends Entity
*/ */
public function __construct( public function __construct(
?string $operation = null, ?string $operation = null,
array|Collection|null $phones = null, array | Collection | null $phones = null,
) { ) {
!is_null($operation) && $this->setOperation($operation); !is_null($operation) && $this->setOperation($operation);
$this->setPhones($phones); $this->setPhones($phones);

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,23 +8,19 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\{ use AtolOnline\{
Constants\Constraints, Constraints,
Enums\PaymentTypes, Enums\PaymentType,};
};
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
InvalidEnumValueException,
NegativePaymentSumException, NegativePaymentSumException,
TooHighPaymentSumException, TooHighPaymentSumException,};
};
use JetBrains\PhpStorm\{ use JetBrains\PhpStorm\{
ArrayShape, ArrayShape,
Pure Pure};
};
/** /**
* Класс, описывающий оплату * Класс, описывающий оплату
@ -32,36 +29,27 @@ use JetBrains\PhpStorm\{
*/ */
final class Payment extends Entity final class Payment extends Entity
{ {
/**
* @var int Тип оплаты
*/
protected int $type;
/**
* @var float Сумма оплаты (1031, 1081, 1215, 1216, 1217)
*/
protected float $sum;
/** /**
* Конструктор * Конструктор
* *
* @param int $type Тип оплаты * @param PaymentType $type Тип оплаты
* @param float $sum Сумма оплаты * @param float $sum Сумма оплаты (1031, 1081, 1215, 1216, 1217)
* @throws NegativePaymentSumException * @throws NegativePaymentSumException
* @throws TooHighPaymentSumException * @throws TooHighPaymentSumException
* @throws InvalidEnumValueException
*/ */
public function __construct(int $type, float $sum) public function __construct(
{ protected PaymentType $type,
protected float $sum,
) {
$this->setType($type)->setSum($sum); $this->setType($type)->setSum($sum);
} }
/** /**
* Возвращает установленный тип оплаты * Возвращает установленный тип оплаты
* *
* @return int * @return PaymentType
*/ */
public function getType(): int public function getType(): PaymentType
{ {
return $this->type; return $this->type;
} }
@ -69,13 +57,12 @@ final class Payment extends Entity
/** /**
* Устанавливает тип оплаты * Устанавливает тип оплаты
* *
* @param int $type * @param PaymentType $type
* @return $this * @return $this
* @throws InvalidEnumValueException
*/ */
public function setType(int $type): self public function setType(PaymentType $type): self
{ {
PaymentTypes::isValid($type) && $this->type = $type; $this->type = $type;
return $this; return $this;
} }
@ -100,12 +87,8 @@ final class Payment extends Entity
public function setSum(float $sum): self public function setSum(float $sum): self
{ {
$sum = round($sum, 2); $sum = round($sum, 2);
if ($sum > Constraints::MAX_COUNT_PAYMENT_SUM) { $sum > Constraints::MAX_COUNT_PAYMENT_SUM && throw new TooHighPaymentSumException($sum);
throw new TooHighPaymentSumException($sum); $sum < 0 && throw new NegativePaymentSumException($sum);
}
if ($sum < 0) {
throw new NegativePaymentSumException($sum);
}
$this->sum = $sum; $this->sum = $sum;
return $this; return $this;
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
@ -16,7 +17,7 @@ use AtolOnline\Api\Fiscalizer;
use AtolOnline\Collections\Items; use AtolOnline\Collections\Items;
use AtolOnline\Collections\Payments; use AtolOnline\Collections\Payments;
use AtolOnline\Collections\Vats; use AtolOnline\Collections\Vats;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\AuthFailedException; use AtolOnline\Exceptions\AuthFailedException;
use AtolOnline\Exceptions\EmptyItemsException; use AtolOnline\Exceptions\EmptyItemsException;
use AtolOnline\Exceptions\EmptyLoginException; use AtolOnline\Exceptions\EmptyLoginException;
@ -227,7 +228,7 @@ final class Receipt extends Entity
$items->checkCount(); $items->checkCount();
$items->checkItemsClasses(); $items->checkItemsClasses();
$this->items = $items; $this->items = $items;
$this->getItems()->each(fn($item) => $this->total += $item->getSum()); $this->getItems()->each(fn ($item) => $this->total += $item->getSum());
$this->total = round($this->total, 2); $this->total = round($this->total, 2);
return $this; return $this;
} }
@ -280,7 +281,7 @@ final class Receipt extends Entity
$vats->checkItemsClasses(); $vats->checkItemsClasses();
$this->vats = $vats; $this->vats = $vats;
/** @var Vat $vat */ /** @var Vat $vat */
$this->getVats()->each(fn($vat) => $vat->setSum($this->getTotal())); $this->getVats()->each(fn ($vat) => $vat->setSum($this->getTotal()));
return $this; return $this;
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
@ -30,7 +31,7 @@ final class ReceivePaymentsOperator extends Entity
* @param array|Collection|null $phones Телефоны оператора по приёму платежей (1074) * @param array|Collection|null $phones Телефоны оператора по приёму платежей (1074)
* @throws InvalidPhoneException * @throws InvalidPhoneException
*/ */
public function __construct(array|Collection|null $phones = null) public function __construct(array | Collection | null $phones = null)
{ {
$this->setPhones($phones); $this->setPhones($phones);
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,18 +8,16 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Exceptions\{ use AtolOnline\Exceptions\{
InvalidInnLengthException, InvalidInnLengthException,
InvalidPhoneException InvalidPhoneException};
};
use AtolOnline\Traits\{ use AtolOnline\Traits\{
HasInn, HasInn,
HasPhones HasPhones};
};
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
/** /**
@ -28,7 +27,8 @@ use Illuminate\Support\Collection;
*/ */
final class Supplier extends Entity final class Supplier extends Entity
{ {
use HasPhones, HasInn; use HasPhones;
use HasInn;
/** /**
* @var string|null Наименование (1225) * @var string|null Наименование (1225)
@ -47,7 +47,7 @@ final class Supplier extends Entity
public function __construct( public function __construct(
?string $name = null, ?string $name = null,
?string $inn = null, ?string $inn = null,
array|Collection|null $phones = null, array | Collection | null $phones = null,
) { ) {
!is_null($name) && $this->setName($name); !is_null($name) && $this->setName($name);
!is_null($inn) && $this->setInn($inn); !is_null($inn) && $this->setInn($inn);

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Enums\VatTypes; use AtolOnline\Enums\VatType;
use AtolOnline\Exceptions\InvalidEnumValueException;
use AtolOnline\Helpers; use AtolOnline\Helpers;
use JetBrains\PhpStorm\{ use JetBrains\PhpStorm\{
ArrayShape, ArrayShape,
@ -25,49 +25,38 @@ use JetBrains\PhpStorm\{
*/ */
final class Vat extends Entity final class Vat extends Entity
{ {
/**
* @var string Тип ставки НДС (1199, 1105, 1104, 1103, 1102, 1107, 1106)
*/
private string $type;
/**
* @var float Сумма в рублях, от которой пересчитывается размер НДС
*/
private float $sum;
/** /**
* Конструктор * Конструктор
* *
* @param string $type Тип ставки НДС (1199, 1105, 1104, 1103, 1102, 1107, 1106) * @param VatType $type Тип ставки НДС (1199, 1105, 1104, 1103, 1102, 1107, 1106)
* @param float $rubles Исходная сумма в рублях, от которой нужно расчитать размер НДС * @param float $sum Исходная сумма в рублях, от которой нужно расчитать размер НДС
* @throws InvalidEnumValueException
*/ */
public function __construct(string $type, float $rubles) public function __construct(
{ protected VatType $type,
$this->setType($type)->setSum($rubles); protected float $sum,
) {
$this->setType($type)->setSum($sum);
} }
/** /**
* Устанавливает тип ставки НДС * Устанавливает тип ставки НДС
* Автоматически пересчитывает итоговый размер НДС от исходной суммы. * Автоматически пересчитывает итоговый размер НДС от исходной суммы.
* *
* @param string $type Тип ставки НДС * @param VatType $type Тип ставки НДС
* @return $this * @return $this
* @throws InvalidEnumValueException
*/ */
public function setType(string $type): self public function setType(VatType $type): self
{ {
$type = trim($type); $this->type = $type;
VatTypes::isValid($type) && $this->type = $type;
return $this; return $this;
} }
/** /**
* Возвращает тип ставки НДС * Возвращает тип ставки НДС
* *
* @return string * @return VatType
*/ */
public function getType(): string public function getType(): VatType
{ {
return $this->type; return $this->type;
} }
@ -108,12 +97,12 @@ final class Vat extends Entity
{ {
return Helpers::toRub( return Helpers::toRub(
match ($this->getType()) { match ($this->getType()) {
VatTypes::VAT10 => Helpers::toKop($this->sum) * 10 / 100, VatType::VAT10 => Helpers::toKop($this->sum) * 10 / 100,
VatTypes::VAT18 => Helpers::toKop($this->sum) * 18 / 100, VatType::VAT18 => Helpers::toKop($this->sum) * 18 / 100,
VatTypes::VAT20 => Helpers::toKop($this->sum) * 20 / 100, VatType::VAT20 => Helpers::toKop($this->sum) * 20 / 100,
VatTypes::VAT110 => Helpers::toKop($this->sum) * 10 / 110, VatType::VAT110 => Helpers::toKop($this->sum) * 10 / 110,
VatTypes::VAT118 => Helpers::toKop($this->sum) * 18 / 118, VatType::VAT118 => Helpers::toKop($this->sum) * 18 / 118,
VatTypes::VAT120 => Helpers::toKop($this->sum) * 20 / 120, VatType::VAT120 => Helpers::toKop($this->sum) * 20 / 120,
default => 0, default => 0,
} }
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,59 +8,49 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use AtolOnline\Constants\Ffd105Tags;
/** /**
* Константы, определяющие типы агента * Константы, определяющие типы агента
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 18, 26 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 18, 26
*/ */
final class AgentTypes extends Enum enum AgentType: string
{ {
/** /**
* Банковский платёжный агент * Банковский платёжный агент
*/ */
const BANK_PAYING_AGENT = 'bank_paying_agent'; case BANK_PAYING_AGENT = 'bank_paying_agent';
/** /**
* Банковский платёжный субагент * Банковский платёжный субагент
*/ */
const BANK_PAYING_SUBAGENT = 'bank_paying_subagent'; case BANK_PAYING_SUBAGENT = 'bank_paying_subagent';
/** /**
* Платёжный агент * Платёжный агент
*/ */
const PAYING_AGENT = 'paying_agent'; case PAYING_AGENT = 'payingAgent';
/** /**
* Платёжный субагент * Платёжный субагент
*/ */
const PAYING_SUBAGENT = 'paying_subagent'; case PAYING_SUBAGENT = 'paying_subagent';
/** /**
* Поверенный * Поверенный
*/ */
const ATTRONEY = 'attorney'; case ATTRONEY = 'attorney';
/** /**
* Комиссионер * Комиссионер
*/ */
const COMMISSION_AGENT = 'commission_agent'; case COMMISSION_AGENT = 'commission_agent';
/** /**
* Другой тип агента * Другой тип агента
*/ */
const ANOTHER = 'another'; case ANOTHER = 'another';
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [Ffd105Tags::AGENT_TYPE];
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,34 +8,24 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use AtolOnline\Constants\Ffd105Tags;
/** /**
* Константы, определяющие типы документов коррекции * Константы, определяющие типы документов коррекции
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35
*/ */
final class CorrectionTypes extends Enum enum CorrectionType: string
{ {
/** /**
* Самостоятельно * Самостоятельно
*/ */
const SELF = 'self'; case SELF = 'self';
/** /**
* По предписанию * По предписанию
*/ */
const INSTRUCTION = 'instruction'; case INSTRUCTION = 'instruction';
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [Ffd105Tags::CORRECTION_TYPE];
}
} }

View File

@ -1,36 +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\Enums;
use AtolOnline\Exceptions\InvalidEnumValueException;
/**
* Расширение класса перечисления
*/
abstract class Enum extends \MyCLabs\Enum\Enum
{
/**
* @inheritDoc
* @throws InvalidEnumValueException
*/
public static function isValid($value)
{
return parent::isValid($value) ?: throw new InvalidEnumValueException(static::class, $value);
}
/**
* Возвращает массив тегов ФФД
*
* @return int[]
*/
abstract public static function getFfdTags(): array;
}

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,59 +8,49 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use AtolOnline\Constants\Ffd105Tags;
/** /**
* Константы, определяющие признаки способов расчёта * Константы, определяющие признаки способов расчёта
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 22 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 22
*/ */
final class PaymentMethods extends Enum enum PaymentMethod: string
{ {
/** /**
* Предоплата 100% до передачи предмета расчёта * Предоплата 100% до передачи предмета расчёта
*/ */
const FULL_PREPAYMENT = 'full_prepayment'; case FULL_PREPAYMENT = 'full_prepayment';
/** /**
* Частичная предоплата до передачи предмета расчёта * Частичная предоплата до передачи предмета расчёта
*/ */
const PREPAYMENT = 'prepayment'; case PREPAYMENT = 'prepayment';
/** /**
* Аванс * Аванс
*/ */
const ADVANCE = 'advance'; case ADVANCE = 'advance';
/** /**
* Полная оплата с учётом аванса/предоплаты в момент передачи предмета расчёта * Полная оплата с учётом аванса/предоплаты в момент передачи предмета расчёта
*/ */
const FULL_PAYMENT = 'full_payment'; case FULL_PAYMENT = 'full_payment';
/** /**
* Частичный расчёт в момент передачи предмета расчёта (дальнейшая оплата в кредит) * Частичный расчёт в момент передачи предмета расчёта (дальнейшая оплата в кредит)
*/ */
const PARTIAL_PAYMENT = 'partial_payment'; case PARTIAL_PAYMENT = 'partial_payment';
/** /**
* Передача предмета расчёта в кредит * Передача предмета расчёта в кредит
*/ */
const CREDIT = 'credit'; case CREDIT = 'credit';
/** /**
* Оплата кредита * Оплата кредита
*/ */
const CREDIT_PAYMENT = 'credit_payment'; case CREDIT_PAYMENT = 'credit_payment';
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [Ffd105Tags::ITEM_PAYMENT_METHOD];
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,73 +8,71 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use AtolOnline\Constants\Ffd105Tags;
/** /**
* Константы, определяющие признаки предметов расчёта * Константы, определяющие признаки предметов расчёта
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 23 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 23
*/ */
final class PaymentObjects extends Enum enum PaymentObject: string
{ {
/** /**
* Товар, кроме подакцизного * Товар, кроме подакцизного
*/ */
const COMMODITY = 'commodity'; case COMMODITY = 'commodity';
/** /**
* Товар подакцизный * Товар подакцизный
*/ */
const EXCISE = 'excise'; case EXCISE = 'excise';
/** /**
* Работа * Работа
*/ */
const JOB = 'job'; case JOB = 'job';
/** /**
* Услуга * Услуга
*/ */
const SERVICE = 'service'; case SERVICE = 'service';
/** /**
* Ставка азартной игры * Ставка азартной игры
*/ */
const GAMBLING_BET = 'gambling_bet'; case GAMBLING_BET = 'gambling_bet';
/** /**
* Выигрыш азартной игры * Выигрыш азартной игры
*/ */
const GAMBLING_PRIZE = 'gambling_prize'; case GAMBLING_PRIZE = 'gambling_prize';
/** /**
* Лотерея * Лотерея
*/ */
const LOTTERY = 'lottery'; case LOTTERY = 'lottery';
/** /**
* Выигрыш лотереи * Выигрыш лотереи
*/ */
const LOTTERY_PRIZE = 'lottery_prize'; case LOTTERY_PRIZE = 'lottery_prize';
/** /**
* Предоставление результатов интеллектуальной деятельности * Предоставление результатов интеллектуальной деятельности
*/ */
const INTELLECTUAL_ACTIVITY = 'intellectual_activity'; case INTELLECTUAL_ACTIVITY = 'intellectual_activity';
/** /**
* Платёж (задаток, кредит, аванс, предоплата, пеня, штраф, бонус и пр.) * Платёж (задаток, кредит, аванс, предоплата, пеня, штраф, бонус и пр.)
*/ */
const PAYMENT = 'payment'; case PAYMENT = 'payment';
/** /**
* Агентское вознаграждение * Агентское вознаграждение
*/ */
const AGENT_COMMISSION = 'agent_commission'; case AGENT_COMMISSION = 'agent_commission';
/** /**
* Составной предмет расчёта * Составной предмет расчёта
@ -81,88 +80,80 @@ final class PaymentObjects extends Enum
* @deprecated Более не используется согласно ФФД 1.05 * @deprecated Более не используется согласно ФФД 1.05
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 25 (payment_object) * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 25 (payment_object)
*/ */
const COMPOSITE = 'composite'; case COMPOSITE = 'composite';
/** /**
* Другой предмет расчёта * Другой предмет расчёта
*/ */
const ANOTHER = 'another'; case ANOTHER = 'another';
/** /**
* Имущественное право * Имущественное право
*/ */
const PROPERTY_RIGHT = 'property_right'; case PROPERTY_RIGHT = 'property_right';
/** /**
* Внереализационный доход * Внереализационный доход
*/ */
const NON_OPERATING_GAIN = 'non-operating_gain'; case NON_OPERATING_GAIN = 'non-operating_gain';
/** /**
* Страховые взносы * Страховые взносы
*/ */
const INSURANCE_PREMIUM = 'insurance_premium'; case INSURANCE_PREMIUM = 'insurance_premium';
/** /**
* Торговый сбор * Торговый сбор
*/ */
const SALES_TAX = 'sales_tax'; case SALES_TAX = 'sales_tax';
/** /**
* Курортный сбор * Курортный сбор
*/ */
const RESORT_FEE = 'resort_fee'; case RESORT_FEE = 'resort_fee';
/** /**
* Взнос в счёт оплаты пени, штрафе, вознаграждении, бонусе и ином аналогичном предмете расчёта * Взнос в счёт оплаты пени, штрафе, вознаграждении, бонусе и ином аналогичном предмете расчёта
*/ */
const AWARD = 'award'; case AWARD = 'award';
/** /**
* Залог * Залог
*/ */
const DEPOSIT = 'deposit'; case DEPOSIT = 'deposit';
/** /**
* Расход, уменьшающий доход (в соответствии со статьей 346.16 НК РФ) * Расход, уменьшающий доход (в соответствии со статьей 346.16 НК РФ)
*/ */
const EXPENSE = 'expense'; case EXPENSE = 'expense';
/** /**
* Взнос на ОПС ИП * Взнос на ОПС ИП
*/ */
const PEN_INSURANCE_IP = 'pension_insurance_ip'; case PEN_INSURANCE_IP = 'pension_insurance_ip';
/** /**
* Взнос на ОПС * Взнос на ОПС
*/ */
const PEN_INSURANCE = 'pension_insurance'; case PEN_INSURANCE = 'pension_insurance';
/** /**
* Взнос на ОМС ИП * Взнос на ОМС ИП
*/ */
const MED_INSURANCE_IP = 'medical_insurance_ip'; case MED_INSURANCE_IP = 'medical_insurance_ip';
/** /**
* Взнос на ОМС * Взнос на ОМС
*/ */
const MED_INSURANCE = 'medical_insurance'; case MED_INSURANCE = 'medical_insurance';
/** /**
* Взнос на ОСС * Взнос на ОСС
*/ */
const SOC_INSURANCE = 'social_insurance'; case SOC_INSURANCE = 'social_insurance';
/** /**
* Платёж казино * Платёж казино
*/ */
const CASINO_PAYMENT = 'casino_payment'; case CASINO_PAYMENT = 'casino_payment';
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [Ffd105Tags::ITEM_PAYMENT_OBJECT];
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,85 +8,69 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use AtolOnline\Constants\Ffd105Tags;
/** /**
* Константы, определяющие виды оплат * Константы, определяющие виды оплат
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35
*/ */
final class PaymentTypes extends Enum enum PaymentType: int
{ {
/** /**
* Расчёт наличными * Расчёт наличными
*/ */
const CASH = 0; case CASH = 0;
/** /**
* Расчёт безналичными * Расчёт безналичными
*/ */
const ELECTRON = 1; case ELECTRON = 1;
/** /**
* Предварительная оплата (зачёт аванса) * Предварительная оплата (зачёт аванса)
*/ */
const PREPAID = 2; case PREPAID = 2;
/** /**
* Предварительная оплата (кредит) * Предварительная оплата (кредит)
*/ */
const CREDIT = 3; case CREDIT = 3;
/** /**
* Иная форма оплаты (встречное предоставление) * Иная форма оплаты (встречное предоставление)
*/ */
const OTHER = 4; case OTHER = 4;
/** /**
* Расширенный типы оплаты (5) * Расширенный типы оплаты (5)
* Для каждого фискального типа оплаты можно указать расширенный тип оплаты * Для каждого фискального типа оплаты можно указать расширенный тип оплаты
*/ */
const ADD_5 = 5; case ADD_5 = 5;
/** /**
* Расширенный типы оплаты (6) * Расширенный типы оплаты (6)
* Для каждого фискального типа оплаты можно указать расширенный тип оплаты * Для каждого фискального типа оплаты можно указать расширенный тип оплаты
*/ */
const ADD_6 = 6; case ADD_6 = 6;
/** /**
* Расширенный типы оплаты (7) * Расширенный типы оплаты (7)
* Для каждого фискального типа оплаты можно указать расширенный тип оплаты * Для каждого фискального типа оплаты можно указать расширенный тип оплаты
*/ */
const ADD_7 = 7; case ADD_7 = 7;
/** /**
* Расширенный типы оплаты (8) * Расширенный типы оплаты (8)
* Для каждого фискального типа оплаты можно указать расширенный тип оплаты * Для каждого фискального типа оплаты можно указать расширенный тип оплаты
*/ */
const ADD_8 = 8; case ADD_8 = 8;
/** /**
* Расширенный типы оплаты (9) * Расширенный типы оплаты (9)
* Для каждого фискального типа оплаты можно указать расширенный тип оплаты * Для каждого фискального типа оплаты можно указать расширенный тип оплаты
*/ */
const ADD_9 = 9; case ADD_9 = 9;
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [
Ffd105Tags::PAYMENT_TYPE_CASH,
Ffd105Tags::PAYMENT_TYPE_ELECTRON,
Ffd105Tags::PAYMENT_TYPE_PREPAID,
Ffd105Tags::PAYMENT_TYPE_CREDIT,
Ffd105Tags::PAYMENT_TYPE_OTHER,
];
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,44 +8,42 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use MyCLabs\Enum\Enum;
/** /**
* Константы, определяющие типы операций (чеков) * Константы, определяющие типы операций (чеков)
*/ */
final class ReceiptOperationTypes extends Enum enum ReceiptOperationType: string
{ {
/** /**
* Приход (мы продали) * Приход (мы продали)
*/ */
const SELL = 'sell'; case SELL = 'sell';
/** /**
* Возврат прихода (нам вернули предмет расчёта, мы вернули средства) * Возврат прихода (нам вернули предмет расчёта, мы вернули средства)
*/ */
const SELL_REFUND = 'sell_refund'; case SELL_REFUND = 'sell_refund';
/** /**
* Коррекция прихода * Коррекция прихода
*/ */
const SELL_CORRECTION = 'sell_correction'; case SELL_CORRECTION = 'sell_correction';
/** /**
* Расход (мы купили) * Расход (мы купили)
*/ */
const BUY = 'buy'; case BUY = 'buy';
/** /**
* Возврат расхода (мы вернули предмет расчёта, нам вернули средства) * Возврат расхода (мы вернули предмет расчёта, нам вернули средства)
*/ */
const BUY_REFUND = 'buy_refund'; case BUY_REFUND = 'buy_refund';
/** /**
* Коррекция прихода (догоняем неучтённые средства) * Коррекция прихода (догоняем неучтённые средства)
*/ */
const BUY_CORRECTION = 'buy_correction'; case BUY_CORRECTION = 'buy_correction';
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,54 +8,44 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Enums; namespace AtolOnline\Enums;
use AtolOnline\Constants\Ffd105Tags;
/** /**
* Константы, определяющие типы налогообложения * Константы, определяющие типы налогообложения
* *
* @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35 * @see https://online.atol.ru/files/API_atol_online_v4.pdf Документация, стр 35
*/ */
final class SnoTypes extends Enum enum SnoType: string
{ {
/** /**
* Общая СН * Общая СН
*/ */
const OSN = 'osn'; case OSN = 'osn';
/** /**
* Упрощенная СН (доходы) * Упрощенная СН (доходы)
*/ */
const USN_INCOME = 'usn_income'; case USN_INCOME = 'usn_income';
/** /**
* Упрощенная СН (доходы минус расходы) * Упрощенная СН (доходы минус расходы)
*/ */
const USN_INCOME_OUTCOME = 'usn_income_outcome'; case USN_INCOME_OUTCOME = 'usn_income_outcome';
/** /**
* Единый налог на вмененный доход * Единый налог на вмененный доход
*/ */
const ENDV = 'envd'; case ENDV = 'envd';
/** /**
* Единый сельскохозяйственный налог * Единый сельскохозяйственный налог
*/ */
const ESN = 'esn'; case ESN = 'esn';
/** /**
* Патентная СН * Патентная СН
*/ */
const PATENT = 'patent'; case PATENT = 'patent';
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [Ffd105Tags::COMPANY_SNO];
}
} }

View File

@ -0,0 +1,59 @@
<?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\Enums;
/**
* Константы, определяющие типы ставок НДС
*/
enum VatType: string
{
/**
* Без НДС
*/
case NONE = 'none';
/**
* НДС 0%
*/
case VAT0 = 'vat0';
/**
* НДС 10%
*/
case VAT10 = 'vat10';
/**
* НДС 18%
*/
case VAT18 = 'vat18';
/**
* НДС 20%
*/
case VAT20 = 'vat20';
/**
* НДС 10/110%
*/
case VAT110 = 'vat110';
/**
* НДС 18/118%
*/
case VAT118 = 'vat118';
/**
* НДС 20/120%
*/
case VAT120 = 'vat120';
}

View File

@ -1,76 +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\Enums;
use AtolOnline\Constants\Ffd105Tags;
/**
* Константы, определяющие типы ставок НДС
*/
final class VatTypes extends Enum
{
/**
* Без НДС
*/
const NONE = 'none';
/**
* НДС 0%
*/
const VAT0 = 'vat0';
/**
* НДС 10%
*/
const VAT10 = 'vat10';
/**
* НДС 18%
*/
const VAT18 = 'vat18';
/**
* НДС 20%
*/
const VAT20 = 'vat20';
/**
* НДС 10/110%
*/
const VAT110 = 'vat110';
/**
* НДС 18/118%
*/
const VAT118 = 'vat118';
/**
* НДС 20/120%
*/
const VAT120 = 'vat120';
/**
* @inheritDoc
*/
public static function getFfdTags(): array
{
return [
Ffd105Tags::ITEM_VAT_TYPE,
Ffd105Tags::DOC_VAT_TYPE_NONE,
Ffd105Tags::DOC_VAT_TYPE_VAT0,
Ffd105Tags::DOC_VAT_TYPE_VAT10,
Ffd105Tags::DOC_VAT_TYPE_VAT20,
Ffd105Tags::DOC_VAT_TYPE_VAT110,
Ffd105Tags::DOC_VAT_TYPE_VAT120,
];
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при пустом наименовании дополнительного реквизита пользователя * Исключение, возникающее при пустом наименовании дополнительного реквизита пользователя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при пустом наименовании дополнительного реквизита пользователя * Исключение, возникающее при пустом наименовании дополнительного реквизита пользователя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при пустом номере документа коррекции * Исключение, возникающее при пустом номере документа коррекции

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать пустой email * Исключение, возникающее при попытке указать пустой email

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при пустом наименовании предмета расчёта * Исключение, возникающее при пустом наименовании предмета расчёта

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,10 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use JetBrains\PhpStorm\Pure;
/** /**
* Исключение, возникающее при наличии некорректных объектов в коллекции * Исключение, возникающее при наличии некорректных объектов в коллекции
*/ */
@ -23,6 +26,7 @@ class InvalidEntityInCollectionException extends AtolException
* @param string $expected_class * @param string $expected_class
* @param mixed $actual * @param mixed $actual
*/ */
#[Pure]
public function __construct(string $collection_class, string $expected_class, mixed $actual) public function __construct(string $collection_class, string $expected_class, mixed $actual)
{ {
if (is_object($actual)) { if (is_object($actual)) {

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Enums\Enum; use JetBrains\PhpStorm\Pure;
/** /**
* Исключение, возникающее при ошибке валидации перечислимых значений * Исключение, возникающее при ошибке валидации перечислимых значений
@ -26,14 +27,12 @@ class InvalidEnumValueException extends AtolException
* @param string $message * @param string $message
* @param array $ffd_tags * @param array $ffd_tags
*/ */
#[Pure]
public function __construct(string $enum, mixed $value, string $message = '', array $ffd_tags = []) public function __construct(string $enum, mixed $value, string $message = '', array $ffd_tags = [])
{ {
/** @var $enum Enum */ $own_message = empty($value)
$own_message = ( ? "Значение $enum не может быть пустым."
empty($value) : "Некорректное значение $enum::$value.";
? "Значение из $enum не может быть пустым." parent::__construct($message ?: $own_message, $ffd_tags /*?: static::$ffd_tags*/);
: "Некорректное значение $enum::$value."
) . " Допустимые значения: " . implode(', ', $enum::toArray());
parent::__construct($message ?: $own_message, $ffd_tags ?: $enum::getFfdTags());
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
use JetBrains\PhpStorm\Pure; use JetBrains\PhpStorm\Pure;
/** /**

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке установки слишком большой суммы оплаты * Исключение, возникающее при попытке установки слишком большой суммы оплаты

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,13 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\{ use AtolOnline\Constraints;
Constraints, use AtolOnline\Ffd105Tags;
Ffd105Tags};
/** /**
* Исключение, возникающее при попытке указать слишком длинное наименование дополнительного реквизита чека * Исключение, возникающее при попытке указать слишком длинное наименование дополнительного реквизита чека

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,13 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\{ use AtolOnline\Constraints;
Constraints, use AtolOnline\Ffd105Tags;
Ffd105Tags};
/** /**
* Исключение, возникающее при попытке указать слишком длинное наименование дополнительного реквизита пользователя * Исключение, возникающее при попытке указать слишком длинное наименование дополнительного реквизита пользователя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,13 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\{ use AtolOnline\Constraints;
Constraints, use AtolOnline\Ffd105Tags;
Ffd105Tags};
/** /**
* Исключение, возникающее при попытке указать слишком длинное значение дополнительного реквизита пользователя * Исключение, возникающее при попытке указать слишком длинное значение дополнительного реквизита пользователя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
/** /**
* Исключение, возникающее при попытке указать слишком длинный callback_url * Исключение, возникающее при попытке указать слишком длинный callback_url

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинное имя кассира * Исключение, возникающее при попытке указать слишком длинное имя кассира

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинный телефон или email покупателя * Исключение, возникающее при попытке указать слишком длинный телефон или email покупателя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинное наименование покупателя * Исключение, возникающее при попытке указать слишком длинное наименование покупателя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинный email * Исключение, возникающее при попытке указать слишком длинный email

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,13 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags;
use JetBrains\PhpStorm\Pure;
/** /**
* Исключение, возникающее при попытке указать слишком длинный код товара * Исключение, возникающее при попытке указать слишком длинный код товара
@ -21,7 +20,6 @@ use JetBrains\PhpStorm\Pure;
class TooLongItemCodeException extends TooLongException class TooLongItemCodeException extends TooLongException
{ {
protected float $max = Constraints::MAX_LENGTH_ITEM_CODE; protected float $max = Constraints::MAX_LENGTH_ITEM_CODE;
protected array $ffd_tags = [Ffd105Tags::ITEM_NOMENCLATURE_CODE];
/** /**
* Конструктор * Конструктор
@ -29,7 +27,6 @@ class TooLongItemCodeException extends TooLongException
* @param string $name * @param string $name
* @param string $code * @param string $code
*/ */
#[Pure]
public function __construct(string $name, string $code) public function __construct(string $name, string $code)
{ {
parent::__construct($code, "Слишком длинный код товара '$name'"); parent::__construct($code, "Слишком длинный код товара '$name'");

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,14 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\{ use AtolOnline\Constraints;
Constraints, use AtolOnline\Ffd105Tags;
Ffd105Tags
};
/** /**
* Исключение, возникающее при попытке указать слишком длинное имя * Исключение, возникающее при попытке указать слишком длинное имя

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
/** /**
* Исключение, возникающее при попытке указать слишком длинный логин ККТ * Исключение, возникающее при попытке указать слишком длинный логин ККТ

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинную единицу измерения предмета расчёта * Исключение, возникающее при попытке указать слишком длинную единицу измерения предмета расчёта

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
/** /**
* Исключение, возникающее при попытке указать слишком длинный пароль ККТ * Исключение, возникающее при попытке указать слишком длинный пароль ККТ

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,14 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\{ use AtolOnline\Constraints;
Constraints, use AtolOnline\Ffd105Tags;
Ffd105Tags
};
/** /**
* Исключение, возникающее при попытке указать слишком длинную операцию для платёжного агента * Исключение, возникающее при попытке указать слишком длинную операцию для платёжного агента

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинный адрес места расчётов * Исключение, возникающее при попытке указать слишком длинный адрес места расчётов

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,12 +8,12 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Constants\Ffd105Tags; use AtolOnline\Ffd105Tags;
/** /**
* Исключение, возникающее при попытке указать слишком длинный дополнительный реквизит * Исключение, возникающее при попытке указать слишком длинный дополнительный реквизит

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
/** /**
* Исключение, возникающее при попытке добавить слишком много предметов расчёта в массив * Исключение, возникающее при попытке добавить слишком много предметов расчёта в массив

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
/** /**
* Исключение, возникающее при попытке добавить слишком много платежей в массив * Исключение, возникающее при попытке добавить слишком много платежей в массив

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,11 +8,11 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline\Exceptions; namespace AtolOnline\Exceptions;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
/** /**
* Исключение, возникающее при попытке добавить слишком много ставок НДС в документ * Исключение, возникающее при попытке добавить слишком много ставок НДС в документ

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
namespace AtolOnline\Constants; namespace AtolOnline;
/** /**
* Константы тегов ФФД 1.05 * Константы тегов ФФД 1.05
@ -17,132 +18,132 @@ final class Ffd105Tags
/** /**
* Телефон или электронный адрес покупателя * Телефон или электронный адрес покупателя
*/ */
const CLIENT_PHONE_EMAIL = 1008; public const CLIENT_PHONE_EMAIL = 1008;
/** /**
* Наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта покупателя (клиента) * Наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта покупателя (клиента)
*/ */
const CLIENT_NAME = 1227; public const CLIENT_NAME = 1227;
/** /**
* ИНН организации или покупателя (клиента) * ИНН организации или покупателя (клиента)
*/ */
const CLIENT_INN = 1228; public const CLIENT_INN = 1228;
/** /**
* Адрес электронной почты отправителя чека * Адрес электронной почты отправителя чека
*/ */
const COMPANY_EMAIL = 1117; public const COMPANY_EMAIL = 1117;
/** /**
* ИНН пользователя * ИНН пользователя
*/ */
const COMPANY_INN = 1008; public const COMPANY_INN = 1008;
/** /**
* Применяемая система налогообложения * Применяемая система налогообложения
*/ */
const COMPANY_SNO = 1055; public const COMPANY_SNO = 1055;
/** /**
* Место расчётов * Место расчётов
*/ */
const COMPANY_PADDRESS = 1187; public const COMPANY_PADDRESS = 1187;
/** /**
* Признак агента по предмету расчёта * Признак агента по предмету расчёта
*/ */
const AGENT_TYPE = 1222; public const AGENT_TYPE = 1222;
/** /**
* Телефон оператора по приёму платежей * Телефон оператора по приёму платежей
*/ */
const RPO_PHONES = 1074; public const RPO_PHONES = 1074;
/** /**
* Телефон оператора перевода * Телефон оператора перевода
*/ */
const MTO_PHONES = 1075; public const MTO_PHONES = 1075;
/** /**
* ИНН оператора перевода * ИНН оператора перевода
*/ */
const MTO_INN = 1016; public const MTO_INN = 1016;
/** /**
* Телефон платёжного агента * Телефон платёжного агента
*/ */
const PAGENT_PHONE = 1073; public const PAGENT_PHONE = 1073;
/** /**
* Телефон поставщика * Телефон поставщика
*/ */
const SUPPLIER_PHONES = 1171; public const SUPPLIER_PHONES = 1171;
/** /**
* Наименование поставщика * Наименование поставщика
*/ */
const SUPPLIER_NAME = 1225; public const SUPPLIER_NAME = 1225;
/** /**
* ИНН поставщика * ИНН поставщика
*/ */
const SUPPLIER_INN = 1226; public const SUPPLIER_INN = 1226;
/** /**
* Кассир * Кассир
*/ */
const CASHIER = 1021; public const CASHIER = 1021;
/** /**
* Наименование предмета расчёта * Наименование предмета расчёта
*/ */
const ITEM_NAME = 1030; public const ITEM_NAME = 1030;
/** /**
* Цена за единицу предмета расчёта с учётом скидок и наценок * Цена за единицу предмета расчёта с учётом скидок и наценок
*/ */
const ITEM_PRICE = 1079; public const ITEM_PRICE = 1079;
/** /**
* Количество предмета расчёта * Количество предмета расчёта
*/ */
const ITEM_QUANTITY = 1023; public const ITEM_QUANTITY = 1023;
/** /**
* Стоимость предмета расчёта с учётом скидок и наценок * Стоимость предмета расчёта с учётом скидок и наценок
*/ */
const ITEM_SUM = 1043; public const ITEM_SUM = 1043;
/** /**
* Единица измерения предмета расчёта * Единица измерения предмета расчёта
*/ */
const ITEM_MEASUREMENT_UNIT = 1197; public const ITEM_MEASUREMENT_UNIT = 1197;
/** /**
* Код товара * Код товара
*/ */
const ITEM_NOMENCLATURE_CODE = 1162; public const ITEM_NOMENCLATURE_CODE = 1162;
/** /**
* Признак способа расчёта * Признак способа расчёта
*/ */
const ITEM_PAYMENT_METHOD = 1214; public const ITEM_PAYMENT_METHOD = 1214;
/** /**
* Признак предмета расчёта * Признак предмета расчёта
*/ */
const ITEM_PAYMENT_OBJECT = 1212; public const ITEM_PAYMENT_OBJECT = 1212;
/** /**
* Дополнительный реквизит предмета расчёта * Дополнительный реквизит предмета расчёта
*/ */
const ITEM_USERDATA = 1191; public const ITEM_USERDATA = 1191;
/** /**
* Сумма акциза с учётом копеек, включённая в стоимость предмета расчёта * Сумма акциза с учётом копеек, включённая в стоимость предмета расчёта
*/ */
const ITEM_EXCISE = 1229; public const ITEM_EXCISE = 1229;
/** /**
* Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира * Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира
@ -150,100 +151,100 @@ final class Ffd105Tags
* @see https://ru.wikipedia.org/wiki/Общероссийский_классификатор_стран_мира * @see https://ru.wikipedia.org/wiki/Общероссийский_классификатор_стран_мира
* @see https://classifikators.ru/oksm * @see https://classifikators.ru/oksm
*/ */
const ITEM_COUNTRY_CODE = 1230; public const ITEM_COUNTRY_CODE = 1230;
/** /**
* Номер таможенной декларации (в соотв. с приказом ФНС России от 24.03.2016 N ММВ-7-15/155) * Номер таможенной декларации (в соотв. с приказом ФНС России от 24.03.2016 N ММВ-7-15/155)
*/ */
const ITEM_DECLARATION_NUMBER = 1231; public const ITEM_DECLARATION_NUMBER = 1231;
/** /**
* Тип коррекции * Тип коррекции
*/ */
const CORRECTION_TYPE = 1173; public const CORRECTION_TYPE = 1173;
/** /**
* Дата документа основания для коррекции * Дата документа основания для коррекции
*/ */
const CORRECTION_DATE = 1178; public const CORRECTION_DATE = 1178;
/** /**
* Сумма по чеку (БСО) наличными * Сумма по чеку (БСО) наличными
*/ */
const PAYMENT_TYPE_CASH = 1031; public const PAYMENT_TYPE_CASH = 1031;
/** /**
* Сумма по чеку безналичными * Сумма по чеку безналичными
*/ */
const PAYMENT_TYPE_ELECTRON = 1081; public const PAYMENT_TYPE_ELECTRON = 1081;
/** /**
* Сумма по чеку предоплатой * Сумма по чеку предоплатой
*/ */
const PAYMENT_TYPE_PREPAID = 1215; public const PAYMENT_TYPE_PREPAID = 1215;
/** /**
* Сумма по чеку постоплатой * Сумма по чеку постоплатой
*/ */
const PAYMENT_TYPE_CREDIT = 1216; public const PAYMENT_TYPE_CREDIT = 1216;
/** /**
* Сумма по чеку встречным представлением * Сумма по чеку встречным представлением
*/ */
const PAYMENT_TYPE_OTHER = 1217; public const PAYMENT_TYPE_OTHER = 1217;
/** /**
* Ставка НДС * Ставка НДС
*/ */
const ITEM_VAT_TYPE = 1199; public const ITEM_VAT_TYPE = 1199;
/** /**
* Сумма расчета по чеку без НДС * Сумма расчета по чеку без НДС
*/ */
const DOC_VAT_TYPE_NONE = 1105; public const DOC_VAT_TYPE_NONE = 1105;
/** /**
* Сумма расчета по чеку с НДС по ставке 0% * Сумма расчета по чеку с НДС по ставке 0%
*/ */
const DOC_VAT_TYPE_VAT0 = 1104; public const DOC_VAT_TYPE_VAT0 = 1104;
/** /**
* Сумма НДС чека по ставке 10% * Сумма НДС чека по ставке 10%
*/ */
const DOC_VAT_TYPE_VAT10 = 1103; public const DOC_VAT_TYPE_VAT10 = 1103;
/** /**
* Сумма НДС чека по ставке 20% * Сумма НДС чека по ставке 20%
*/ */
const DOC_VAT_TYPE_VAT20 = 1102; public const DOC_VAT_TYPE_VAT20 = 1102;
/** /**
* Сумма НДС чека по расч. ставке 10/110 * Сумма НДС чека по расч. ставке 10/110
*/ */
const DOC_VAT_TYPE_VAT110 = 1107; public const DOC_VAT_TYPE_VAT110 = 1107;
/** /**
* Сумма НДС чека по расч. ставке 20/120 * Сумма НДС чека по расч. ставке 20/120
*/ */
const DOC_VAT_TYPE_VAT120 = 1106; public const DOC_VAT_TYPE_VAT120 = 1106;
/** /**
* Значение дополнительного реквизита чека * Значение дополнительного реквизита чека
*/ */
const DOC_ADD_CHECK_PROP_VALUE = 1192; public const DOC_ADD_CHECK_PROP_VALUE = 1192;
/** /**
* Дополнительный реквизит пользователя * Дополнительный реквизит пользователя
*/ */
const DOC_ADD_USER_PROP = 1084; public const DOC_ADD_USER_PROP = 1084;
/** /**
* Наименование дополнительного реквизита пользователя * Наименование дополнительного реквизита пользователя
*/ */
const DOC_ADD_USER_PROP_NAME = 1085; public const DOC_ADD_USER_PROP_NAME = 1085;
/** /**
* Значение дополнительного реквизита пользователя * Значение дополнительного реквизита пользователя
*/ */
const DOC_ADD_USER_PROP_VALUE = 1086; public const DOC_ADD_USER_PROP_VALUE = 1086;
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -7,7 +8,7 @@
* https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE * https://github.com/anthonyaxenov/atol-online/blob/master/LICENSE
*/ */
declare(strict_types = 1); declare(strict_types=1);
namespace AtolOnline; namespace AtolOnline;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
namespace AtolOnline\Traits; namespace AtolOnline\Traits;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\InvalidEmailException; use AtolOnline\Exceptions\InvalidEmailException;
use AtolOnline\Exceptions\TooLongEmailException; use AtolOnline\Exceptions\TooLongEmailException;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
namespace AtolOnline\Traits; namespace AtolOnline\Traits;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\InvalidInnLengthException; use AtolOnline\Exceptions\InvalidInnLengthException;
/** /**
@ -32,7 +33,7 @@ trait HasInn
public function setInn(?string $inn): static public function setInn(?string $inn): static
{ {
if (is_string($inn)) { if (is_string($inn)) {
$inn = preg_replace('/[^\d]/', '', trim($inn)); $inn = preg_replace('/\D/', '', trim($inn));
if (preg_match_all(Constraints::PATTERN_INN, $inn) === 0) { if (preg_match_all(Constraints::PATTERN_INN, $inn) === 0) {
throw new InvalidInnLengthException($inn); throw new InvalidInnLengthException($inn);
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -9,7 +10,7 @@
namespace AtolOnline\Traits; namespace AtolOnline\Traits;
use AtolOnline\Constants\Constraints; use AtolOnline\Constraints;
use AtolOnline\Exceptions\InvalidPhoneException; use AtolOnline\Exceptions\InvalidPhoneException;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@ -30,7 +31,7 @@ trait HasPhones
* @return $this * @return $this
* @throws InvalidPhoneException * @throws InvalidPhoneException
*/ */
public function setPhones(array|Collection|null $phones): static public function setPhones(array | Collection | null $phones): static
{ {
if (!is_null($phones)) { if (!is_null($phones)) {
$phones = is_array($phones) ? collect($phones) : $phones; $phones = is_array($phones) ? collect($phones) : $phones;

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -10,7 +11,7 @@
namespace AtolOnline\Tests\Api; namespace AtolOnline\Tests\Api;
use AtolOnline\{ use AtolOnline\{
Constants\Constraints, Constraints,
Helpers, Helpers,
TestEnvParams, TestEnvParams,
Tests\BasicTestCase}; Tests\BasicTestCase};
@ -79,12 +80,12 @@ class FiscalizerTest extends BasicTestCase
public function testGroup(): void public function testGroup(): void
{ {
// test mode // test mode
$this->assertEquals( $this->assertSame(
TestEnvParams::FFD105()['group'], TestEnvParams::FFD105()['group'],
(new Fiscalizer(group: 'group'))->getGroup() (new Fiscalizer(group: 'group'))->getGroup()
); );
// prod mode // prod mode
$this->assertEquals('group', (new Fiscalizer(false, group: 'group'))->getGroup()); $this->assertSame('group', (new Fiscalizer(false, group: 'group'))->getGroup());
$this->assertNull((new Fiscalizer(false))->getGroup()); $this->assertNull((new Fiscalizer(false))->getGroup());
} }
@ -164,7 +165,6 @@ class FiscalizerTest extends BasicTestCase
* @throws EmptyLoginException * @throws EmptyLoginException
* @throws EmptyPasswordException * @throws EmptyPasswordException
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
* @throws InvalidEnumValueException
* @throws InvalidInnLengthException * @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
* @throws NegativeItemPriceException * @throws NegativeItemPriceException
@ -176,12 +176,13 @@ class FiscalizerTest extends BasicTestCase
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
* @throws TooManyException * @throws TooManyException
* @throws GuzzleException * @throws GuzzleException
* @throws InvalidEnumValueException
*/ */
public function testSell(): void public function testSell(): void
{ {
$fisc_result = $this->newReceipt()->sell(new Fiscalizer()); $fisc_result = $this->newReceipt()->sell(new Fiscalizer());
$this->assertTrue($fisc_result->isSuccessful()); $this->assertTrue($fisc_result->isSuccessful());
$this->assertEquals('wait', $fisc_result->getContent()->status); $this->assertSame('wait', $fisc_result->getContent()->status);
self::$registered_uuids[] = $fisc_result->getContent()->uuid; self::$registered_uuids[] = $fisc_result->getContent()->uuid;
} }
@ -201,7 +202,6 @@ class FiscalizerTest extends BasicTestCase
* @throws EmptyLoginException * @throws EmptyLoginException
* @throws EmptyPasswordException * @throws EmptyPasswordException
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
* @throws InvalidEnumValueException
* @throws InvalidInnLengthException * @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
* @throws NegativeItemPriceException * @throws NegativeItemPriceException
@ -213,12 +213,13 @@ class FiscalizerTest extends BasicTestCase
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
* @throws TooManyException * @throws TooManyException
* @throws GuzzleException * @throws GuzzleException
* @throws InvalidEnumValueException
*/ */
public function testSellRefund(): void public function testSellRefund(): void
{ {
$fisc_result = $this->newReceipt()->sellRefund(new Fiscalizer()); $fisc_result = $this->newReceipt()->sellRefund(new Fiscalizer());
$this->assertTrue($fisc_result->isSuccessful()); $this->assertTrue($fisc_result->isSuccessful());
$this->assertEquals('wait', $fisc_result->getContent()->status); $this->assertSame('wait', $fisc_result->getContent()->status);
self::$registered_uuids[] = $fisc_result->getContent()->uuid; self::$registered_uuids[] = $fisc_result->getContent()->uuid;
} }
@ -237,7 +238,6 @@ class FiscalizerTest extends BasicTestCase
* @throws EmptyPasswordException * @throws EmptyPasswordException
* @throws GuzzleException * @throws GuzzleException
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
* @throws InvalidEnumValueException
* @throws InvalidInnLengthException * @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
* @throws NegativePaymentSumException * @throws NegativePaymentSumException
@ -245,12 +245,13 @@ class FiscalizerTest extends BasicTestCase
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
* @throws EmptyCorrectionNumberException * @throws EmptyCorrectionNumberException
* @throws InvalidCorrectionDateException * @throws InvalidCorrectionDateException
* @throws InvalidEnumValueException
*/ */
public function testSellCorrect(): void public function testSellCorrect(): void
{ {
$fisc_result = $this->newCorrection()->sellCorrect(new Fiscalizer()); $fisc_result = $this->newCorrection()->sellCorrect(new Fiscalizer());
$this->assertTrue($fisc_result->isSuccessful()); $this->assertTrue($fisc_result->isSuccessful());
$this->assertEquals('wait', $fisc_result->getContent()->status); $this->assertSame('wait', $fisc_result->getContent()->status);
//self::$registered_uuids[] = $fisc_result->getContent()->uuid; //self::$registered_uuids[] = $fisc_result->getContent()->uuid;
} }
@ -270,7 +271,6 @@ class FiscalizerTest extends BasicTestCase
* @throws EmptyLoginException * @throws EmptyLoginException
* @throws EmptyPasswordException * @throws EmptyPasswordException
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
* @throws InvalidEnumValueException
* @throws InvalidInnLengthException * @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
* @throws NegativeItemPriceException * @throws NegativeItemPriceException
@ -282,12 +282,13 @@ class FiscalizerTest extends BasicTestCase
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
* @throws TooManyException * @throws TooManyException
* @throws GuzzleException * @throws GuzzleException
* @throws InvalidEnumValueException
*/ */
public function testBuy(): void public function testBuy(): void
{ {
$fisc_result = $this->newReceipt()->buy(new Fiscalizer()); $fisc_result = $this->newReceipt()->buy(new Fiscalizer());
$this->assertTrue($fisc_result->isSuccessful()); $this->assertTrue($fisc_result->isSuccessful());
$this->assertEquals('wait', $fisc_result->getContent()->status); $this->assertSame('wait', $fisc_result->getContent()->status);
//self::$registered_uuids[] = $fisc_result->getContent()->uuid; //self::$registered_uuids[] = $fisc_result->getContent()->uuid;
} }
@ -307,7 +308,6 @@ class FiscalizerTest extends BasicTestCase
* @throws EmptyLoginException * @throws EmptyLoginException
* @throws EmptyPasswordException * @throws EmptyPasswordException
* @throws InvalidEntityInCollectionException * @throws InvalidEntityInCollectionException
* @throws InvalidEnumValueException
* @throws InvalidInnLengthException * @throws InvalidInnLengthException
* @throws InvalidPaymentAddressException * @throws InvalidPaymentAddressException
* @throws NegativeItemPriceException * @throws NegativeItemPriceException
@ -319,12 +319,13 @@ class FiscalizerTest extends BasicTestCase
* @throws TooLongPaymentAddressException * @throws TooLongPaymentAddressException
* @throws TooManyException * @throws TooManyException
* @throws GuzzleException * @throws GuzzleException
* @throws InvalidEnumValueException
*/ */
public function testBuyRefund(): void public function testBuyRefund(): void
{ {
$fisc_result = $this->newReceipt()->buyRefund(new Fiscalizer()); $fisc_result = $this->newReceipt()->buyRefund(new Fiscalizer());
$this->assertTrue($fisc_result->isSuccessful()); $this->assertTrue($fisc_result->isSuccessful());
$this->assertEquals('wait', $fisc_result->getContent()->status); $this->assertSame('wait', $fisc_result->getContent()->status);
//self::$registered_uuids[] = $fisc_result->getContent()->uuid; //self::$registered_uuids[] = $fisc_result->getContent()->uuid;
} }
@ -356,7 +357,7 @@ class FiscalizerTest extends BasicTestCase
{ {
$fisc_result = $this->newCorrection()->buyCorrect(new Fiscalizer()); $fisc_result = $this->newCorrection()->buyCorrect(new Fiscalizer());
$this->assertTrue($fisc_result->isSuccessful()); $this->assertTrue($fisc_result->isSuccessful());
$this->assertEquals('wait', $fisc_result->getContent()->status); $this->assertSame('wait', $fisc_result->getContent()->status);
//self::$registered_uuids[] = $fisc_result->getContent()->uuid; //self::$registered_uuids[] = $fisc_result->getContent()->uuid;
} }
@ -395,6 +396,6 @@ class FiscalizerTest extends BasicTestCase
{ {
$fisc_status = (new Fiscalizer())->pollDocumentStatus(array_shift(self::$registered_uuids)); $fisc_status = (new Fiscalizer())->pollDocumentStatus(array_shift(self::$registered_uuids));
//$this->assertTrue($fisc_status->isSuccessful()); //$this->assertTrue($fisc_status->isSuccessful());
$this->assertEquals('done', $fisc_status->getContent()->status); $this->assertSame('done', $fisc_status->getContent()->status);
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov) * Copyright (c) 2020-2021 Антон Аксенов (Anthony Axenov)
* *
@ -94,13 +95,13 @@ class MonitorTest extends BasicTestCase
public function testLogin(): void public function testLogin(): void
{ {
$client = new Monitor(false, login: 'login'); $client = new Monitor(false, login: 'login');
$this->assertEquals('login', $client->getLogin()); $this->assertSame('login', $client->getLogin());
$client = new Monitor(); $client = new Monitor();
$this->assertEquals(TestEnvParams::FFD105()['login'], $client->getLogin()); $this->assertSame(TestEnvParams::FFD105()['login'], $client->getLogin());
$client->setLogin('login'); $client->setLogin('login');
$this->assertEquals(TestEnvParams::FFD105()['login'], $client->getLogin()); $this->assertSame(TestEnvParams::FFD105()['login'], $client->getLogin());
} }
/** /**
@ -145,13 +146,13 @@ class MonitorTest extends BasicTestCase
public function testPassword(): void public function testPassword(): void
{ {
$client = new Monitor(false, password: 'password'); $client = new Monitor(false, password: 'password');
$this->assertEquals('password', $client->getPassword()); $this->assertSame('password', $client->getPassword());
$client = new Monitor(); $client = new Monitor();
$this->assertEquals(TestEnvParams::FFD105()['password'], $client->getPassword()); $this->assertSame(TestEnvParams::FFD105()['password'], $client->getPassword());
$client->setPassword('password'); $client->setPassword('password');
$this->assertEquals(TestEnvParams::FFD105()['password'], $client->getPassword()); $this->assertSame(TestEnvParams::FFD105()['password'], $client->getPassword());
} }
/** /**
@ -204,9 +205,6 @@ class MonitorTest extends BasicTestCase
$client = (new Monitor())->setTestMode(); $client = (new Monitor())->setTestMode();
$this->assertTrue($client->isTestMode()); $this->assertTrue($client->isTestMode());
$client = (new Monitor())->setTestMode(true);
$this->assertTrue($client->isTestMode());
$client = (new Monitor())->setTestMode(false); $client = (new Monitor())->setTestMode(false);
$this->assertFalse($client->isTestMode()); $this->assertFalse($client->isTestMode());
} }
@ -302,7 +300,6 @@ class MonitorTest extends BasicTestCase
$client = $this->newTestClient(); $client = $this->newTestClient();
$client->auth(); $client->auth();
$kkts = $client->getAll(); $kkts = $client->getAll();
$sss = $kkts->where('deviceNumber', 'KKT014034');
$this->assertNotEmpty($client->getLastResponse()->getContent()); $this->assertNotEmpty($client->getLastResponse()->getContent());
$this->assertIsCollection($kkts); $this->assertIsCollection($kkts);
$this->assertTrue($kkts->count() > 0); $this->assertTrue($kkts->count() > 0);
@ -342,6 +339,6 @@ class MonitorTest extends BasicTestCase
$this->assertIsSameClass(Kkt::class, $kkt); $this->assertIsSameClass(Kkt::class, $kkt);
$this->assertIsAtolable($kkt); $this->assertIsAtolable($kkt);
$this->assertNotNull($kkt->serialNumber); $this->assertNotNull($kkt->serialNumber);
$this->assertEquals($serial_number, $kkt->serialNumber); $this->assertSame($serial_number, $kkt->serialNumber);
} }
} }

Some files were not shown because too many files have changed in this diff Show More