Skip to content

feat: Add offline payment methods #1841

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ import kotlinx.android.synthetic.main.fragment_attendee.view.attendeeInformation
import kotlinx.android.synthetic.main.fragment_attendee.view.attendeeRecycler
import kotlinx.android.synthetic.main.fragment_attendee.view.cardSelector
import kotlinx.android.synthetic.main.fragment_attendee.view.eventName
import kotlinx.android.synthetic.main.fragment_attendee.view.offlinePayment
import kotlinx.android.synthetic.main.fragment_attendee.view.offlinePaymentDescription
import kotlinx.android.synthetic.main.fragment_attendee.view.month
import kotlinx.android.synthetic.main.fragment_attendee.view.monthText
import kotlinx.android.synthetic.main.fragment_attendee.view.moreAttendeeInformation
Expand Down Expand Up @@ -141,7 +143,6 @@ class AttendeeFragment : Fragment() {
setupUser()
setupAttendeeDetails()
setupCustomForms()
setupPaymentOptions()
setupCountryOptions()
setupCardNumber()
setupCardType()
Expand Down Expand Up @@ -183,13 +184,16 @@ class AttendeeFragment : Fragment() {
.nonNull()
.observe(viewLifecycleOwner, Observer {
loadEventDetailsUI(it)
setupPaymentOptions(it)
})

val currentEvent = attendeeViewModel.event.value
if (currentEvent == null)
attendeeViewModel.loadEvent(safeArgs.eventId)
else
else {
setupPaymentOptions(currentEvent)
loadEventDetailsUI(currentEvent)
}
}

private fun setupTicketDetailTable() {
Expand Down Expand Up @@ -359,21 +363,51 @@ class AttendeeFragment : Fragment() {
rootView.countryPickerContainer.visibility = if (attendeeViewModel.singleTicket) View.VISIBLE else View.GONE
}

private fun setupPaymentOptions() {
private fun setupPaymentOptions(event: Event) {
val paymentOptions = ArrayList<String>()
paymentOptions.add(getString(R.string.paypal))
paymentOptions.add(getString(R.string.stripe))
if (event.canPayByPaypal)
paymentOptions.add(getString(R.string.paypal))
if (event.canPayByStripe)
paymentOptions.add(getString(R.string.stripe))
if (event.canPayOnsite)
paymentOptions.add(getString(R.string.on_site))
if (event.canPayByBank)
paymentOptions.add(getString(R.string.bank_transfer))
if (event.canPayByCheque)
paymentOptions.add(getString(R.string.cheque))

rootView.paymentSelector.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item,
paymentOptions)
rootView.paymentSelector.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) { /*Do nothing*/ }

override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
attendeeViewModel.selectedPaymentOption = position
if (position == paymentOptions.indexOf(getString(R.string.stripe)))
rootView.stripePayment.visibility = View.VISIBLE
else
rootView.stripePayment.visibility = View.GONE
when (position) {
paymentOptions.indexOf(getString(R.string.stripe)) -> {
rootView.stripePayment.visibility = View.VISIBLE
rootView.offlinePayment.visibility = View.GONE
}
paymentOptions.indexOf(getString(R.string.on_site)) -> {
rootView.offlinePayment.visibility = View.VISIBLE
rootView.stripePayment.visibility = View.GONE
rootView.offlinePaymentDescription.text = event.onsiteDetails
}
paymentOptions.indexOf(getString(R.string.bank_transfer)) -> {
rootView.offlinePayment.visibility = View.VISIBLE
rootView.stripePayment.visibility = View.GONE
rootView.offlinePaymentDescription.text = event.bankDetails
}
paymentOptions.indexOf(getString(R.string.cheque)) -> {
rootView.offlinePayment.visibility = View.VISIBLE
rootView.stripePayment.visibility = View.GONE
rootView.offlinePaymentDescription.text = event.chequeDetails
}
else -> {
rootView.stripePayment.visibility = View.GONE
rootView.offlinePayment.visibility = View.GONE
}
}
}
}
if (attendeeViewModel.selectedPaymentOption != -1)
Expand Down Expand Up @@ -548,6 +582,19 @@ class AttendeeFragment : Fragment() {
rootView.accept.movementMethod = LinkMovementMethod.getInstance()
}

private fun checkPaymentOptions(): Boolean =
when (rootView.paymentSelector.selectedItem.toString()) {
getString(R.string.paypal) -> {
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
}

private fun setupRegisterOrder() {
rootView.register.setOnClickListener {
if (!isNetworkConnected(context)) {
Expand All @@ -559,6 +606,8 @@ class AttendeeFragment : Fragment() {
return@setOnClickListener
}

if (attendeeViewModel.totalAmount.value != 0F && !checkPaymentOptions()) return@setOnClickListener

val builder = AlertDialog.Builder(requireContext())
builder.setTitle(R.string.confirmation_dialog)

Expand Down
23 changes: 23 additions & 0 deletions app/src/main/res/layout/fragment_attendee.xml
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,29 @@
android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
android:id="@+id/offlinePayment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_medium"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/payment_info"
android:textColor="@color/black"
android:textSize="@dimen/heading_text_size" />

<TextView
android:id="@+id/offlinePaymentDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_medium"
tools:text="@string/description_preview"/>
</LinearLayout>

<LinearLayout
android:id="@+id/stripePayment"
android:layout_width="match_parent"
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,11 @@
<string name="not_you">Not you? </string>
<string name="sign_out">Sign out</string>
<string name="all_fees">All fees included in price</string>
<string name="on_site">On Site</string>
<string name="bank_transfer">Telegraphic Transfer/Bank Transfer</string>
<string name="cheque">Cheque</string>
<string name="paypal_payment_not_available">Paypal payment is not available in the app yet!</string>
<string name="offline_payment_message">This is offline payment method. Please follow payment instructions.</string>

<!--order details-->
<string name="order_completed">ORDER COMPLETED</string>
Expand Down