예제 #1
0
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
예제 #2
0
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
예제 #3
0
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("Не вдалось підписати службову видачу")
예제 #4
0
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("Не вдалось підписати чек")