2 Commits

4 changed files with 39 additions and 22 deletions

View File

@@ -222,104 +222,115 @@ class Kkt extends Client
* Регистрирует документ прихода * Регистрирует документ прихода
* *
* @param \AtolOnline\Entities\Document $document * @param \AtolOnline\Entities\Document $document
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
* @return \AtolOnline\Api\KktResponse * @return \AtolOnline\Api\KktResponse
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа * @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции * @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function sell(Document $document) public function sell(Document $document, ?string $external_id = null)
{ {
if ($document->getCorrectionInfo()) { if ($document->getCorrectionInfo()) {
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции'); throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
} }
return $this->registerDocument('sell', 'receipt', $document); return $this->registerDocument('sell', 'receipt', $document, $external_id);
} }
/** /**
* Регистрирует документ возврата прихода * Регистрирует документ возврата прихода
* *
* @param \AtolOnline\Entities\Document $document * @param \AtolOnline\Entities\Document $document
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
* @return \AtolOnline\Api\KktResponse * @return \AtolOnline\Api\KktResponse
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма * @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма
* @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС * @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа * @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции * @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
*/ */
public function sellRefund(Document $document) public function sellRefund(Document $document, ?string $external_id = null)
{ {
if ($document->getCorrectionInfo()) { if ($document->getCorrectionInfo()) {
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции'); throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
} }
return $this->registerDocument('sell_refund', 'receipt', $document->clearVats()); return $this->registerDocument('sell_refund', 'receipt', $document->clearVats(), $external_id);
} }
/** /**
* Регистрирует документ коррекции прихода * Регистрирует документ коррекции прихода
* *
* @param \AtolOnline\Entities\Document $document * @param \AtolOnline\Entities\Document $document
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
* @return \AtolOnline\Api\KktResponse * @return \AtolOnline\Api\KktResponse
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа * @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции * @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта * @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function sellCorrection(Document $document) public function sellCorrection(Document $document, ?string $external_id = null)
{ {
if (!$document->getCorrectionInfo()) { if (!$document->getCorrectionInfo()) {
throw new AtolCorrectionInfoException(); throw new AtolCorrectionInfoException();
} }
$document->setClient(null)->setItems([]); $document->setClient(null)->setItems([]);
return $this->registerDocument('sell_correction', 'correction', $document); return $this->registerDocument('sell_correction', 'correction', $document, $external_id);
} }
/** /**
* Регистрирует документ расхода * Регистрирует документ расхода
* *
* @param \AtolOnline\Entities\Document $document * @param \AtolOnline\Entities\Document $document
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
* @return \AtolOnline\Api\KktResponse * @return \AtolOnline\Api\KktResponse
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа * @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции * @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function buy(Document $document) public function buy(Document $document, ?string $external_id = null)
{ {
if ($document->getCorrectionInfo()) { if ($document->getCorrectionInfo()) {
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции'); throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
} }
return $this->registerDocument('buy', 'receipt', $document); return $this->registerDocument('buy', 'receipt', $document, $external_id);
} }
/** /**
* Регистрирует документ возврата расхода * Регистрирует документ возврата расхода
* *
* @param \AtolOnline\Entities\Document $document * @param \AtolOnline\Entities\Document $document
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
* @return \AtolOnline\Api\KktResponse * @return \AtolOnline\Api\KktResponse
* @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма * @throws \AtolOnline\Exceptions\AtolPriceTooHighException Слишком большая сумма
* @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС * @throws \AtolOnline\Exceptions\AtolTooManyVatsException Слишком много ставок НДС
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа * @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции * @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе есть данные коррекции
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function buyRefund(Document $document) public function buyRefund(Document $document, ?string $external_id = null)
{ {
if ($document->getCorrectionInfo()) { if ($document->getCorrectionInfo()) {
throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции'); throw new AtolCorrectionInfoException('Некорректная операция над документом коррекции');
} }
return $this->registerDocument('buy_refund', 'receipt', $document->clearVats()); return $this->registerDocument('buy_refund', 'receipt', $document->clearVats(), $external_id);
} }
/** /**
* Регистрирует документ коррекции расхода * Регистрирует документ коррекции расхода
* *
* @param Document $document * @param Document $document
* @param string|null $external_id Уникальный код документа (если не указан, то будет создан UUID)
* @return \AtolOnline\Api\KktResponse * @return \AtolOnline\Api\KktResponse
* @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа * @throws \AtolOnline\Exceptions\AtolWrongDocumentTypeException Некорректный тип документа
* @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции * @throws \AtolOnline\Exceptions\AtolCorrectionInfoException В документе отсутствуют данные коррекции
* @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта * @throws \AtolOnline\Exceptions\AtolTooManyItemsException Слишком много предметов расчёта
* @throws \GuzzleHttp\Exception\GuzzleException
*/ */
public function buyCorrection(Document $document) public function buyCorrection(Document $document, ?string $external_id = null)
{ {
if (!$document->getCorrectionInfo()) { if (!$document->getCorrectionInfo()) {
throw new AtolCorrectionInfoException(); throw new AtolCorrectionInfoException();
} }
$document->setClient(null)->setItems([]); $document->setClient(null)->setItems([]);
return $this->registerDocument('buy_correction', 'correction', $document); return $this->registerDocument('buy_correction', 'correction', $document, $external_id);
} }
/** /**

View File

@@ -106,7 +106,7 @@ class ItemArray extends Entity
protected function validateCount(?array $items = null): bool protected function validateCount(?array $items = null): bool
{ {
if ((!empty($items) && count($items) >= self::MAX_COUNT) || count($this->items) >= self::MAX_COUNT) { if ((!empty($items) && count($items) >= self::MAX_COUNT) || count($this->items) >= self::MAX_COUNT) {
throw new AtolTooManyItemsException(self::MAX_COUNT); throw new AtolTooManyItemsException(count($items), self::MAX_COUNT);
} }
return true; return true;
} }

View File

@@ -9,7 +9,6 @@
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Api\SellSchema;
use AtolOnline\Exceptions\AtolTooManyPaymentsException; use AtolOnline\Exceptions\AtolTooManyPaymentsException;
/** /**
@@ -19,6 +18,11 @@ use AtolOnline\Exceptions\AtolTooManyPaymentsException;
*/ */
class PaymentArray extends Entity class PaymentArray extends Entity
{ {
/**
* Максимальное количество элементов массива
*/
public const MAX_COUNT = 10;
/** /**
* @var Payment[] Массив оплат * @var Payment[] Массив оплат
*/ */
@@ -99,9 +103,8 @@ class PaymentArray extends Entity
*/ */
protected function validateCount(?array $payments = null): bool protected function validateCount(?array $payments = null): bool
{ {
$max_items = SellSchema::get()->properties->receipt->properties->payments->maxItems; if ((!empty($payments) && count($payments) >= self::MAX_COUNT) || count($this->payments) >= self::MAX_COUNT) {
if ((!empty($payments) && count($payments) >= $max_items) || count($this->payments) >= $max_items) { throw new AtolTooManyPaymentsException(count($payments), self::MAX_COUNT);
throw new AtolTooManyPaymentsException($max_items);
} }
return true; return true;
} }

View File

@@ -9,7 +9,6 @@
namespace AtolOnline\Entities; namespace AtolOnline\Entities;
use AtolOnline\Api\SellSchema;
use AtolOnline\Exceptions\AtolTooManyVatsException; use AtolOnline\Exceptions\AtolTooManyVatsException;
/** /**
@@ -19,6 +18,11 @@ use AtolOnline\Exceptions\AtolTooManyVatsException;
*/ */
class VatArray extends Entity class VatArray extends Entity
{ {
/**
* Максимальное количество элементов массива
*/
public const MAX_COUNT = 6;
/** /**
* @var Vat[] Массив ставок НДС * @var Vat[] Массив ставок НДС
*/ */
@@ -103,9 +107,8 @@ class VatArray extends Entity
*/ */
protected function validateCount(?array $vats = null): bool protected function validateCount(?array $vats = null): bool
{ {
$max_items = SellSchema::get()->properties->receipt->properties->vats->maxItems; if ((!empty($vats) && count($vats) >= self::MAX_COUNT) || count($this->vats) >= self::MAX_COUNT) {
if ((!empty($vats) && count($vats) >= $max_items) || count($this->vats) >= $max_items) { throw new AtolTooManyVatsException(count($vats), self::MAX_COUNT);
throw new AtolTooManyVatsException(count($vats), $max_items);
} }
return true; return true;
} }