diff --git a/build.gradle b/build.gradle index ad5d25a90..ea285483e 100644 --- a/build.gradle +++ b/build.gradle @@ -123,7 +123,7 @@ publishing { mavenKotlin(MavenPublication) { groupId 'com.github.evotor' artifactId "integration-library" - version "STDEV-13213" + version "STDEV-20296" artifact(sourceJar) artifact(javadocJar) artifact "${project.buildDir}/outputs/aar/${project.archivesBaseName}-release.aar" diff --git a/src/main/java/ru/evotor/framework/core/action/datamapper/ReceiptHeaderMapper.java b/src/main/java/ru/evotor/framework/core/action/datamapper/ReceiptHeaderMapper.java index 23798f866..fd356f706 100644 --- a/src/main/java/ru/evotor/framework/core/action/datamapper/ReceiptHeaderMapper.java +++ b/src/main/java/ru/evotor/framework/core/action/datamapper/ReceiptHeaderMapper.java @@ -6,6 +6,7 @@ import androidx.annotation.Nullable; import ru.evotor.framework.Utils; +import ru.evotor.framework.receipt.AppliedLoyaltyData; import ru.evotor.framework.receipt.Receipt; @@ -23,6 +24,9 @@ public final class ReceiptHeaderMapper { private static final String KEY_RECEIPT_FROM_INTERNET = "receiptFromInternet"; private static final String KEY_PAYMENT_ADDRESS = "paymentAddress"; private static final String KEY_PAYMENT_PLACE = "paymentPlace"; + private static final String KEY_PAYMENT_SESSION_ID = "paymentSessionId"; + private static final String KEY_LOYALTY_APP_DATA = "loyaltyAppData"; + @Nullable public static Receipt.Header from(@Nullable Bundle bundle) { @@ -49,6 +53,14 @@ public static Receipt.Header from(@Nullable Bundle bundle) { boolean receiptFromInternet = bundle.getBoolean(KEY_RECEIPT_FROM_INTERNET, false); + String paymentSessionId = null; + if (bundle.containsKey(KEY_PAYMENT_SESSION_ID)){ + paymentSessionId = bundle.getString(KEY_PAYMENT_SESSION_ID); + } + AppliedLoyaltyData loyaltyAppData = null; + if (bundle.containsKey(KEY_LOYALTY_APP_DATA)){ + loyaltyAppData = AppliedLoyaltyData.from(bundle.getBundle(KEY_LOYALTY_APP_DATA)); + } return new Receipt.Header( receiptUuid, baseReceiptUuid, @@ -61,7 +73,9 @@ public static Receipt.Header from(@Nullable Bundle bundle) { sessionNumber, receiptFromInternet, bundle.getString(KEY_PAYMENT_ADDRESS), - bundle.getString(KEY_PAYMENT_PLACE) + bundle.getString(KEY_PAYMENT_PLACE), + paymentSessionId, + loyaltyAppData ); } @@ -94,6 +108,10 @@ public static Bundle toBundle(@Nullable Receipt.Header header) { bundle.putString(KEY_PAYMENT_ADDRESS, header.getPaymentAddress()); bundle.putString(KEY_PAYMENT_PLACE, header.getPaymentPlace()); + if (header.getPaymentSessionId() != null) + bundle.putString(KEY_PAYMENT_SESSION_ID, header.getPaymentSessionId()); + if (header.getLoyaltyAppData() != null) + bundle.putBundle(KEY_LOYALTY_APP_DATA, header.getLoyaltyAppData().toBundle()); return bundle; } diff --git a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEvent.java b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEvent.java index 568da259f..61bf68f7d 100644 --- a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEvent.java +++ b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEvent.java @@ -91,6 +91,8 @@ public class ReceiptDiscountEvent implements IBundlable { private static final String KEY_RECEIPT_UUID = "receiptUuid"; private static final String KEY_DISCOUNT = "discount"; + private static final String KEY_LOYALTY_CARD_ID = "loyaltyCardId"; + @Nullable public static ReceiptDiscountEvent create(@Nullable Bundle bundle) { @@ -102,13 +104,17 @@ public static ReceiptDiscountEvent create(@Nullable Bundle bundle) { if (discount == null) { return null; } - return new ReceiptDiscountEvent(receiptUuid, discount); + String loyaltyCardId = bundle.getString(KEY_LOYALTY_CARD_ID, null); + + return new ReceiptDiscountEvent(receiptUuid, discount, loyaltyCardId); } @NonNull private final String receiptUuid; @NonNull private final BigDecimal discount; + @Nullable + private String loyaltyCardId = null; public ReceiptDiscountEvent( @NonNull String receiptUuid, @@ -117,12 +123,22 @@ public ReceiptDiscountEvent( this.receiptUuid = receiptUuid; this.discount = discount; } + public ReceiptDiscountEvent( + @NonNull String receiptUuid, + @NonNull BigDecimal discount, + @Nullable String loyaltyCardId + ) { + this.receiptUuid = receiptUuid; + this.discount = discount; + this.loyaltyCardId = loyaltyCardId; + } @NonNull public Bundle toBundle() { Bundle result = new Bundle(); result.putString(KEY_RECEIPT_UUID, receiptUuid); result.putString(KEY_DISCOUNT, discount.toPlainString()); + result.putString(KEY_LOYALTY_CARD_ID, loyaltyCardId); return result; } @@ -135,4 +151,9 @@ public String getReceiptUuid() { public BigDecimal getDiscount() { return discount; } + + @Nullable + public String getLoyaltyCardId(){ + return loyaltyCardId; + } } diff --git a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEventResult.java b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEventResult.java index adebb2d29..3d4a74f85 100644 --- a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEventResult.java +++ b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount/ReceiptDiscountEventResult.java @@ -20,6 +20,7 @@ import ru.evotor.framework.core.action.event.receipt.changes.position.IPositionChange; import ru.evotor.framework.core.action.event.receipt.changes.receipt.SetExtra; import ru.evotor.framework.core.action.event.receipt.changes.receipt.SetPurchaserContactData; +import ru.evotor.framework.receipt.AppliedLoyaltyData; public class ReceiptDiscountEventResult implements IBundlable { @@ -30,6 +31,8 @@ public class ReceiptDiscountEventResult implements IBundlable { private static final String KEY_POSITION_UUID_TO_DISCOUNT_MAP = "positionUuidToDiscountMap"; + private static final String KEY_RECEIPT_LOYALTY_APP_DATA = "appliedLoyaltyData"; + @Nullable public static ReceiptDiscountEventResult create(@Nullable Bundle bundle) { if (bundle == null) { @@ -51,7 +54,8 @@ public static ReceiptDiscountEventResult create(@Nullable Bundle bundle) { IPositionChange.class ), SetPurchaserContactData.from(bundle.getBundle(KEY_RECEIPT_SET_PURCHASER_CONTACT_DATA)), - positionUuidToDiscountMap + positionUuidToDiscountMap, + AppliedLoyaltyData.from(bundle.getBundle(KEY_RECEIPT_LOYALTY_APP_DATA)) ); } @@ -67,6 +71,9 @@ public static ReceiptDiscountEventResult create(@Nullable Bundle bundle) { @Nullable private final Map positionUuidToDiscountMap; + @Nullable + private final AppliedLoyaltyData appliedLoyaltyData; + public ReceiptDiscountEventResult( @NonNull BigDecimal discount, @Nullable SetExtra extra, @@ -80,6 +87,7 @@ public ReceiptDiscountEventResult( this.changes = changes; this.setPurchaserContactData = setPurchaserContactData; this.positionUuidToDiscountMap = null; + this.appliedLoyaltyData = null; } public ReceiptDiscountEventResult( @@ -96,6 +104,25 @@ public ReceiptDiscountEventResult( this.changes = changes; this.setPurchaserContactData = setPurchaserContactData; this.positionUuidToDiscountMap = positionUuidToDiscountMap; + this.appliedLoyaltyData = null; + } + + public ReceiptDiscountEventResult( + @NonNull BigDecimal discount, + @Nullable SetExtra extra, + @NonNull List changes, + @Nullable SetPurchaserContactData setPurchaserContactData, + @Nullable Map positionUuidToDiscountMap, + @Nullable AppliedLoyaltyData appliedLoyaltyData + ) { + Objects.requireNonNull(discount); + + this.discount = discount; + this.extra = extra; + this.changes = changes; + this.setPurchaserContactData = setPurchaserContactData; + this.positionUuidToDiscountMap = positionUuidToDiscountMap; + this.appliedLoyaltyData = appliedLoyaltyData; } @NonNull @@ -116,6 +143,10 @@ public Bundle toBundle() { if (positionUuidToDiscountMap != null) { bundle.putSerializable(KEY_POSITION_UUID_TO_DISCOUNT_MAP, (Serializable) positionUuidToDiscountMap); } + bundle.putBundle( + KEY_RECEIPT_LOYALTY_APP_DATA, + appliedLoyaltyData == null ? null : appliedLoyaltyData.toBundle() + ); return bundle; } @@ -143,4 +174,9 @@ public SetPurchaserContactData getSetPurchaserContactData() { public Map getPositionUuidToDiscountMap() { return positionUuidToDiscountMap; } + + @Nullable + public AppliedLoyaltyData getAppliedLoyaltyData(){ + return appliedLoyaltyData; + } } diff --git a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEvent.kt b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEvent.kt index 452516e67..c9b74ea5f 100644 --- a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEvent.kt +++ b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEvent.kt @@ -2,6 +2,9 @@ package ru.evotor.framework.core.action.event.receipt.discount_required import android.os.Bundle import ru.evotor.IBundlable +import ru.evotor.framework.core.action.event.receipt.discount_required.ReceiptDiscountRequiredEvent.Companion.NAME_BUY_RECEIPT +import ru.evotor.framework.core.action.event.receipt.discount_required.ReceiptDiscountRequiredEvent.Companion.NAME_PAYBACK_RECEIPT +import ru.evotor.framework.core.action.event.receipt.discount_required.ReceiptDiscountRequiredEvent.Companion.NAME_SELL_RECEIPT /** * Событие, которое возникает при переходе на экран выбора типа оплаты. @@ -9,9 +12,16 @@ import ru.evotor.IBundlable * Чтобы приложение получало событие, значение константы [NAME_SELL_RECEIPT], [NAME_PAYBACK_RECEIPT] или [NAME_BUY_RECEIPT] * необходимо указать в элементе intent-фильтра соотвествующей службы */ -class ReceiptDiscountRequiredEvent : IBundlable { +class ReceiptDiscountRequiredEvent( + val paymentSessionId: String?, + val externalLoyaltyCardId: String? +) : IBundlable { + override fun toBundle(): Bundle { - return Bundle() + val result = Bundle() + result.putString(KEY_PAYMENT_SESSION_ID, paymentSessionId) + result.putString(KEY_EXTERNAL_LOYALTY_CARD_ID, externalLoyaltyCardId) + return result } companion object { @@ -37,10 +47,18 @@ class ReceiptDiscountRequiredEvent : IBundlable { */ const val NAME_BUY_RECEIPT = "evo.v2.receipt.buy.receiptDiscountRequiredEvent" + private const val KEY_PAYMENT_SESSION_ID = "payment_session_id" + + private const val KEY_EXTERNAL_LOYALTY_CARD_ID = "external_loyalty_card_id" + + fun create(bundle: Bundle?): ReceiptDiscountRequiredEvent? { bundle ?: return null - return ReceiptDiscountRequiredEvent() + return ReceiptDiscountRequiredEvent( + bundle.getString(KEY_PAYMENT_SESSION_ID, null), + bundle.getString(KEY_EXTERNAL_LOYALTY_CARD_ID, null) + ) } } } diff --git a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEventResult.kt b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEventResult.kt index 5386d3217..7d738a4cf 100644 --- a/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEventResult.kt +++ b/src/main/java/ru/evotor/framework/core/action/event/receipt/discount_required/ReceiptDiscountRequiredEventResult.kt @@ -5,16 +5,19 @@ import android.os.Bundle import ru.evotor.IBundlable class ReceiptDiscountRequiredEventResult( - val componentName: ComponentName + val componentName: ComponentName, + val loyaltyCardId: String? ) : IBundlable { override fun toBundle(): Bundle { return Bundle().also { it.putParcelable(KEY_COMPONENT_NAME, componentName) + it.putString(KEY_LOYALTY_CARD_ID, loyaltyCardId) } } companion object { private const val KEY_COMPONENT_NAME = "KEY_COMPONENT_NAME" + private const val KEY_LOYALTY_CARD_ID = "KEY_LOYALTY_CARD_ID" fun create(bundle: Bundle?): ReceiptDiscountRequiredEventResult? { bundle ?: return null @@ -22,7 +25,9 @@ class ReceiptDiscountRequiredEventResult( val componentName = bundle.getParcelable(KEY_COMPONENT_NAME) ?: throw IllegalStateException("Bundle doesn't contain the necessary data to create ReceiptDiscountRequiredEventResult") - return ReceiptDiscountRequiredEventResult(componentName) + val loyaltyCardId = bundle.getString(KEY_LOYALTY_CARD_ID) + + return ReceiptDiscountRequiredEventResult(componentName, loyaltyCardId) } } } diff --git a/src/main/java/ru/evotor/framework/receipt/AppliedLoyaltyData.kt b/src/main/java/ru/evotor/framework/receipt/AppliedLoyaltyData.kt new file mode 100644 index 000000000..8b87e34eb --- /dev/null +++ b/src/main/java/ru/evotor/framework/receipt/AppliedLoyaltyData.kt @@ -0,0 +1,97 @@ +package ru.evotor.framework.receipt + +import android.content.ComponentName +import android.os.Bundle +import android.os.Parcel +import android.os.Parcelable +import ru.evotor.IBundlable +import ru.evotor.framework.ParcelableUtils +import java.math.BigDecimal + +data class AppliedLoyaltyData( + val loyaltyAppId: String, + val loyaltyServiceInfo: ComponentName, + val loyaltyCardId: String?, + val externalLoyaltyCardId: String?, + val additionalData: String? +) : Parcelable, IBundlable { + override fun describeContents(): Int = 0 + + override fun writeToParcel(dest: Parcel, flag: Int) { + ParcelableUtils.writeExpand(dest, VERSION) { parcel -> + parcel.writeString(loyaltyAppId) + parcel.writeString(loyaltyServiceInfo.packageName) + parcel.writeString(loyaltyServiceInfo.className) + parcel.writeString(loyaltyCardId) + parcel.writeString(externalLoyaltyCardId) + parcel.writeString(additionalData) + } + } + + override fun toBundle(): Bundle { + return Bundle().apply { + putString(KEY_LOYALTY_APP_ID, loyaltyAppId) + putString(KEY_LOYALTY_SERVICE_PACKAGE, loyaltyServiceInfo.packageName) + putString(KEY_LOYALTY_SERVICE_CLASS, loyaltyServiceInfo.className) + putString(KEY_LOYALTY_CARD_ID, loyaltyCardId) + putString(KEY_EXTERNAL_LOYALTY_CARD_ID, externalLoyaltyCardId) + putString(KEY_ADDITIONAL_DATA, additionalData) + } + } + + companion object { + private const val VERSION = 1 + + private const val KEY_LOYALTY_APP_ID = "loyaltyAppId" + private const val KEY_LOYALTY_SERVICE_PACKAGE = "loyaltyServicePackage" + private const val KEY_LOYALTY_SERVICE_CLASS = "loyaltyServiceClass" + private const val KEY_LOYALTY_CARD_ID = "loyaltyCardId" + private const val KEY_EXTERNAL_LOYALTY_CARD_ID = "externalLoyaltyCardId" + private const val KEY_ADDITIONAL_DATA = "additionalData" + + @JvmField + val CREATOR = object : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): AppliedLoyaltyData? = create(parcel) + + override fun newArray(size: Int): Array = arrayOfNulls(size) + } + + private fun create(dest: Parcel): AppliedLoyaltyData? { + var appliedLoyaltyData: AppliedLoyaltyData? = null + ParcelableUtils.readExpand(dest, VERSION) { parcel, version -> + if (version >= 1) { + val loyaltyAppId = parcel.readString() + val packageName = parcel.readString() + val className = parcel.readString() + if (loyaltyAppId != null && packageName != null && className != null) { + val loyaltyCardId = parcel.readString() + val externalLoyaltyCardId = parcel.readString() + val additionalData = parcel.readString() + appliedLoyaltyData = AppliedLoyaltyData( + loyaltyAppId = loyaltyAppId, + loyaltyServiceInfo = ComponentName(packageName, className), + loyaltyCardId = loyaltyCardId, + externalLoyaltyCardId = externalLoyaltyCardId, + additionalData = additionalData + ) + } + } + } + return appliedLoyaltyData + } + + @JvmStatic + fun from(bundle: Bundle?): AppliedLoyaltyData? = bundle?.let { + val loyaltyAppId = it.getString(KEY_LOYALTY_APP_ID) ?: return null + val packageName = it.getString(KEY_LOYALTY_SERVICE_PACKAGE) ?: return null + val name = it.getString(KEY_LOYALTY_SERVICE_CLASS) ?: return null + return AppliedLoyaltyData( + loyaltyAppId = loyaltyAppId, + loyaltyServiceInfo = ComponentName(packageName, name), + loyaltyCardId = it.getString(KEY_LOYALTY_CARD_ID), + externalLoyaltyCardId = it.getString(KEY_EXTERNAL_LOYALTY_CARD_ID), + additionalData = it.getString(KEY_ADDITIONAL_DATA) + ) + } + } +} diff --git a/src/main/java/ru/evotor/framework/receipt/Receipt.kt b/src/main/java/ru/evotor/framework/receipt/Receipt.kt index 476da59e3..de5549b2a 100644 --- a/src/main/java/ru/evotor/framework/receipt/Receipt.kt +++ b/src/main/java/ru/evotor/framework/receipt/Receipt.kt @@ -97,7 +97,16 @@ data class Receipt( /** * Место расчёта */ - var paymentPlace: String? + var paymentPlace: String?, + /** + * Номер платежной сессии. Может быть null, если платежная система не поддерживает номера сессий + */ + var paymentSessionId: String?, + /** + * Информация использованного приложения лояльности + */ + var loyaltyAppData: AppliedLoyaltyData? + ) /** diff --git a/src/main/java/ru/evotor/framework/receipt/ReceiptApi.kt b/src/main/java/ru/evotor/framework/receipt/ReceiptApi.kt index 35d459fe5..11fda3dff 100644 --- a/src/main/java/ru/evotor/framework/receipt/ReceiptApi.kt +++ b/src/main/java/ru/evotor/framework/receipt/ReceiptApi.kt @@ -1,5 +1,6 @@ package ru.evotor.framework.receipt +import android.content.ComponentName import android.content.Context import android.database.Cursor import android.net.Uri @@ -616,6 +617,21 @@ object ReceiptApi { receiptFromInternet = cursor.optInt(ReceiptHeaderTable.COLUMN_RECEIPT_FROM_INTERNET)?.let { it == 1 } ?: false, paymentAddress = cursor.optString(ReceiptHeaderTable.COLUMN_PAYMENT_ADDRESS), paymentPlace = cursor.optString(ReceiptHeaderTable.COLUMN_PAYMENT_PLACE), + paymentSessionId = cursor.optString(ReceiptHeaderTable.COLUMN_PAYMENT_SESSION_ID), + loyaltyAppData = createAppliedLoyaltyData(cursor) + ) + } + + private fun createAppliedLoyaltyData(cursor: Cursor): AppliedLoyaltyData? { + return AppliedLoyaltyData( + loyaltyAppId = cursor.optString(ReceiptHeaderTable.COLUMN_LOYALTY_APP_ID) ?: return null, + loyaltyServiceInfo = ComponentName( + cursor.optString(ReceiptHeaderTable.COLUMN_LOYALTY_SERVICE_PACKAGE) ?: return null, + cursor.optString(ReceiptHeaderTable.COLUMN_LOYALTY_SERVICE_CLASS) ?: return null + ), + loyaltyCardId = cursor.optString(ReceiptHeaderTable.COLUMN_LOYALTY_CARD_ID), + externalLoyaltyCardId = cursor.optString(ReceiptHeaderTable.COLUMN_EXTERNAL_LOYALTY_CARD_ID), + additionalData = cursor.optString(ReceiptHeaderTable.COLUMN_ADDITIONAL_DATA) ) } diff --git a/src/main/java/ru/evotor/framework/receipt/ReceiptHeaderTable.kt b/src/main/java/ru/evotor/framework/receipt/ReceiptHeaderTable.kt index 7ad44de8f..b13769807 100644 --- a/src/main/java/ru/evotor/framework/receipt/ReceiptHeaderTable.kt +++ b/src/main/java/ru/evotor/framework/receipt/ReceiptHeaderTable.kt @@ -13,4 +13,11 @@ object ReceiptHeaderTable { const val COLUMN_RECEIPT_FROM_INTERNET = "RECEIPT_FROM_INTERNET" const val COLUMN_PAYMENT_ADDRESS = "PAYMENT_ADDRESS" const val COLUMN_PAYMENT_PLACE = "PAYMENT_PLACE" + const val COLUMN_PAYMENT_SESSION_ID = "PAYMENT_SESSION_ID" + const val COLUMN_LOYALTY_APP_ID = "LOYALTY_APP_ID" + const val COLUMN_LOYALTY_SERVICE_PACKAGE = "LOYALTY_SERVICE_PACKAGE" + const val COLUMN_LOYALTY_SERVICE_CLASS = "LOYALTY_SERVICE_CLASS" + const val COLUMN_LOYALTY_CARD_ID = "LOYALTY_CARD_ID" + const val COLUMN_EXTERNAL_LOYALTY_CARD_ID = "EXTERNAL_LOYALTY_CARD_ID" + const val COLUMN_ADDITIONAL_DATA = "ADDITIONAL_DATA" } diff --git a/src/main/java/ru/evotor/framework/receipt/event/ApplyDiscountToReceiptEvent.kt b/src/main/java/ru/evotor/framework/receipt/event/ApplyDiscountToReceiptEvent.kt index dbfb8b9e7..2ea920619 100644 --- a/src/main/java/ru/evotor/framework/receipt/event/ApplyDiscountToReceiptEvent.kt +++ b/src/main/java/ru/evotor/framework/receipt/event/ApplyDiscountToReceiptEvent.kt @@ -18,11 +18,12 @@ import android.os.Bundle * [ru.evotor.framework.receipt.event.handler.receiver.CorrectionReturnOutcomeReceiptBroadcastReceiver] * * @param receiptUuid uuid чека + * @param loyaltyCardId id примененной карты лояльности */ -class ApplyDiscountToReceiptEvent(receiptUuid: String) : ReceiptEvent(receiptUuid) { +class ApplyDiscountToReceiptEvent(receiptUuid: String, loyaltyCardId: String?) : ReceiptEvent(receiptUuid,loyaltyCardId) { companion object { fun from(bundle: Bundle?): ApplyDiscountToReceiptEvent? = bundle?.let { - ApplyDiscountToReceiptEvent(ReceiptEvent.getReceiptUuid(it) ?: return null) + ApplyDiscountToReceiptEvent(getReceiptUuid(it) ?: return null,getLoyaltyCardId(it)) } } } diff --git a/src/main/java/ru/evotor/framework/receipt/event/ReceiptEvent.kt b/src/main/java/ru/evotor/framework/receipt/event/ReceiptEvent.kt index 5278de3e9..f2997736f 100644 --- a/src/main/java/ru/evotor/framework/receipt/event/ReceiptEvent.kt +++ b/src/main/java/ru/evotor/framework/receipt/event/ReceiptEvent.kt @@ -4,17 +4,25 @@ import android.os.Bundle import ru.evotor.IBundlable -abstract class ReceiptEvent internal constructor(val receiptUuid: String) : IBundlable { +abstract class ReceiptEvent internal constructor( + val receiptUuid: String, + val loyaltyCardId: String? = null +) : IBundlable { override fun toBundle(): Bundle { val result = Bundle() result.putString(KEY_RECEIPT_UUID, receiptUuid) + result.putString(KEY_LOYALTY_CARD_ID, loyaltyCardId) return result } companion object { private const val KEY_RECEIPT_UUID = "receiptUuid" + private const val KEY_LOYALTY_CARD_ID = "loyaltyCardId" internal fun getReceiptUuid(bundle: Bundle): String? = - bundle.getString(KEY_RECEIPT_UUID, null) + bundle.getString(KEY_RECEIPT_UUID, null) + internal fun getLoyaltyCardId(bundle: Bundle): String? = + bundle.getString(KEY_LOYALTY_CARD_ID, null) + } } diff --git a/src/main/java/ru/evotor/framework/receipt/formation/api/BuyApi.kt b/src/main/java/ru/evotor/framework/receipt/formation/api/BuyApi.kt index 89f690f65..1e147da46 100644 --- a/src/main/java/ru/evotor/framework/receipt/formation/api/BuyApi.kt +++ b/src/main/java/ru/evotor/framework/receipt/formation/api/BuyApi.kt @@ -67,10 +67,10 @@ object BuyApi { * @param callback */ @JvmStatic - fun triggerReceiptDiscountEvent(context: Context, componentName: ComponentName, callback: TriggerReceiptDiscountEventCallback) { + fun triggerReceiptDiscountEvent(context: Context, componentName: ComponentName, callback: TriggerReceiptDiscountEventCallback, loyaltyCardId: String?) { context.startIntegrationService( TriggerReceiptDiscountEventIntegrationService.ACTION_TRIGGER_RECEIPT_DISCOUNT_EVENT, - TriggerReceiptDiscountEventRequestedEvent(componentName, Receipt.Type.BUY) + TriggerReceiptDiscountEventRequestedEvent(componentName, Receipt.Type.BUY, loyaltyCardId) ) { it?.result?.error?.let { error -> callback.onError(TriggerReceiptDiscountEventException(error.code, error.message)) } ?: callback.onSuccess() diff --git a/src/main/java/ru/evotor/framework/receipt/formation/api/PaybackApi.kt b/src/main/java/ru/evotor/framework/receipt/formation/api/PaybackApi.kt index afc490c9a..2b565cb1f 100644 --- a/src/main/java/ru/evotor/framework/receipt/formation/api/PaybackApi.kt +++ b/src/main/java/ru/evotor/framework/receipt/formation/api/PaybackApi.kt @@ -67,10 +67,10 @@ object PaybackApi { * @param callback */ @JvmStatic - fun triggerReceiptDiscountEvent(context: Context, componentName: ComponentName, callback: TriggerReceiptDiscountEventCallback) { + fun triggerReceiptDiscountEvent(context: Context, componentName: ComponentName, callback: TriggerReceiptDiscountEventCallback, loyaltyCardId: String?) { context.startIntegrationService( TriggerReceiptDiscountEventIntegrationService.ACTION_TRIGGER_RECEIPT_DISCOUNT_EVENT, - TriggerReceiptDiscountEventRequestedEvent(componentName, Receipt.Type.PAYBACK) + TriggerReceiptDiscountEventRequestedEvent(componentName, Receipt.Type.PAYBACK, loyaltyCardId) ) { it?.result?.error?.let { error -> callback.onError(TriggerReceiptDiscountEventException(error.code, error.message)) } ?: callback.onSuccess() diff --git a/src/main/java/ru/evotor/framework/receipt/formation/api/SellApi.kt b/src/main/java/ru/evotor/framework/receipt/formation/api/SellApi.kt index b830317c1..e40b5be86 100644 --- a/src/main/java/ru/evotor/framework/receipt/formation/api/SellApi.kt +++ b/src/main/java/ru/evotor/framework/receipt/formation/api/SellApi.kt @@ -65,12 +65,13 @@ object SellApi { * @param context Контекст приложения * @param componentName - ComponentName сервиса-обработчика события ReceiptDiscountEvent * @param callback + * @param loyaltyCardId - Id карты лояльности */ @JvmStatic - fun triggerReceiptDiscountEvent(context: Context, componentName: ComponentName, callback: TriggerReceiptDiscountEventCallback) { + fun triggerReceiptDiscountEvent(context: Context, componentName: ComponentName, callback: TriggerReceiptDiscountEventCallback, loyaltyCardId: String?) { context.startIntegrationService( TriggerReceiptDiscountEventIntegrationService.ACTION_TRIGGER_RECEIPT_DISCOUNT_EVENT, - TriggerReceiptDiscountEventRequestedEvent(componentName, Receipt.Type.SELL) + TriggerReceiptDiscountEventRequestedEvent(componentName, Receipt.Type.SELL, loyaltyCardId) ) { it?.result?.error?.let { error -> callback.onError(TriggerReceiptDiscountEventException(error.code, error.message)) } ?: callback.onSuccess() diff --git a/src/main/java/ru/evotor/framework/receipt/formation/event/TriggerReceiptDiscountEventRequestedEvent.kt b/src/main/java/ru/evotor/framework/receipt/formation/event/TriggerReceiptDiscountEventRequestedEvent.kt index c9564392f..5744ab481 100644 --- a/src/main/java/ru/evotor/framework/receipt/formation/event/TriggerReceiptDiscountEventRequestedEvent.kt +++ b/src/main/java/ru/evotor/framework/receipt/formation/event/TriggerReceiptDiscountEventRequestedEvent.kt @@ -7,12 +7,14 @@ import ru.evotor.framework.receipt.Receipt class TriggerReceiptDiscountEventRequestedEvent( val componentName: ComponentName, - val receiptType: Receipt.Type + val receiptType: Receipt.Type, + val loyaltyCardId: String? ) : IBundlable { override fun toBundle(): Bundle { return Bundle().also { it.putParcelable(KEY_COMPONENT_NAME, componentName) it.putString(KEY_RECEIPT_TYPE, receiptType.name) + it.putString(KEY_LOYALTY_CARD_ID, loyaltyCardId) } } @@ -26,6 +28,7 @@ class TriggerReceiptDiscountEventRequestedEvent( private const val KEY_COMPONENT_NAME = "KEY_COMPONENT_NAME" private const val KEY_RECEIPT_TYPE = "KEY_RECEIPT_TYPE" + private const val KEY_LOYALTY_CARD_ID= "KEY_LOYALTY_CARD_ID" fun create(bundle: Bundle?): TriggerReceiptDiscountEventRequestedEvent? { bundle ?: return null @@ -34,8 +37,8 @@ class TriggerReceiptDiscountEventRequestedEvent( ?: throw IllegalStateException("Bundle doesn't contain the necessary data to create TriggerReceiptDiscountEventCommand") val receiptType = bundle.getString(KEY_RECEIPT_TYPE)?.let { Receipt.Type.valueOf(it) } ?: throw IllegalStateException("Bundle doesn't contain the necessary data to create TriggerReceiptDiscountEventCommand") - - return TriggerReceiptDiscountEventRequestedEvent(componentName, receiptType) + val loyaltyCardId = bundle.getString(KEY_LOYALTY_CARD_ID) + return TriggerReceiptDiscountEventRequestedEvent(componentName, receiptType, loyaltyCardId) } } }