From fcaec04239e4af51466e19de4b7536ccc51e203b Mon Sep 17 00:00:00 2001 From: Gilbert Kimutai Date: Tue, 21 May 2019 05:54:21 +0300 Subject: [PATCH] updated order detailed page --- .../wc/adapter/viewholder/OrderViewHolder.kt | 6 +- .../java/me/gilo/wc/ui/order/OrderActivity.kt | 118 ++++++++- .../me/gilo/wc/viewmodels/OrderViewModel.java | 11 +- app/src/main/res/layout/content_order.xml | 245 +++++++++++++++++- 4 files changed, 366 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt b/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt index 34c518d..c44aedf 100644 --- a/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt +++ b/app/src/main/java/me/gilo/wc/adapter/viewholder/OrderViewHolder.kt @@ -44,9 +44,9 @@ class OrderViewHolder(val context: Context, itemView: View) : tvDescription.text = description itemView.setOnClickListener{ - var intent = Intent(context, OrderActivity::class.java); - intent.putExtra("orderId", order.id); - context.startActivity(intent); + var intent = Intent(context, OrderActivity::class.java) + intent.putExtra("orderId", order.id) + context.startActivity(intent) } } diff --git a/app/src/main/java/me/gilo/wc/ui/order/OrderActivity.kt b/app/src/main/java/me/gilo/wc/ui/order/OrderActivity.kt index 01ea7f2..ba22ba6 100644 --- a/app/src/main/java/me/gilo/wc/ui/order/OrderActivity.kt +++ b/app/src/main/java/me/gilo/wc/ui/order/OrderActivity.kt @@ -1,16 +1,17 @@ package me.gilo.wc.ui.order import android.os.Bundle -import android.support.design.widget.Snackbar -import android.support.v7.app.AppCompatActivity -import me.gilo.wc.R - +import android.support.v7.widget.LinearLayoutManager import kotlinx.android.synthetic.main.activity_order.* -import me.gilo.wc.adapter.OrderAdapter +import kotlinx.android.synthetic.main.content_order.* +import me.gilo.wc.R +import me.gilo.wc.adapter.CartAdapter import me.gilo.wc.common.Status +import me.gilo.wc.models.CartLineItem import me.gilo.wc.ui.WooDroidActivity import me.gilo.wc.viewmodels.OrderViewModel import me.gilo.woodroid.models.Order +import me.gilo.woodroid.models.filters.ProductFilter class OrderActivity : WooDroidActivity() { @@ -18,7 +19,11 @@ class OrderActivity : WooDroidActivity() { override lateinit var viewModel: OrderViewModel var orders: ArrayList = ArrayList() - lateinit var adapter: OrderAdapter + var cartItems: ArrayList = ArrayList() + lateinit var adapter: CartAdapter + + var orderId = 0 + lateinit var order : Order override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -27,6 +32,21 @@ class OrderActivity : WooDroidActivity() { viewModel = getViewModel(OrderViewModel::class.java) title = "Orders" + + orderId = intent.getIntExtra("orderId", 0) + + val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false) + rvCart.layoutManager = layoutManager + rvCart.isNestedScrollingEnabled = false + + cartItems = ArrayList() + + adapter = CartAdapter(cartItems) + rvCart.adapter = adapter + + if(orderId != 0){ + order(orderId) + } } private fun order(orderId : Int) { @@ -39,6 +59,23 @@ class OrderActivity : WooDroidActivity() { Status.SUCCESS -> { stopShowingLoading() + order = response.data() + var productIds = ArrayList() + + for(orderLineItem in order.lineItems){ + var cartLineItem = CartLineItem() + cartLineItem.name = orderLineItem.name + cartLineItem.price = orderLineItem.price.toFloat() + cartLineItem.quantity= orderLineItem.quantity + cartLineItem.productId = orderLineItem.productId + + cartItems.add(cartLineItem) + + productIds.add(orderLineItem.productId) + } + + products(productIds.toIntArray()) + } Status.ERROR -> { @@ -56,4 +93,73 @@ class OrderActivity : WooDroidActivity() { } + private fun products(productIds : IntArray) { + var filter = ProductFilter() + filter.setInclude(productIds) + + viewModel.products(filter).observe(this, android.arch.lifecycle.Observer { response -> + when (response!!.status()) { + Status.LOADING -> { + showLoading() + } + + Status.SUCCESS -> { + stopShowingLoading() + var products = response.data() + + var tempCartItems = ArrayList(cartItems) + cartItems.clear() + + for (cartItem in tempCartItems){ + var product = products.find { product -> product.id == cartItem.productId } + cartItem.product = product + cartItems.add(cartItem) + } + + adapter.notifyDataSetChanged() + setUpPage() + } + + Status.ERROR -> { + stopShowingLoading() + } + + Status.EMPTY -> { + stopShowingLoading() + + + } + } + + }) + } + + private fun setUpPage() { + var itemCount = cartItems.size + var total = 0 + + for (cartitem in cartItems){ + var price = if (cartitem.product.isOn_sale) { + cartitem.product.sale_price.replace(",","").toInt() + }else{ + cartitem.product.regular_price.replace(",","").toInt() + } + + var qty = cartitem.quantity + + total += price * qty + + } + + if (itemCount == 1){ + tvTotalItemCountTitle.text = "Item ($itemCount)" + }else{ + tvTotalItemCountTitle.text = "Items ($itemCount)" + } + + tvTotalItemCost.text = "Ksh$total" + tvTotal.text = "Ksh$total" + + } + } diff --git a/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java b/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java index 40718a0..2c4d00a 100644 --- a/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java +++ b/app/src/main/java/me/gilo/wc/viewmodels/OrderViewModel.java @@ -3,10 +3,13 @@ package me.gilo.wc.viewmodels; import android.arch.lifecycle.ViewModel; import me.gilo.wc.common.WooLiveData; import me.gilo.wc.repo.OrderRepository; +import me.gilo.wc.repo.ProductRepository; import me.gilo.wc.repo.ReviewRepository; import me.gilo.woodroid.models.Order; +import me.gilo.woodroid.models.Product; import me.gilo.woodroid.models.ProductReview; import me.gilo.woodroid.models.filters.OrderFilter; +import me.gilo.woodroid.models.filters.ProductFilter; import javax.inject.Inject; import java.util.List; @@ -14,10 +17,12 @@ import java.util.List; public final class OrderViewModel extends ViewModel { private final OrderRepository orderRepository; + private final ProductRepository productRepository; @Inject - OrderViewModel(OrderRepository orderRepository) { + OrderViewModel(OrderRepository orderRepository, ProductRepository productRepository) { this.orderRepository = orderRepository; + this.productRepository = productRepository; } public WooLiveData addToCart(int productId) { @@ -34,6 +39,10 @@ public final class OrderViewModel extends ViewModel { return orderRepository.order(id); } + public WooLiveData> products(ProductFilter filter) { + return productRepository.products(filter); + } + public WooLiveData> orders() { return orderRepository.orders(); } diff --git a/app/src/main/res/layout/content_order.xml b/app/src/main/res/layout/content_order.xml index 9e60092..fb3d7da 100644 --- a/app/src/main/res/layout/content_order.xml +++ b/app/src/main/res/layout/content_order.xml @@ -1,12 +1,249 @@ - + > - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file