async def get_receipt_qrcode(receipt_id, *, session): async with get_retry( f"/receipts/{receipt_id}/qrcode", session=session, ) as response: await raise_for_status(response) qrcode = await response.read() return qrcode
async def get_receipt_text(receipt_id, *, session): async with get_retry( f"/receipts/{receipt_id}/text", session=session, **receipt_params, ) as response: await raise_for_status(response) receipt_text = await response.text() return receipt_text
async def service_out(*, session): shift = await current_shift(session=session) if not shift: raise CheckboxShiftError("Зміна закрита") balance = shift["balance"]["balance"] if balance <= 0: return payment = { "type": "CASH", "value": -balance, "label": "Готівка", } async with post( "/receipts/service", session=session, payment=payment, ) as response: try: await raise_for_status(response) except ClientResponseError: raise CheckboxReceiptError("Не вдалось здійснити службову видачу") receipt = await response.json() receipt_id = receipt["id"] log.info("service out: %s", receipt_id) for _ in range(10): async with get_retry( f"/receipts/{receipt_id}", session=session, ) as response: try: receipt = await response.json() except JSONDecodeError: pass else: if receipt["status"] == "DONE": return receipt_id await asyncio.sleep(1) log.error("service out signing error: %s", receipt) raise CheckboxReceiptError("Не вдалось підписати службову видачу")
async def wait_receipt_sign(receipt_id, *, session): for _ in range(10): async with get_retry( f"/receipts/{receipt_id}", session=session, ) as response: try: receipt = await response.json() except JSONDecodeError: pass else: if receipt["status"] == "DONE": return receipt["tax_url"] await asyncio.sleep(1) log.error("receipt signing error: %s", receipt) raise CheckboxReceiptError("Не вдалось підписати чек")