From Mustard Wigeon, 5 Years ago, written in Plain Text.
Embed
  1. package store.panda.client.presentation.screens.cartandordering.payment
  2.  
  3. import store.panda.client.data.model.Cart
  4. import store.panda.client.data.remote.params.OrderHistoryQueryBuilder
  5. import store.panda.client.data.remote.postparams.DeleteCartItemsParams
  6. import store.panda.client.domain.analytics.PandaoAnalytics
  7. import store.panda.client.domain.analytics.common.CustomParams
  8. import store.panda.client.domain.analytics.custom.AppsFlyerAnalyticsManager
  9. import store.panda.client.domain.analytics.custom.CustomerTrackManager
  10. import store.panda.client.domain.analytics.custom.FirebaseAnalyticsManager
  11. import store.panda.client.domain.provider.CartProvider
  12. import store.panda.client.domain.provider.OrderHistoryProvider
  13. import store.panda.client.presentation.base.BasePresenter
  14. import timber.log.Timber
  15. import javax.inject.Inject
  16.  
  17. private const val ORDERS_CHECK_LIMIT = 2
  18. private const val ONE_ELEMENT = 1
  19. private const val OFFSET = 0
  20.  
  21. class PaymentPresenter @Inject constructor(
  22.         private val trackManager: CustomerTrackManager,
  23.         private val orderHistoryProvider: OrderHistoryProvider,
  24.         private val cartProvider: CartProvider,
  25.         private val appsFlyerAnalyticsManager: AppsFlyerAnalyticsManager,
  26.         private val firebaseAnalyticsManager: FirebaseAnalyticsManager
  27. ) : BasePresenter<PaymentMvpView>() {
  28.  
  29.     private var paymentDone: Boolean = false
  30.  
  31.     fun onViewCreate(url: String, paymentFinished: Boolean) {
  32.         if (paymentFinished) {
  33.             mvpView.showSuccessView()
  34.         } else {
  35.             mvpView.loadUrl(url)
  36.         }
  37.     }
  38.  
  39.     fun performSuccessfullPayment(cart: Cart) {
  40.         if (paymentDone || mvpView == null) {
  41.             return
  42.         }
  43.         paymentDone = true
  44.  
  45.         mvpView.apply {
  46.             setPaymentFinishedState()
  47.             loadUrl("")
  48.             hideWebView()
  49.             showClearCartProgressView()
  50.         }
  51.  
  52.         appsFlyerAnalyticsManager.trackUserStatus(true)
  53.         trackPaymentAnalytics(cart)
  54.  
  55.         subscribe(cartProvider.deleteCartItems(
  56.                 DeleteCartItemsParams(null)),
  57.                 { mvpView.showSuccessView() },
  58.                 { mvpView.showSuccessView() }
  59.         )
  60.     }
  61.  
  62.     private fun trackPaymentAnalytics(cart: Cart) {
  63.         subscribe(orderHistoryProvider.getOrdersLimited(OrderHistoryQueryBuilder()
  64.                 .limit(ORDERS_CHECK_LIMIT)
  65.                 .offset(OFFSET))
  66.                 .doOnNext { purchases ->
  67.                     if (!trackManager.hasTrackedPayments()) {
  68.                         if (purchases.size == ONE_ELEMENT) {
  69.                             trackManager.trackFirstPayment(
  70.                                     CustomParams(appsFlyerAnalyticsManager.getPurchaseParams(purchases.first(), cart)))
  71.                         } else {
  72.                             trackManager.markPaymentAsTracked()
  73.                         }
  74.                     }
  75.                 }
  76.                 .map { it.first() }
  77.                 .doOnNext {
  78.                     PandaoAnalytics.trackShared(
  79.                             PandaoAnalytics.PandaoEvent.ACTION_MAKE_ORDER,
  80.                             CustomParams(
  81.                                     appsFlyerAnalyticsManager.getPurchaseParams(it, cart),
  82.                                     firebaseAnalyticsManager.getPurchaseParams(cart)
  83.                             )
  84.                     )
  85.                 }
  86.                 .flatMapIterable { purchase -> purchase.orders.map { Pair(purchase, it.id) } }
  87.                 .flatMap { pair -> orderHistoryProvider.getOrderById(pair.second.toString()).map { Pair(pair.first, it) } }
  88.                 .cache(),
  89.                 { pair ->
  90.                     for (item in pair.second.items) {
  91.                         PandaoAnalytics.trackShared(
  92.                                 PandaoAnalytics.PandaoEvent.AF_PURCHASE,
  93.                                 CustomParams(appsFlyerAnalyticsManager.getOrderParams(pair.first, pair.second, item))
  94.                         )
  95.                     }
  96.                 }, { e ->
  97.                     Timber.e(e)
  98.                     trackManager.markPaymentAsTracked()
  99.                 })
  100.     }
  101.  
  102.     fun performFailPayment() {
  103.         mvpView.showErrorPaymentDialog()
  104.     }
  105. }
  106.