Skip to content

Commit

Permalink
fix: Fetch order expiry time from settings (#2109)
Browse files Browse the repository at this point in the history
  • Loading branch information
liveHarshit committed Jul 12, 2019
1 parent 1e35275 commit f0521a4
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,6 @@ import java.util.Calendar
import java.util.Currency
import kotlin.collections.ArrayList

private const val COUNT_DOWN_TIME = 15 // in minutes

class AttendeeFragment : Fragment(), ComplexBackPressFragment {

private lateinit var rootView: View
Expand Down Expand Up @@ -260,9 +258,13 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
.observe(viewLifecycleOwner, Observer {
loadEventDetailsUI(it)
setupPaymentOptions(it)
if (attendeeViewModel.pendingOrder.value != null) {
setupCountDownTimer(it)
}
})

attendeeViewModel.fetchSettings()
attendeeViewModel.orderExpiryTime
.nonNull()
.observe(viewLifecycleOwner, Observer {
setupCountDownTimer(it)
})

val currentEvent = attendeeViewModel.event.value
Expand All @@ -271,33 +273,22 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
else {
setupPaymentOptions(currentEvent)
loadEventDetailsUI(currentEvent)
if (attendeeViewModel.pendingOrder.value != null) {
setupCountDownTimer(currentEvent)
}
}
}

private fun setupPendingOrder() {
attendeeViewModel.pendingOrder
.nonNull()
.observe(viewLifecycleOwner, Observer {
attendeeViewModel.event.value?.let {
setupCountDownTimer(it)
}
})

val currentPendingOrder = attendeeViewModel.pendingOrder.value
if (currentPendingOrder == null) {
attendeeViewModel.initializeOrder(safeArgs.eventId)
}
}

private fun setupCountDownTimer(event: Event) {
private fun setupCountDownTimer(orderExpiryTime: Int) {
rootView.timeoutCounterLayout.visibility = View.VISIBLE
rootView.timeoutInfoTextView.text =
getString(R.string.ticket_timeout_info_message, event.orderExpiryTime.toString())
getString(R.string.ticket_timeout_info_message, orderExpiryTime.toString())

val timeLeft: Long = if (attendeeViewModel.timeout == -1L) COUNT_DOWN_TIME * 60 * 1000L
val timeLeft: Long = if (attendeeViewModel.timeout == -1L) orderExpiryTime * 60 * 1000L
else attendeeViewModel.timeout
timer = object : CountDownTimer(timeLeft, 1000) {
override fun onFinish() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import org.fossasia.openevent.general.order.Charge
import org.fossasia.openevent.general.order.ConfirmOrder
import org.fossasia.openevent.general.order.Order
import org.fossasia.openevent.general.order.OrderService
import org.fossasia.openevent.general.settings.SettingsService
import org.fossasia.openevent.general.ticket.Ticket
import org.fossasia.openevent.general.ticket.TicketService
import org.fossasia.openevent.general.utils.HttpErrors
Expand All @@ -45,6 +46,7 @@ class AttendeeViewModel(
private val orderService: OrderService,
private val ticketService: TicketService,
private val authService: AuthService,
private val settingsService: SettingsService,
private val resource: Resource
) : ViewModel() {

Expand All @@ -70,6 +72,8 @@ class AttendeeViewModel(
val pendingOrder: LiveData<Order> = mutablePendingOrder
private val mutableStripeOrderMade = MutableLiveData<Boolean>()
val stripeOrderMade: LiveData<Boolean> = mutableStripeOrderMade
private val mutableOrderExpiryTime = MutableLiveData<Int>()
val orderExpiryTime: LiveData<Int> = mutableOrderExpiryTime

val attendees = ArrayList<Attendee>()
private val attendeesForOrder = ArrayList<Attendee>()
Expand Down Expand Up @@ -389,6 +393,21 @@ class AttendeeViewModel(
return true
}

fun fetchSettings() {
compositeDisposable += settingsService.getSettings()
.withDefaultSchedulers()
.doOnSubscribe {
mutableProgress.value = true
}.doFinally {
mutableProgress.value = false
}.subscribe({
mutableOrderExpiryTime.value = it.orderExpiryTime
}, {
mutableOrderExpiryTime.value = 15
Timber.e(it, "Error fetching settings")
})
}

override fun onCleared() {
super.onCleared()
compositeDisposable.clear()
Expand Down
12 changes: 10 additions & 2 deletions app/src/main/java/org/fossasia/openevent/general/di/Modules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ import org.fossasia.openevent.general.sessions.SessionViewModel
import org.fossasia.openevent.general.sessions.microlocation.MicroLocation
import org.fossasia.openevent.general.sessions.sessiontype.SessionType
import org.fossasia.openevent.general.sessions.track.Track
import org.fossasia.openevent.general.settings.Settings
import org.fossasia.openevent.general.settings.SettingsApi
import org.fossasia.openevent.general.settings.SettingsService
import org.fossasia.openevent.general.settings.SettingsViewModel
import org.fossasia.openevent.general.social.SocialLink
import org.fossasia.openevent.general.social.SocialLinkApi
Expand Down Expand Up @@ -194,6 +197,10 @@ val apiModule = module {
val retrofit: Retrofit = get()
retrofit.create(DiscountApi::class.java)
}
single {
val retrofit: Retrofit = get()
retrofit.create(SettingsApi::class.java)
}

factory { AuthHolder(get()) }
factory { AuthService(get(), get(), get(), get(), get()) }
Expand All @@ -208,6 +215,7 @@ val apiModule = module {
factory { SessionService(get(), get()) }
factory { NotificationService(get(), get()) }
factory { FeedbackService(get(), get()) }
factory { SettingsService(get()) }
}

val viewModelModule = module {
Expand All @@ -220,7 +228,7 @@ val viewModelModule = module {
viewModel { SessionViewModel(get(), get(), get()) }
viewModel { SearchViewModel(get(), get()) }
viewModel { SearchResultsViewModel(get(), get(), get(), get(), get()) }
viewModel { AttendeeViewModel(get(), get(), get(), get(), get(), get(), get()) }
viewModel { AttendeeViewModel(get(), get(), get(), get(), get(), get(), get(), get()) }
viewModel { SearchLocationViewModel(get(), get()) }
viewModel { SearchTimeViewModel(get()) }
viewModel { SearchTypeViewModel(get(), get(), get()) }
Expand Down Expand Up @@ -292,7 +300,7 @@ val networkModule = module {
EventSubTopic::class.java, Feedback::class.java, Speaker::class.java,
Session::class.java, SessionType::class.java, MicroLocation::class.java, SpeakersCall::class.java,
Sponsor::class.java, EventFAQ::class.java, Notification::class.java, Track::class.java,
DiscountCode::class.java)
DiscountCode::class.java, Settings::class.java)

Retrofit.Builder()
.client(get())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ data class Event(
val latitude: Double? = null,
val longitude: Double? = null,
val refundPolicy: String? = null,
val orderExpiryTime: Int = 10,

val canPayByStripe: Boolean = false,
val canPayByCheque: Boolean = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.fossasia.openevent.general.settings

import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.databind.annotation.JsonNaming
import com.github.jasminb.jsonapi.IntegerIdHandler
import com.github.jasminb.jsonapi.annotations.Id
import com.github.jasminb.jsonapi.annotations.Type

@Type("setting")
@JsonNaming(PropertyNamingStrategy.KebabCaseStrategy::class)
data class Settings(
@Id(IntegerIdHandler::class)
val id: Int? = null,
val appName: String? = null,
val tagline: String? = null,
val isPaypalActivated: Boolean = false,
val isStripeActivated: Boolean = false,
val isOmiseActivated: Boolean = false,
val frontendUrl: String? = null,
val cookiePolicy: String? = null,
val cookiePolicyLink: String? = null,
val orderExpiryTime: Int? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.fossasia.openevent.general.settings

import io.reactivex.Single
import retrofit2.http.GET

interface SettingsApi {

@GET("settings")
fun getSettings(): Single<Settings>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.fossasia.openevent.general.settings

import io.reactivex.Single

class SettingsService(val settingsApi: SettingsApi) {

fun getSettings(): Single<Settings> {
return settingsApi.getSettings()
}
}
2 changes: 1 addition & 1 deletion app/src/main/res/layout/fragment_attendee.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:textSize="@dimen/text_size_expanded_title_large"
android:textSize="@dimen/text_size_expanded_title_medium"
android:textColor="@android:color/black"
android:textStyle="bold"
android:gravity="center_vertical"
Expand Down

0 comments on commit f0521a4

Please sign in to comment.