Чтобы открыть чек продажи в смарт-терминале:
Составьте список позиций, который требуется добавить в чек, и наполните его:
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_OPEN
ERROR_CODE_PAYBACK_RECEIPT_IS_ALREADY_OPEN
ERROR_CODE_BUY_RECEIPT_IS_ALREADY_OPEN
ERROR_CODE_BUYBACK_RECEIPT_IS_ALREADY_OPEN
ERROR_CODE_CORRECTION_INCOME_RECEIPT_IS_ALREADY_OPEN
ERROR_CODE_CORRECTION_OUTCOME_RECEIPT_IS_ALREADY_OPEN
ERROR_CODE_CORRECTION_RETURN_INCOME_RECEIPT_IS_ALREADY_OPEN
ERROR_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
)
}
}
}
}
}
Пример открытия чека продажи или возврата в демонстрационном приложении.