Skip to content

10. Печать чека (без UI)

Ansar8 edited this page Mar 17, 2023 · 2 revisions

Перед печатью чека необходимо запросить разрешение на печать "ru.modulkassa.pos.permission.PRINT_CHECK" у пользователя и подключиться к сервису МодульКассы.

Теперь можно отправлять чек на печать:

val baseCheck = Check(
        id = UUID.randomUUID().toString(),
        docType = DocumentType.SALE,
        employee = "Иванов Иван Иванович",
        printReceipt = true,
        email = "some@email.ru",
        inventPositions = listOf(
            InventPosition(
                name = "Материнская плата AS—Rock H32M R3.0, Socket1150, iH81, 2DDR3, PCI-Ex16, 2SATA2, 2SATA3",
                price = BigDecimal("200"),
                barcode = "2880000023757",
                vatTag = 1103,
                quantity = BigDecimal.ONE,
                measure = "pcs",
                inventCode = "2880000023757"
            ),
            InventPosition(
                name = "Жесткий диск",
                price = BigDecimal("100"),
                barcode = "2880000023757",
                vatTag = 1103,
                quantity = BigDecimal.ONE,
                measure = "pcs",
                inventCode = "2880000023757"
            )

        ),
        moneyPositions = listOf(MoneyPosition(
            paymentType = CARD,
            sum = BigDecimal("300")
        )),
        taxMode = COMMON
    )
    
    printCheck.setOnClickListener {
            modulkassa?.let {
                PrintCheckAction(baseCheck)
                  .execute(it, object : ActionCallback<FiscalInfo> {
                    override fun succeed(result: FiscalInfo?) {
                        runOnUiThread {
                            Toast.makeText(this@MainActivity, "Printed - $result",
                                Toast.LENGTH_LONG).show()
                        }
                    }

                    override fun failed(message: String, extra: Map<String, Any>?) {
                        runOnUiThread {
                            Toast.makeText(this@MainActivity, "$message", Toast.LENGTH_LONG).show()
                        }
                    }
                })
            }
        }

В чеке можно указать не более двух MoneyPosition, причем оплата с типом PaymentType.CARD может быть только одна. В таком случае сумма денежных позиций должна совпадать с суммой товаров по позициям, иначе при регистрации чека вернется ошибка.

Внимание! Используя данный вариант печати чека, необходимо дополнительно позаботиться об обработке возникающих ошибок, визуализации процесса регистрации чека и отображении логики разрешения коллизий (повторить/отменить оплату и т.д.). Кроме того, при указании типа оплаты безналичными обращение к внешнему эквайрингу не предусмотрено - заложена только регистрация чека в ККТ, без принятия платежных транзакций.