- package store.panda.client.presentation.screens.cartandordering.payment
- import store.panda.client.data.model.Cart
- import store.panda.client.data.remote.params.OrderHistoryQueryBuilder
- import store.panda.client.data.remote.postparams.DeleteCartItemsParams
- import store.panda.client.domain.analytics.PandaoAnalytics
- import store.panda.client.domain.analytics.common.CustomParams
- import store.panda.client.domain.analytics.custom.AppsFlyerAnalyticsManager
- import store.panda.client.domain.analytics.custom.CustomerTrackManager
- import store.panda.client.domain.analytics.custom.FirebaseAnalyticsManager
- import store.panda.client.domain.provider.CartProvider
- import store.panda.client.domain.provider.OrderHistoryProvider
- import store.panda.client.presentation.base.BasePresenter
- import timber.log.Timber
- import javax.inject.Inject
- private const val ORDERS_CHECK_LIMIT = 2
- private const val ONE_ELEMENT = 1
- private const val OFFSET = 0
- class PaymentPresenter @Inject constructor(
- private val trackManager: CustomerTrackManager,
- private val orderHistoryProvider: OrderHistoryProvider,
- private val cartProvider: CartProvider,
- private val appsFlyerAnalyticsManager: AppsFlyerAnalyticsManager,
- private val firebaseAnalyticsManager: FirebaseAnalyticsManager
- ) : BasePresenter<PaymentMvpView>() {
- private var paymentDone: Boolean = false
- fun onViewCreate(url: String, paymentFinished: Boolean) {
- if (paymentFinished) {
- mvpView.showSuccessView()
- } else {
- mvpView.loadUrl(url)
- }
- }
- fun performSuccessfullPayment(cart: Cart) {
- if (paymentDone || mvpView == null) {
- return
- }
- paymentDone = true
- mvpView.apply {
- setPaymentFinishedState()
- loadUrl("")
- hideWebView()
- showClearCartProgressView()
- }
- appsFlyerAnalyticsManager.trackUserStatus(true)
- trackPaymentAnalytics(cart)
- subscribe(cartProvider.deleteCartItems(
- DeleteCartItemsParams(null)),
- { mvpView.showSuccessView() },
- { mvpView.showSuccessView() }
- )
- }
- private fun trackPaymentAnalytics(cart: Cart) {
- subscribe(orderHistoryProvider.getOrdersLimited(OrderHistoryQueryBuilder()
- .limit(ORDERS_CHECK_LIMIT)
- .offset(OFFSET))
- .doOnNext { purchases ->
- if (!trackManager.hasTrackedPayments()) {
- if (purchases.size == ONE_ELEMENT) {
- trackManager.trackFirstPayment(
- CustomParams(appsFlyerAnalyticsManager.getPurchaseParams(purchases.first(), cart)))
- } else {
- trackManager.markPaymentAsTracked()
- }
- }
- }
- .map { it.first() }
- .doOnNext {
- PandaoAnalytics.trackShared(
- PandaoAnalytics.PandaoEvent.ACTION_MAKE_ORDER,
- CustomParams(
- appsFlyerAnalyticsManager.getPurchaseParams(it, cart),
- firebaseAnalyticsManager.getPurchaseParams(cart)
- )
- )
- }
- .flatMapIterable { purchase -> purchase.orders.map { Pair(purchase, it.id) } }
- .flatMap { pair -> orderHistoryProvider.getOrderById(pair.second.toString()).map { Pair(pair.first, it) } }
- .cache(),
- { pair ->
- for (item in pair.second.items) {
- PandaoAnalytics.trackShared(
- PandaoAnalytics.PandaoEvent.AF_PURCHASE,
- CustomParams(appsFlyerAnalyticsManager.getOrderParams(pair.first, pair.second, item))
- )
- }
- }, { e ->
- Timber.e(e)
- trackManager.markPaymentAsTracked()
- })
- }
- fun performFailPayment() {
- mvpView.showErrorPaymentDialog()
- }
- }