diff --git a/FoodifyServer/app/src/main/AndroidManifest.xml b/FoodifyServer/app/src/main/AndroidManifest.xml index c329a0a..2bb91a4 100644 --- a/FoodifyServer/app/src/main/AndroidManifest.xml +++ b/FoodifyServer/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ android:supportsRtl="true" android:theme="@style/Theme.FoodifyServer" tools:targetApi="31"> + diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java index 19774e4..36f0d0c 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Common.java @@ -8,4 +8,13 @@ public class Common { public static final String UPDATE = "Cập nhật"; public static final String DELETE = "Xoá"; public static final int PICK_IMAGE_REQUEST = 71; + + public static String coverCodeToStatus(String code){ + if(code.equals("0")) + return "Placed"; + else if(code.equals("1")) + return "On my way"; + else + return "Shipped"; + } } diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/FoodList.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/FoodList.java index cd8d4b3..745846c 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/FoodList.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/FoodList.java @@ -30,7 +30,6 @@ import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import com.rengwuxian.materialedittext.MaterialEditText; import com.squareup.picasso.Picasso; -import com.waterbase.foodifyServer.Common.Category; import com.waterbase.foodifyServer.Common.Common; import com.waterbase.foodifyServer.Interface.ItemClickListener; import com.waterbase.foodifyServer.Model.Food; diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Home.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Home.java index 4d067a0..6cf288e 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Home.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Home.java @@ -24,10 +24,6 @@ import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.core.view.GravityCompat; -import androidx.navigation.NavController; -import androidx.navigation.Navigation; -import androidx.navigation.ui.AppBarConfiguration; -import androidx.navigation.ui.NavigationUI; import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; @@ -41,11 +37,10 @@ import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import com.rengwuxian.materialedittext.MaterialEditText; import com.squareup.picasso.Picasso; -import com.waterbase.foodifyServer.Common.Category; +import com.waterbase.foodifyServer.Model.Category; import com.waterbase.foodifyServer.Common.Common; import com.waterbase.foodifyServer.Interface.ItemClickListener; import com.waterbase.foodifyServer.ViewHolder.MenuViewHolder; -import com.waterbase.foodifyServer.databinding.ActivityHomeBinding; import java.util.UUID; @@ -268,6 +263,10 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); + if(id == R.id.nav_orders) { + Intent orders = new Intent(Home.this, OrderStatus.class); + startActivity(orders); + } DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout.closeDrawer(GravityCompat.START); diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Category.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Category.java similarity index 91% rename from FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Category.java rename to FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Category.java index b20615c..a6ae836 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Common/Category.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Category.java @@ -1,4 +1,4 @@ -package com.waterbase.foodifyServer.Common; +package com.waterbase.foodifyServer.Model; public class Category { private String Name; diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Order.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Order.java new file mode 100644 index 0000000..34aba88 --- /dev/null +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Order.java @@ -0,0 +1,61 @@ +package com.waterbase.foodifyServer.Model; + +public class Order { + + private String ProductId; + private String ProductName; + private String Quantity; + private String Price; + private String Discount; + + public Order() { + } + + public Order(String productId, String productName, String quantity, String price, String discount) { + ProductId = productId; + ProductName = productName; + Quantity = quantity; + Price = price; + Discount = discount; + } + + public String getProductId() { + return ProductId; + } + + public void setProductId(String productId) { + ProductId = productId; + } + + public String getProductName() { + return ProductName; + } + + public void setProductName(String productName) { + ProductName = productName; + } + + public String getQuantity() { + return Quantity; + } + + public void setQuantity(String quantity) { + Quantity = quantity; + } + + public String getPrice() { + return Price; + } + + public void setPrice(String price) { + Price = price; + } + + public String getDiscount() { + return Discount; + } + + public void setDiscount(String discount) { + Discount = discount; + } +} diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Request.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Request.java new file mode 100644 index 0000000..7fe52cd --- /dev/null +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Request.java @@ -0,0 +1,72 @@ +package com.waterbase.foodifyServer.Model; + +import java.util.List; + +public class Request { + private String phone; + private String name; + private String address; + private String total; + private String status; + private List foods; // list of food order + + public Request() { + } + + public Request(String phone, String name, String address, String total, List foods) { + this.phone = phone; + this.name = name; + this.address = address; + this.total = total; + this.foods = foods; + this.status = "0"; // Default is 0, 0: Placed, 1: Shipping, 2: Shipped + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getTotal() { + return total; + } + + public void setTotal(String total) { + this.total = total; + } + + public List getFoods() { + return foods; + } + + public void setFoods(List foods) { + this.foods = foods; + } +} diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java new file mode 100644 index 0000000..66cdc1a --- /dev/null +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java @@ -0,0 +1,126 @@ +package com.waterbase.foodifyServer; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; + +import com.firebase.ui.database.FirebaseRecyclerAdapter; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.jaredrummler.materialspinner.MaterialSpinner; +import com.waterbase.foodifyServer.Common.Common; +import com.waterbase.foodifyServer.Interface.ItemClickListener; +import com.waterbase.foodifyServer.Model.Request; +import com.waterbase.foodifyServer.ViewHolder.OrderViewHolder; + +public class OrderStatus extends AppCompatActivity { + + RecyclerView recyclerView; + RecyclerView.LayoutManager layoutManager; + + FirebaseRecyclerAdapter adapter; + + FirebaseDatabase db; + DatabaseReference requests; + + MaterialSpinner spinner; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_order_status); + + //Firebase + db = FirebaseDatabase.getInstance(); + requests = db.getReference("Requests"); + + //Init + recyclerView = (RecyclerView) findViewById(R.id.listOrders); + recyclerView.setHasFixedSize(true); + layoutManager = new LinearLayoutManager(this); + recyclerView.setLayoutManager(layoutManager); + + loadOrders(); + } + + private void loadOrders() { + adapter = new FirebaseRecyclerAdapter( + Request.class, + R.layout.order_layout, + OrderViewHolder.class, + requests + ) { + @Override + protected void populateViewHolder(OrderViewHolder viewHolder, Request model, int i) { + viewHolder.txtOrderId.setText(adapter.getRef(i).getKey()); + viewHolder.txtOrderStatus.setText(Common.coverCodeToStatus(model.getStatus())); + viewHolder.txtOrderAddress.setText(model.getAddress()); + viewHolder.txtOrderPhone.setText(model.getPhone()); + + viewHolder.setItemClickListener(new ItemClickListener() { + @Override + public void onClick(View view, int position, boolean isLongClick) { + + } + }); + } + }; + adapter.notifyDataSetChanged(); + recyclerView.setAdapter(adapter); + } + + @Override + public boolean onContextItemSelected(@NonNull MenuItem item) { + if(item.getTitle().equals(Common.UPDATE)) + showUpdateDialog(adapter.getRef(item.getOrder()).getKey(), adapter.getItem(item.getOrder())); + else if(item.getTitle().equals(Common.DELETE)) + deleteOrder(adapter.getRef(item.getOrder()).getKey()); + + return super.onContextItemSelected(item); + } + + private void deleteOrder(String key) { + requests.child(key).removeValue(); + } + + private void showUpdateDialog(String key, Request item) { + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(OrderStatus.this); + alertDialog.setTitle("Cập nhật tình trạng đơn hàng"); + alertDialog.setMessage("Vui lòng chọn tình trạng đơn:"); + + LayoutInflater inflater = this.getLayoutInflater(); + final View view = inflater.inflate(R.layout.update_order_layout, null); + + spinner = (MaterialSpinner) view.findViewById(R.id.statusSpinner); + spinner.setItems("Placed", "On my way", "Shipped"); + + alertDialog.setView(view); + + final String localKey = key; + alertDialog.setPositiveButton("Cập nhật", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss();; + item.setStatus(String.valueOf(spinner.getSelectedIndex())); + + requests.child(localKey).setValue(item); + } + }); + alertDialog.setNegativeButton("Huỷ", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + + alertDialog.show(); + } +} \ No newline at end of file diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java new file mode 100644 index 0000000..7399a6f --- /dev/null +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java @@ -0,0 +1,47 @@ +package com.waterbase.foodifyServer.ViewHolder; + +import android.view.ContextMenu; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.waterbase.foodifyServer.Interface.ItemClickListener; +import com.waterbase.foodifyServer.R; + +public class OrderViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener { + + public TextView txtOrderId, txtOrderStatus, txtOrderPhone, txtOrderAddress; + + private ItemClickListener itemClickListener; + + public OrderViewHolder(@NonNull View itemView) { + super(itemView); + + txtOrderAddress = (TextView) itemView.findViewById(R.id.order_address); + txtOrderId = (TextView) itemView.findViewById(R.id.order_id); + txtOrderStatus = (TextView) itemView.findViewById(R.id.order_status); + txtOrderPhone = (TextView) itemView.findViewById(R.id.order_phone); + + itemView.setOnClickListener(this); + itemView.setOnCreateContextMenuListener(this); + } + + public void setItemClickListener(ItemClickListener itemClickListener) { + this.itemClickListener = itemClickListener; + } + + @Override + public void onClick(View v) { + itemClickListener.onClick(v, getAdapterPosition(), false); + } + + @Override + public void onCreateContextMenu(ContextMenu contextMenu, View v, ContextMenu.ContextMenuInfo menuInfo) { + contextMenu.setHeaderTitle("Tuỳ chọn"); + + contextMenu.add(0,0, getAdapterPosition(), "Cập nhật"); + contextMenu.add(0,1, getAdapterPosition(), "Xoá"); + } +} diff --git a/FoodifyServer/app/src/main/res/layout/activity_order_status.xml b/FoodifyServer/app/src/main/res/layout/activity_order_status.xml new file mode 100644 index 0000000..031d9fc --- /dev/null +++ b/FoodifyServer/app/src/main/res/layout/activity_order_status.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/FoodifyServer/app/src/main/res/layout/order_layout.xml b/FoodifyServer/app/src/main/res/layout/order_layout.xml new file mode 100644 index 0000000..00eff2c --- /dev/null +++ b/FoodifyServer/app/src/main/res/layout/order_layout.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file