diff --git a/app/src/main/java/sh/sar/gridflow/PayWithoutAccountActivity.kt b/app/src/main/java/sh/sar/gridflow/PayWithoutAccountActivity.kt index 7b631e5..c6ff11b 100644 --- a/app/src/main/java/sh/sar/gridflow/PayWithoutAccountActivity.kt +++ b/app/src/main/java/sh/sar/gridflow/PayWithoutAccountActivity.kt @@ -129,8 +129,13 @@ class PayWithoutAccountActivity : AppCompatActivity() { if (bill.status == "paid") { Toast.makeText(this, "This bill has already been paid", Toast.LENGTH_SHORT).show() } else { - // TODO: Navigate to payment flow - Toast.makeText(this, "Payment flow coming soon", Toast.LENGTH_SHORT).show() + // Navigate to PaymentReviewActivity for single bill + val intent = android.content.Intent(this, PaymentReviewActivity::class.java) + intent.putExtra("SINGLE_BILL_ID", bill.id) + intent.putExtra("SINGLE_BILL_AMOUNT", bill.billAmount) + intent.putExtra("SINGLE_BILL_NUMBER", bill.billNumber) + intent.putExtra("SINGLE_BILL_SUBSCRIPTION_ID", bill.subscription.id) + startActivity(intent) } } } diff --git a/app/src/main/java/sh/sar/gridflow/PaymentReviewActivity.kt b/app/src/main/java/sh/sar/gridflow/PaymentReviewActivity.kt index 5a5cc84..6203616 100644 --- a/app/src/main/java/sh/sar/gridflow/PaymentReviewActivity.kt +++ b/app/src/main/java/sh/sar/gridflow/PaymentReviewActivity.kt @@ -33,6 +33,15 @@ class PaymentReviewActivity : AppCompatActivity() { private lateinit var paymentMethodAdapter: PaymentMethodAdapter private var outstandingBills: List = emptyList() + private var isSingleBillMode: Boolean = false + private var singleBillData: SingleBillData? = null + + data class SingleBillData( + val billId: Long, + val amount: String, + val billNumber: String, + val subscriptionId: Long + ) companion object { private const val TAG = "PaymentReviewActivity" @@ -50,10 +59,27 @@ class PaymentReviewActivity : AppCompatActivity() { secureStorage = SecureStorage(this) apiService = FenakaApiService() + // Check if this is single bill mode + checkForSingleBillMode() + setupViews() loadData() } + private fun checkForSingleBillMode() { + val billId = intent.getLongExtra("SINGLE_BILL_ID", -1L) + if (billId != -1L) { + isSingleBillMode = true + singleBillData = SingleBillData( + billId = billId, + amount = intent.getStringExtra("SINGLE_BILL_AMOUNT") ?: "0.00", + billNumber = intent.getStringExtra("SINGLE_BILL_NUMBER") ?: "", + subscriptionId = intent.getLongExtra("SINGLE_BILL_SUBSCRIPTION_ID", -1L) + ) + Log.d(TAG, "Single bill mode activated for bill: ${singleBillData?.billNumber}") + } + } + private fun setupViews() { // Setup bills RecyclerView billSummaryAdapter = BillSummaryAdapter() @@ -80,6 +106,49 @@ class PaymentReviewActivity : AppCompatActivity() { return } + if (isSingleBillMode) { + loadSingleBillMode(cookie) + } else { + loadOutstandingBillsMode(cookie) + } + } + + private fun loadSingleBillMode(cookie: String) { + singleBillData?.let { billData -> + // Create fake OutstandingBill for single bill mode + val fakeOutstandingBill = OutstandingBill( + id = billData.billId, + branchName = "", + subscriptionId = billData.subscriptionId, + subscriptionStatus = "active", + subscriptionNumber = billData.billNumber, + outstandingBillCount = "1", + billAmount = billData.amount, + paidAmount = "0", + outstandingAmount = billData.amount + ) + outstandingBills = listOf(fakeOutstandingBill) + updateBillsUI() + } + + showLoading(true) + lifecycleScope.launch { + // Load payment methods + when (val gatewaysResult = apiService.getPaymentGateways("connect.sid=$cookie")) { + is ApiResult.Success -> { + paymentMethodAdapter.updatePaymentMethods(gatewaysResult.data) + showLoading(false) + } + is ApiResult.Error -> { + Log.e(TAG, "Failed to load payment gateways: ${gatewaysResult.message}") + showLoading(false) + Toast.makeText(this@PaymentReviewActivity, "Failed to load payment methods", Toast.LENGTH_SHORT).show() + } + } + } + } + + private fun loadOutstandingBillsMode(cookie: String) { showLoading(true) lifecycleScope.launch { diff --git a/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillCardAdapter.kt b/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillCardAdapter.kt index dda053b..8de4226 100644 --- a/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillCardAdapter.kt +++ b/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillCardAdapter.kt @@ -1,13 +1,14 @@ package sh.sar.gridflow.ui.billhistory +import android.content.Intent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView -import android.widget.Toast import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.google.android.material.button.MaterialButton +import sh.sar.gridflow.PaymentReviewActivity import sh.sar.gridflow.R import sh.sar.gridflow.data.Bill import java.text.SimpleDateFormat @@ -67,7 +68,13 @@ class BillCardAdapter( payNowButton.visibility = View.VISIBLE payNowButton.setOnClickListener { - Toast.makeText(itemView.context, "Coming soon", Toast.LENGTH_SHORT).show() + // Navigate to PaymentReviewActivity for this bill + val intent = Intent(itemView.context, PaymentReviewActivity::class.java) + intent.putExtra("SINGLE_BILL_ID", bill.id) + intent.putExtra("SINGLE_BILL_AMOUNT", bill.billAmount) + intent.putExtra("SINGLE_BILL_NUMBER", bill.billNumber) + intent.putExtra("SINGLE_BILL_SUBSCRIPTION_ID", bill.subscription.id) + itemView.context.startActivity(intent) } } diff --git a/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillDetailsActivity.kt b/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillDetailsActivity.kt index 839f0c1..59f5eec 100644 --- a/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillDetailsActivity.kt +++ b/app/src/main/java/sh/sar/gridflow/ui/billhistory/BillDetailsActivity.kt @@ -17,6 +17,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.lifecycle.ViewModelProvider +import sh.sar.gridflow.PaymentReviewActivity import sh.sar.gridflow.R import sh.sar.gridflow.data.Bill import sh.sar.gridflow.databinding.ActivityBillDetailsBinding @@ -155,7 +156,15 @@ class BillDetailsActivity : AppCompatActivity() { } binding.payNowButton.setOnClickListener { - Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show() + currentBill?.let { bill -> + // Navigate to PaymentReviewActivity for this bill + val intent = Intent(this, PaymentReviewActivity::class.java) + intent.putExtra("SINGLE_BILL_ID", bill.id) + intent.putExtra("SINGLE_BILL_AMOUNT", bill.billAmount) + intent.putExtra("SINGLE_BILL_NUMBER", bill.billNumber) + intent.putExtra("SINGLE_BILL_SUBSCRIPTION_ID", bill.subscription.id) + startActivity(intent) + } } }