Skip to content

Commit 60e47e0

Browse files
anhanh11001iamareebjamal
authored andcommitted
fix: Illogical information displayed in Ticket and Event section (#2129)
1 parent 26a8166 commit 60e47e0

File tree

8 files changed

+120
-55
lines changed

8 files changed

+120
-55
lines changed

app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeFragment.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,12 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
127127
private lateinit var timer: CountDownTimer
128128
private lateinit var card: Card
129129

130-
private lateinit var API_KEY: String
131-
132130
override fun onCreate(savedInstanceState: Bundle?) {
133131
super.onCreate(savedInstanceState)
134132
if (attendeeViewModel.ticketIdAndQty == null) {
135133
attendeeViewModel.ticketIdAndQty = safeArgs.ticketIdAndQty?.value
136134
attendeeViewModel.singleTicket = safeArgs.ticketIdAndQty?.value?.map { it.second }?.sum() == 1
137135
}
138-
API_KEY = BuildConfig.STRIPE_API_KEY
139136

140137
attendeeRecyclerAdapter.setEventId(safeArgs.eventId)
141138
if (attendeeViewModel.paymentCurrency.isNotBlank())
@@ -243,10 +240,9 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
243240
AlertDialog.Builder(requireContext())
244241
.setTitle(getString(R.string.cancel_order))
245242
.setMessage(getString(R.string.cancel_order_message))
246-
.setPositiveButton(getString(R.string.continue_string)) { _, _ ->
243+
.setPositiveButton(getString(R.string.cancel_order_button)) { _, _ ->
247244
findNavController(rootView).popBackStack()
248-
}
249-
.setNegativeButton(getString(R.string.cancel)) { dialog, _ ->
245+
}.setNeutralButton(getString(R.string.continue_order_button)) { dialog, _ ->
250246
dialog.cancel()
251247
}.create()
252248
.show()
@@ -274,6 +270,8 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
274270
setupPaymentOptions(currentEvent)
275271
loadEventDetailsUI(currentEvent)
276272
}
273+
274+
rootView.register.text = if (safeArgs.amount > 0) getString(R.string.pay_now) else getString(R.string.register)
277275
}
278276

279277
private fun setupPendingOrder() {
@@ -321,7 +319,6 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
321319
attendeeViewModel.totalAmount.value = safeArgs.amount
322320
rootView.paymentSelectorContainer.isVisible = safeArgs.amount > 0
323321
rootView.billingInfoCheckboxSection.isVisible = safeArgs.amount > 0
324-
rootView.amount.text = "Total: ${attendeeViewModel.paymentCurrency}${safeArgs.amount}"
325322

326323
attendeeViewModel.tickets
327324
.nonNull()
@@ -331,10 +328,8 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
331328
})
332329

