_object_id; } /** * Устанавливает Id объекта чека. * * @param string|null $value Id объекта чека * @return CreatePostReceiptRequest */ public function setObjectId(?string $value): CreatePostReceiptRequest { $this->_object_id = $value; return $this; } /** * Возвращает тип объекта чека. * * @return string|null Тип объекта чека */ public function getObjectType(): ?string { return $this->_object_type; } /** * Устанавливает тип объекта чека. * * @param string|null $value Тип объекта чека * @return CreatePostReceiptRequest */ public function setObjectType(?string $value): CreatePostReceiptRequest { $this->_object_type = $value; return $this; } /** * Проверяет наличие данных о плательщике. */ public function hasCustomer(): bool { return !empty($this->_customer); } /** * Возвращает информацию о плательщике. * * @return ReceiptCustomerInterface|null Информация о плательщике */ public function getCustomer(): ?ReceiptCustomerInterface { return $this->_customer; } /** * Устанавливает информацию о плательщике. * * @param array|ReceiptCustomerInterface $customer Информация о плательщике * * @return self */ public function setCustomer(mixed $customer = null): self { $this->_customer = $this->validatePropertyValue('_customer', $customer); return $this; } /** * Возвращает список позиций в текущем чеке. * * @return ReceiptItemInterface[]|ListObjectInterface Список товаров в заказе */ public function getItems(): ListObjectInterface { if ($this->_items === null) { $this->_items = new ListObject(ReceiptItem::class); } return $this->_items; } /** * Устанавливает список позиций в чеке. * * Если до этого в чеке уже были установлены значения, они удаляются и полностью заменяются переданным списком * позиций. Все передаваемые значения в массиве позиций должны быть объектами класса, реализующего интерфейс * ReceiptItemInterface, в противном случае будет выброшено исключение InvalidPropertyValueTypeException. * * @param array|ListObjectInterface $items Список товаров в заказе: для [Чеков от ЮKassa](https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics) — не более 80 товаров, для [сторонних онлайн-касс](https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics) — не более 100 товаров. * * @return self */ public function setItems(mixed $items = null): self { $this->_items = $this->validatePropertyValue('_items', $items); return $this; } /** * Возвращает код системы налогообложения. * * @return int|null Код системы налогообложения. Число 1-6. */ 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 = null): self { $this->_tax_system_code = $this->validatePropertyValue('_tax_system_code', $tax_system_code); return $this; } /** * Возвращает дополнительный реквизит пользователя. * * @return AdditionalUserProps|null Дополнительный реквизит пользователя */ public function getAdditionalUserProps(): ?AdditionalUserProps { return $this->_additional_user_props; } /** * Устанавливает дополнительный реквизит пользователя. * * @param null|AdditionalUserProps|array $additional_user_props Дополнительный реквизит пользователя * * @return self */ public function setAdditionalUserProps(mixed $additional_user_props = null): self { $this->_additional_user_props = $this->validatePropertyValue( '_additional_user_props', $additional_user_props ); 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 null|array|ListObjectInterface $receipt_industry_details Отраслевой реквизит чека * * @return self */ public function setReceiptIndustryDetails(mixed $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; } /** * Возвращает тип чека в онлайн-кассе. * * @return string|null Тип чека в онлайн-кассе: приход "payment" или возврат "refund" */ public function getType(): ?string { return $this->_type; } /** * Устанавливает тип чека в онлайн-кассе. * * @param string|null $type тип чека в онлайн-кассе: приход "payment" или возврат "refund" * * @return self */ public function setType(?string $type = null): self { $this->_type = $this->validatePropertyValue('_type', $type); if (!$this->_object_type) { $this->_object_type = $this->_type; } return $this; } /** * Возвращает признак отложенной отправки чека. * * @return bool Признак отложенной отправки чека */ public function getSend(): bool { return $this->_send; } /** * Устанавливает признак отложенной отправки чека. * * @param bool $send Признак отложенной отправки чека * * @return self */ public function setSend(?bool $send = null): self { $this->_send = $this->validatePropertyValue('_send', $send); return $this; } /** * Возвращает массив оплат, обеспечивающих выдачу товара. * * @return SettlementInterface[]|ListObjectInterface Массив оплат, обеспечивающих выдачу товара */ public function getSettlements(): ListObjectInterface { if ($this->_settlements === null) { $this->_settlements = new ListObject(Settlement::class); } return $this->_settlements; } /** * Устанавливает массив оплат, обеспечивающих выдачу товара. * * @param array|ListObjectInterface|null $settlements Массив оплат, обеспечивающих выдачу товара * * @return self */ public function setSettlements(mixed $settlements = null): self { $this->_settlements = $this->validatePropertyValue('_settlements', $settlements); return $this; } /** * Возвращает идентификатор магазина, от имени которого нужно отправить чек. * Выдается ЮKassa, отображается в разделе Продавцы личного кабинета (столбец shopId). * Необходимо передавать, если вы используете решение ЮKassa для платформ. * * @return string|null */ public function getOnBehalfOf(): ?string { return $this->_on_behalf_of; } /** * Устанавливает идентификатор магазина, от имени которого нужно отправить чек. * Выдается ЮKassa, отображается в разделе Продавцы личного кабинета (столбец shopId). * Необходимо передавать, если вы используете решение ЮKassa для платформ. * * @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|null Признак проведения платежа в интернете */ public function getInternet(): ?bool { return $this->_internet; } /** * Устанавливает признак проведения платежа в интернете. * * @param bool|null $internet Признак проведения платежа в интернете (тег в 54 ФЗ — 1125) — указывает на оплату через интернет. * * @return self */ public function setInternet(?bool $internet = null): self { $this->_internet = $this->validatePropertyValue('_internet', $internet); return $this; } /** * Возвращает номер часовой зоны. * * @return int|null Номер часовой зоны */ public function getTimezone(): ?int { return $this->_timezone; } /** * Устанавливает номер часовой зоны. * * @param int|null $timezone Номер часовой зоны для адреса, по которому вы принимаете платежи (тег в 54 ФЗ — 1011). * * @return self */ public function setTimezone(?int $timezone = null): self { $this->_timezone = $this->validatePropertyValue('_timezone', $timezone); return $this; } /** * Проверяет есть ли в чеке хотя бы одна позиция товаров и оплат * * @return bool True если чек не пуст, false если в чеке нет ни одной позиции */ public function notEmpty(): bool { return !$this->getItems()->isEmpty() && !$this->getSettlements()->isEmpty(); } /** * Валидирует текущий запрос, проверяет все ли нужные свойства установлены. * * @return bool True если запрос валиден, false если нет */ public function validate(): bool { if (empty($this->_customer)) { $this->setValidationError('Receipt customer not specified'); return false; } if (empty($this->_type) || !ReceiptType::valueExists($this->_type)) { $this->setValidationError('Receipt type not specified'); return false; } if (empty($this->_object_type)) { $this->setValidationError('Receipt object_type not specified'); return false; } if (empty($this->_object_id)) { $this->setValidationError('Receipt object_id not specified'); return false; } if (empty($this->_send)) { // todo: пока может быть только true $this->setValidationError('Receipt send not specified'); return false; } if ($this->getSettlements()->isEmpty()) { $this->setValidationError('Receipt settlements not specified'); return false; } if ($this->getItems()->isEmpty()) { $this->setValidationError('Receipt items not specified'); return false; } return true; } }