Files
gy9vin a362ef9f25 refactor(nalogo): восстановить описание чеков из настроек и использовать локальную библиотеку
- Добавлено восстановление описания чека из настроек при обработке очереди
- Передача telegram_user_id и amount_kopeks через всю цепочку создания чеков
- Переход на локальную исправленную версию библ
2025-12-28 04:58:05 +03:00

74 lines
2.0 KiB
Python

"""
Receipt API implementation.
Based on PHP library's Api\\Receipt class.
"""
from typing import Any
from ._http import AsyncHTTPClient
class ReceiptAPI:
"""
Receipt API for accessing receipt information.
Provides async methods for:
- Getting receipt print URL
- Getting receipt JSON data
Maps to PHP Api\\Receipt functionality.
"""
def __init__(self, http_client: AsyncHTTPClient, base_endpoint: str, user_inn: str):
self.http = http_client
self.base_endpoint = base_endpoint
self.user_inn = user_inn
def print_url(self, receipt_uuid: str) -> str:
"""
Compose receipt print URL.
Maps to PHP Receipt::printUrl() method.
This method composes the URL without making HTTP request.
Args:
receipt_uuid: Receipt UUID
Returns:
Complete URL for receipt printing
Raises:
ValueError: If receipt_uuid is empty
"""
if not receipt_uuid.strip():
raise ValueError("Receipt UUID cannot be empty")
# Compose URL like PHP: sprintf('/receipt/%s/%s/print', $this->profile->getInn(), $receiptUuid)
path = f"/receipt/{self.user_inn}/{receipt_uuid.strip()}/print"
return f"{self.base_endpoint}{path}"
async def json(self, receipt_uuid: str) -> dict[str, Any]:
"""
Get receipt data in JSON format.
Maps to PHP Receipt::json() method.
Args:
receipt_uuid: Receipt UUID
Returns:
Dictionary with receipt JSON data
Raises:
ValueError: If receipt_uuid is empty
DomainException: For API errors
"""
if not receipt_uuid.strip():
raise ValueError("Receipt UUID cannot be empty")
# Make GET request like PHP: sprintf('/receipt/%s/%s/json', $this->profile->getInn(), $receiptUuid)
path = f"/receipt/{self.user_inn}/{receipt_uuid.strip()}/json"
response = await self.http.get(path)
return response.json() # type: ignore[no-any-return]