Skip to content

Commit 629b01f

Browse files
anhanh11001nikit19
authored andcommitted
Summary: Change Order Now/Register Button in TicketsFragment (#2245)
Details: - Check totalAmount in order to set "Order Now", "Register" for button - Get tickets detail saved from ViewModel instead of fetching from the database Fixes: #2238
1 parent 39813ec commit 629b01f

File tree

3 files changed

+36
-39
lines changed

3 files changed

+36
-39
lines changed

app/src/main/java/org/fossasia/openevent/general/ticket/TicketsFragment.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class TicketsFragment : Fragment() {
5555
private lateinit var rootView: View
5656
private lateinit var linearLayoutManager: LinearLayoutManager
5757
private var ticketIdAndQty = ArrayList<Triple<Int, Int, Float>>()
58-
private var totalAmount: Float = 0.0f
5958

6059
override fun onCreate(savedInstanceState: Bundle?) {
6160
super.onCreate(savedInstanceState)
@@ -122,19 +121,12 @@ class TicketsFragment : Fragment() {
122121

123122
rootView.register.setOnClickListener {
124123
if (!ticketsViewModel.totalTicketsEmpty(ticketIdAndQty)) {
125-
ticketsViewModel.getAmount(ticketIdAndQty)
124+
checkForAuthentication()
126125
} else {
127126
showErrorMessage(resources.getString(R.string.no_tickets_message))
128127
}
129128
}
130129

131-
ticketsViewModel.amount
132-
.nonNull()
133-
.observe(viewLifecycleOwner, Observer {
134-
totalAmount = it
135-
checkForAuthentication()
136-
})
137-
138130
rootView.retry.setOnClickListener {
139131
loadTickets()
140132
loadTaxDetails()
@@ -195,6 +187,19 @@ class TicketsFragment : Fragment() {
195187
override fun onSelected(ticketId: Int, quantity: Int, donation: Float) {
196188
handleTicketSelect(ticketId, quantity, donation)
197189
ticketsViewModel.ticketIdAndQty.value = ticketIdAndQty
190+
ticketsViewModel.totalAmount = ticketsViewModel.getAmount(ticketIdAndQty)
191+
when {
192+
ticketsViewModel.totalAmount == -1F -> {
193+
ticketsViewModel.tickets.value?.let {
194+
if (it.any { ticket -> ticket.price > 0 })
195+
rootView.register.text = getString(R.string.order_now)
196+
else
197+
rootView.register.text = getString(R.string.register)
198+
}
199+
}
200+
ticketsViewModel.totalAmount > 0 -> rootView.register.text = getString(R.string.order_now)
201+
else -> rootView.register.text = getString(R.string.register)
202+
}
198203
}
199204
}
200205
ticketsRecyclerAdapter.setSelectListener(ticketSelectedListener)
@@ -218,12 +223,11 @@ class TicketsFragment : Fragment() {
218223

219224
private fun redirectToAttendee() {
220225
val wrappedTicketAndQty = TicketIdAndQtyWrapper(ticketIdAndQty)
221-
ticketsViewModel.mutableAmount.value = null
222226
findNavController(rootView).navigate(TicketsFragmentDirections.actionTicketsToAttendee(
223227
eventId = safeArgs.eventId,
224228
ticketIdAndQty = wrappedTicketAndQty,
225229
currency = safeArgs.currency,
226-
amount = totalAmount,
230+
amount = ticketsViewModel.totalAmount,
227231
taxAmount = ticketsViewModel.totalTaxAmount
228232
))
229233
}

app/src/main/java/org/fossasia/openevent/general/ticket/TicketsViewModel.kt

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,11 @@ class TicketsViewModel(
4545
val taxInfo: LiveData<Tax> = mutableTaxInfo
4646
var appliedDiscountCode: DiscountCode? = null
4747
var totalTaxAmount = 0f
48-
val mutableAmount = MutableLiveData<Float>()
49-
val amount: LiveData<Float> = mutableAmount
5048
private val mutableTicketTableVisibility = MutableLiveData<Boolean>()
5149
val ticketTableVisibility: LiveData<Boolean> = mutableTicketTableVisibility
5250
val ticketIdAndQty = MutableLiveData<List<Triple<Int, Int, Float>>>()
5351
var discountCodeCurrentLayout = APPLY_DISCOUNT_CODE
52+
var totalAmount: Float = 0.0f
5453

5554
fun isLoggedIn() = authHolder.isLoggedIn()
5655

@@ -106,7 +105,7 @@ class TicketsViewModel(
106105
})
107106
}
108107

109-
fun getAmount(ticketIdAndQty: List<Triple<Int, Int, Float>>) {
108+
fun getAmount(ticketIdAndQty: List<Triple<Int, Int, Float>>): Float {
110109
val ticketIds = ArrayList<Int>()
111110
val qty = ArrayList<Int>()
112111
val tax = taxInfo.value
@@ -121,34 +120,27 @@ class TicketsViewModel(
121120
}
122121
}
123122
val donation = ticketIdAndQty.map { it.third*it.second }.sum()
124-
compositeDisposable += ticketService.getTicketsWithIds(ticketIds)
125-
.withDefaultSchedulers()
126-
.doOnSubscribe {
127-
mutableProgress.value = true
128-
}.doFinally {
129-
mutableProgress.value = false
130-
}.subscribe({ tickets ->
131-
var prices = 0F
132-
var index = 0
133-
val code = appliedDiscountCode
134-
tickets.forEach { ticket ->
135-
var price = ticket.price
136-
totalTaxAmount += (ticket.price * taxRate / 100) * qty[index]
137-
if (code?.value != null) {
138-
appliedDiscountCode?.tickets?.forEach { ticketId ->
139-
if (ticket.id == ticketId.id.toInt()) {
140-
price -= if (code.type == AMOUNT) code.value else price*(code.value / 100)
141-
}
123+
tickets.value?.filter { ticketIds.contains(it.id) }?.let { tickets ->
124+
var prices = 0F
125+
var index = 0
126+
val code = appliedDiscountCode
127+
tickets.forEach { ticket ->
128+
var price = ticket.price
129+
totalTaxAmount += (ticket.price * taxRate / 100) * qty[index]
130+
if (code?.value != null) {
131+
appliedDiscountCode?.tickets?.forEach { ticketId ->
132+
if (ticket.id == ticketId.id.toInt()) {
133+
price -= if (code.type == AMOUNT) code.value else price*(code.value / 100)
142134
}
143135
}
144-
price.let { prices += price * qty[index] }
145-
index++
146136
}
147-
prices += totalTaxAmount
148-
mutableAmount.value = prices + donation
149-
}, {
150-
Timber.e(it, "Error Loading tickets!")
151-
})
137+
price.let { prices += price * qty[index] }
138+
index++
139+
}
140+
prices += totalTaxAmount
141+
return prices + donation
142+
}
143+
return -1F
152144
}
153145

154146
fun getTaxDetails(eventId: Long) {

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,5 +518,6 @@
518518
<string name="by_organizer_name">by %1$s</string>
519519
<string name="credit_debit_card">Debit/Credit Card</string>
520520
<string name="select_payment_option_message">Please select a payment option for this order</string>
521+
<string name="order_now">Order Now</string>
521522

522523
</resources>

0 commit comments

Comments
 (0)