diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CartItem.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CartItem.kt index 89bd4d0..8b2421d 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CartItem.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CartItem.kt @@ -8,4 +8,5 @@ data class CartItem ( @SerializedName("quantity") val quantity: Int -) \ No newline at end of file +) + diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CheckoutData.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CheckoutData.kt index f9f97e6..59173cb 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CheckoutData.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/CheckoutData.kt @@ -12,5 +12,6 @@ data class CheckoutData( val sellerId: Int = 0, val quantity: Int = 1, val isBuyNow: Boolean = false, - val cartItems: List = emptyList() + val cartItems: List = emptyList(), + val cartItemWholesaleMap: Map = emptyMap() ) \ No newline at end of file diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequest.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequest.kt index 304fb16..3fe9798 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequest.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequest.kt @@ -25,5 +25,8 @@ data class OrderRequest ( val cartItemId: List, @SerializedName("ship_etd") - val shipEtd: String - ) \ No newline at end of file + val shipEtd: String, + + @SerializedName("is_reseller") + val isReseller: Boolean +) \ No newline at end of file diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequestBuy.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequestBuy.kt index 7e358dd..b4de549 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequestBuy.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/OrderRequestBuy.kt @@ -27,7 +27,10 @@ data class OrderRequestBuy ( @SerializedName("quantity") val quantity : Int, - @SerializedName("ship_etd") - val shipEtd: String + val shipEtd: String, + + @SerializedName("is_reseller") + val isReseller: Boolean + ) \ No newline at end of file diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/ProductsItem.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/ProductsItem.kt index 37a5bf2..ac71565 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/ProductsItem.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/dto/ProductsItem.kt @@ -11,6 +11,12 @@ data class ProductsItem( @field:SerializedName("image") val image: String, + @field:SerializedName("is_wholesale") + val isWholesale: Boolean, + + @field:SerializedName("sppirt") + val sppirt: String? = null, + @field:SerializedName("rating") val rating: String, @@ -23,6 +29,9 @@ data class ProductsItem( @field:SerializedName("is_pre_order") val isPreOrder: Boolean, + @field:SerializedName("condition") + val condition: String? = null, + @field:SerializedName("category_id") val categoryId: Int, @@ -32,6 +41,9 @@ data class ProductsItem( @field:SerializedName("name") val name: String, + @field:SerializedName("halal") + val halal: String?= null, + @field:SerializedName("id") val id: Int, @@ -46,4 +58,4 @@ data class ProductsItem( @field:SerializedName("status") val status: String -) \ No newline at end of file +) diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/order/CreateOrderResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/order/CreateOrderResponse.kt index 62ca4aa..e3afa2c 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/order/CreateOrderResponse.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/order/CreateOrderResponse.kt @@ -4,16 +4,16 @@ import com.google.gson.annotations.SerializedName data class CreateOrderResponse( - @field:SerializedName("shipping") + @field:SerializedName("shipping") val shipping: Shipping, - @field:SerializedName("order_item") + @field:SerializedName("order_item") val orderItem: List, - @field:SerializedName("message") + @field:SerializedName("message") val message: String, - @field:SerializedName("order") + @field:SerializedName("order") val order: Order ) @@ -47,34 +47,10 @@ data class Shipping( val status: String ) -data class OrderItemItem( - - @field:SerializedName("quantity") - val quantity: Int, - - @field:SerializedName("price") - val price: String, - - @field:SerializedName("subtotal") - val subtotal: String, - - @field:SerializedName("product_id") - val productId: Int, - - @field:SerializedName("id") - val id: Int, - - @field:SerializedName("order_id") - val orderId: Int -) - data class Order( - @field:SerializedName("payment_info_id") - val paymentMethodId: Int, - @field:SerializedName("auto_completed_at") - val autoCompletedAt: String? = null, + val autoCompletedAt: String, @field:SerializedName("updated_at") val updatedAt: String, @@ -97,9 +73,33 @@ data class Order( @field:SerializedName("voucher_id") val voucherId: String? = null, + @field:SerializedName("payment_info_id") + val paymentInfoId: Int, + @field:SerializedName("id") val id: Int, @field:SerializedName("status") val status: String ) + +data class OrderItemItem( + + @field:SerializedName("quantity") + val quantity: Int, + + @field:SerializedName("price") + val price: String, + + @field:SerializedName("subtotal") + val subtotal: String, + + @field:SerializedName("product_id") + val productId: Int, + + @field:SerializedName("id") + val id: Int, + + @field:SerializedName("order_id") + val orderId: Int +) diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/AllProductResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/AllProductResponse.kt index 76175cd..43b5ace 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/AllProductResponse.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/AllProductResponse.kt @@ -12,4 +12,3 @@ data class AllProductResponse( val products: List ) - diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt index 767cd3f..1a389dd 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt @@ -1,13 +1,14 @@ package com.alya.ecommerce_serang.data.api.response.customer.product +import com.alya.ecommerce_serang.data.api.response.customer.cart.CartItemsItem import com.google.gson.annotations.SerializedName data class ProductResponse( - @field:SerializedName("product") + @field:SerializedName("product") val product: Product, - @field:SerializedName("message") + @field:SerializedName("message") val message: String ) @@ -17,7 +18,13 @@ data class Product( val storeId: Int, @field:SerializedName("image") - val image: String? = null, + val image: String, + + @field:SerializedName("is_wholesale") + val isWholesale: Boolean? = false, + + @field:SerializedName("sppirt") + val sppirt: String? = null, @field:SerializedName("rating") val rating: String, @@ -34,8 +41,8 @@ data class Product( @field:SerializedName("is_pre_order") val isPreOrder: Boolean, - @field:SerializedName("duration") - val duration: Any?, + @field:SerializedName("condition") + val condition: String? = null, @field:SerializedName("category_id") val categoryId: Int, @@ -46,6 +53,15 @@ data class Product( @field:SerializedName("product_id") val productId: Int, + @field:SerializedName("wholesale_price") + val wholesalePrice: String? = null, + + @field:SerializedName("halal") + val halal: String? = null, + + @field:SerializedName("wholesale_min_item") + val wholesaleMinItem: Int? = null, + @field:SerializedName("min_order") val minOrder: Int, @@ -56,5 +72,19 @@ data class Product( val stock: Int, @field:SerializedName("product_category") - val productCategory: String + val productCategory: String, + + @field:SerializedName("preorder_duration") + val preorderDuration: String? = null +) + +data class CartItemWholesaleInfo( + val cartItemId: Int, + val isWholesale: Boolean, + val wholesalePrice: Double? = null +) + +data class CartItemCheckoutInfo( + val cartItem: CartItemsItem, + val isWholesale: Boolean ) diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartActivity.kt index bdabd56..7d4782d 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartActivity.kt @@ -12,6 +12,7 @@ import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.recyclerview.widget.LinearLayoutManager import com.alya.ecommerce_serang.R +import com.alya.ecommerce_serang.data.api.response.customer.product.CartItemCheckoutInfo import com.alya.ecommerce_serang.data.api.retrofit.ApiConfig import com.alya.ecommerce_serang.data.api.retrofit.ApiService import com.alya.ecommerce_serang.data.repository.OrderRepository @@ -103,9 +104,8 @@ class CartActivity : AppCompatActivity() { // Check if all items are from the same store val storeId = viewModel.activeStoreId.value if (storeId != null) { - // Get cart item ids to pass to checkout - val cartItemIds = selectedItems.map { it.cartItemId } - CheckoutActivity.startForCart(this, cartItemIds) + // Start checkout with the prepared items + startCheckoutWithWholesaleInfo(selectedItems) } else { Toast.makeText(this, "Please select items from a single store only", Toast.LENGTH_SHORT).show() } @@ -122,6 +122,15 @@ class CartActivity : AppCompatActivity() { } } + private fun startCheckoutWithWholesaleInfo(checkoutItems: List) { + // Extract cart item IDs and wholesale status + val cartItemIds = checkoutItems.map { it.cartItem.cartItemId } + val wholesaleArray = checkoutItems.map { it.isWholesale }.toBooleanArray() + + // Start checkout activity with the cart items and wholesale info + CheckoutActivity.startForCart(this, cartItemIds, wholesaleArray) + } + private fun observeViewModel() { viewModel.cartItems.observe(this) { cartItems -> if (cartItems.isNullOrEmpty()) { diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartViewModel.kt index cc54fd1..54917c4 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartViewModel.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/cart/CartViewModel.kt @@ -1,12 +1,13 @@ package com.alya.ecommerce_serang.ui.cart +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.alya.ecommerce_serang.data.api.dto.UpdateCart -import com.alya.ecommerce_serang.data.api.response.customer.cart.CartItemsItem import com.alya.ecommerce_serang.data.api.response.customer.cart.DataItemCart +import com.alya.ecommerce_serang.data.api.response.customer.product.CartItemCheckoutInfo import com.alya.ecommerce_serang.data.repository.OrderRepository import com.alya.ecommerce_serang.data.repository.Result import kotlinx.coroutines.launch @@ -42,17 +43,26 @@ class CartViewModel(private val repository: OrderRepository) : ViewModel() { private val _allSelected = MutableLiveData(false) val allSelected: LiveData = _allSelected + private val _cartItemWholesaleStatus = MutableLiveData>(mapOf()) + val cartItemWholesaleStatus: LiveData> = _cartItemWholesaleStatus + + private val _cartItemWholesalePrice = MutableLiveData>(mapOf()) + val cartItemWholesalePrice: LiveData> = _cartItemWholesalePrice + fun getCart() { _isLoading.value = true _errorMessage.value = null viewModelScope.launch { when (val result = repository.getCart()) { - is com.alya.ecommerce_serang.data.repository.Result.Success -> { + is Result.Success -> { _cartItems.value = result.data _isLoading.value = false + + // After loading cart items, check wholesale status + checkWholesaleStatus() } - is com.alya.ecommerce_serang.data.repository.Result.Error -> { + is Result.Error -> { _errorMessage.value = result.exception.message _isLoading.value = false } @@ -245,12 +255,22 @@ class CartViewModel(private val repository: OrderRepository) : ViewModel() { private fun calculateTotalPrice() { val selectedItems = _selectedItems.value ?: HashSet() + val wholesaleStatus = _cartItemWholesaleStatus.value ?: mapOf() + val wholesalePrices = _cartItemWholesalePrice.value ?: mapOf() var total = 0 _cartItems.value?.forEach { dataItem -> dataItem.cartItems.forEach { cartItem -> if (selectedItems.contains(cartItem.cartItemId)) { - total += cartItem.price * cartItem.quantity + // Check if this item qualifies for wholesale pricing + if (wholesaleStatus[cartItem.cartItemId] == true && + wholesalePrices.containsKey(cartItem.cartItemId)) { + // Use wholesale price + total += (wholesalePrices[cartItem.cartItemId]!!.toInt() * cartItem.quantity) + } else { + // Use regular price + total += cartItem.price * cartItem.quantity + } } } } @@ -281,15 +301,24 @@ class CartViewModel(private val repository: OrderRepository) : ViewModel() { _allSelected.value = isAllSelected } - fun prepareCheckout(): List { + fun prepareCheckout(): List { val selectedItemsIds = _selectedItems.value ?: HashSet() - val result = mutableListOf() + val wholesaleStatus = _cartItemWholesaleStatus.value ?: mapOf() + val result = mutableListOf() - if (activeStoreId != null){ + if (_activeStoreId.value != null) { _cartItems.value?.forEach { dataItem -> dataItem.cartItems.forEach { cartItem -> if (selectedItemsIds.contains(cartItem.cartItemId)) { - result.add(cartItem) + // Check wholesale status for this cart item + val isWholesale = wholesaleStatus[cartItem.cartItemId] ?: false + + result.add( + CartItemCheckoutInfo( + cartItem = cartItem, + isWholesale = isWholesale + ) + ) } } } @@ -297,4 +326,57 @@ class CartViewModel(private val repository: OrderRepository) : ViewModel() { return result } + + private fun checkWholesaleStatus() { + viewModelScope.launch { + val cartItems = _cartItems.value ?: return@launch + val wholesaleStatusMap = mutableMapOf() + val wholesalePriceMap = mutableMapOf() + + // Process each cart item + for (store in cartItems) { + for (item in store.cartItems) { + try { + // Fetch product details to get wholesale information + val productResponse = repository.fetchProductDetail(item.productId) + + if (productResponse != null) { + val product = productResponse.product + + // Check if wholesale is available and if quantity meets minimum + val isWholesale = product.isWholesale == true && + product.wholesaleMinItem != null && + item.quantity >= product.wholesaleMinItem + + wholesaleStatusMap[item.cartItemId] = isWholesale + + // If wholesale applies, store the wholesale price + if (isWholesale && product.wholesalePrice != null) { + wholesalePriceMap[item.cartItemId] = product.wholesalePrice.toDouble() + } + + Log.d("CartViewModel", "Cart item ${item.cartItemId}: isWholesale=$isWholesale, min=${product.wholesaleMinItem}, qty=${item.quantity}") + } else { + // If product details couldn't be fetched, default to non-wholesale + Log.e("CartViewModel", "Failed to fetch product details for ID: ${item.productId}") + wholesaleStatusMap[item.cartItemId] = false + } + } catch (e: Exception) { + // If we can't determine wholesale status, default to false + Log.e("CartViewModel", "Exception checking wholesale status: ${e.message}") + wholesaleStatusMap[item.cartItemId] = false + } + } + } + + Log.d("CartViewModel", "Wholesale status map: $wholesaleStatusMap") + Log.d("CartViewModel", "Wholesale price map: $wholesalePriceMap") + + _cartItemWholesaleStatus.value = wholesaleStatusMap + _cartItemWholesalePrice.value = wholesalePriceMap + + // Recalculate total price to account for wholesale prices + calculateTotalPrice() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt index f41e772..42580e0 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt @@ -77,6 +77,7 @@ class CheckoutActivity : AppCompatActivity() { private fun processIntentData() { // Determine if this is Buy Now or Cart checkout val isBuyNow = intent.hasExtra(EXTRA_PRODUCT_ID) && !intent.hasExtra(EXTRA_CART_ITEM_IDS) + val isWholesaleNow = intent.getBooleanExtra(EXTRA_ISWHOLESALE, false) if (isBuyNow) { // Process Buy Now flow @@ -87,13 +88,23 @@ class CheckoutActivity : AppCompatActivity() { productName = intent.getStringExtra(EXTRA_PRODUCT_NAME), productImage = intent.getStringExtra(EXTRA_PRODUCT_IMAGE), quantity = intent.getIntExtra(EXTRA_QUANTITY, 1), - price = intent.getDoubleExtra(EXTRA_PRICE, 0.0) + price = intent.getDoubleExtra(EXTRA_PRICE, 0.0), + isWholesale = isWholesaleNow ) } else { // Process Cart checkout flow val cartItemIds = intent.getIntArrayExtra(EXTRA_CART_ITEM_IDS)?.toList() ?: emptyList() + val isWholesaleArray = intent.getBooleanArrayExtra(EXTRA_CART_ITEM_WHOLESALE) + if (cartItemIds.isNotEmpty()) { - viewModel.initializeFromCart(cartItemIds) + // Create a map of cart item IDs to wholesale status if available + val wholesaleMap = if (isWholesaleArray != null && isWholesaleArray.size == cartItemIds.size) { + cartItemIds.mapIndexed { index, id -> id to isWholesaleArray[index] }.toMap() + } else { + emptyMap() + } + + viewModel.initializeFromCart(cartItemIds, wholesaleMap) } else { Toast.makeText(this, "Error: No cart items specified", Toast.LENGTH_SHORT).show() finish() @@ -403,9 +414,12 @@ class CheckoutActivity : AppCompatActivity() { const val EXTRA_PRODUCT_IMAGE = "PRODUCT_IMAGE" const val EXTRA_QUANTITY = "QUANTITY" const val EXTRA_PRICE = "PRICE" + const val EXTRA_ISWHOLESALE = "ISWHOLESALE" + const val EXTRA_CART_ITEM_WHOLESALE = "EXTRA_CART_ITEM_WHOLESALE" // Helper methods for starting activity + // TO DO: delete iswholesale klo ngga dibuthin // For Buy Now fun startForBuyNow( context: Context, @@ -415,7 +429,8 @@ class CheckoutActivity : AppCompatActivity() { productName: String?, productImage: String?, quantity: Int, - price: Double + price: Double, + isWholesale: Boolean ) { val intent = Intent(context, CheckoutActivity::class.java).apply { putExtra(EXTRA_STORE_ID, storeId) @@ -425,6 +440,7 @@ class CheckoutActivity : AppCompatActivity() { putExtra(EXTRA_PRODUCT_IMAGE, productImage) putExtra(EXTRA_QUANTITY, quantity) putExtra(EXTRA_PRICE, price) + putExtra(EXTRA_ISWHOLESALE, isWholesale) } context.startActivity(intent) } @@ -432,10 +448,14 @@ class CheckoutActivity : AppCompatActivity() { // For Cart checkout fun startForCart( context: Context, - cartItemIds: List + cartItemIds: List, + isWholesaleArray: BooleanArray? = null ) { val intent = Intent(context, CheckoutActivity::class.java).apply { putExtra(EXTRA_CART_ITEM_IDS, cartItemIds.toIntArray()) + if (isWholesaleArray != null) { + putExtra(EXTRA_CART_ITEM_WHOLESALE, isWholesaleArray) + } } context.startActivity(intent) } diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt index 429baac..e5ab34c 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt @@ -40,6 +40,8 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { private val _orderCreated = MutableLiveData() val orderCreated: LiveData = _orderCreated + + // Initialize "Buy Now" checkout fun initializeBuyNow( storeId: Int, @@ -48,7 +50,8 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { productName: String?, productImage: String?, quantity: Int, - price: Double + price: Double, + isWholesale: Boolean ) { viewModelScope.launch { _isLoading.value = true @@ -64,7 +67,8 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { isNego = false, // Default value productId = productId, quantity = quantity, - shipEtd = "" + shipEtd = "", + isReseller = isWholesale ) // Create checkout data @@ -89,7 +93,7 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { } // Initialize checkout from cart - fun initializeFromCart(cartItemIds: List) { + fun initializeFromCart(cartItemIds: List, isWholesaleMap: Map = emptyMap()) { viewModelScope.launch { _isLoading.value = true @@ -112,20 +116,18 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { } if (matchingItems.isNotEmpty() && storeData != null) { - if (matchingItems.size != cartItemIds.size) { - Log.w(TAG, "Not all requested cart items were found. Found ${matchingItems.size} out of ${cartItemIds.size}") - // Consider showing a warning or adjusting the list - } // Create initial OrderRequest object val orderRequest = OrderRequest( - addressId = 0, // Will be set when user selects address - paymentMethodId = 0, // Will be set when user selects payment - shipPrice = 0, // Will be set when user selects shipping + addressId = 0, + paymentMethodId = 0, + shipPrice = 0, shipName = "", shipService = "", isNego = false, cartItemId = cartItemIds, - shipEtd = "" + shipEtd = "", + // Add a list tracking which items are wholesale + isReseller = isWholesaleMap.any { it.value } // Set true if any item is wholesale ) // Create checkout data @@ -135,9 +137,9 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { sellerName = storeData.storeName, sellerId = storeData.storeId, isBuyNow = false, - cartItems = matchingItems + cartItems = matchingItems, + cartItemWholesaleMap = isWholesaleMap // Store the wholesale map ) - Log.d(TAG, "Setting sellerId to: ${storeData.storeId}") calculateSubtotal() calculateTotal() @@ -148,7 +150,6 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { _errorMessage.value = "Failed to fetch cart items: ${cartResult.exception.message}" } } catch (e: Exception) { - Log.e(TAG, "Error initializing cart checkout", e) _errorMessage.value = "Error: ${e.message}" } finally { _isLoading.value = false @@ -404,6 +405,8 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { } } + + companion object { private const val TAG = "CheckoutViewModel" } diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/history/detailorder/DetailOrderItemsAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/history/detailorder/DetailOrderItemsAdapter.kt index f04cb6d..58f5c43 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/order/history/detailorder/DetailOrderItemsAdapter.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/history/detailorder/DetailOrderItemsAdapter.kt @@ -9,6 +9,8 @@ import androidx.recyclerview.widget.RecyclerView import com.alya.ecommerce_serang.R import com.alya.ecommerce_serang.data.api.response.customer.order.OrderListItemsItem import com.bumptech.glide.Glide +import java.text.NumberFormat +import java.util.Locale class DetailOrderItemsAdapter : RecyclerView.Adapter() { @@ -46,9 +48,16 @@ class DetailOrderItemsAdapter : RecyclerView.Adapter - showBuyNowPopup(id) - } - } - binding.btnAddToCart.setOnClickListener { - viewModel.productDetail.value?.productId?.let { id -> - showAddToCartPopup(id) - } - } val searchContainerView = binding.searchContainer searchContainerView.btnCart.setOnClickListener{ @@ -221,19 +215,41 @@ class DetailProductActivity : AppCompatActivity() { private fun updateUI(product: Product){ binding.tvProductName.text = product.productName - binding.tvPrice.text = formatCurrency(product.price.toDouble()) - binding.tvSold.text = product.totalSold.toString() + binding.tvPrice.text = "Rp${formatCurrency(product.price.toDouble())}" + binding.tvSold.text = "Terjual ${product.totalSold} buah" binding.tvRating.text = product.rating - binding.tvWeight.text = product.weight.toString() - binding.tvStock.text = product.stock.toString() + binding.tvWeight.text = "${product.weight} gram" + binding.tvStock.text = "${product.stock} buah" binding.tvCategory.text = product.productCategory binding.tvDescription.text = product.description + minOrder = product.wholesaleMinItem ?: 1 + isWholesaleAvailable = product.isWholesale ?: false + isWholesaleSelected = false // Default to regular pricing + if (isWholesaleAvailable) { + binding.containerWholesale.visibility = View.VISIBLE + binding.tvPriceWholesale.text = "Rp${formatCurrency(product.wholesalePrice!!.toDouble())}" + binding.descMinOrder.text = "Minimal pembelian ${minOrder}" + } else { + binding.containerWholesale.visibility = View.GONE + } binding.btnChat.setOnClickListener{ navigateToChat() } + binding.btnBuyNow.setOnClickListener { + viewModel.productDetail.value?.productId?.let { id -> + showBuyNowPopup(id) + } + } + + binding.btnAddToCart.setOnClickListener { + viewModel.productDetail.value?.productId?.let { id -> + showAddToCartPopup(id) + } + } + val fullImageUrl = when (val img = product.image) { is String -> { if (img.startsWith("/")) BASE_URL + img.substring(1) else img @@ -315,26 +331,53 @@ class DetailProductActivity : AppCompatActivity() { val view = layoutInflater.inflate(R.layout.dialog_count_buy, null) bottomSheetDialog.setContentView(view) - val btnDecrease = view.findViewById