333330
val currentTickets = attendeeViewModel.tickets.value
334-
val currentTotalPrice = safeArgs.amount
335-
if (currentTickets != null && currentTotalPrice != null) {
336-
rootView.paymentSelector.isVisible = currentTotalPrice > 0
337-
rootView.amount.text = "Total: ${attendeeViewModel.paymentCurrency}$currentTotalPrice"
331+
if (currentTickets != null) {
332+
rootView.paymentSelector.isVisible = safeArgs.amount > 0
338333

339334
ticketsRecyclerAdapter.addAll(currentTickets)
340335
attendeeRecyclerAdapter.addAllTickets(currentTickets)
@@ -797,7 +792,7 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
797792

798793
private fun sendToken(card: Card) {
799794
Stripe(requireContext())
800-
.createToken(card, API_KEY, object : TokenCallback {
795+
.createToken(card, BuildConfig.STRIPE_API_KEY, object : TokenCallback {
801796
override fun onSuccess(token: Token) {
802797
val charge = Charge(attendeeViewModel.getId().toInt(), token.id, null)
803798
attendeeViewModel.chargeOrder(charge)
@@ -812,10 +807,14 @@ class AttendeeFragment : Fragment(), ComplexBackPressFragment {
812807
val dateString = StringBuilder()
813808
val startsAt = EventUtils.getEventDateTime(event.startsAt, event.timezone)
814809
val endsAt = EventUtils.getEventDateTime(event.endsAt, event.timezone)
810+
815811
attendeeViewModel.paymentCurrency = Currency.getInstance(event.paymentCurrency).symbol
816812
ticketsRecyclerAdapter.setCurrency(attendeeViewModel.paymentCurrency)
817813

818814
rootView.eventName.text = event.name
815+
val total = if (safeArgs.amount > 0) "${attendeeViewModel.paymentCurrency}${safeArgs.amount}"
816+
else getString(R.string.free)
817+
rootView.amount.text = "Total: $total"
819818

820819
val startDate = EventUtils.getFormattedDate(startsAt)
821820
val endDate = EventUtils.getFormattedDate(endsAt)

app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeService.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,17 @@ class AttendeeService(
2828
}
2929

3030
fun getCustomFormsForAttendees(id: Long): Single<List<CustomForm>> {
31-
val filter = "[{\"name\":\"form\",\"op\":\"eq\",\"val\":\"attendee\"}]"
31+
val filter = """[{
32+
| 'and':[{
33+
| 'name':'form',
34+
| 'op':'eq',
35+
| 'val':'attendee'
36+
| },{
37+
| 'name':'is-included',
38+
| 'op':'eq',
39+
| 'val':true
40+
| }]
41+
|}]""".trimMargin().replace("'", "\"")
3242
return attendeeApi.getCustomFormsForAttendees(id, filter)
3343
}
3444
}

app/src/main/java/org/fossasia/openevent/general/attendees/AttendeeViewHolder.kt

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import android.text.Editable
55
import android.text.InputType
66
import android.text.SpannableStringBuilder
77
import android.text.TextWatcher
8+
import android.view.View
9+
import android.widget.AdapterView
10+
import android.widget.ArrayAdapter
811
import androidx.core.view.isVisible
912
import com.google.android.material.textfield.TextInputEditText
1013
import com.google.android.material.textfield.TextInputLayout
@@ -45,15 +48,18 @@ import kotlinx.android.synthetic.main.item_attendee.view.homeAddress
4548
import kotlinx.android.synthetic.main.item_attendee.view.cityLayout
4649
import kotlinx.android.synthetic.main.item_attendee.view.city
4750
import kotlinx.android.synthetic.main.item_attendee.view.genderLayout
48-
import kotlinx.android.synthetic.main.item_attendee.view.gender
51+
import kotlinx.android.synthetic.main.item_attendee.view.genderText
52+
import kotlinx.android.synthetic.main.item_attendee.view.genderSpinner
4953
import kotlinx.android.synthetic.main.item_attendee.view.company
5054
import kotlinx.android.synthetic.main.item_attendee.view.companyLayout
5155
import kotlinx.android.synthetic.main.item_attendee.view.countryLayout
5256
import kotlinx.android.synthetic.main.item_attendee.view.country
5357
import kotlinx.android.synthetic.main.item_attendee.view.jobTitleLayout
5458
import kotlinx.android.synthetic.main.item_attendee.view.jobTitle
59+
import org.fossasia.openevent.general.R
5560
import org.fossasia.openevent.general.attendees.forms.CustomForm
5661
import org.fossasia.openevent.general.attendees.forms.FormIdentifier
62+
import org.fossasia.openevent.general.data.Resource
5763
import org.fossasia.openevent.general.databinding.ItemAttendeeBinding
5864
import org.fossasia.openevent.general.event.EventId
5965
import org.fossasia.openevent.general.ticket.Ticket
@@ -66,6 +72,7 @@ import org.fossasia.openevent.general.utils.setRequired
6672
import org.fossasia.openevent.general.utils.nullToEmpty
6773

6874
class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerView.ViewHolder(binding.root) {
75+
private val resource = Resource()
6976
private val requiredList = mutableListOf<TextInputEditText>()
7077
var onAttendeeDetailChanged: AttendeeDetailChangeListener? = null
7178

@@ -101,39 +108,15 @@ class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerVie
101108
}
102109
val textWatcher = object : TextWatcher {
103110
override fun afterTextChanged(s: Editable?) {
104-
val newAttendee = Attendee(
105-
id = attendee.id,
106-
firstname = itemView.firstName.text.toString(),
107-
lastname = itemView.lastName.text.toString(),
108-
email = itemView.email.text.toString(),
109-
address = itemView.address.text.toString().emptyToNull(),
110-
city = itemView.city.text.toString().emptyToNull(),
111-
state = itemView.state.text.toString().emptyToNull(),
112-
country = itemView.country.text.toString().emptyToNull(),
113-
jobTitle = itemView.jobTitle.text.toString().emptyToNull(),
114-
phone = itemView.phone.text.toString().emptyToNull(),
115-
taxBusinessInfo = itemView.taxBusinessInfo.text.toString().emptyToNull(),
116-
billingAddress = itemView.attendeeBillingAddress.text.toString().emptyToNull(),
117-
homeAddress = itemView.homeAddress.text.toString().emptyToNull(),
118-
shippingAddress = itemView.shippingAddress.text.toString().emptyToNull(),
119-
company = itemView.company.text.toString().emptyToNull(),
120-
workAddress = itemView.workAddress.text.toString().emptyToNull(),
121-
workPhone = itemView.workPhone.text.toString().emptyToNull(),
122-
website = itemView.website.text.toString().emptyToNull(),
123-
blog = itemView.blog.text.toString().emptyToNull(),
124-
twitter = itemView.twitter.text.toString().emptyToNull(),
125-
facebook = itemView.facebook.text.toString().emptyToNull(),
126-
github = itemView.github.text.toString().emptyToNull(),
127-
gender = itemView.gender.text.toString().emptyToNull(),
128-
ticket = TicketId(ticket.id.toLong()),
129-
event = EventId(eventId))
111+
val newAttendee = getAttendeeInformation(attendee.id, ticket, eventId)
130112
onAttendeeDetailChanged?.onAttendeeDetailChanged(newAttendee, position)
131113
}
132114

133115
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { /*Do nothing*/ }
134116
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { /*Do nothing*/ }
135117
}
136118
requiredList.clear()
119+
setupGendersSpinner(attendee, ticket, eventId, position)
137120
customForm.forEach { form ->
138121
setupCustomFormWithFields(form, textWatcher)
139122
}
@@ -183,12 +166,36 @@ class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerVie
183166
setupField(itemView.companyLayout, itemView.company, form.isRequired, textWatcher)
184167
FormIdentifier.GITHUB ->
185168
setupField(itemView.githubLayout, itemView.github, form.isRequired, textWatcher)
186-
FormIdentifier.GENDER ->
187-
setupField(itemView.genderLayout, itemView.gender, form.isRequired, textWatcher)
169+
FormIdentifier.GENDER -> {
170+
itemView.genderLayout.isVisible = true
171+
if (form.isRequired) {
172+
itemView.genderText.text = "${resource.getString(R.string.gender)}*"
173+
}
174+
}
188175
else -> return
189176
}
190177
}
191178

179+
private fun setupGendersSpinner(attendee: Attendee, ticket: Ticket, eventId: Long, position: Int) {
180+
val genders = mutableListOf(resource.getString(R.string.male),
181+
resource.getString(R.string.female), resource.getString(R.string.others))
182+
itemView.genderSpinner.adapter =
183+
ArrayAdapter(itemView.context, android.R.layout.simple_spinner_dropdown_item, genders)
184+
185+
val genderSelected = genders.indexOf(attendee.gender)
186+
if (genderSelected != -1)
187+
itemView.genderSpinner.setSelection(genderSelected)
188+
189+
itemView.genderSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
190+
override fun onNothingSelected(parent: AdapterView<*>?) { /* Do Nothing */ }
191+
192+
override fun onItemSelected(parent: AdapterView<*>?, view: View?, p: Int, id: Long) {
193+
val newAttendee = getAttendeeInformation(attendee.id, ticket, eventId)
194+
onAttendeeDetailChanged?.onAttendeeDetailChanged(newAttendee, position)
195+
}
196+
}
197+
}
198+
192199
private fun setupField(
193200
layout: TextInputLayout,
194201
editText: TextInputEditText,
@@ -217,4 +224,33 @@ class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerVie
217224
}
218225
return true
219226
}
227+
228+
private fun getAttendeeInformation(id: Long, ticket: Ticket, eventId: Long): Attendee {
229+
return Attendee(
230+
id = id,
231+
firstname = itemView.firstName.text.toString(),
232+
lastname = itemView.lastName.text.toString(),
233+
email = itemView.email.text.toString(),
234+
address = itemView.address.text.toString().emptyToNull(),
235+
city = itemView.city.text.toString().emptyToNull(),
236+
state = itemView.state.text.toString().emptyToNull(),
237+
country = itemView.country.text.toString().emptyToNull(),
238+
jobTitle = itemView.jobTitle.text.toString().emptyToNull(),
239+
phone = itemView.phone.text.toString().emptyToNull(),
240+
taxBusinessInfo = itemView.taxBusinessInfo.text.toString().emptyToNull(),
241+
billingAddress = itemView.attendeeBillingAddress.text.toString().emptyToNull(),
242+
homeAddress = itemView.homeAddress.text.toString().emptyToNull(),
243+
shippingAddress = itemView.shippingAddress.text.toString().emptyToNull(),
244+
company = itemView.company.text.toString().emptyToNull(),
245+
workAddress = itemView.workAddress.text.toString().emptyToNull(),
246+
workPhone = itemView.workPhone.text.toString().emptyToNull(),
247+
website = itemView.website.text.toString().emptyToNull(),
248+
blog = itemView.blog.text.toString().emptyToNull(),
249+
twitter = itemView.twitter.text.toString().emptyToNull(),
250+
facebook = itemView.facebook.text.toString().emptyToNull(),
251+
github = itemView.github.text.toString().emptyToNull(),
252+
gender = itemView.genderSpinner.selectedItem.toString(),
253+
ticket = TicketId(ticket.id.toLong()),
254+
event = EventId(eventId))
255+
}
220256
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class TicketDetailsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView
2222
}
2323
TICKET_TYPE_FREE -> {
2424
itemView.price.text = resource.getString(R.string.free)
25+
itemView.subTotal.text = "${eventCurrency}0.00"
2526
}
2627
TICKET_TYPE_PAID -> {
2728
itemView.price.text = "$eventCurrency${ticket.price}"

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import org.fossasia.openevent.general.utils.Utils.progressDialog
3939
import org.fossasia.openevent.general.utils.Utils.show
4040
import org.fossasia.openevent.general.utils.Utils.hideSoftKeyboard
4141
import org.fossasia.openevent.general.utils.extensions.nonNull
42-
import org.fossasia.openevent.general.utils.nullToEmpty
4342
import org.koin.androidx.viewmodel.ext.android.viewModel
4443
import org.fossasia.openevent.general.utils.Utils.setToolbar
4544
import org.jetbrains.anko.design.longSnackbar
@@ -277,7 +276,13 @@ class TicketsFragment : Fragment() {
277276

278277
private fun loadEventDetails(event: Event) {
279278
rootView.eventName.text = event.name
280-
rootView.organizerName.text = "by ${event.ownerName.nullToEmpty()}"
279+
val organizerName = event.ownerName
280+
if (organizerName == null) {
281+
rootView.organizerName.isVisible = false
282+
} else {
283+
rootView.organizerName.isVisible = true
284+
rootView.organizerName.text = "by $organizerName"
285+
}
281286
val startsAt = EventUtils.getEventDateTime(event.startsAt, event.timezone)
282287
val endsAt = EventUtils.getEventDateTime(event.endsAt, event.timezone)
283288
rootView.time.text = EventUtils.getFormattedDateTimeRangeDetailed(startsAt, endsAt)

app/src/main/res/layout/item_attendee.xml

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -392,22 +392,28 @@
392392
android:text="@{attendee.github}"
393393
android:inputType="textUri"/>
394394
</com.google.android.material.textfield.TextInputLayout>
395-
<com.google.android.material.textfield.TextInputLayout
396-
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
395+
396+
<LinearLayout
397397
android:id="@+id/genderLayout"
398398
android:layout_width="match_parent"
399399
android:layout_height="wrap_content"
400400
android:layout_marginBottom="@dimen/padding_medium"
401401
android:layout_marginTop="@dimen/padding_medium"
402-
android:hint="@string/gender"
402+
android:orientation="horizontal"
403+
android:padding="@dimen/padding_medium"
403404
android:visibility="gone"
404405
tools:visibility="visible">
405-
406-
<com.google.android.material.textfield.TextInputEditText
407-
android:id="@+id/gender"
408-
android:layout_width="match_parent"
406+
<TextView
407+
android:id="@+id/genderText"
408+
android:layout_width="wrap_content"
409409
android:layout_height="wrap_content"
410-
android:text="@{attendee.gender}"/>
411-
</com.google.android.material.textfield.TextInputLayout>
410+
android:layout_marginEnd="@dimen/layout_margin_large"
411+
android:textSize="@dimen/text_size_large"
412+
android:text="@string/gender"/>
413+
<androidx.appcompat.widget.AppCompatSpinner
414+
android:id="@+id/genderSpinner"
415+
android:layout_width="match_parent"
416+
android:layout_height="wrap_content"/>
417+
</LinearLayout>
412418
</LinearLayout>
413419
</layout>

app/src/main/res/layout/item_card_order_details.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,16 +296,17 @@
296296
android:layout_height="wrap_content"
297297
android:text="@string/event_summary"
298298
android:textSize="@dimen/text_size_medium"
299-
tools:text="@string/event_summary" />
299+
app:hideIfEmpty="@{event.description}"/>
300300

301301
<TextView
302302
android:id="@+id/eventSummary"
303303
android:layout_width="wrap_content"
304304
android:layout_height="wrap_content"
305305
android:ellipsize="end"
306-
android:lines="2"
306+
android:maxLines="2"
307307
android:textColor="@color/black"
308308
android:textSize="@dimen/text_size_large"
309+
app:hideIfEmpty="@{event.description}"
309310
app:strippedHtml="@{event.description}"
310311
tools:text="@string/event_summary_preview" />
311312

@@ -337,6 +338,7 @@
337338
android:textColor="@color/black"
338339
android:textSize="@dimen/text_size_large"
339340
android:text="@{event.ownerName}"
341+
app:hideIfEmpty="@{event.ownerName}"
340342
tools:text="@string/organizer_preview" />
341343

342344
<Button

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,12 @@
434434
<string name="placed_orders">Placed Orders</string>
435435
<string name="pending_orders">Pending Orders</string>
436436
<string name="order_status">Order Status</string>
437+
<string name="pay_now">Pay Now</string>
438+
<string name="cancel_order_button">Yes, cancel this order</string>
439+
<string name="continue_order_button">No, continue</string>
440+
<string name="others">Others</string>
441+
<string name="female">Female</string>
442+
<string name="male">Male</string>
437443
<plurals name="ordersQuantity">
438444
<item quantity="one">%1$s ticket</item>
439445
<item quantity="other">%1$s tickets</item>

0 commit comments

Comments
 (0)