diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..199a303 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,14 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 47fc23d..20052e6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
+
+
+
@@ -93,12 +102,6 @@
-
-
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/KonfirmasiTagihanResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/KonfirmasiTagihanResponse.kt
index af331d4..2e3df6a 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/KonfirmasiTagihanResponse.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/KonfirmasiTagihanResponse.kt
@@ -1,5 +1,6 @@
package com.alya.ecommerce_serang.data.api.response.store.orders
+import com.alya.ecommerce_serang.data.api.dto.UpdatedOrder
import com.google.gson.annotations.SerializedName
data class KonfirmasiTagihanResponse(
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/OrderListResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/OrderListResponse.kt
index 64725ae..e9b00c3 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/OrderListResponse.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/OrderListResponse.kt
@@ -1,6 +1,5 @@
package com.alya.ecommerce_serang.data.api.response.store.orders
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
import com.google.gson.annotations.SerializedName
data class OrderListResponse(
@@ -12,43 +11,133 @@ data class OrderListResponse(
val message: String? = null
)
-data class Voucher(
-
- @field:SerializedName("name")
- val name: Any? = null,
-
- @field:SerializedName("voucher_id")
- val voucherId: Any? = null,
-
- @field:SerializedName("voucher_code")
- val voucherCode: Any? = null
-)
-
-data class Shipment(
+data class OrdersItem(
@field:SerializedName("receipt_num")
val receiptNum: Any? = null,
- @field:SerializedName("courier")
- val courier: Any? = null,
+ @field:SerializedName("payment_upload_at")
+ val paymentUploadAt: Any? = null,
- @field:SerializedName("price")
- val price: Any? = null,
+ @field:SerializedName("latitude")
+ val latitude: String? = null,
+
+ @field:SerializedName("pay_info_name")
+ val payInfoName: String? = null,
+
+ @field:SerializedName("created_at")
+ val createdAt: String? = null,
+
+ @field:SerializedName("voucher_code")
+ val voucherCode: Any? = null,
+
+ @field:SerializedName("updated_at")
+ val updatedAt: String? = null,
+
+ @field:SerializedName("etd")
+ val etd: String? = null,
+
+ @field:SerializedName("street")
+ val street: String? = null,
+
+ @field:SerializedName("cancel_date")
+ val cancelDate: String? = null,
+
+ @field:SerializedName("payment_evidence")
+ val paymentEvidence: Any? = null,
+
+ @field:SerializedName("longitude")
+ val longitude: String? = null,
+
+ @field:SerializedName("shipment_status")
+ val shipmentStatus: String? = null,
+
+ @field:SerializedName("order_items")
+ val orderItems: List? = null,
+
+ @field:SerializedName("auto_completed_at")
+ val autoCompletedAt: Any? = null,
+
+ @field:SerializedName("is_store_location")
+ val isStoreLocation: Boolean? = null,
+
+ @field:SerializedName("qris_image")
+ val qrisImage: String? = null,
+
+ @field:SerializedName("voucher_name")
+ val voucherName: Any? = null,
+
+ @field:SerializedName("payment_status")
+ val paymentStatus: Any? = null,
+
+ @field:SerializedName("address_id")
+ val addressId: Int? = null,
+
+ @field:SerializedName("is_negotiable")
+ val isNegotiable: Boolean? = null,
+
+ @field:SerializedName("payment_amount")
+ val paymentAmount: Any? = null,
+
+ @field:SerializedName("cancel_reason")
+ val cancelReason: String? = null,
+
+ @field:SerializedName("user_id")
+ val userId: Int? = null,
+
+ @field:SerializedName("total_amount")
+ val totalAmount: String? = null,
+
+ @field:SerializedName("province_id")
+ val provinceId: Int? = null,
+
+ @field:SerializedName("courier")
+ val courier: String? = null,
+
+ @field:SerializedName("subdistrict")
+ val subdistrict: String? = null,
@field:SerializedName("service")
- val service: Any? = null,
+ val service: String? = null,
- @field:SerializedName("shipment_id")
- val shipmentId: Any? = null,
+ @field:SerializedName("pay_info_num")
+ val payInfoNum: String? = null,
+
+ @field:SerializedName("shipment_price")
+ val shipmentPrice: String? = null,
+
+ @field:SerializedName("voucher_id")
+ val voucherId: Any? = null,
+
+ @field:SerializedName("payment_info_id")
+ val paymentInfoId: Int? = null,
+
+ @field:SerializedName("detail")
+ val detail: String? = null,
+
+ @field:SerializedName("postal_code")
+ val postalCode: String? = null,
+
+ @field:SerializedName("order_id")
+ val orderId: Int? = null,
+
+ @field:SerializedName("username")
+ val username: String? = null,
@field:SerializedName("status")
- val status: Any? = null
+ val status: String? = null,
+
+ @field:SerializedName("city_id")
+ val cityId: Int? = null
)
data class OrderItemsItem(
+ @field:SerializedName("order_item_id")
+ val orderItemId: Int? = null,
+
@field:SerializedName("review_id")
- val reviewId: Int? = null,
+ val reviewId: Any? = null,
@field:SerializedName("quantity")
val quantity: Int? = null,
@@ -62,6 +151,9 @@ data class OrderItemsItem(
@field:SerializedName("product_image")
val productImage: String? = null,
+ @field:SerializedName("product_id")
+ val productId: Int? = null,
+
@field:SerializedName("store_name")
val storeName: String? = null,
@@ -71,48 +163,3 @@ data class OrderItemsItem(
@field:SerializedName("product_name")
val productName: String? = null
)
-
-data class Address(
-
- @field:SerializedName("is_store_location")
- val isStoreLocation: Boolean? = null,
-
- @field:SerializedName("province_id")
- val provinceId: Int? = null,
-
- @field:SerializedName("street")
- val street: String? = null,
-
- @field:SerializedName("subdistrict")
- val subdistrict: String? = null,
-
- @field:SerializedName("latitude")
- val latitude: Any? = null,
-
- @field:SerializedName("address_id")
- val addressId: Int? = null,
-
- @field:SerializedName("detail")
- val detail: String? = null,
-
- @field:SerializedName("postal_code")
- val postalCode: String? = null,
-
- @field:SerializedName("longitude")
- val longitude: Any? = null,
-
- @field:SerializedName("city_id")
- val cityId: Int? = null
-)
-
-data class Payment(
-
- @field:SerializedName("evidence")
- val evidence: Any? = null,
-
- @field:SerializedName("uploaded_at")
- val uploadedAt: Any? = null,
-
- @field:SerializedName("payment_id")
- val paymentId: Any? = null
-)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/UpdateOrderItemResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/UpdateOrderItemResponse.kt
index 9e6b08c..f56b81b 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/UpdateOrderItemResponse.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/store/orders/UpdateOrderItemResponse.kt
@@ -4,72 +4,27 @@ import com.google.gson.annotations.SerializedName
data class UpdateOrderItemResponse(
- @field:SerializedName("message")
- val message: String? = null,
-
- @field:SerializedName("updatedOrder")
- val updatedOrder: UpdatedOrder? = null,
-
- @field:SerializedName("updatedItems")
- val updatedItems: List? = null
-)
-
-data class UpdatedItemsItem(
-
- @field:SerializedName("quantity")
- val quantity: Int? = null,
-
- @field:SerializedName("price")
- val price: String? = null,
-
- @field:SerializedName("subtotal")
- val subtotal: String? = null,
-
- @field:SerializedName("product_id")
- val productId: Int? = null,
-
- @field:SerializedName("id")
- val id: Int? = null,
+ @field:SerializedName("total_amount")
+ val totalAmount: Int? = null,
@field:SerializedName("order_id")
- val orderId: Int? = null
-)
+ val orderId: Int? = null,
-data class UpdatedOrder(
-
- @field:SerializedName("auto_canceled_at")
- val autoCanceledAt: String? = null,
-
- @field:SerializedName("payment_method_id")
- val paymentMethodId: Int? = null,
-
- @field:SerializedName("auto_completed_at")
- val autoCompletedAt: String? = null,
-
- @field:SerializedName("updated_at")
- val updatedAt: String? = null,
-
- @field:SerializedName("total_amount")
- val totalAmount: String? = null,
-
- @field:SerializedName("user_id")
- val userId: Int? = null,
-
- @field:SerializedName("address_id")
- val addressId: Int? = null,
-
- @field:SerializedName("is_negotiable")
- val isNegotiable: Boolean? = null,
-
- @field:SerializedName("created_at")
- val createdAt: String? = null,
-
- @field:SerializedName("voucher_id")
- val voucherId: Any? = null,
-
- @field:SerializedName("id")
- val id: Int? = null,
+ @field:SerializedName("items")
+ val items: List? = null,
@field:SerializedName("status")
val status: String? = null
)
+
+data class ItemsItem(
+
+ @field:SerializedName("order_item_id")
+ val orderItemId: Int? = null,
+
+ @field:SerializedName("price")
+ val price: Int? = null,
+
+ @field:SerializedName("subtotal")
+ val subtotal: Int? = null
+)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt
index 5419b1e..62a4ab0 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt
@@ -211,19 +211,22 @@ interface ApiService {
suspend fun getListProv(
): Response
- @GET("mystore/orders")
- suspend fun getAllOrders(): Response
-
- @GET("mystore/orders/{status}")
- suspend fun getOrdersByStatus(
- @Query("status") status: String
- ): Response
+ @GET("order/{status}")
+ suspend fun getSellList(
+ @Path("status") status: String
+ ): Response
@PUT("store/order/update")
suspend fun confirmOrder(
@Body confirmOrder : CompletedOrderRequest
): Response
+ @PUT("store/order/update")
+ suspend fun updateOrder(
+ @Query("order_id") orderId: Int?,
+ @Query("status") status: String
+ ): Response
+
@Multipart
@POST("addcomplaint")
suspend fun addComplaint(
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt b/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt
index 3378880..e0bdc01 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt
@@ -7,7 +7,6 @@ import com.alya.ecommerce_serang.data.api.dto.CourierCostRequest
import com.alya.ecommerce_serang.data.api.dto.CreateAddressRequest
import com.alya.ecommerce_serang.data.api.dto.OrderRequest
import com.alya.ecommerce_serang.data.api.dto.OrderRequestBuy
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
import com.alya.ecommerce_serang.data.api.dto.UserProfile
import com.alya.ecommerce_serang.data.api.response.customer.cart.DataItem
import com.alya.ecommerce_serang.data.api.response.customer.order.CreateOrderResponse
@@ -234,35 +233,6 @@ class OrderRepository(private val apiService: ApiService) {
return if (response.isSuccessful) response.body() else null
}
- suspend fun fetchSells(): List {
- return try {
- val response = apiService.getAllOrders() // Replace with the actual method from your ApiService
- if (response.isSuccessful) {
- response.body()?.orders ?: emptyList() // Assuming the response body has 'orders'
- } else {
- Log.e("OrderRepository", "Error fetching all sells. Code: ${response.code()}")
- emptyList()
- }
- } catch (e: Exception) {
- Log.e("OrderRepository", "Exception fetching sells", e)
- emptyList()
- }
- }
-
- suspend fun fetchOrdersByStatus(status: String): List {
- return try {
- val response = apiService.getOrdersByStatus(status) // Replace with actual method for status-based fetch
- if (response.isSuccessful) {
- response.body()?.orders?.filterNotNull() ?: emptyList() // Assuming the response body has 'orders'
- } else {
- Log.e("OrderRepository", "Error fetching orders by status ($status). Code: ${response.code()}")
- emptyList()
- }
- } catch (e: Exception) {
- Log.e("OrderRepository", "Exception fetching orders by status", e)
- emptyList()
- }
- }
suspend fun fetchUserProfile(): Result {
return try {
val response = apiService.getUserProfile()
@@ -461,5 +431,4 @@ suspend fun uploadPaymentProof(request: AddEvidenceMultipartRequest): Result {
+ return try {
+ Log.d("SellsRepository", "Add Evidence : $status")
+ val response = apiService.getSellList(status)
+
+ if (response.isSuccessful) {
+ val allListSell = response.body()
+ if (allListSell != null) {
+ Log.d("SellsRepository", "Add Evidence successfully: ${allListSell.message}")
+ Result.Success(allListSell)
+ } else {
+ Log.e("SellsRepository", "Response body was null")
+ Result.Error(Exception("Empty response from server"))
+ }
+ } else {
+ val errorBody = response.errorBody()?.string() ?: "Unknown error"
+ Log.e("SellsRepository", "Error Add Evidence : $errorBody")
+ Result.Error(Exception(errorBody))
+ }
+ } catch (e: Exception) {
+ Log.e("SellsRepository", "Exception Add Evidence ", e)
+ Result.Error(e)
+ }
+ }
+
+ suspend fun updateOrderStatus(orderId: Int?, status: String) {
+ try {
+ val response = apiService.updateOrder(orderId, status)
+ if (response.isSuccessful) {
+ Log.d("SellsRepository", "Order status updated successfully: orderId=$orderId, status=$status")
+ } else {
+ Log.e("SellsRepository", "Error updating order status: orderId=$orderId, status=$status")
+ }
+ } catch (e: Exception) {
+ Log.e("SellsRepository", "Exception updating order status", e)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt
index af8a8c4..662e5a7 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt
@@ -16,10 +16,7 @@ import com.alya.ecommerce_serang.ui.profile.mystore.balance.BalanceActivity
import com.alya.ecommerce_serang.ui.profile.mystore.product.ProductActivity
import com.alya.ecommerce_serang.ui.profile.mystore.profile.DetailStoreProfileActivity
import com.alya.ecommerce_serang.ui.profile.mystore.review.ReviewFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.all_sells.AllSellsFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.order.OrderFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.payment.PaymentFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.shipment.ShipmentFragment
+import com.alya.ecommerce_serang.ui.profile.mystore.sells.SellsListFragment
import com.alya.ecommerce_serang.utils.BaseViewModelFactory
import com.alya.ecommerce_serang.utils.SessionManager
import com.alya.ecommerce_serang.utils.viewmodel.MyStoreViewModel
@@ -84,31 +81,19 @@ class MyStoreActivity : AppCompatActivity() {
}
binding.tvHistory.setOnClickListener {
- supportFragmentManager.beginTransaction()
- .replace(android.R.id.content, AllSellsFragment())
- .addToBackStack(null)
- .commit()
+ navigateToSellsFragment("all")
}
binding.layoutPerluTagihan.setOnClickListener {
- supportFragmentManager.beginTransaction()
- .replace(android.R.id.content, OrderFragment())
- .addToBackStack(null)
- .commit()
+ navigateToSellsFragment("pending")
}
binding.layoutPembayaran.setOnClickListener {
- supportFragmentManager.beginTransaction()
- .replace(android.R.id.content, PaymentFragment())
- .addToBackStack(null)
- .commit()
+ navigateToSellsFragment("paid")
}
binding.layoutPerluDikirim.setOnClickListener {
- supportFragmentManager.beginTransaction()
- .replace(android.R.id.content, ShipmentFragment())
- .addToBackStack(null)
- .commit()
+ navigateToSellsFragment("processed")
}
binding.layoutProductMenu.setOnClickListener {
@@ -129,4 +114,12 @@ class MyStoreActivity : AppCompatActivity() {
.commit()
}
}
+
+ private fun navigateToSellsFragment(status: String) {
+ val sellsFragment = SellsListFragment.newInstance(status)
+ supportFragmentManager.beginTransaction()
+ .replace(android.R.id.content, sellsFragment)
+ .addToBackStack(null)
+ .commit()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsActivity.kt
index ebe50a4..a3e0c85 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsActivity.kt
@@ -2,18 +2,48 @@ package com.alya.ecommerce_serang.ui.profile.mystore.sells
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import androidx.activity.viewModels
import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.all_sells.AllSellsFragment
+import com.alya.ecommerce_serang.data.api.retrofit.ApiConfig
+import com.alya.ecommerce_serang.data.repository.SellsRepository
+import com.alya.ecommerce_serang.databinding.ActivitySellsBinding
+import com.alya.ecommerce_serang.utils.BaseViewModelFactory
+import com.alya.ecommerce_serang.utils.SessionManager
+import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
class SellsActivity : AppCompatActivity() {
+ private lateinit var binding: ActivitySellsBinding
+ private lateinit var sessionManager: SessionManager
+
+ private val viewModel: SellsViewModel by viewModels {
+ BaseViewModelFactory {
+ val apiService = ApiConfig.getApiService(sessionManager)
+ val sellsRepository = SellsRepository(apiService)
+ SellsViewModel(sellsRepository)
+ }
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_sells)
+ binding = ActivitySellsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ sessionManager = SessionManager(this)
+
+ setupHeader()
+
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
- .replace(R.id.sells_fragment_container, AllSellsFragment())
+ .replace(R.id.fragment_container_sells, SellsFragment())
.commit()
}
}
+
+ private fun setupHeader() {
+ binding.header.headerTitle.text = "Penjualan Saya"
+
+ binding.header.headerLeftIcon.setOnClickListener {
+ onBackPressedDispatcher.onBackPressed()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt
index d1d6f61..b4ccccd 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt
@@ -1,152 +1,188 @@
package com.alya.ecommerce_serang.ui.profile.mystore.sells
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
+import com.alya.ecommerce_serang.data.api.response.store.orders.OrdersItem
+import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
+import com.bumptech.glide.Glide
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
+import java.util.TimeZone
-class SellsAdapter : RecyclerView.Adapter() {
- private var orderList: List = emptyList()
+class SellsAdapter(
+ private val onOrderClickListener: (OrdersItem) -> Unit,
+ private val viewModel: SellsViewModel
+) : RecyclerView.Adapter() {
- // View Types for different statuses
- private val TYPE_PENDING = 0
- private val TYPE_PAYMENT = 1
- private val TYPE_SHIPMENT = 2
- private val TYPE_COMPLETED = 3
- private val TYPE_FAILED_PAYMENT = 4
- private val TYPE_FAILED_SHIPMENT = 5
+ private val sells = mutableListOf()
+ private var fragmentStatus: String = "all"
- // Method to submit list to the adapter
- fun submitList(orders: List?) {
- orderList = orders ?: emptyList()
+ fun setFragmentStatus(status: String) {
+ fragmentStatus = status
+ }
+
+ fun submitList(newSells: List) {
+ sells.clear()
+ sells.addAll(newSells)
notifyDataSetChanged()
}
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
- return when (viewType) {
- TYPE_PENDING -> {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_order, parent, false)
- OrderViewHolder(view)
+ fun findResource(status: String): Int {
+ return when (status) {
+ "pending" -> R.layout.item_sells_order
+ "paid" -> R.layout.item_sells_payment
+ "processed" -> R.layout.item_sells_shipment
+ else -> R.layout.item_sells_payment
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SellsViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(findResource(fragmentStatus), parent, false)
+ return SellsViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: SellsViewHolder, position: Int) {
+ holder.bind(sells[position])
+ }
+
+ override fun getItemCount(): Int = sells.size
+
+ inner class SellsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val tvSellsTitle: TextView = itemView.findViewById(R.id.tv_sells_title)
+ private val tvSellsNumber: TextView = itemView.findViewById(R.id.tv_sells_number)
+ private val tvSellsDueDesc: TextView = itemView.findViewById(R.id.tv_sells_due_desc)
+ private val tvSellsDue: TextView = itemView.findViewById(R.id.tv_sells_due)
+ private val tvSellsLocation: TextView = itemView.findViewById(R.id.tv_sells_location)
+ private val tvSellsCustomer: TextView = itemView.findViewById(R.id.tv_sells_customer)
+ private val ivSellsProduct: ImageView = itemView.findViewById(R.id.iv_sells_product)
+ private val tvSellsProductName: TextView = itemView.findViewById(R.id.tv_sells_product_name)
+ private val tvSellsProductQty: TextView = itemView.findViewById(R.id.tv_sells_product_qty)
+ private val tvSellsProductPrice: TextView = itemView.findViewById(R.id.tv_sells_product_price)
+ private val tvSeeMore: TextView = itemView.findViewById(R.id.tv_see_more)
+ private val tvSellsQty: TextView = itemView.findViewById(R.id.tv_sells_qty)
+ private val tvSellsPrice: TextView = itemView.findViewById(R.id.tv_sells_price)
+ private val btnEditOrder: Button = itemView.findViewById(R.id.btn_edit_order)
+ private val btnConfirmOrder: Button = itemView.findViewById(R.id.btn_confirm_order)
+ private val btnConfirmPayment: Button = itemView.findViewById(R.id.btn_confirm_payment)
+ private val btnConfirmShipment: Button = itemView.findViewById(R.id.btn_confirm_shipment)
+
+ fun bind(sells: OrdersItem) {
+
+ tvSellsNumber.text = "No. Pesanan: ${sells.orderId}"
+ tvSellsLocation.text = sells.subdistrict
+ tvSellsCustomer.text = sells.username
+
+ val product = sells.orderItems?.get(0)
+ product?.let {
+ tvSellsProductName.text = it.productName
+ tvSellsProductQty.text = "x${it.quantity}"
+ tvSellsProductPrice.text = "Rp${it.price}"
+
+ Glide.with(itemView.context)
+ .load(it.productImage)
+ .placeholder(R.drawable.placeholder_image)
+ .into(ivSellsProduct)
}
- TYPE_PAYMENT -> {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_payment, parent, false)
- PaymentViewHolder(view)
+
+ sells.orderItems?.size?.let {
+ if (it > 1) {
+ tvSeeMore.visibility = View.VISIBLE
+ tvSeeMore.text = "Lihat ${it.minus(1)} produk lainnya"
+ } else {
+ tvSeeMore.visibility = View.GONE
+ }
}
- TYPE_SHIPMENT -> {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_shipment, parent, false)
- ShipmentViewHolder(view)
- }
-// TYPE_COMPLETED -> {
-// val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_completed, parent, false)
-// CompletedViewHolder(view)
-// }
-// TYPE_FAILED_PAYMENT -> {
-// val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_failed_payment, parent, false)
-// FailedPaymentViewHolder(view)
-// }
-// TYPE_FAILED_SHIPMENT -> {
-// val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_failed_shipment, parent, false)
-// FailedShipmentViewHolder(view)
-// }
- else -> {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_order, parent, false)
- OrderViewHolder(view)
+
+ tvSellsQty.text = "${sells.orderItems?.size} produk"
+ tvSellsPrice.text = "Rp${sells.totalAmount}"
+
+ adjustDisplay(fragmentStatus, sells)
+ }
+
+ private fun adjustDisplay(status: String, sells: OrdersItem) {
+ Log.d("SellsAdapter", "Adjusting display for status: $status")
+
+ when (status) {
+ "pending" -> {
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 3)
+ btnEditOrder.setOnClickListener {
+ TODO("Go to DetailOrderActivity")
+ }
+ btnConfirmOrder.setOnClickListener {
+ viewModel.updateOrderStatus(sells.orderId, "unpaid")
+ }
+ }
+ "paid" -> {
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 1)
+ btnConfirmPayment.setOnClickListener {
+ TODO("Go to DetailPaymentActivity")
+ }
+ }
+ "processed" -> {
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 2)
+ btnConfirmShipment.setOnClickListener {
+ TODO("Go to DetailShipmentActivity")
+ }
+ }
+ "shipped" -> {
+ tvSellsTitle.text = "Pesanan Telah Dikirim"
+ tvSellsDueDesc.text = "Dikirimkan pada"
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 0)
+ tvSellsDue.background = itemView.context.getDrawable(R.drawable.bg_product_inactive)
+ btnConfirmPayment.visibility = View.GONE
+ }
+ "delivered" -> {
+ tvSellsTitle.text = "Pesanan Telah Dikirim"
+ tvSellsDueDesc.text = "Dikirimkan pada"
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 0)
+ tvSellsDue.background = itemView.context.getDrawable(R.drawable.bg_product_inactive)
+ btnConfirmPayment.visibility = View.GONE
+ }
+ "completed" -> {
+ tvSellsTitle.text = "Pesanan Selesai"
+ tvSellsDueDesc.text = "Selesai pada"
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 0)
+ tvSellsDue.background = itemView.context.getDrawable(R.drawable.bg_product_inactive)
+ btnConfirmPayment.visibility = View.GONE
+ }
+ "canceled" -> {
+ tvSellsTitle.text = "Pesanan Dibatalkan"
+ tvSellsDueDesc.text = "Dibatalkan pada"
+ tvSellsDue.text = formatDueDate(sells.updatedAt.toString(), 0)
+ tvSellsDue.background = itemView.context.getDrawable(R.drawable.bg_product_inactive)
+ btnConfirmPayment.visibility = View.GONE
+ }
}
}
- }
- // Determine the view type based on the order status
- override fun getItemViewType(position: Int): Int {
- val order = orderList[position]
- return when (order?.shipmentStatus) {
- "pending" -> TYPE_PENDING
- "paid" -> TYPE_PAYMENT
- "shipped" -> TYPE_SHIPMENT
- "completed" -> TYPE_COMPLETED
- "failedPayment" -> TYPE_FAILED_PAYMENT
- "failedShipment" -> TYPE_FAILED_SHIPMENT
- else -> TYPE_PENDING // Default to pending if no status is matched
- }
- }
+ private fun formatDueDate(date: String, dueDay: Int): String {
+ return try {
+ val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault())
+ inputFormat.timeZone = TimeZone.getTimeZone("UTC")
- override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
- val order = orderList[position]
- when (holder) {
- is OrderViewHolder -> holder.bind(order)
- is PaymentViewHolder -> holder.bind(order)
- is ShipmentViewHolder -> holder.bind(order)
- is CompletedViewHolder -> holder.bind(order)
- is FailedPaymentViewHolder -> holder.bind(order)
- is FailedShipmentViewHolder -> holder.bind(order)
- }
- }
+ val outputFormat = SimpleDateFormat("dd MM; HH.mm", Locale("id", "ID"))
- override fun getItemCount(): Int = orderList.size
+ val date = inputFormat.parse(date)
- // ViewHolder for 'pending' status (Order)
- class OrderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val tvOrderNumber: TextView = itemView.findViewById(R.id.tv_order_number)
- private val tvOrderCustomer: TextView = itemView.findViewById(R.id.tv_order_customer)
- private val tvOrderPrice: TextView = itemView.findViewById(R.id.tv_order_price)
+ date?.let {
+ val calendar = Calendar.getInstance()
+ calendar.time = it
+ calendar.add(Calendar.DATE, dueDay)
- fun bind(order: OrdersItem?) {
- tvOrderNumber.text = "Order #${order?.orderId}"
- tvOrderCustomer.text = order?.userId.toString()
- tvOrderPrice.text = "Total: ${order?.totalAmount}"
- }
- }
-
- // ViewHolder for 'paid' status (Payment)
- class PaymentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val tvPaymentNumber: TextView = itemView.findViewById(R.id.tv_payment_number)
- private val tvPaymentCustomer: TextView = itemView.findViewById(R.id.tv_payment_customer)
- private val tvPaymentPrice: TextView = itemView.findViewById(R.id.tv_payment_price)
-
- fun bind(order: OrdersItem?) {
- tvPaymentNumber.text = "Order #${order?.orderId}"
- tvPaymentCustomer.text = order?.userId.toString()
- tvPaymentPrice.text = "Paid: ${order?.totalAmount}"
- }
- }
-
- // ViewHolder for 'shipped' status (Shipment)
- class ShipmentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val tvShipmentNumber: TextView = itemView.findViewById(R.id.tv_shipment_number)
- private val tvShipmentLocation: TextView = itemView.findViewById(R.id.tv_shipment_location)
-
- fun bind(order: OrdersItem?) {
- tvShipmentNumber.text = "Shipment #${order?.orderId}"
- tvShipmentLocation.text = "Location: ${order?.addressId.toString()}"
- }
- }
-
- // ViewHolder for 'completed' status
- class CompletedViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- //private val tvCompletedNumber: TextView = itemView.findViewById(R.id.tv_completed_number)
-
- fun bind(order: OrdersItem?) {
- // tvCompletedNumber.text = "Completed Order #${order?.orderId}"
- }
- }
-
- // ViewHolder for 'failedPayment' status
- class FailedPaymentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- //private val tvFailedPaymentNumber: TextView = itemView.findViewById(R.id.tv_failed_payment_number)
-
- fun bind(order: OrdersItem?) {
- //tvFailedPaymentNumber.text = "Failed Payment Order #${order?.orderId}"
- }
- }
-
- // ViewHolder for 'failedShipment' status
- class FailedShipmentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- //private val tvFailedShipmentNumber: TextView = itemView.findViewById(R.id.tv_failed_shipment_number)
-
- fun bind(order: OrdersItem?) {
- //tvFailedShipmentNumber.text = "Failed Shipment Order #${order?.orderId}"
+ outputFormat.format(calendar.time)
+ } ?: date
+ } catch (e: Exception) {
+ Log.e("DueDateFormatting", "Error formatting date: ${e.message}")
+ date
+ }.toString()
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt
index 04a816a..cc38b01 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt
@@ -1,45 +1,57 @@
package com.alya.ecommerce_serang.ui.profile.mystore.sells
-import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayoutMediator
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
+import com.alya.ecommerce_serang.databinding.FragmentSellsBinding
+import com.alya.ecommerce_serang.utils.SessionManager
class SellsFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
+
+ private var _binding: FragmentSellsBinding? = null
+ private val binding get() = _binding!!
+ private lateinit var sessionManager: SessionManager
+
+ private lateinit var viewPagerAdapter: SellsViewPagerAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- return inflater.inflate(R.layout.fragment_sells, container, false)
+ _binding = FragmentSellsBinding.inflate(inflater, container, false)
+ return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ sessionManager = SessionManager(requireContext())
-// val repository = OrderRepository(ApiService.create())
- viewModel = ViewModelProvider(this)[SellsViewModel::class.java]
+ viewPagerAdapter = SellsViewPagerAdapter(requireActivity())
+ binding.viewPagerSells.adapter = viewPagerAdapter
val tabs = listOf(
- "Semua Pesanan", "Perlu Tagihan", "Konfirmasi Pembayaran",
- "Perlu Dikirim", "Dikirim", "Selesai",
- "Pembatalan", "Klaim Pembayaran", "Pengiriman Gagal"
+ "Semua Pesanan",
+ "Perlu Tagihan",
+ "Konfirmasi Pembayaran",
+ "Perlu Dikirim",
+ "Dikirim",
+ "Selesai",
+ "Pembatalan",
+ "Klaim Pembayaran",
+ "Pengiriman Gagal"
)
- val adapter = SellsPagerAdapter(this, tabs.size)
- val viewPager: ViewPager2 = view.findViewById(R.id.view_pager_sells)
- viewPager.adapter = adapter
-
- TabLayoutMediator(view.findViewById(R.id.tab_layout_sells), viewPager) { tab, position ->
+ TabLayoutMediator(binding.tabLayoutSells, binding.viewPagerSells) { tab, position ->
tab.text = tabs[position]
}.attach()
}
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
}
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsListFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsListFragment.kt
new file mode 100644
index 0000000..0e25cc6
--- /dev/null
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsListFragment.kt
@@ -0,0 +1,131 @@
+package com.alya.ecommerce_serang.ui.profile.mystore.sells
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.fragment.app.viewModels
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.alya.ecommerce_serang.data.api.response.store.orders.OrdersItem
+import com.alya.ecommerce_serang.data.api.retrofit.ApiConfig
+import com.alya.ecommerce_serang.data.repository.SellsRepository
+import com.alya.ecommerce_serang.databinding.FragmentSellsListBinding
+import com.alya.ecommerce_serang.ui.order.address.ViewState
+import com.alya.ecommerce_serang.utils.BaseViewModelFactory
+import com.alya.ecommerce_serang.utils.SessionManager
+import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
+
+class SellsListFragment : Fragment() {
+
+ private var _binding: FragmentSellsListBinding? = null
+ private val binding get() = _binding!!
+ private lateinit var sessionManager: SessionManager
+
+ private val viewModel: SellsViewModel by viewModels {
+ BaseViewModelFactory {
+ val apiService = ApiConfig.getApiService(sessionManager)
+ val sellsRepository = SellsRepository(apiService)
+ SellsViewModel(sellsRepository)
+ }
+ }
+
+ private lateinit var sellsAdapter: SellsAdapter
+ private var status: String = "all"
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ sessionManager = SessionManager(requireContext())
+ arguments?.let {
+ status = it.getString(ARG_STATUS) ?: "all"
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding = FragmentSellsListBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ setupRecyclerView()
+ observeSellsList()
+ loadSells()
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+
+ companion object {
+ private const val ARG_STATUS = "status"
+
+ fun newInstance(status: String): SellsListFragment {
+ return SellsListFragment().apply {
+ arguments = Bundle().apply {
+ putString(ARG_STATUS, status)
+ }
+ }
+ }
+ }
+
+ private fun setupRecyclerView() {
+ sellsAdapter = SellsAdapter(
+ onOrderClickListener = { sells ->
+ // Handle order click
+ navigateToSellsDetail(sells)
+ },
+ viewModel = viewModel
+ )
+
+ sellsAdapter.setFragmentStatus(status)
+
+ binding.rvSells.apply {
+ layoutManager = LinearLayoutManager(requireContext())
+ adapter = sellsAdapter
+ }
+ }
+
+ private fun observeSellsList() {
+ viewModel.sells.observe(viewLifecycleOwner) { result ->
+ when (result) {
+ is ViewState.Success -> {
+ binding.progressBar.visibility = View.GONE
+
+ if (result.data.isNullOrEmpty()) {
+ binding.tvEmptyState.visibility = View.VISIBLE
+ binding.rvSells.visibility = View.GONE
+ } else {
+ binding.tvEmptyState.visibility = View.GONE
+ binding.rvSells.visibility = View.VISIBLE
+ //sellsAdapter.submitList(result.data)
+ }
+ }
+ is ViewState.Error -> {
+ binding.progressBar.visibility = View.GONE
+ binding.tvEmptyState.visibility = View.VISIBLE
+ Toast.makeText(requireContext(), result.message, Toast.LENGTH_SHORT).show()
+ }
+ is ViewState.Loading -> {
+ null
+ }
+ }
+ }
+ }
+
+ private fun loadSells() {
+ viewModel.getSellList(status)
+ }
+
+ private fun navigateToSellsDetail(sells: OrdersItem) {
+ // In a real app, you would navigate to sells detail screen
+ // For example: findNavController().navigate(SellsListFragmentDirections.actionToSellsDetail(sells.orderId))
+ Toast.makeText(requireContext(), "Order ID: ${sells.orderId}", Toast.LENGTH_SHORT).show()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsPagerAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsPagerAdapter.kt
deleted file mode 100644
index d6fd44a..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsPagerAdapter.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells
-
-import androidx.fragment.app.Fragment
-import androidx.viewpager2.adapter.FragmentStateAdapter
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.all_sells.AllSellsFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.cancellation.CancellationFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.failed_payment.FailedPaymentFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.failed_shipment.FailedShipmentFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.completed.CompletedFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.order.OrderFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.payment.PaymentFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.shipment.ShipmentFragment
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.shipped.ShippedFragment
-
-class SellsPagerAdapter(fragment: Fragment, private val itemCount: Int) :
- FragmentStateAdapter(fragment) {
-
- override fun getItemCount(): Int = itemCount
-
- override fun createFragment(position: Int): Fragment {
- return when (position) {
- 0 -> AllSellsFragment()
- 1 -> OrderFragment()
- 2 -> PaymentFragment()
- 3 -> ShipmentFragment()
- 4 -> ShippedFragment()
- 5 -> CompletedFragment()
- 6 -> CancellationFragment()
- 7 -> FailedPaymentFragment()
- 8 -> FailedShipmentFragment()
- else -> Fragment()
- }
- }
-}
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsViewPagerAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsViewPagerAdapter.kt
new file mode 100644
index 0000000..d977a7d
--- /dev/null
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsViewPagerAdapter.kt
@@ -0,0 +1,27 @@
+package com.alya.ecommerce_serang.ui.profile.mystore.sells
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.viewpager2.adapter.FragmentStateAdapter
+
+class SellsViewPagerAdapter(fragmentActivity: FragmentActivity)
+ : FragmentStateAdapter(fragmentActivity) {
+
+ private val sellsStatuses = listOf(
+ "all", // Semua Pesanan
+ "pending", // Perlu Tagihan
+ "processed", // Konfirmasi Pembayaran
+ "paid", // Perlu Dikirim
+ "shipped", // Dikirim
+ "delivered", // Dikirim
+ "completed", // Selesai
+ "canceled", // Dibatalkan
+ TODO("Klaim Pembayaran dan Pengajuan Komplain belum ada statusnya")
+ )
+
+ override fun getItemCount(): Int = sellsStatuses.size
+
+ override fun createFragment(position: Int): Fragment {
+ return SellsListFragment.newInstance(sellsStatuses[position])
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt
deleted file mode 100644
index bee4a1c..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.all_sells
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.databinding.FragmentAllSellsBinding
-import com.alya.ecommerce_serang.ui.profile.mystore.sells.SellsAdapter
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class AllSellsFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentAllSellsBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentAllSellsBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-
- val adapter = SellsAdapter()
- binding.rvAllSells.layoutManager = LinearLayoutManager(context)
- binding.rvAllSells.adapter = adapter
-
- viewModel.loadOrdersByStatus("all")
- viewModel.sellsList.observe(viewLifecycleOwner, Observer { sells ->
- adapter.submitList(sells)
- })
- }
-}
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/cancellation/CancellationFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/cancellation/CancellationFragment.kt
deleted file mode 100644
index c8b93de..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/cancellation/CancellationFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.cancellation
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.databinding.FragmentCancellationBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class CancellationFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentCancellationBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentCancellationBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-
-// val adapter = SellsAdapter()
-// binding.rvCancellation.layoutManager = LinearLayoutManager(context)
-// binding.rvCancellation.adapter = adapter
-//
-// viewModel.loadOrdersByStatus("cancelled")
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { cancellations ->
-// adapter.submitList(cancellations)
-// })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/completed/CompletedFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/completed/CompletedFragment.kt
deleted file mode 100644
index a5928b6..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/completed/CompletedFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.completed
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.databinding.FragmentCompletedBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class CompletedFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentCompletedBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentCompletedBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-
-// val adapter = SellsAdapter()
-// binding.rvCompleted.layoutManager = LinearLayoutManager(context)
-// binding.rvCompleted.adapter = adapter
-//
-// viewModel.loadOrdersByStatus("delivered")
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { completed ->
-// adapter.submitList(completed)
-// })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/failed_payment/FailedPaymentFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/failed_payment/FailedPaymentFragment.kt
deleted file mode 100644
index eb01dac..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/failed_payment/FailedPaymentFragment.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.failed_payment
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.databinding.FragmentFailedPaymentBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class FailedPaymentFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentFailedPaymentBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentFailedPaymentBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-
-// val adapter = SellsAdapter()
-// binding.rvFailedPayment.layoutManager = LinearLayoutManager(context)
-// binding.rvFailedPayment.adapter = adapter
-//
-// viewModel.loadOrdersByStatus("failedPayment")
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { failedPayments ->
-// adapter.submitList(failedPayments)
-// })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/failed_shipment/FailedShipmentFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/failed_shipment/FailedShipmentFragment.kt
deleted file mode 100644
index 1e67efa..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/failed_shipment/FailedShipmentFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.failed_shipment
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.databinding.FragmentFailedShipmentBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class FailedShipmentFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentFailedShipmentBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentFailedShipmentBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-
-// val adapter = SellsAdapter()
-// binding.rvFailedShipment.layoutManager = LinearLayoutManager(context)
-// binding.rvFailedShipment.adapter = adapter
-//
-// viewModel.loadOrdersByStatus("failedShipment")
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { failedShipments ->
-// adapter.submitList(failedShipments)
-// })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/DetailOrderActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/DetailOrderActivity.kt
new file mode 100644
index 0000000..1035c14
--- /dev/null
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/DetailOrderActivity.kt
@@ -0,0 +1,21 @@
+package com.alya.ecommerce_serang.ui.profile.mystore.sells.order
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import com.alya.ecommerce_serang.R
+
+class DetailOrderActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_detail_order)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/OrderAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/OrderAdapter.kt
deleted file mode 100644
index 4cc68e0..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/OrderAdapter.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.order
-
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import android.widget.ImageView
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
-
-class OrderAdapter : RecyclerView.Adapter() {
-
- private var orderList: List? = emptyList()
-
- fun submitList(orders: List?) {
- orderList = orders
- notifyDataSetChanged()
- }
-
- override fun onCreateViewHolder(
- parent: ViewGroup,
- viewType: Int
- ): OrderViewHolder {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_order, parent, false)
- return OrderViewHolder(view)
- }
-
- override fun onBindViewHolder(holder: OrderViewHolder, position: Int) {
- val order = orderList?.get(position)
- holder.bind(order)
- }
-
- override fun getItemCount(): Int = orderList?.size ?: 0
-
- class OrderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val tvOrderNumber: TextView = itemView.findViewById(R.id.tv_order_number)
- private val tvOrderCustomer: TextView = itemView.findViewById(R.id.tv_order_customer)
- private val tvOrderDue: TextView = itemView.findViewById(R.id.tv_order_due)
- private val ivOrderProduct: ImageView = itemView.findViewById(R.id.iv_order_product)
- private val tvOrderProductName: TextView = itemView.findViewById(R.id.tv_order_product_name)
- private val tvOrderProductVariant: TextView = itemView.findViewById(R.id.tv_order_product_variant)
- private val tvOrderProductQty: TextView = itemView.findViewById(R.id.tv_order_product_qty)
- private val tvOrderProductPrice: TextView = itemView.findViewById(R.id.tv_order_product_price)
- private val tvOrderQty: TextView = itemView.findViewById(R.id.tv_order_qty)
- private val tvOrderPrice: TextView = itemView.findViewById(R.id.tv_order_price)
- private val tvSeeMore: TextView = itemView.findViewById(R.id.tv_see_more)
- private val btnEditOrder: Button = itemView.findViewById(R.id.btn_edit_order)
- private val btnConfirmOrder: Button = itemView.findViewById(R.id.btn_confirm_order)
-
- fun bind(order: OrdersItem?) {
- tvOrderNumber.text = "No. Pesanan: ${order?.orderId}"
- tvOrderCustomer.text = order?.userId.toString()
- tvOrderDue.text = order?.createdAt + 7
- tvOrderQty.text = "${order?.orderItems?.size} produk"
- tvOrderPrice.text = "Rp${order?.totalAmount}"
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/OrderFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/OrderFragment.kt
deleted file mode 100644
index 60c9de8..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/order/OrderFragment.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.order
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.databinding.FragmentOrderBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class OrderFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentOrderBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentOrderBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
- val adapter = OrderAdapter()
-
- binding.rvOrder.layoutManager = LinearLayoutManager(context)
- binding.rvOrder.adapter = adapter
-
- viewModel.loadOrdersByStatus("pending")
- viewModel.sellsList.observe(viewLifecycleOwner, Observer { orders ->
- adapter.submitList(orders)
- })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/ClaimPaymentActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/DetailPaymentActivity.kt
similarity index 86%
rename from app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/ClaimPaymentActivity.kt
rename to app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/DetailPaymentActivity.kt
index 5d9613b..8336d08 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/ClaimPaymentActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/DetailPaymentActivity.kt
@@ -7,11 +7,11 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.alya.ecommerce_serang.R
-class ClaimPaymentActivity : AppCompatActivity() {
+class DetailPaymentActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
- setContentView(R.layout.activity_claim_payment)
+ setContentView(R.layout.activity_detail_payment)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/PaymentAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/PaymentAdapter.kt
deleted file mode 100644
index 030d450..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/PaymentAdapter.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.payment
-
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import android.widget.ImageView
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
-
-class PaymentAdapter : RecyclerView.Adapter() {
-
- private var paymentList: List? = emptyList()
-
- fun submitList(orders: List?) {
- paymentList = orders
- notifyDataSetChanged()
- }
-
- override fun onCreateViewHolder(
- parent: ViewGroup,
- viewType: Int
- ): PaymentViewHolder {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_payment, parent, false)
- return PaymentViewHolder(view)
- }
-
- override fun onBindViewHolder(holder: PaymentViewHolder, position: Int) {
- val order = paymentList?.get(position)
- holder.bind(order)
- }
-
- override fun getItemCount(): Int = paymentList?.size ?: 0
-
- class PaymentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
- private val tvPaymentNumber: TextView = itemView.findViewById(R.id.tv_payment_number)
- private val tvPaymentDue: TextView = itemView.findViewById(R.id.tv_payment_due)
- private val ivPaymentProduct: ImageView = itemView.findViewById(R.id.iv_payment_product)
- private val tvPaymentProductName: TextView = itemView.findViewById(R.id.tv_payment_product_name)
- private val tvPaymentProductVariant: TextView = itemView.findViewById(R.id.tv_payment_product_variant)
- private val tvPaymentProductQty: TextView = itemView.findViewById(R.id.tv_payment_product_qty)
- private val tvPaymentProductPrice: TextView = itemView.findViewById(R.id.tv_payment_product_price)
- private val tvPaymentQty: TextView = itemView.findViewById(R.id.tv_payment_qty)
- private val tvPaymentPrice: TextView = itemView.findViewById(R.id.tv_payment_price)
- private val tvPaymentCustomer: TextView = itemView.findViewById(R.id.tv_payment_customer)
- private val tvPaymentLocation: TextView = itemView.findViewById(R.id.tv_payment_location)
- private val tvSeeMore: TextView = itemView.findViewById(R.id.tv_see_more)
- private val btnConfirmPayment: Button = itemView.findViewById(R.id.btn_confirm_payment)
-
- fun bind(order: OrdersItem?) {
- tvPaymentNumber.text = "No. Pesanan: ${order?.orderId}"
- tvPaymentDue.text = order?.createdAt + 7
- tvPaymentQty.text = "${order?.orderItems?.size} produk"
- tvPaymentPrice.text = "Rp${order?.totalAmount}"
- tvPaymentCustomer.text = order?.userId.toString()
- tvPaymentLocation.text = order?.addressId.toString()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/PaymentFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/PaymentFragment.kt
deleted file mode 100644
index 7c5214c..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/payment/PaymentFragment.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.payment
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.databinding.FragmentPaymentBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class PaymentFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentPaymentBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentPaymentBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
- val adapter = PaymentAdapter()
-
- binding.rvPayment.layoutManager = LinearLayoutManager(context)
- binding.rvPayment.adapter = adapter
-
- viewModel.loadOrdersByStatus("paid")
- viewModel.sellsList.observe(viewLifecycleOwner, Observer { payments ->
- adapter.submitList(payments)
- })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShippingConfirmationActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/DetailShipmentActivity.kt
similarity index 85%
rename from app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShippingConfirmationActivity.kt
rename to app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/DetailShipmentActivity.kt
index 94b9c67..89e1b54 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShippingConfirmationActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/DetailShipmentActivity.kt
@@ -7,11 +7,11 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.alya.ecommerce_serang.R
-class ShippingConfirmationActivity : AppCompatActivity() {
+class DetailShipmentActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
- setContentView(R.layout.activity_shipping_confirmation)
+ setContentView(R.layout.activity_detail_shipment)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShipmentAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShipmentAdapter.kt
deleted file mode 100644
index d7e4fa0..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShipmentAdapter.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.shipment
-
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import android.widget.ImageView
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
-
-class ShipmentAdapter : RecyclerView.Adapter() {
-
- private var shipmentList: List = emptyList()
-
- fun submitList(orders: List) {
- shipmentList = orders
- notifyDataSetChanged()
- }
-
- override fun onCreateViewHolder(
- parent: ViewGroup,
- viewType: Int
- ): ShipmentAdapter.ShipmentViewHolder {
- val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_shipment, parent, false)
- return ShipmentViewHolder(view)
- }
-
- override fun onBindViewHolder(holder: ShipmentAdapter.ShipmentViewHolder, position: Int) {
- val order = shipmentList[position]
- holder.bind(order)
- }
-
- override fun getItemCount(): Int = shipmentList.size
-
- class ShipmentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- private val tvShipmentNumber: TextView = itemView.findViewById(R.id.tv_shipment_number)
- private val tvShipmentDue: TextView = itemView.findViewById(R.id.tv_shipment_due)
- private val ivShipmentProduct: ImageView = itemView.findViewById(R.id.iv_shipment_product)
- private val tvShipmentProductName: TextView = itemView.findViewById(R.id.tv_shipment_product_name)
- private val tvShipmentProductVariant: TextView = itemView.findViewById(R.id.tv_shipment_product_variant)
- private val tvShipmentProductQty: TextView = itemView.findViewById(R.id.tv_shipment_product_qty)
- private val tvShipmentCustomer: TextView = itemView.findViewById(R.id.tv_shipment_customer)
- private val tvShipmentLocation: TextView = itemView.findViewById(R.id.tv_shipment_location)
- private val tvSeeMore: TextView = itemView.findViewById(R.id.tv_see_more)
- private val btnConfirmPayment: Button = itemView.findViewById(R.id.btn_confirm_payment)
-
- fun bind(order: OrdersItem) {
- tvShipmentNumber.text = "No. Pesanan: ${order.orderId}"
- tvShipmentDue.text = order.createdAt + 7
- tvShipmentCustomer.text = order.userId.toString()
- tvShipmentLocation.text = order.addressId.toString()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShipmentFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShipmentFragment.kt
deleted file mode 100644
index 4b0f1d8..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipment/ShipmentFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.shipment
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.databinding.FragmentShipmentBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class ShipmentFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentShipmentBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentShipmentBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
- val adapter = ShipmentAdapter()
-
- binding.rvShipment.layoutManager = LinearLayoutManager(context)
-// binding.rvShipment.adapter = adapter
-//
-// viewModel.loadOrdersByStatus("processed")
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { shipments ->
-// adapter.submitList(shipments)
-// })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipped/ShippedFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipped/ShippedFragment.kt
deleted file mode 100644
index 379d9d9..0000000
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/shipped/ShippedFragment.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.alya.ecommerce_serang.ui.profile.mystore.sells.shipped
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.lifecycle.Observer
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.databinding.FragmentShippedBinding
-import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
-
-class ShippedFragment : Fragment() {
- private lateinit var viewModel: SellsViewModel
- private lateinit var binding: FragmentShippedBinding
-
- override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- binding = FragmentShippedBinding.inflate(inflater, container, false)
- return binding.root
- }
-
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
-
- viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-
-// val adapter = SellsAdapter()
-// binding.rvShipped.layoutManager = LinearLayoutManager(context)
-// binding.rvShipped.adapter = adapter
-//
-// viewModel.loadOrdersByStatus("shipped")
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { shipped ->
-// adapter.submitList(shipped)
-// })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/SellsViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/SellsViewModel.kt
index a7d46bc..ee3aa28 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/SellsViewModel.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/SellsViewModel.kt
@@ -1,26 +1,61 @@
package com.alya.ecommerce_serang.utils.viewmodel
+import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
-import androidx.lifecycle.liveData
import androidx.lifecycle.viewModelScope
-import com.alya.ecommerce_serang.data.api.dto.OrdersItem
-import com.alya.ecommerce_serang.data.repository.OrderRepository
+import com.alya.ecommerce_serang.data.api.response.store.orders.OrdersItem
+import com.alya.ecommerce_serang.data.repository.Result
+import com.alya.ecommerce_serang.data.repository.SellsRepository
+import com.alya.ecommerce_serang.ui.order.address.ViewState
import kotlinx.coroutines.launch
-class SellsViewModel(private val repository: OrderRepository) : ViewModel() {
- private val _sellsList = MutableLiveData>()
- val sellsList: LiveData> get() = _sellsList
+class SellsViewModel(private val repository: SellsRepository) : ViewModel() {
+
+ companion object {
+ private const val TAG = "SellsViewModel"
+ }
+
+ private val _sells = MutableLiveData?>>()
+ val sells: LiveData?>> = _sells
+
+ fun getSellList(status: String) {
+ _sells.value = ViewState.Loading
- fun loadOrdersByStatus(status: String) {
viewModelScope.launch {
- val result = if (status == "all") {
- repository.fetchSells()
- } else {
- repository.fetchOrdersByStatus(status)
+ _sells.value = ViewState.Loading
+
+ try {
+ when (val result = repository.getSellList(status)) {
+ is Result.Success -> {
+ _sells.value = ViewState.Success(result.data.orders)
+ Log.d("SellsViewModel", "Sells loaded successfully: ${result.data.orders?.size} items")
+ }
+ is Result.Error -> {
+ _sells.value = ViewState.Error(result.exception.message ?: "Unknown error occurred")
+ Log.e("SellsViewModel", "Error loading sells", result.exception)
+ }
+ is Result.Loading -> {
+ null
+ }
+ }
+ } catch (e: Exception) {
+ _sells.value = ViewState.Error("An unexpected error occurred: ${e.message}")
+ Log.e("SellsViewModel", "Exception in getOrderList", e)
+ }
+ }
+ }
+
+ fun updateOrderStatus(orderId: Int?, status: String) {
+ Log.d(TAG, "Updating order status: orderId=$orderId, status=$status")
+ viewModelScope.launch {
+ try {
+ repository.updateOrderStatus(orderId, status)
+ Log.d(TAG, "Order status updated successfully: orderId=$orderId, status=$status")
+ } catch (e: Exception) {
+ Log.e(TAG, "Error updating order status", e)
}
- _sellsList.value = result
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_detail_order.xml b/app/src/main/res/layout/activity_detail_order.xml
new file mode 100644
index 0000000..200764e
--- /dev/null
+++ b/app/src/main/res/layout/activity_detail_order.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_detail_payment.xml b/app/src/main/res/layout/activity_detail_payment.xml
new file mode 100644
index 0000000..dc98fec
--- /dev/null
+++ b/app/src/main/res/layout/activity_detail_payment.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_detail_shipment.xml b/app/src/main/res/layout/activity_detail_shipment.xml
new file mode 100644
index 0000000..2aca87f
--- /dev/null
+++ b/app/src/main/res/layout/activity_detail_shipment.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_sells.xml b/app/src/main/res/layout/activity_sells.xml
index 8056d96..c3b72d5 100644
--- a/app/src/main/res/layout/activity_sells.xml
+++ b/app/src/main/res/layout/activity_sells.xml
@@ -1,14 +1,55 @@
-
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_all_sells.xml b/app/src/main/res/layout/fragment_all_sells.xml
deleted file mode 100644
index dc03543..0000000
--- a/app/src/main/res/layout/fragment_all_sells.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_cancellation.xml b/app/src/main/res/layout/fragment_cancellation.xml
deleted file mode 100644
index 86c48e5..0000000
--- a/app/src/main/res/layout/fragment_cancellation.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_completed.xml b/app/src/main/res/layout/fragment_completed.xml
deleted file mode 100644
index fc5c715..0000000
--- a/app/src/main/res/layout/fragment_completed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_failed_payment.xml b/app/src/main/res/layout/fragment_failed_payment.xml
deleted file mode 100644
index 5587090..0000000
--- a/app/src/main/res/layout/fragment_failed_payment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_failed_shipment.xml b/app/src/main/res/layout/fragment_failed_shipment.xml
deleted file mode 100644
index 0707558..0000000
--- a/app/src/main/res/layout/fragment_failed_shipment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_order.xml b/app/src/main/res/layout/fragment_order.xml
deleted file mode 100644
index 6accc4e..0000000
--- a/app/src/main/res/layout/fragment_order.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_order_history.xml b/app/src/main/res/layout/fragment_order_history.xml
index e1221d7..aab1265 100644
--- a/app/src/main/res/layout/fragment_order_history.xml
+++ b/app/src/main/res/layout/fragment_order_history.xml
@@ -11,10 +11,12 @@
android:background="@android:color/white"
app:layout_constraintTop_toTopOf="parent"
app:tabGravity="fill"
- app:tabIndicatorColor="@color/blue_200"
app:tabMode="scrollable"
- app:tabSelectedTextColor="@color/blue_200"
- app:tabTextColor="@android:color/darker_gray" />
+ app:tabTextAppearance="@style/label_medium_prominent"
+ app:tabSelectedTextAppearance="@style/label_medium_prominent"
+ app:tabIndicatorColor="@color/blue_500"
+ app:tabSelectedTextColor="@color/blue_500"
+ app:tabTextColor="@color/black_300" />
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sells_list.xml b/app/src/main/res/layout/fragment_sells_list.xml
new file mode 100644
index 0000000..155e392
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sells_list.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_shipment.xml b/app/src/main/res/layout/fragment_shipment.xml
deleted file mode 100644
index 4b2902e..0000000
--- a/app/src/main/res/layout/fragment_shipment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_shipped.xml b/app/src/main/res/layout/fragment_shipped.xml
deleted file mode 100644
index 907ec43..0000000
--- a/app/src/main/res/layout/fragment_shipped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_sells_order.xml b/app/src/main/res/layout/item_sells_order.xml
index 8cc6547..3a2f158 100644
--- a/app/src/main/res/layout/item_sells_order.xml
+++ b/app/src/main/res/layout/item_sells_order.xml
@@ -16,7 +16,7 @@
app:layout_constraintTop_toTopOf="parent"/>
@@ -113,13 +113,13 @@
-
+
+
+
+
+
+
+
+
@@ -163,12 +163,12 @@
android:orientation="vertical"
android:layout_marginStart="13dp"
android:gravity="end"
- app:layout_constraintStart_toEndOf="@id/iv_order_product"
+ app:layout_constraintStart_toEndOf="@id/iv_sells_product"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toBottomOf="@id/iv_order_product">
+ app:layout_constraintBottom_toBottomOf="@id/iv_sells_product">
+ app:layout_constraintTop_toBottomOf="@id/layout_sells_detail"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_sells_payment.xml b/app/src/main/res/layout/item_sells_payment.xml
index acaf5f8..90569b1 100644
--- a/app/src/main/res/layout/item_sells_payment.xml
+++ b/app/src/main/res/layout/item_sells_payment.xml
@@ -16,7 +16,7 @@
app:layout_constraintTop_toTopOf="parent"/>
@@ -91,13 +92,13 @@
-
+
+
+
+
+
+
+
+
@@ -141,12 +142,12 @@
android:orientation="vertical"
android:layout_marginStart="13dp"
android:gravity="end"
- app:layout_constraintStart_toEndOf="@id/iv_payment_product"
+ app:layout_constraintStart_toEndOf="@id/iv_sells_product"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toBottomOf="@id/iv_payment_product">
+ app:layout_constraintBottom_toBottomOf="@id/iv_sells_product">
+ app:layout_constraintTop_toBottomOf="@id/layout_sells_detail"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_sells_shipment.xml b/app/src/main/res/layout/item_sells_shipment.xml
index 40db7ee..7be7057 100644
--- a/app/src/main/res/layout/item_sells_shipment.xml
+++ b/app/src/main/res/layout/item_sells_shipment.xml
@@ -16,7 +16,7 @@
app:layout_constraintTop_toTopOf="parent"/>
@@ -91,13 +91,13 @@
-
+
+
+
+
+
+
+
+
+ app:layout_constraintBottom_toBottomOf="@id/iv_sells_product"/>
+ app:layout_constraintTop_toBottomOf="@id/layout_sells_detail"/>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 499b459..43c932d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -10,7 +10,7 @@
Rp%.1f
Coba lagi\n
- Terdapat error...
+ Terdapat error…
Produk Terbaru
4.5
Buka Toko