setObjectId($this->factoryObjectId($sourceArray)); } if (!empty($sourceArray['registered_at'])) { $this->setRegisteredAt(new DateTime($sourceArray['registered_at'])); } $this->setSpecificProperties($sourceArray); } /** * {@inheritdoc} */ public function getId(): ?string { return $this->_id; } /** * Устанавливает идентификатор чека. * * @param string $id Идентификатор чека * * @return self */ public function setId(string $id): self { $this->_id = $this->validatePropertyValue('_id', $id); return $this; } /** * {@inheritdoc} */ public function getType(): ?string { return $this->_type; } /** * Устанавливает типа чека. * * @param string $type Тип чека * * @return self */ public function setType(string $type): self { $this->_type = $this->validatePropertyValue('_type', $type); return $this; } /** * Возвращает идентификатор платежа или возврата, для которого был сформирован чек. * * @return string|null */ public function getObjectId(): ?string { return $this->_object_id; } /** * Устанавливает идентификатор платежа или возврата, для которого был сформирован чек. * * @param string|null $object_id * * @return self */ public function setObjectId(?string $object_id): self { $this->_object_id = $this->validatePropertyValue('_object_id', $object_id); return $this; } /** * {@inheritdoc} */ public function getStatus(): ?string { return $this->_status; } /** * Устанавливает состояние регистрации фискального чека. * * @param string|null $status Состояние регистрации фискального чека * * @return self */ public function setStatus(?string $status): self { $this->_status = $this->validatePropertyValue('_status', $status); return $this; } /** * Возвращает номер фискального документа. * * @return string|null Номер фискального документа */ public function getFiscalDocumentNumber(): ?string { return $this->_fiscal_document_number; } /** * Устанавливает номер фискального документа * * @param string|null $fiscal_document_number Номер фискального документа. * * @return self */ public function setFiscalDocumentNumber(?string $fiscal_document_number = null): self { $this->_fiscal_document_number = $this->validatePropertyValue( '_fiscal_document_number', $fiscal_document_number ); return $this; } /** * Возвращает номер фискального накопителя в кассовом аппарате. * * @return string|null Номер фискального накопителя в кассовом аппарате */ public function getFiscalStorageNumber(): ?string { return $this->_fiscal_storage_number; } /** * Устанавливает номер фискального накопителя в кассовом аппарате. * * @param string|null $fiscal_storage_number Номер фискального накопителя в кассовом аппарате. * * @return self */ public function setFiscalStorageNumber(?string $fiscal_storage_number = null): self { $this->_fiscal_storage_number = $this->validatePropertyValue( '_fiscal_storage_number', $fiscal_storage_number ); return $this; } /** * Возвращает фискальный признак чека. * * @return string|null Фискальный признак чека */ public function getFiscalAttribute(): ?string { return $this->_fiscal_attribute; } /** * Устанавливает фискальный признак чека. * * @param string|null $fiscal_attribute Фискальный признак чека. Формируется фискальным накопителем на основе данных, переданных для регистрации чека. * * @return self */ public function setFiscalAttribute(?string $fiscal_attribute = null): self { $this->_fiscal_attribute = $this->validatePropertyValue('_fiscal_attribute', $fiscal_attribute); return $this; } /** * Возвращает дату и время формирования чека в фискальном накопителе. * * @return DateTime|null Дата и время формирования чека в фискальном накопителе */ public function getRegisteredAt(): ?DateTime { return $this->_registered_at; } /** * Устанавливает дату и время формирования чека в фискальном накопителе. * * @param DateTime|string|null $registered_at Дата и время формирования чека в фискальном накопителе. Указывается в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). * * @return self */ public function setRegisteredAt(DateTime|string|null $registered_at = null): self { $this->_registered_at = $this->validatePropertyValue('_registered_at', $registered_at); return $this; } /** * Возвращает идентификатор чека в онлайн-кассе. * * @return string|null Идентификатор чека в онлайн-кассе */ public function getFiscalProviderId(): ?string { return $this->_fiscal_provider_id; } /** * Устанавливает идентификатор чека в онлайн-кассе. * * @param string|null $fiscal_provider_id Идентификатор чека в онлайн-кассе. Присутствует, если чек удалось зарегистрировать. * * @return self */ public function setFiscalProviderId(?string $fiscal_provider_id = null): self { $this->_fiscal_provider_id = $this->validatePropertyValue('_fiscal_provider_id', $fiscal_provider_id); return $this; } /** * {@inheritdoc} * * @return ReceiptResponseItemInterface[]|ListObjectInterface */ public function getItems(): ListObjectInterface { if ($this->_items === null) { $this->_items = new ListObject(ReceiptResponseItem::class); } return $this->_items; } /** * Устанавливает список позиций в чеке. * * @param ReceiptResponseItemInterface[]|null $items Список товаров в заказе * * @return self */ public function setItems(?array $items): self { $this->_items = $this->validatePropertyValue('_items', $items); return $this; } /** * Добавляет товар в чек. * * @param ReceiptResponseItemInterface $value Объект добавляемой в чек позиции */ public function addItem(ReceiptResponseItemInterface $value): void { $this->_items[] = $value; } /** * Возвращает Массив оплат, обеспечивающих выдачу товара. * * @return SettlementInterface[]|ListObjectInterface */ public function getSettlements(): ListObjectInterface { if ($this->_settlements === null) { $this->_settlements = new ListObject(Settlement::class); } return $this->_settlements; } /** * Устанавливает массив оплат, обеспечивающих выдачу товара. * * @param SettlementInterface[]|null $settlements * * @return self */ public function setSettlements(?array $settlements): self { $this->_settlements = $this->validatePropertyValue('_settlements', $settlements); return $this; } /** * Добавляет оплату в массив. */ public function addSettlement(SettlementInterface $value): void { $this->_settlements[] = $value; } /** * {@inheritdoc} */ public function getTaxSystemCode(): ?int { return $this->_tax_system_code; } /** * Устанавливает код системы налогообложения. * * @param int|null $tax_system_code Код системы налогообложения. Число 1-6 * * @return self */ public function setTaxSystemCode(?int $tax_system_code): self { $this->_tax_system_code = $this->validatePropertyValue('_tax_system_code', $tax_system_code); return $this; } /** * Возвращает отраслевой реквизит чека. * * @return IndustryDetails[]|ListObjectInterface Отраслевой реквизит чека */ public function getReceiptIndustryDetails(): ListObjectInterface { if ($this->_receipt_industry_details === null) { $this->_receipt_industry_details = new ListObject(IndustryDetails::class); } return $this->_receipt_industry_details; } /** * Устанавливает отраслевой реквизит чека. * * @param array|IndustryDetails[]|null $receipt_industry_details Отраслевой реквизит чека * * @return self */ public function setReceiptIndustryDetails(?array $receipt_industry_details = null): self { $this->_receipt_industry_details = $this->validatePropertyValue( '_receipt_industry_details', $receipt_industry_details ); return $this; } /** * Возвращает операционный реквизит чека. * * @return OperationalDetails|null Операционный реквизит чека */ public function getReceiptOperationalDetails(): ?OperationalDetails { return $this->_receipt_operational_details; } /** * Устанавливает операционный реквизит чека. * * @param array|OperationalDetails|null $receipt_operational_details Операционный реквизит чека * * @return self */ public function setReceiptOperationalDetails(mixed $receipt_operational_details = null): self { $this->_receipt_operational_details = $this->validatePropertyValue( '_receipt_operational_details', $receipt_operational_details ); return $this; } /** * {@inheritdoc} */ public function getOnBehalfOf(): ?string { return $this->_on_behalf_of; } /** * Возвращает идентификатор магазина, от имени которого нужно отправить чек. * * @param string|null $on_behalf_of Идентификатор магазина, от имени которого нужно отправить чек * * @return self */ public function setOnBehalfOf(?string $on_behalf_of = null): self { $this->_on_behalf_of = $this->validatePropertyValue('_on_behalf_of', $on_behalf_of); return $this; } /** * Проверяет есть ли в чеке хотя бы одна позиция. * * @return bool True если чек не пуст, false если в чеке нет ни одной позиции */ public function notEmpty(): bool { return !$this->getItems()->isEmpty(); } /** * Установка свойств, присущих конкретному объекту. */ abstract public function setSpecificProperties(array $receiptData): void; /** * Фабричный метод создания идентификатора объекта, для которого был сформирован чек. * * @param array $receiptData Массив данных чека */ private function factoryObjectId(array $receiptData): ?string { if (array_key_exists('refund_id', $receiptData)) { return $receiptData['refund_id']; } if (array_key_exists('payment_id', $receiptData)) { return $receiptData['payment_id']; } return null; } }