diff --git a/app/src/main/java/org/fossasia/openevent/general/OpenEventDatabase.kt b/app/src/main/java/org/fossasia/openevent/general/OpenEventDatabase.kt index acdd1bd97..340e8fcf2 100644 --- a/app/src/main/java/org/fossasia/openevent/general/OpenEventDatabase.kt +++ b/app/src/main/java/org/fossasia/openevent/general/OpenEventDatabase.kt @@ -40,7 +40,7 @@ import org.fossasia.openevent.general.ticket.TicketIdConverter @Database(entities = [Event::class, User::class, SocialLink::class, Ticket::class, Attendee::class, EventTopic::class, Order::class, CustomForm::class, Speaker::class, SpeakerWithEvent::class, Sponsor::class, - SponsorWithEvent::class, Session::class], version = 5) + SponsorWithEvent::class, Session::class], version = 6) @TypeConverters(EventIdConverter::class, EventTopicConverter::class, EventTypeConverter::class, EventSubTopicConverter::class, TicketIdConverter::class, MicroLocationConverter::class, AttendeeIdConverter::class, ListAttendeeIdConverter::class, SessionTypeConverter::class) diff --git a/app/src/main/java/org/fossasia/openevent/general/attendees/Attendee.kt b/app/src/main/java/org/fossasia/openevent/general/attendees/Attendee.kt index 941448e68..976bd5b57 100644 --- a/app/src/main/java/org/fossasia/openevent/general/attendees/Attendee.kt +++ b/app/src/main/java/org/fossasia/openevent/general/attendees/Attendee.kt @@ -39,6 +39,7 @@ data class Attendee( @ColumnInfo(index = true) @Relationship("event") var event: EventId? = null, + @ColumnInfo(index = true) @Relationship("ticket") var ticket: TicketId? = null ) diff --git a/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeDao.kt b/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeDao.kt index ae8ffb36d..715869978 100644 --- a/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeDao.kt +++ b/app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeDao.kt @@ -19,11 +19,14 @@ interface AttendeeDao { fun insertCustomForms(customForms: List) @Query("DELETE FROM Attendee") - fun deleteAll() + fun deleteAllAttendees() @Query("SELECT * from Attendee WHERE id in (:ids)") fun getAttendeesWithIds(ids: List): Single> @Query("SELECT * from CustomForm WHERE event = :eventId") fun getCustomFormsForId(eventId: Long): Single> + + @Query("SELECT * FROM Attendee") + fun getAllAttendees(): Single> } diff --git a/app/src/main/java/org/fossasia/openevent/general/attendees/ListAttendeeIdConverter.kt b/app/src/main/java/org/fossasia/openevent/general/attendees/ListAttendeeIdConverter.kt index adcb0787e..0f1bbcfaa 100644 --- a/app/src/main/java/org/fossasia/openevent/general/attendees/ListAttendeeIdConverter.kt +++ b/app/src/main/java/org/fossasia/openevent/general/attendees/ListAttendeeIdConverter.kt @@ -3,6 +3,7 @@ package org.fossasia.openevent.general.attendees import androidx.room.TypeConverter import com.fasterxml.jackson.core.type.TypeReference import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper class ListAttendeeIdConverter { @@ -14,7 +15,7 @@ class ListAttendeeIdConverter { @TypeConverter fun toListAttendeeId(attendeeList: String): List { - val objectMapper = ObjectMapper() + val objectMapper = jacksonObjectMapper() val mapType = object : TypeReference>() {} return objectMapper.readValue(attendeeList, mapType) } diff --git a/app/src/main/java/org/fossasia/openevent/general/auth/AuthService.kt b/app/src/main/java/org/fossasia/openevent/general/auth/AuthService.kt index c249341f6..f628bc3c4 100644 --- a/app/src/main/java/org/fossasia/openevent/general/auth/AuthService.kt +++ b/app/src/main/java/org/fossasia/openevent/general/auth/AuthService.kt @@ -2,18 +2,22 @@ package org.fossasia.openevent.general.auth import io.reactivex.Completable import io.reactivex.Single +import org.fossasia.openevent.general.attendees.AttendeeDao import org.fossasia.openevent.general.auth.change.ChangeRequestToken import org.fossasia.openevent.general.auth.change.ChangeRequestTokenResponse import org.fossasia.openevent.general.auth.change.Password import org.fossasia.openevent.general.auth.forgot.Email import org.fossasia.openevent.general.auth.forgot.RequestToken import org.fossasia.openevent.general.auth.forgot.RequestTokenResponse +import org.fossasia.openevent.general.order.OrderDao import timber.log.Timber class AuthService( private val authApi: AuthApi, private val authHolder: AuthHolder, - private val userDao: UserDao + private val userDao: UserDao, + private val orderDao: OrderDao, + private val attendeeDao: AttendeeDao ) { fun login(username: String, password: String): Single { if (username.isEmpty() || password.isEmpty()) @@ -55,6 +59,8 @@ class AuthService( return Completable.fromAction { authHolder.token = null userDao.deleteUser(authHolder.getId()) + orderDao.deleteAllOrders() + attendeeDao.deleteAllAttendees() } } diff --git a/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt b/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt index b742d04b3..d6fecec11 100644 --- a/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt +++ b/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt @@ -178,7 +178,7 @@ val apiModule = module { } factory { AuthHolder(get()) } - factory { AuthService(get(), get(), get()) } + factory { AuthService(get(), get(), get(), get(), get()) } factory { EventService(get(), get(), get(), get(), get(), get(), get(), get()) } factory { SpeakerService(get(), get(), get()) } diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventDao.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventDao.kt index c65685a9b..66c623483 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventDao.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventDao.kt @@ -24,6 +24,9 @@ interface EventDao { @Query("SELECT * from Event WHERE id = :id") fun getEvent(id: Long): Flowable + @Query("SELECT * FROM event WHERE id = :eventId") + fun getEventById(eventId: Long): Single + @Query("SELECT * from Event WHERE id in (:ids)") fun getEventWithIds(ids: List): Single> diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventService.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventService.kt index e640ea547..5d01a2811 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventService.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventService.kt @@ -109,13 +109,25 @@ class EventService( return eventDao.getEvent(id) } - fun getEventFromApi(id: Long): Single { - return eventApi.getEventFromApi(id) + fun getEventById(eventId: Long): Single { + return eventDao.getEventById(eventId) + .onErrorResumeNext { + eventApi.getEventFromApi(eventId).map { + eventDao.insertEvent(it) + it + } + } } fun getEventsUnderUser(eventIds: List): Single> { val query = buildQuery(eventIds) return eventApi.eventsUnderUser(query) + .map { + eventDao.insertEvents(it) + it + }.onErrorResumeNext { + eventDao.getEventWithIds(eventIds).map { it } + } } fun setFavorite(eventId: Long, favorite: Boolean): Completable { diff --git a/app/src/main/java/org/fossasia/openevent/general/order/Order.kt b/app/src/main/java/org/fossasia/openevent/general/order/Order.kt index 116265dfd..dac2b537b 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/Order.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/Order.kt @@ -2,7 +2,6 @@ package org.fossasia.openevent.general.order import androidx.room.ColumnInfo import androidx.room.Entity -import androidx.room.ForeignKey import androidx.room.PrimaryKey import com.fasterxml.jackson.databind.PropertyNamingStrategy import com.fasterxml.jackson.databind.annotation.JsonNaming @@ -11,18 +10,12 @@ import com.github.jasminb.jsonapi.annotations.Id import com.github.jasminb.jsonapi.annotations.Relationship import com.github.jasminb.jsonapi.annotations.Type import io.reactivex.annotations.NonNull -import org.fossasia.openevent.general.attendees.Attendee import org.fossasia.openevent.general.attendees.AttendeeId -import org.fossasia.openevent.general.event.Event import org.fossasia.openevent.general.event.EventId @Type("order") @JsonNaming(PropertyNamingStrategy.KebabCaseStrategy::class) -@Entity(foreignKeys = [ - (ForeignKey(entity = Event::class, parentColumns = ["id"], - childColumns = ["event"], onDelete = ForeignKey.CASCADE)), - (ForeignKey(entity = Attendee::class, parentColumns = ["id"], - childColumns = ["attendees"], onDelete = ForeignKey.CASCADE))]) +@Entity data class Order( @Id(IntegerIdHandler::class) @PrimaryKey diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderDao.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderDao.kt index 35b2a67c5..221437814 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderDao.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderDao.kt @@ -3,6 +3,8 @@ package org.fossasia.openevent.general.order import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy +import androidx.room.Query +import io.reactivex.Single @Dao interface OrderDao { @@ -11,4 +13,13 @@ interface OrderDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertOrder(order: Order) + + @Query("SELECT * FROM `order`") + fun getAllOrders(): Single> + + @Query("DELETE FROM `order`") + fun deleteAllOrders() + + @Query("SELECT * FROM `order` WHERE id = :orderId") + fun getOrderById(orderId: Long): Single } diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsFragment.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsFragment.kt index 463d48c33..4627a63ca 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsFragment.kt @@ -48,20 +48,18 @@ class OrderDetailsFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - ordersRecyclerAdapter.setOrderIdentifier(safeArgs.orders) + ordersRecyclerAdapter.setOrderIdentifier(safeArgs.orderIdentifier) orderDetailsViewModel.event .nonNull() .observe(this, Observer { ordersRecyclerAdapter.setEvent(it) - ordersRecyclerAdapter.notifyDataSetChanged() }) orderDetailsViewModel.attendees .nonNull() .observe(this, Observer { ordersRecyclerAdapter.addAll(it) - ordersRecyclerAdapter.notifyDataSetChanged() Timber.d("Fetched attendees of size %s", ordersRecyclerAdapter.itemCount) }) } @@ -127,7 +125,7 @@ class OrderDetailsFragment : Fragment() { }) orderDetailsViewModel.loadEvent(safeArgs.eventId) - orderDetailsViewModel.loadAttendeeDetails(safeArgs.orders) + orderDetailsViewModel.loadAttendeeDetails(safeArgs.orderId) return rootView } diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsRecyclerAdapter.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsRecyclerAdapter.kt index f2c1aeac5..50d89d8b8 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsRecyclerAdapter.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsRecyclerAdapter.kt @@ -21,10 +21,12 @@ class OrderDetailsRecyclerAdapter : RecyclerView.Adapter if (attendees.isNotEmpty()) this.attendees.clear() this.attendees.addAll(attendeeList) + notifyDataSetChanged() } fun setEvent(event: Event?) { this.event = event + notifyDataSetChanged() } fun setSeeEventListener(listener: EventDetailsListener) { diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsViewModel.kt index dc64365f6..0921f049c 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderDetailsViewModel.kt @@ -36,7 +36,7 @@ class OrderDetailsViewModel( throw IllegalStateException("ID should never be -1") } - compositeDisposable += eventService.getEventFromApi(id) + compositeDisposable += eventService.getEventById(id) .withDefaultSchedulers() .subscribe({ mutableEvent.value = it @@ -46,21 +46,34 @@ class OrderDetailsViewModel( }) } - fun loadAttendeeDetails(id: String) { - if (id.equals(-1)) { - throw IllegalStateException("ID should never be -1") - } + fun loadAttendeeDetails(orderId: Long) { + if (orderId == -1L) return - compositeDisposable += orderService.attendeesUnderOrder(id) + compositeDisposable += orderService.getOrderById(orderId) .withDefaultSchedulers() .doOnSubscribe { mutableProgress.value = true - }.doFinally { - mutableProgress.value = false }.subscribe({ + loadAttendeeUnderOrder(it) + }, { + Timber.e(it, "Error fetching attendee details") + mutableProgress.value = false + message.value = resource.getString(R.string.error_fetching_attendee_details_message) + }) + } + + private fun loadAttendeeUnderOrder(order: Order) { + val orderIdentifier = order.identifier ?: return + + compositeDisposable += orderService + .getAttendeesUnderOrder(orderIdentifier, order.attendees.map { it.id }) + .withDefaultSchedulers() + .subscribe({ mutableAttendees.value = it + mutableProgress.value = false }, { Timber.e(it, "Error fetching attendee details") + mutableProgress.value = false message.value = resource.getString(R.string.error_fetching_attendee_details_message) }) } diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrderService.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrderService.kt index 99daff01b..415e06690 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrderService.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrderService.kt @@ -12,12 +12,10 @@ class OrderService( fun placeOrder(order: Order): Single { return orderApi.placeOrder(order) .map { order -> - val attendeeIds = order.attendees?.map { order.id } - if (attendeeIds != null) { - attendeeDao.getAttendeesWithIds(attendeeIds).map { - if (it.size == attendeeIds.size) { - orderDao.insertOrder(order) - } + val attendeeIds = order.attendees.map { order.id } + attendeeDao.getAttendeesWithIds(attendeeIds).map { + if (it.size == attendeeIds.size) { + orderDao.insertOrder(order) } } order @@ -32,11 +30,27 @@ class OrderService( return orderApi.confirmOrder(identifier, order) } - fun orderUser(userId: Long): Single> { + fun getOrdersOfUser(userId: Long): Single> { return orderApi.ordersUnderUser(userId) + .map { + orderDao.insertOrders(it) + it + }.onErrorResumeNext { + orderDao.getAllOrders().map { it } + } } - fun attendeesUnderOrder(orderIdentifier: String): Single> { + fun getOrderById(orderId: Long): Single { + return orderDao.getOrderById(orderId) + } + + fun getAttendeesUnderOrder(orderIdentifier: String, attendeesIds: List): Single> { return orderApi.attendeesUnderOrder(orderIdentifier) + .map { + attendeeDao.insertAttendees(it) + it + }.onErrorResumeNext { + attendeeDao.getAttendeesWithIds(attendeesIds) + } } } diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrdersRecyclerAdapter.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrdersRecyclerAdapter.kt index ab7fe3b53..55117b93c 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrdersRecyclerAdapter.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrdersRecyclerAdapter.kt @@ -8,19 +8,19 @@ import org.fossasia.openevent.general.event.Event class OrdersRecyclerAdapter : RecyclerView.Adapter() { - private val eventAndOrderIdentifier = ArrayList>() - private val showExpired = false + private val eventAndOrderIdentifier = ArrayList>() + private var showExpired = false private var clickListener: OrderClickListener? = null - var attendeesNumber = listOf() fun setListener(listener: OrderClickListener) { clickListener = listener } - fun addAllPairs(list: List>, showExpired: Boolean) { + fun addAllPairs(list: List>, showExpired: Boolean) { if (eventAndOrderIdentifier.isNotEmpty()) this.eventAndOrderIdentifier.clear() eventAndOrderIdentifier.addAll(list) + this.showExpired = showExpired } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrdersViewHolder { @@ -29,23 +29,14 @@ class OrdersRecyclerAdapter : RecyclerView.Adapter() { } override fun onBindViewHolder(holder: OrdersViewHolder, position: Int) { - attendeesNumber[position]?.let { - holder.bind(eventAndOrderIdentifier[position].first, - clickListener, - eventAndOrderIdentifier[position].second, - it, showExpired) - } + holder.bind(eventAndOrderIdentifier[position], showExpired, clickListener) } override fun getItemCount(): Int { return eventAndOrderIdentifier.size } - fun setAttendeeNumber(number: List) { - attendeesNumber = number - } - interface OrderClickListener { - fun onClick(eventID: Long, orderIdentifier: String) + fun onClick(eventID: Long, orderIdentifier: String, orderId: Long) } } diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt index 5bee56e3a..d51c62a20 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserFragment.kt @@ -77,9 +77,9 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop { if (safeArgs.showExpired) rootView.expireFilter.isVisible = false val recyclerViewClickListener = object : OrdersRecyclerAdapter.OrderClickListener { - override fun onClick(eventID: Long, orderIdentifier: String) { - findNavController(rootView).navigate(OrdersUnderUserFragmentDirections - .actionOrderUserToOrderDetails(eventID, orderIdentifier)) + override fun onClick(eventID: Long, orderIdentifier: String, orderId: Long) { + findNavController(rootView).navigate(OrdersUnderUserFragmentDirections + .actionOrderUserToOrderDetails(eventID, orderIdentifier, orderId)) } } @@ -109,13 +109,7 @@ class OrdersUnderUserFragment : Fragment(), ScrollToTop { showNoTicketsScreen(it) }) - ordersUnderUserVM.attendeesNumber - .nonNull() - .observe(viewLifecycleOwner, Observer { - ordersRecyclerAdapter.setAttendeeNumber(it) - }) - - ordersUnderUserVM.eventAndOrderIdentifier + ordersUnderUserVM.eventAndOrder .nonNull() .observe(viewLifecycleOwner, Observer { val list = it.sortedByDescending { diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserViewModel.kt index 47815b5f0..363be8961 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrdersUnderUserViewModel.kt @@ -24,17 +24,14 @@ class OrdersUnderUserViewModel( private val compositeDisposable = CompositeDisposable() private lateinit var order: List - private val mutableAttendeesNumber = MutableLiveData>() - val attendeesNumber: LiveData> = mutableAttendeesNumber private var eventIdMap = mutableMapOf() private val eventIdAndTimes = mutableMapOf() private val mutableMessage = SingleLiveEvent() val message: LiveData = mutableMessage - private val mutableEventAndOrderIdentifier = MutableLiveData>>() - val eventAndOrderIdentifier: LiveData>> = - mutableEventAndOrderIdentifier - private val mutableshowShimmerResults = MutableLiveData() - val showShimmerResults: LiveData = mutableshowShimmerResults + private val mutableEventAndOrder = MutableLiveData>>() + val eventAndOrder: LiveData>> = mutableEventAndOrder + private val mutableShowShimmerResults = MutableLiveData() + val showShimmerResults: LiveData = mutableShowShimmerResults private val mutableNoTickets = MutableLiveData() val noTickets: LiveData = mutableNoTickets @@ -43,24 +40,22 @@ class OrdersUnderUserViewModel( fun isLoggedIn() = authHolder.isLoggedIn() fun ordersUnderUser(showExpired: Boolean) { - compositeDisposable += orderService.orderUser(getId()) + compositeDisposable += orderService.getOrdersOfUser(getId()) .withDefaultSchedulers() .doOnSubscribe { - mutableshowShimmerResults.value = true + mutableShowShimmerResults.value = true mutableNoTickets.value = false }.subscribe({ order = it - mutableAttendeesNumber.value = it.map { it.attendees.size } - val eventIds = it.mapNotNull { order -> order.event?.id } if (eventIds.isNotEmpty()) { eventsUnderUser(eventIds, showExpired) } else { - mutableshowShimmerResults.value = false + mutableShowShimmerResults.value = false mutableNoTickets.value = true } }, { - mutableshowShimmerResults.value = false + mutableShowShimmerResults.value = false mutableNoTickets.value = true mutableMessage.value = resource.getString(R.string.list_orders_fail_message) Timber.d(it, "Failed to list Orders under a user ") @@ -71,7 +66,7 @@ class OrdersUnderUserViewModel( compositeDisposable += eventService.getEventsUnderUser(eventIds) .withDefaultSchedulers() .doFinally { - mutableshowShimmerResults.value = false + mutableShowShimmerResults.value = false }.subscribe({ val events = ArrayList() it.map { @@ -83,22 +78,20 @@ class OrdersUnderUserViewModel( } eventIdMap[it.id] = it } - var eventAndIdentifier = ArrayList>() - var finalList: List> + val eventAndIdentifier = ArrayList>() order.forEach { val event = eventIdMap[it.event?.id] - if (event != null && it.identifier != null) - eventAndIdentifier.add(Pair(event, it.identifier)) + if (event != null) + eventAndIdentifier.add(Pair(event, it)) } - finalList = eventAndIdentifier - when (showExpired) { - false -> finalList = finalList.filter { + val finalList = when (showExpired) { + false -> eventAndIdentifier.filter { EventUtils.getTimeInMilliSeconds(it.first.endsAt, null) > System.currentTimeMillis() } - true -> finalList = finalList.filter { + true -> eventAndIdentifier.filter { EventUtils.getTimeInMilliSeconds(it.first.endsAt, null) < System.currentTimeMillis() } } if (finalList.isEmpty()) mutableNoTickets.value = true - mutableEventAndOrderIdentifier.value = finalList + mutableEventAndOrder.value = finalList }, { mutableMessage.value = resource.getString(R.string.list_events_fail_message) Timber.d(it, "Failed to list events under a user ") diff --git a/app/src/main/java/org/fossasia/openevent/general/order/OrdersViewHolder.kt b/app/src/main/java/org/fossasia/openevent/general/order/OrdersViewHolder.kt index 3571f7b9c..4128b623d 100644 --- a/app/src/main/java/org/fossasia/openevent/general/order/OrdersViewHolder.kt +++ b/app/src/main/java/org/fossasia/openevent/general/order/OrdersViewHolder.kt @@ -13,12 +13,12 @@ import org.fossasia.openevent.general.event.EventUtils class OrdersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind( - event: Event, - clickListener: OrdersRecyclerAdapter.OrderClickListener?, - orderIdentifier: String?, - attendeesNumber: Int, - showExpired: Boolean + eventAndOrder: Pair, + showExpired: Boolean, + listener: OrdersRecyclerAdapter.OrderClickListener? ) { + val event = eventAndOrder.first + val order = eventAndOrder.second val formattedDateTime = EventUtils.getEventDateTime(event.startsAt, event.timezone) val formattedTime = EventUtils.getFormattedTime(formattedDateTime) val timezone = EventUtils.getFormattedTimeZone(formattedDateTime) @@ -26,9 +26,10 @@ class OrdersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { itemView.eventName.text = event.name itemView.time.text = "Starts at $formattedTime $timezone" itemView.setOnClickListener { - orderIdentifier?.let { it1 -> clickListener?.onClick(event.id, it1) } + listener?.onClick(event.id, order.identifier ?: "", order.id) } + val attendeesNumber = order.attendees.size if (attendeesNumber == 1) { itemView.ticketsNumber.text = "See $attendeesNumber Ticket" } else { @@ -44,7 +45,7 @@ class OrdersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { .placeholder(R.drawable.header) .into(itemView.eventImage) } - if (!showExpired) { + if (showExpired) { val matrix = ColorMatrix() matrix.setSaturation(0F) itemView.eventImage.colorFilter = ColorMatrixColorFilter(matrix) diff --git a/app/src/main/java/org/fossasia/openevent/general/ticket/TicketIdConverter.kt b/app/src/main/java/org/fossasia/openevent/general/ticket/TicketIdConverter.kt index 6e0028fb9..f2825ee50 100644 --- a/app/src/main/java/org/fossasia/openevent/general/ticket/TicketIdConverter.kt +++ b/app/src/main/java/org/fossasia/openevent/general/ticket/TicketIdConverter.kt @@ -5,12 +5,14 @@ import androidx.room.TypeConverter class TicketIdConverter { @TypeConverter - fun fromTicketId(ticketId: TicketId): Long { - return ticketId.id + fun fromTicketId(ticketId: TicketId?): Long? { + return ticketId?.id } @TypeConverter - fun toTicketId(id: Long): TicketId { - return TicketId(id) + fun toTicketId(id: Long?): TicketId? { + return id?.let { + TicketId(id) + } } } diff --git a/app/src/main/res/navigation/navigation_graph.xml b/app/src/main/res/navigation/navigation_graph.xml index 63f50071c..0d3b3a9f2 100644 --- a/app/src/main/res/navigation/navigation_graph.xml +++ b/app/src/main/res/navigation/navigation_graph.xml @@ -365,9 +365,14 @@ android:defaultValue="-1L"/> + android:defaultValue=""/> + +