Такой способ добавления позиции в чек нужно использовать для приложений, которые вызываются на экране выбора товара.
Для начала нужно получить тип операции чека, из которого был вызван экран выбора товара. Для этого воспользуйтесь методом getIntent из базового класса Activity
:
val operationTypeOrdinal:Int = intent.getIntExtra("inOperationType", 0)
Чтобы использовать полученный тип операции для изменения поведения вашего приложения, воспользуйтесь таблицей:
Тип операции | Описание |
---|---|
6 | Продажа |
7 | Возврат по чеку |
11 | Возврат без чека |
20 | Покупка товара |
21 | Возврат покупки по чеку |
22 | Возврат покупки без чека |
24 | Чек коррекции прихода |
25 | Чек коррекции расхода |
26 | Чек коррекции возврата прихода |
27 | Чек коррекции возврата расхода |
Полученное значение необходимо передать в созданный вами intent
, в extra
которого будет добавлен operationType
и класс позиции из интеграционной библиотеки ru.evotor.framework.receipt.Position
.
productUuid
позиции должен принять значение существующего в базе товара или null
, если передать пустую строку (“”) или uuid
товара, которого нет в базе смарт-терминала, то позиция не будет добавлена. Чтобы найти существующий товар в базе — воспользуйтесь InventoryApi и ProductQuery./**
* Создание Intent'а для передачи позиции в EvotorPOS
*/
private fun getIntent(position: Position): Intent {
val intent = Intent()
intent.putExtra("EXTRA_POSITION", position)
intent.putExtra("EXTRA_OPERATION_TYPE", operationTypeOrdinal)
return intent
}
Созданный intent
необходимо передать c помощью метода setResult из базового класса Activity
, после чего закрыть вашу Activity
:
val intent = this.getIntent(position)
setResult(Activity.RESULT_OK, intent)
finish()
Когда ваша Activity
будет закрыта, интерфейс EvotorPOS будет возвращён на окно чека, в котором отобразится добавленная позиция.
Описание Activity
в манифесте приложения:
<!-- Задаёт Activity, которая будет вызвана при нажатии на иконку, картинку для иконки и текст, отображаемый поверх иконки -->
<activity
android:name=".CreatePositionActivity"
android:icon="@mipmap/ic_launcher"
android:label="Быстрые товары"
android:windowSoftInputMode="adjustUnspecified"
android:exported="true"
>
<!-- Задаёт фон, на котором отображается иконка приложения. -->
<meta-data
android:name="ru.evotor.createPosition.background"
android:value="#133788" />
<intent-filter>
<!-- Указывает, что иконка приложения будет отображаться в списке товаров, который открывается при добавлении позиции в чек. -->
<action android:name="ru.evotor.createPosition" />
<category android:name="android.intent.category.EVOTOR" />
</intent-filter>
</activity>
Код Activity
:
private const val SELL_OPERATION_TYPE_ORDINAL = 6
private const val PAYBACK_OPERATION_TYPE_ORDINAL = 7
private const val PAYBACK_BY_SUM_OPERATION_TYPE_ORDINAL = 11
private const val BUY_OPERATION_TYPE_ORDINAL = 20
private const val BUYBACK_OPERATION_TYPE_ORDINAL = 21
private const val BUYBACK_BY_SUM_OPERATION_TYPE_ORDINAL = 22
private const val CORRECTION_INCOME_OPERATION_TYPE_ORDINAL = 24
private const val CORRECTION_OUTCOME_OPERATION_TYPE_ORDINAL = 25
private const val CORRECTION_RETURN_INCOME_OPERATION_TYPE_ORDINAL = 26
private const val CORRECTION_RETURN_OUTCOME_OPERATION_TYPE_ORDINAL = 27
const val EXTRA_INCOME_OPERATION_TYPE = "inOperationType"
const val EXTRA_OUTCOME_POSITION = "EXTRA_POSITION"
const val EXTRA_OUTCOME_OPERATION_TYPE = "EXTRA_OPERATION_TYPE"
class CreatePositionActivity: ComponentActivity() {
private val operationTypeOrdinal: Int by lazy {
intent.getIntExtra(EXTRA_INCOME_OPERATION_TYPE, 0)
}
private val isSellReceipt
get() = operationTypeOrdinal == SELL_OPERATION_TYPE_ORDINAL
private val isPaybackReceipt
get() = operationTypeOrdinal == PAYBACK_OPERATION_TYPE_ORDINAL || operationTypeOrdinal == PAYBACK_BY_SUM_OPERATION_TYPE_ORDINAL
private val isPaybackBySumReceipt
get() = operationTypeOrdinal == PAYBACK_BY_SUM_OPERATION_TYPE_ORDINAL
private val isBuyReceipt
get() = operationTypeOrdinal == BUY_OPERATION_TYPE_ORDINAL
private val isBuybackReceipt
get() = operationTypeOrdinal == BUYBACK_OPERATION_TYPE_ORDINAL || operationTypeOrdinal == BUYBACK_BY_SUM_OPERATION_TYPE_ORDINAL
private val isBuybackBySumReceipt
get() = operationTypeOrdinal == BUYBACK_BY_SUM_OPERATION_TYPE_ORDINAL
private val isCorrectionReceipt
get() = operationTypeOrdinal == CORRECTION_INCOME_OPERATION_TYPE_ORDINAL ||
operationTypeOrdinal == CORRECTION_OUTCOME_OPERATION_TYPE_ORDINAL ||
operationTypeOrdinal == CORRECTION_RETURN_INCOME_OPERATION_TYPE_ORDINAL ||
operationTypeOrdinal == CORRECTION_RETURN_OUTCOME_OPERATION_TYPE_ORDINAL
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
KKtApiTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Column {
Button(onClick = { addShoppingBag() }) {
Text("Добавить пакет")
}
}
}
}
}
}
/**
* Создание Intent'а для передачи позиции в EvotorPOS
*/
private fun getIntent(position: Position): Intent {
val intent = Intent()
intent.putExtra(EXTRA_OUTCOME_POSITION, position)
intent.putExtra(EXTRA_OUTCOME_OPERATION_TYPE, operationTypeOrdinal)
return intent
}
private fun addShoppingBag() {
val position = Position.Builder.newInstance(
UUID.randomUUID().toString(),
null,//Обязательно null или существующий в базе товаров productUuid, с значением "" позиция не добавится
"Пакет",
Measure("шт", 0, 0),
BigDecimal(5),
BigDecimal.ONE
).setTaxNumber(TaxNumber.NO_VAT)
.setSettlementMethod(SettlementMethod.FullSettlement())
.build()
val intent = this.getIntent(position)
setResult(Activity.RESULT_OK, intent)
finish()
}
}