From 0b59f5725d099ee4106d3f0a691a133c2f7ebf2d Mon Sep 17 00:00:00 2001 From: Duc Le Tran <36192582+anhanh11001@users.noreply.github.com> Date: Thu, 30 May 2019 08:27:27 +0200 Subject: [PATCH] fix: Add payment mode (#1860) Details: - Use constant string for payment mode - Add payment mode for offline payment + place order with PLACED status Fixes: #1858 --- .../general/attendees/AttendeeFragment.kt | 19 +++++++---- .../general/attendees/AttendeeViewModel.kt | 34 +++++++++++++------ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeFragment.kt b/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeFragment.kt index 5cef18d05d..81a91d859f 100644 --- a/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeFragment.kt @@ -625,10 +625,6 @@ class AttendeeFragment : Fragment() { rootView.attendeeScrollView.longSnackbar(getString(R.string.paypal_payment_not_available)) false } - getString(R.string.cheque), getString(R.string.on_site), getString(R.string.bank_transfer) -> { - rootView.attendeeScrollView.longSnackbar(getString(R.string.offline_payment_message)) - false - } else -> true } @@ -684,8 +680,9 @@ class AttendeeFragment : Fragment() { if (attendeeViewModel.areAttendeeEmailsValid(attendees)) { val country = rootView.countryPicker.selectedItem.toString() - val paymentOption = if (totalAmount != 0F) rootView.paymentSelector.selectedItem.toString() - else getString(R.string.free) + val paymentOption = + if (totalAmount != 0F) getPaymentMode(rootView.paymentSelector.selectedItem.toString()) + else PAYMENT_MODE_FREE val company = rootView.company.text.toString() val city = rootView.city.text.toString() val taxId = rootView.taxId.text.toString() @@ -726,6 +723,16 @@ class AttendeeFragment : Fragment() { }) } + private fun getPaymentMode(paymentSelectedItem: String): String = + when (paymentSelectedItem) { + getString(R.string.cheque) -> PAYMENT_MODE_CHEQUE + getString(R.string.bank_transfer) -> PAYMENT_MODE_BANK + getString(R.string.stripe) -> PAYMENT_MODE_STRIPE + getString(R.string.paypal) -> PAYMENT_MODE_PAYPAL + getString(R.string.on_site) -> PAYMENT_MODE_ONSITE + else -> PAYMENT_MODE_FREE + } + private fun showTicketSoldOutDialog(show: Boolean) { if (show) { val builder = AlertDialog.Builder(requireContext()) diff --git a/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeViewModel.kt index 07723ec540..4fa6f62d41 100644 --- a/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeViewModel.kt @@ -31,6 +31,12 @@ const val ORDER_STATUS_PENDING = "pending" const val ORDER_STATUS_COMPLETED = "completed" const val ORDER_STATUS_PLACED = "placed" const val ORDER_STATUS_CANCELLED = "cancelled" +const val PAYMENT_MODE_FREE = "free" +const val PAYMENT_MODE_BANK = "bank" +const val PAYMENT_MODE_ONSITE = "onsite" +const val PAYMENT_MODE_CHEQUE = "cheque" +const val PAYMENT_MODE_PAYPAL = "paypal" +const val PAYMENT_MODE_STRIPE = "stripe" class AttendeeViewModel( private val attendeeService: AttendeeService, @@ -67,7 +73,7 @@ class AttendeeViewModel( val attendees = ArrayList() private val attendeesForOrder = ArrayList() private val ticketsForOrder = ArrayList() - private lateinit var paymentOption: String + private var paymentModeForOrder: String = PAYMENT_MODE_FREE private var countryForOrder: String = "" private var companyForOrder: String = "" private var taxIdForOrder: String = "" @@ -158,7 +164,7 @@ class AttendeeViewModel( address: String, city: String, postalCode: String, - paymentOption: String + paymentMode: String ) { attendeesForOrder.clear() countryForOrder = country ?: "" @@ -167,7 +173,7 @@ class AttendeeViewModel( addressForOrder = address cityForOrder = city postalCodeForOrder = postalCode - this.paymentOption = paymentOption + paymentModeForOrder = paymentMode var isAllDetailsFilled = true createAttendeeIterations = 0 attendees.forEach { @@ -214,14 +220,13 @@ class AttendeeViewModel( private fun createOrder() { val attendeeList = attendeesForOrder.map { AttendeeId(it.id) }.toList() val amount: Float = totalAmount.value ?: 0F - var paymentMode: String? = paymentOption.toLowerCase() if (amount <= 0) { - paymentMode = resource.getString(R.string.free) + paymentModeForOrder = PAYMENT_MODE_FREE } val eventId = event.value?.id if (eventId != null) { - var order = Order(id = getId(), paymentMode = paymentMode, status = ORDER_STATUS_PENDING, amount = amount, - attendees = attendeeList, event = EventId(eventId)) + var order = Order(id = getId(), paymentMode = paymentModeForOrder, status = ORDER_STATUS_PENDING, + amount = amount, attendees = attendeeList, event = EventId(eventId)) if (billingEnabled) { order = order.copy(isBillingEnabled = true, company = companyForOrder, taxBusinessInfo = taxIdForOrder, address = addressForOrder, city = cityForOrder, zipcode = postalCodeForOrder, country = countryForOrder) @@ -235,10 +240,17 @@ class AttendeeViewModel( }.subscribe({ orderIdentifier = it.identifier.toString() Timber.d("Success placing order!") - if (it.paymentMode == resource.getString(R.string.free)) { - confirmOrder = ConfirmOrder(it.id.toString(), ORDER_STATUS_COMPLETED) - confirmOrderStatus(it.identifier.toString(), confirmOrder) - } else mutableMessage.value = resource.getString(R.string.order_success_message) + when (it.paymentMode) { + PAYMENT_MODE_FREE -> { + confirmOrder = ConfirmOrder(it.id.toString(), ORDER_STATUS_COMPLETED) + confirmOrderStatus(it.identifier.toString(), confirmOrder) + } + PAYMENT_MODE_CHEQUE, PAYMENT_MODE_BANK, PAYMENT_MODE_ONSITE -> { + confirmOrder = ConfirmOrder(it.id.toString(), ORDER_STATUS_PLACED) + confirmOrderStatus(it.identifier.toString(), confirmOrder) + } + else -> mutableMessage.value = resource.getString(R.string.order_success_message) + } }, { mutableMessage.value = resource.getString(R.string.order_fail_message) Timber.d(it, "Failed creating Order")