Skip to content
This repository was archived by the owner on Dec 16, 2023. It is now read-only.

Commit 0f20b71

Browse files
committed
Add orders and payment navigation
1 parent cadd4be commit 0f20b71

18 files changed

Lines changed: 446 additions & 93 deletions

File tree

core/src/main/java/com/marknjunge/core/data/firebase/StaffDatabaseImpl.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,31 @@ class StaffDatabaseImpl : StaffDatabaseService {
9898
}
9999
}
100100

101+
override fun getPayments(listener: StaffDatabaseService.PaymentsListener) {
102+
firestore.collection("payments")
103+
.get()
104+
.addOnSuccessListener { querySnapshot ->
105+
val payments = mutableListOf<Payment>()
106+
querySnapshot.forEach { documentSnapshot ->
107+
val payment = Payment(
108+
documentSnapshot[DatabaseKeys.Payment.checkoutRequestId] as String,
109+
documentSnapshot[DatabaseKeys.Payment.customerId] as String,
110+
documentSnapshot[DatabaseKeys.Payment.date] as Long,
111+
documentSnapshot[DatabaseKeys.Payment.merchantRequestId] as String,
112+
documentSnapshot[DatabaseKeys.Payment.orderId] as String,
113+
documentSnapshot[DatabaseKeys.Payment.resultDesc] as String,
114+
documentSnapshot[DatabaseKeys.Payment.status] as String,
115+
documentSnapshot[DatabaseKeys.Payment.mpesaReceiptNumber] as String?,
116+
(documentSnapshot[DatabaseKeys.Payment.phoneNumber] as Long?).toString()
117+
)
118+
payments.add(payment)
119+
}
120+
121+
listener.onSuccess(payments)
122+
}
123+
.addOnFailureListener {
124+
listener.onError(it.message ?: "Error getting payments")
125+
}
126+
}
127+
101128
}
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package com.marknjunge.core.data.firebase
22

3-
import com.marknjunge.core.model.Order
4-
import com.marknjunge.core.model.OrderItem
5-
import com.marknjunge.core.model.OrderStatus
6-
import com.marknjunge.core.model.UserDetails
3+
import com.marknjunge.core.model.*
74

