Чтобы открыть чек продажи в смарт-терминале:
Составьте список позиций, который требуется добавить в чек, и наполните его:
public void openReceipt() {
        List<PositionAdd> positionAddList = new ArrayList<>();
        JSONObject extra = new JSONObject();
      }
Где:
List<PositionAdd> positionAddList = new ArrayList<>()– список позиций. Как добавить позицию в чек смотрите в разделе Добавление, изменение и удаление позиций.
JSONObject extra = new JSONObject();– добавляет дополнительные данные к чеку. Данные доступны только вашему приложению. Не создавайте этот объект, если приложение не добавляет дополнительные поля к чеку.
Создайте команду открытия чека и вызовите метод .process
new OpenSellReceiptCommand(positionAddList, null).process(
                        activity,
                        new IntegrationManagerCallback() {
                            @Override
                            public void run(IntegrationManagerFuture integrationManagerFuture) {
                                try {
                                    IntegrationManagerFuture.Result result = integrationManagerFuture.getResult();
                                    if (result.getType() == IntegrationManagerFuture.Result.Type.OK) {
                                        //Чтобы открыть другие чеки используйте методы NavigationApi.
                                        startActivity(NavigationApi.createIntentForSellReceiptPayment());
                                    }
                                } catch (IOException e) {
                                    e.printStackTrace();
                                } catch (IntegrationException e) {
                                    e.printStackTrace();
                                }
                            }
                        });
Где вместо null вы можете передать new SetExtra(extra), команду для создания дополнительных полей в чеке.
Чтобы открыть чек другого типа используйте соответствующую команду. Возможные команды:
OpenSellReceiptCommand – команда открытия чека продажи.OpenPaybackReceiptCommand – команда открытия чека возврата проданного товара.OpenBuyReceiptCommand – команда открытия чека покупки.OpenBuybackReceiptCommand – команда открытия чека возврата купленного товара.SELL на PAYBACK, если хотите открыть чек возврата.Класс OpenPaybackReceiptCommand позволяет сформировать возврат из стороннего приложения на основании чека. Пример использования:
val cursor = ReceiptApi.getReceiptHeaders(appContext, Receipt.Type.SELL) // получить список headers предыдущих продаж
val receiptUuid = cursor?.toList()?.last()?.uuid // получить uuid последней продажи
val receipt = ReceiptApi.getReceipt(requireContext(), receiptUuid) // получить чек продажи
val positions = receipt.getPositions() // из чека продажи нужно получить список позиций и выбрать те, которые нужно вернуть
OpenPaybackReceiptCommand(positions, null, null, r.header.uuid) // открыть чек возврата
                  .process(requireActivity()) { future ->
                      when (future.result.type) {
                          Type.OK -> {}
                          Type.ERROR -> {}
                      }
                  }
С версии EvotorPOS 8.11.0 изменяется логика работы команд для открытия чека. Если есть непустой чек и он отличается от создаваемого текущей командой, то будет возвращена соответствующая ошибка.
Список команд для которых это работает:
Перечисленные команды будут возвращать соответствующие новые ошибки:
ERROR_CODE_SELL_RECEIPT_IS_ALREADY_OPENERROR_CODE_PAYBACK_RECEIPT_IS_ALREADY_OPENERROR_CODE_BUY_RECEIPT_IS_ALREADY_OPENERROR_CODE_BUYBACK_RECEIPT_IS_ALREADY_OPENERROR_CODE_CORRECTION_INCOME_RECEIPT_IS_ALREADY_OPENERROR_CODE_CORRECTION_OUTCOME_RECEIPT_IS_ALREADY_OPENERROR_CODE_CORRECTION_RETURN_INCOME_RECEIPT_IS_ALREADY_OPENERROR_CODE_CORRECTION_RETURN_OUTCOME_RECEIPT_IS_ALREADY_OPENЧтобы эти ошибки начали приходить, приложение должно быть собрано с использованием integration-library 0.6.03 или новее, а версия EvotorPOS должна быть 8.11.0 или новее.
Пример обработки ошибок для команды создания чека продажи — OpenSellReceiptCommand:
OpenSellReceiptCommand(
    positions,
    null,
    null
).process(
    activity
) { future ->
    when (future.result.type) {
        IntegrationManagerFuture.Result.Type.OK -> {
            activity.startActivity(NavigationApi.createIntentForSellReceiptEdit())
        }
        IntegrationManagerFuture.Result.Type.ERROR -> {
            when (future.result.error.code) {
                OpenReceiptCommandResult.ERROR_CODE_SELL_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_PAYBACK_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_BUY_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_BUYBACK_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_CORRECTION_INCOME_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_CORRECTION_OUTCOME_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_CORRECTION_RETURN_INCOME_RECEIPT_IS_ALREADY_OPEN,
                OpenReceiptCommandResult.ERROR_CODE_CORRECTION_RETURN_OUTCOME_RECEIPT_IS_ALREADY_OPEN -> {
                    activity.startActivity(NavigationApi.createIntentForSellReceiptEdit())
                }
                else -> {
                    AlertDialogFragment.newInstance().setMessage("Операция не выполнена ${future.result.error.message}")
                        .addDismissButton("Ok").show(
                            parentFragmentManager
                        )
                }
            }
        }
    }
}
Пример открытия чека продажи или возврата в демонстрационном приложении.