8-
interface StaffDatabaseService{
5+
interface StaffDatabaseService {
96
fun getOrders(listener: OrdersListener)
107

118
fun getOrderItems(orderId: String, listener: OrderItemsListener)
@@ -14,6 +11,8 @@ interface StaffDatabaseService{
1411

1512
fun getCustomerDetails(userId: String, listener: UserListener)
1613

14+
fun getPayments(listener: PaymentsListener)
15+
1716
interface OrdersListener : DatabaseListener {
1817
fun onSuccess(orders: List<Order>)
1918
}
@@ -25,4 +24,8 @@ interface StaffDatabaseService{
2524
interface UserListener : DatabaseListener {
2625
fun onSuccess(user: UserDetails)
2726
}
27+
28+
interface PaymentsListener : DatabaseListener {
29+
fun onSuccess(payments: List<Payment>)
30+
}
2831
}

core/src/main/java/com/marknjunge/core/model/DatabaseKeys.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ object DatabaseKeys {
4343
const val merchantRequestId = "merchantRequestId"
4444
const val orderId = "orderId"
4545
const val customerId = "customerId"
46+
const val resultDesc = "resultDesc"
47+
const val date = "date"
4648
const val status = "status"
49+
const val mpesaReceiptNumber = "mpesaReceiptNumber"
50+
const val phoneNumber = "phoneNumber"
4751
}
4852
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.marknjunge.core.model
2+
3+
data class Payment(val checkoutRequestId: String,
4+
val customerId: String,
5+
val date: Long,
6+
val merchantRequestId: String,
7+
val orderId: String,
8+
val resultDesc: String,
9+
val status: String,
10+
val mpesaReceiptNumber: String?,
11+
val phoneNumber: String?)

justjavastaff/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ dependencies {
3232

3333
// Android libraries
3434
implementation "com.android.support:design:${versions.support}"
35+
implementation "com.android.support:support-v4:${versions.support}"
3536
implementation "com.android.support:cardview-v7:${versions.support}"
3637
implementation "com.android.support:appcompat-v7:${versions.support}"
3738
implementation "com.android.support:recyclerview-v7:${versions.support}"

justjavastaff/src/main/AndroidManifest.xml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="com.marknkamau.justjavastaff">
45

56
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -10,19 +11,21 @@
1011
android:allowBackup="true"
1112
android:icon="@mipmap/ic_launcher"
1213
android:label="@string/app_name"
13-
android:supportsRtl="false">
14+
android:supportsRtl="false"
15+
tools:ignore="GoogleAppIndexingWarning">
1416
<activity
1517
android:name=".ui.login.LogInActivity"
1618
android:theme="@style/AppThemeNoBar">
19+
</activity>
20+
<activity
21+
android:name=".ui.main.MainActivity"
22+
android:theme="@style/AppThemeNoBar">
1723
<intent-filter>
1824
<action android:name="android.intent.action.MAIN" />
1925

2026
<category android:name="android.intent.category.LAUNCHER" />
2127
</intent-filter>
2228
</activity>
23-
<activity
24-
android:name=".ui.main.MainActivity"
25-
android:theme="@style/AppTheme" />
2629
<activity
2730
android:name=".ui.preferences.SettingsActivity"
2831
android:theme="@style/AppTheme" />
@@ -33,7 +36,6 @@
3336
<activity
3437
android:name=".ui.help.HelpActivity"
3538
android:theme="@style/AppTheme" />
36-
3739
</application>
3840

3941
</manifest>
Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,52 @@
11
package com.marknkamau.justjavastaff.ui.main
22

33
import android.content.Intent
4-
import android.os.Bundle
5-
import android.support.v7.widget.LinearLayoutManager
6-
import android.view.View
7-
import android.widget.Toast
4+
import android.support.design.widget.TabLayout
85

6+
import android.support.v4.app.Fragment
7+
import android.support.v4.app.FragmentManager
8+
import android.support.v4.app.FragmentPagerAdapter
9+
import android.os.Bundle
910
import com.marknkamau.justjavastaff.JustJavaStaffApp
11+
1012
import com.marknkamau.justjavastaff.R
11-
import com.marknjunge.core.model.Order
1213
import com.marknkamau.justjavastaff.ui.BaseActivity
13-
import com.marknkamau.justjavastaff.ui.orderdetails.OrderDetailsActivity
14-
14+
import com.marknkamau.justjavastaff.ui.login.LogInActivity
15+
import com.marknkamau.justjavastaff.ui.orders.OrdersFragment
16+
import com.marknkamau.justjavastaff.ui.payments.PaymentsFragment
1517
import kotlinx.android.synthetic.main.activity_main.*
16-
import timber.log.Timber
1718

18-
class MainActivity : BaseActivity(), MainView {
19-
private lateinit var presenter: MainActivityPresenter
20-
private lateinit var adapter: OrdersAdapter
19+
class MainActivity : BaseActivity() {
2120

2221
override fun onCreate(savedInstanceState: Bundle?) {
2322
super.onCreate(savedInstanceState)
2423
setContentView(R.layout.activity_main)
2524

26-
val settings = (application as JustJavaStaffApp).settingsRepository
27-
val databaseService = (application as JustJavaStaffApp).databaseService
28-
presenter = MainActivityPresenter(this, settings, databaseService)
29-
30-
rvOrders.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
25+
setSupportActionBar(toolbar)
3126

32-
adapter = OrdersAdapter(this){order ->
33-
Timber.d(order.toString())
34-
goToDetails(order)
27+
val auth = (application as JustJavaStaffApp).auth
28+
if (!auth.isSignedIn()) {
29+
startActivity(Intent(this@MainActivity, LogInActivity::class.java))
30+
finish()
3531
}
3632

37-
rvOrders.adapter = adapter
38-
}
33+
val sectionsPagerAdapter = SectionsPagerAdapter(supportFragmentManager)
34+
container.adapter = sectionsPagerAdapter
3935

40-
override fun onResume() {
41-
super.onResume()
42-
presenter.getOrders()
36+
container.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
37+
tabs.addOnTabSelectedListener(TabLayout.ViewPagerOnTabSelectedListener(container))
4338
}
4439

45-
override fun displayMessage(message: String) {
46-
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
47-
}
48-
49-
override fun displayAvailableOrders(orders: MutableList<Order>) {
50-
pbLoading.visibility = View.GONE
51-
adapter.setItems(orders)
52-
}
40+
inner class SectionsPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
41+
override fun getItem(position: Int): Fragment {
42+
return when (position) {
43+
0 -> OrdersFragment()
44+
1 -> PaymentsFragment()
45+
else -> OrdersFragment()
46+
}
47+
}
5348

54-
override fun displayNoOrders() {
55-
Toast.makeText(this, "There are no orders", Toast.LENGTH_SHORT).show()
56-
pbLoading.visibility = View.GONE
49+
override fun getCount() = 2
5750
}
5851

59-
private fun goToDetails(order: Order) {
60-
val intent = Intent(this, OrderDetailsActivity::class.java)
61-
intent.putExtra(OrderDetailsActivity.ORDER, order)
62-
startActivity(intent)
63-
}
6452
}

justjavastaff/src/main/java/com/marknkamau/justjavastaff/ui/main/OrdersAdapter.kt renamed to justjavastaff/src/main/java/com/marknkamau/justjavastaff/ui/orders/OrdersAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.marknkamau.justjavastaff.ui.main
1+
package com.marknkamau.justjavastaff.ui.orders
22

33
/**
44
* Created by Mark Njung'e.
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.marknkamau.justjavastaff.ui.orders
2+
3+
import android.content.Intent
4+
import android.os.Bundle
5+
import android.support.v4.app.Fragment
6+
import android.support.v7.widget.LinearLayoutManager
7+
import android.view.LayoutInflater
8+
import android.view.MenuItem
9+
import android.view.View
10+
import android.view.ViewGroup
11+
import android.widget.Toast
12+
import com.marknjunge.core.model.Order
13+
import com.marknkamau.justjavastaff.JustJavaStaffApp
14+
15+
import com.marknkamau.justjavastaff.R
16+
import com.marknkamau.justjavastaff.ui.orderdetails.OrderDetailsActivity
17+
import kotlinx.android.synthetic.main.fragment_orders.*
18+
import timber.log.Timber
19+
20+
class OrdersFragment : Fragment(), OrdersView {
21+
private lateinit var presenter: OrdersFragmentPresenter
22+
private lateinit var adapter: OrdersAdapter
23+
24+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
25+
return inflater.inflate(R.layout.fragment_orders, container, false)
26+
}
27+
28+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
29+
super.onViewCreated(view, savedInstanceState)
30+
val settings = (requireActivity().application as JustJavaStaffApp).settingsRepository
31+
val databaseService = (requireActivity().application as JustJavaStaffApp).databaseService
32+
presenter = OrdersFragmentPresenter(this, settings, databaseService)
33+
34+
rvOrders.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
35+
36+
adapter = OrdersAdapter(requireContext()) { order ->
37+
Timber.d(order.toString())
38+
goToDetails(order)
39+
}
40+
41+
rvOrders.adapter = adapter
42+
}
43+
44+
override fun onResume() {
45+
super.onResume()
46+
presenter.getOrders()
47+
}
48+
49+
override fun displayMessage(message: String) {
50+
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
51+
}
52+
53+
override fun displayAvailableOrders(orders: MutableList<Order>) {
54+
pbLoading.visibility = View.GONE
55+
adapter.setItems(orders)
56+
}
57+
58+
override fun displayNoOrders() {
59+
Toast.makeText(requireContext(), "There are no orders", Toast.LENGTH_SHORT).show()
60+
pbLoading.visibility = View.GONE
61+
}
62+
63+
private fun goToDetails(order: Order) {
64+
val intent = Intent(requireContext(), OrderDetailsActivity::class.java)
65+
intent.putExtra(OrderDetailsActivity.ORDER, order)
66+
startActivity(intent)
67+
}
68+
}

justjavastaff/src/main/java/com/marknkamau/justjavastaff/ui/main/MainActivityPresenter.kt renamed to justjavastaff/src/main/java/com/marknkamau/justjavastaff/ui/orders/OrdersFragmentPresenter.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.marknkamau.justjavastaff.ui.main
1+
package com.marknkamau.justjavastaff.ui.orders
22

33
import com.marknjunge.core.data.firebase.StaffDatabaseService
44
import com.marknjunge.core.model.Order
@@ -7,7 +7,7 @@ import com.marknkamau.justjavastaff.data.local.SettingsRespository
77

88
import timber.log.Timber
99

10-
internal class MainActivityPresenter(private val view: MainView, private val settings: SettingsRespository, private val databaseService: StaffDatabaseService) {
10+
internal class OrdersFragmentPresenter(private val view: OrdersView, private val settings: SettingsRespository, private val databaseService: StaffDatabaseService) {
1111

1212
fun getOrders() {
1313
databaseService.getOrders(object : StaffDatabaseService.OrdersListener {
@@ -18,8 +18,6 @@ internal class MainActivityPresenter(private val view: MainView, private val set
1818
val statusSettings = settings.getStatusSettings()
1919
val filteredOrders = mutableListOf<Order>()
2020
orders.forEach {
21-
Timber.d(it.status.toString())
22-
Timber.d((it.status == OrderStatus.PENDING).toString())
2321
if (it.status == OrderStatus.PENDING && statusSettings.pending)
2422
filteredOrders.add(it)
2523
if (it.status == OrderStatus.INPROGRESS && statusSettings.inProgress)

0 commit comments

Comments
 (0)