Fix Cart and fix bug remove Cart

This commit is contained in:
phanhuuloi27
2022-07-03 20:34:00 +07:00
parent b40e0b6596
commit 1568a1b5fc
9 changed files with 112 additions and 81 deletions
Binary file not shown.
@@ -355,7 +355,7 @@ public class Cart extends AppCompatActivity implements GoogleApiClient.Connectio
private void loadListFood() { private void loadListFood() {
cart = new Database(this).getCarts(); cart = new Database(this).getCarts(Common.currentUser.getPhone());
adapter = new CartAdapter(cart, this); adapter = new CartAdapter(cart, this);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
@@ -391,7 +391,7 @@ public class Cart extends AppCompatActivity implements GoogleApiClient.Connectio
//Remove item at List<Order> by position //Remove item at List<Order> by position
cart.remove(position); cart.remove(position);
//Delete all old data from SQLite //Delete all old data from SQLite
new Database(this).cleanCart(); new Database(this).cleanCart(Common.currentUser.getPhone());
//Update new data from List<Order> to SQLite //Update new data from List<Order> to SQLite
for (Order item : cart) for (Order item : cart)
new Database(this).addToCart(item); new Database(this).addToCart(item);
@@ -478,7 +478,7 @@ public class Cart extends AppCompatActivity implements GoogleApiClient.Connectio
{ {
//Calculate total price //Calculate total price
float total = 0; float total = 0;
List<Order> orders = new Database(getBaseContext()).getCarts(); List<Order> orders = new Database(getBaseContext()).getCarts(Common.currentUser.getPhone());
for (Order item : orders) for (Order item : orders)
total += (Float.parseFloat(item.getPrice())) * (Float.parseFloat(item.getQuantity())) * (100 - Long.parseLong(item.getDiscount()))/100; total += (Float.parseFloat(item.getPrice())) * (Float.parseFloat(item.getQuantity())) * (100 - Long.parseLong(item.getDiscount()))/100;
Locale locale = new Locale("vi", "VN"); Locale locale = new Locale("vi", "VN");
@@ -20,21 +20,36 @@ public class Database extends SQLiteAssetHelper {
super(context, DB_NAME, null, DB_VER); super(context, DB_NAME, null, DB_VER);
} }
public List<Order> getCarts() { public boolean checkFoodExists(String foodId, String userPhone)
{
boolean flag = false;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = null;
String SQLQuery = String.format("SELECT * From OrderDetail WHERE UserPhone='%s' AND ProductId='%s'", userPhone, foodId);
cursor = db.rawQuery(SQLQuery, null);
if(cursor.getCount() > 0)
flag = true;
else
flag = false;
cursor.close();
return flag;
}
public List<Order> getCarts(String userPhone) {
SQLiteDatabase db = getReadableDatabase(); SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlSelect = {"ID", "ProductName", "ProductId", "Quantity", "Price", "Discount", "Image"}; String[] sqlSelect = {"UserPhone", "ProductName", "ProductId", "Quantity", "Price", "Discount", "Image"};
String sqlTable = "OrderDetail"; String sqlTable = "OrderDetail";
qb.setTables(sqlTable); qb.setTables(sqlTable);
Cursor c = qb.query(db, sqlSelect, null, null, null, null, null); Cursor c = qb.query(db, sqlSelect, "UserPhone=?", new String[]{userPhone}, null, null, null);
final List<Order> result = new ArrayList<>(); final List<Order> result = new ArrayList<>();
if (c.moveToFirst()) { if (c.moveToFirst()) {
do { do {
result.add(new Order( result.add(new Order(
c.getInt(c.getColumnIndexOrThrow("ID")), c.getString(c.getColumnIndexOrThrow("UserPhone")),
c.getString(c.getColumnIndexOrThrow("ProductId")), c.getString(c.getColumnIndexOrThrow("ProductId")),
c.getString(c.getColumnIndexOrThrow("ProductName")), c.getString(c.getColumnIndexOrThrow("ProductName")),
c.getString(c.getColumnIndexOrThrow("Quantity")), c.getString(c.getColumnIndexOrThrow("Quantity")),
@@ -49,7 +64,8 @@ public class Database extends SQLiteAssetHelper {
public void addToCart(Order order) { public void addToCart(Order order) {
SQLiteDatabase db = getReadableDatabase(); SQLiteDatabase db = getReadableDatabase();
String query = String.format("INSERT INTO OrderDetail(ProductId, ProductName, Quantity, Price,Discount,Image) VALUES ('%s', '%s','%s','%s','%s','%s');", String query = String.format("INSERT OR REPLACE INTO OrderDetail(UserPhone, ProductId, ProductName, Quantity, Price,Discount,Image) VALUES ('%s', '%s', '%s','%s','%s','%s','%s');",
order.getUserPhone(),
order.getProductId(), order.getProductId(),
order.getProductName(), order.getProductName(),
order.getQuantity(), order.getQuantity(),
@@ -59,15 +75,41 @@ public class Database extends SQLiteAssetHelper {
db.execSQL(query); db.execSQL(query);
} }
public void removeFromCart(String productId, String phone) { public void removeFromCart(String productId, String userPhone) {
SQLiteDatabase db = getReadableDatabase(); SQLiteDatabase db = getReadableDatabase();
String query = String.format("DELETE FROM OrderDetail WHERE UserPhone='%s' and ProductId='%s'", phone, productId); String query = String.format("DELETE FROM OrderDetail WHERE UserPhone='%s' and ProductId='%s'", userPhone, productId);
db.execSQL(query); db.execSQL(query);
} }
public void cleanCart() { public void cleanCart(String userPhone) {
SQLiteDatabase db = getReadableDatabase(); SQLiteDatabase db = getReadableDatabase();
String query = String.format("DELETE FROM OrderDetail"); String query = String.format("DELETE FROM OrderDetail WHERE UserPhone='%s'", userPhone);
db.execSQL(query);
}
public int getCountCart(String userPhone) {
int count = 0;
SQLiteDatabase db = getReadableDatabase();
String query = String.format("SELECT COUNT(*) FROM OrderDetail Where UserPhone='%s'", userPhone);
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
count = cursor.getInt(0);
} while (cursor.moveToNext());
}
return count;
}
public void updateCart(Order order) {
SQLiteDatabase db = getReadableDatabase();
String query = String.format("UPDATE OrderDetail SET Quantity = '%s' WHERE UserPhone = '%s' AND ProductId='%s'", order.getQuantity(), order.getUserPhone(), order.getProductId());
db.execSQL(query);
}
public void increaseCart(String userPhone, String foodId) {
SQLiteDatabase db = getReadableDatabase();
String query = String.format("UPDATE OrderDetail SET Quantity = Quantity+1 WHERE UserPhone = '%s' AND ProductId='%s'", userPhone, foodId);
db.execSQL(query); db.execSQL(query);
} }
@@ -96,23 +138,5 @@ public class Database extends SQLiteAssetHelper {
return true; return true;
} }
public int getCountCart() {
int count = 0;
SQLiteDatabase db = getReadableDatabase();
String query = String.format("SELECT COUNT(*) FROM OrderDetail");
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
count = cursor.getInt(0);
} while (cursor.moveToNext());
}
return count;
}
public void updateCart(Order order) {
SQLiteDatabase db = getReadableDatabase();
String query = String.format("UPDATE OrderDetail SET Quantity = %s WHERE ID = %d", order.getQuantity(), order.getID());
db.execSQL(query);
}
} }
@@ -116,6 +116,7 @@ public class FoodDetail extends AppCompatActivity implements RatingDialogListene
@Override @Override
public void onClick(View v) { public void onClick(View v) {
new Database(getBaseContext()).addToCart(new Order( new Database(getBaseContext()).addToCart(new Order(
Common.currentUser.getPhone(),
foodId, foodId,
currentFood.getName(), currentFood.getName(),
numberButton.getNumber(), numberButton.getNumber(),
@@ -128,7 +129,7 @@ public class FoodDetail extends AppCompatActivity implements RatingDialogListene
} }
}); });
btnCart.setCount(new Database(this).getCountCart()); btnCart.setCount(new Database(this).getCountCart(Common.currentUser.getPhone()));
food_description = (TextView) findViewById(R.id.food_description); food_description = (TextView) findViewById(R.id.food_description);
food_name = (TextView) findViewById(R.id.food_name); food_name = (TextView) findViewById(R.id.food_name);
@@ -105,11 +105,11 @@ public class FoodList extends AppCompatActivity {
@Override @Override
public void onRefresh() { public void onRefresh() {
//Get Intent here //Get Intent here
if(getIntent() != null) if (getIntent() != null)
categoryId = getIntent().getStringExtra("CategoryId"); categoryId = getIntent().getStringExtra("CategoryId");
categoryName = getIntent().getStringExtra("CategoryName"); categoryName = getIntent().getStringExtra("CategoryName");
if(!categoryId.isEmpty() && categoryId != null) { if (!categoryId.isEmpty() && categoryId != null) {
if(Common.isConnectedToInternet(getBaseContext())) if (Common.isConnectedToInternet(getBaseContext()))
loadListFood(categoryId); loadListFood(categoryId);
else { else {
Toast.makeText(FoodList.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); Toast.makeText(FoodList.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show();
@@ -123,11 +123,11 @@ public class FoodList extends AppCompatActivity {
@Override @Override
public void run() { public void run() {
//Get Intent here //Get Intent here
if(getIntent() != null) if (getIntent() != null)
categoryId = getIntent().getStringExtra("CategoryId"); categoryId = getIntent().getStringExtra("CategoryId");
categoryName = getIntent().getStringExtra("CategoryName"); categoryName = getIntent().getStringExtra("CategoryName");
if(!categoryId.isEmpty() && categoryId != null) { if (!categoryId.isEmpty() && categoryId != null) {
if(Common.isConnectedToInternet(getBaseContext())) if (Common.isConnectedToInternet(getBaseContext()))
loadListFood(categoryId); loadListFood(categoryId);
else { else {
Toast.makeText(FoodList.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show(); Toast.makeText(FoodList.this, "Vui lòng kiểm tra kết nối mạng!", Toast.LENGTH_SHORT).show();
@@ -153,8 +153,8 @@ public class FoodList extends AppCompatActivity {
//When user type their text, we will change suggest list //When user type their text, we will change suggest list
List<String> suggest = new ArrayList<String>(); List<String> suggest = new ArrayList<String>();
for(String search:suggestList) { for (String search : suggestList) {
if(search.toLowerCase().contains(materialSearchBar.getText().toLowerCase())) if (search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
suggest.add(search); suggest.add(search);
} }
materialSearchBar.setLastSuggestions(suggest); materialSearchBar.setLastSuggestions(suggest);
@@ -170,7 +170,7 @@ public class FoodList extends AppCompatActivity {
public void onSearchStateChanged(boolean enabled) { public void onSearchStateChanged(boolean enabled) {
//When search bar is close //When search bar is close
//Restore original adapter //Restore original adapter
if(!enabled) if (!enabled)
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
} }
@@ -249,7 +249,7 @@ public class FoodList extends AppCompatActivity {
.addValueEventListener(new ValueEventListener() { .addValueEventListener(new ValueEventListener() {
@Override @Override
public void onDataChange(DataSnapshot dataSnapshot) { public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot: dataSnapshot.getChildren()){ for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Food item = postSnapshot.getValue(Food.class); Food item = postSnapshot.getValue(Food.class);
suggestList.add(item.getName()); suggestList.add(item.getName());
} }
@@ -264,7 +264,7 @@ public class FoodList extends AppCompatActivity {
}); });
} }
private void loadListFood(String categoryId){ private void loadListFood(String categoryId) {
//Create query by category Id //Create query by category Id
Query searchByName = foodList.orderByChild("menuId").equalTo(categoryId); Query searchByName = foodList.orderByChild("menuId").equalTo(categoryId);
//Create Options with query //Create Options with query
@@ -277,17 +277,15 @@ public class FoodList extends AppCompatActivity {
protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder, int position, @NonNull Food model) { protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder, int position, @NonNull Food model) {
viewHolder.food_name.setText(model.getName()); viewHolder.food_name.setText(model.getName());
if(Integer.parseInt(model.getDiscount()) > 0) if (Integer.parseInt(model.getDiscount()) > 0) {
{
String foodPrice = model.getPrice() + "đ"; String foodPrice = model.getPrice() + "đ";
long newFoodPrice = Long.parseLong(model.getPrice()) - Long.parseLong(model.getPrice())* Long.parseLong(model.getDiscount())/100; long newFoodPrice = Long.parseLong(model.getPrice()) - Long.parseLong(model.getPrice()) * Long.parseLong(model.getDiscount()) / 100;
SpannableStringBuilder spnBuilder = new SpannableStringBuilder(foodPrice); SpannableStringBuilder spnBuilder = new SpannableStringBuilder(foodPrice);
StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
spnBuilder.setSpan(strikethroughSpan, 0, foodPrice.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spnBuilder.setSpan(strikethroughSpan, 0, foodPrice.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
viewHolder.food_price.setText(spnBuilder); viewHolder.food_price.setText(spnBuilder);
viewHolder.newPrice.setText(newFoodPrice+"đ"); viewHolder.newPrice.setText(newFoodPrice + "đ");
} else } else {
{
viewHolder.food_price.setText(String.format("%s đ", model.getPrice())); viewHolder.food_price.setText(String.format("%s đ", model.getPrice()));
viewHolder.discount.setVisibility(View.GONE); viewHolder.discount.setVisibility(View.GONE);
viewHolder.newPrice.setVisibility(View.GONE); viewHolder.newPrice.setVisibility(View.GONE);
@@ -298,17 +296,24 @@ public class FoodList extends AppCompatActivity {
Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image); Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image);
//Quick Cart //Quick Cart
viewHolder.quick_cart.setOnClickListener(new View.OnClickListener() { viewHolder.quick_cart.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
new Database(getBaseContext()).addToCart(new Order( boolean ifExists = new Database(getBaseContext()).checkFoodExists(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone());
adapter.getRef(viewHolder.getAdapterPosition()).getKey(), if (!ifExists) {
model.getName(), new Database(getBaseContext()).addToCart(new Order(
"1", Common.currentUser.getPhone(),
model.getPrice(), adapter.getRef(viewHolder.getAdapterPosition()).getKey(),
model.getDiscount(), model.getName(),
model.getImage() "1",
)); model.getPrice(),
model.getDiscount(),
model.getImage()
));
} else {
new Database(getBaseContext()).increaseCart(Common.currentUser.getPhone(), adapter.getRef(viewHolder.getAdapterPosition()).getKey());
}
Toast.makeText(FoodList.this, "Đã thêm vào giỏ hàng!", Toast.LENGTH_SHORT).show(); Toast.makeText(FoodList.this, "Đã thêm vào giỏ hàng!", Toast.LENGTH_SHORT).show();
} }
@@ -316,14 +321,14 @@ public class FoodList extends AppCompatActivity {
//Add Favorites //Add Favorites
if(localDB.isFavorite(adapter.getRef(position).getKey(),Common.currentUser.getPhone())) if (localDB.isFavorite(adapter.getRef(position).getKey(), Common.currentUser.getPhone()))
viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24); viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24);
//Click to change state of Favorites //Click to change state of Favorites
viewHolder.fav_image.setOnClickListener(new View.OnClickListener() { viewHolder.fav_image.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if(!localDB.isFavorite(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone())){ if (!localDB.isFavorite(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone())) {
localDB.addToFavorites(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone()); localDB.addToFavorites(adapter.getRef(viewHolder.getAdapterPosition()).getKey(), Common.currentUser.getPhone());
viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24); viewHolder.fav_image.setImageResource(R.drawable.ic_baseline_favorite_24);
Toast.makeText(FoodList.this, model.getName() + " đã thêm vào danh sách yêu thích", Toast.LENGTH_SHORT).show(); Toast.makeText(FoodList.this, model.getName() + " đã thêm vào danh sách yêu thích", Toast.LENGTH_SHORT).show();
@@ -365,7 +370,7 @@ public class FoodList extends AppCompatActivity {
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
if(adapter == null) { if (adapter == null) {
adapter.stopListening(); adapter.stopListening();
searchAdapter.stopListening(); searchAdapter.stopListening();
} }
@@ -117,7 +117,7 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati
} }
}); });
fab.setCount(new Database(this).getCountCart()); fab.setCount(new Database(this).getCountCart(Common.currentUser.getPhone()));
//View //View
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout); swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);
@@ -290,7 +290,7 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
adapter.startListening(); adapter.startListening();
fab.setCount(new Database(this).getCountCart()); fab.setCount(new Database(this).getCountCart(Common.currentUser.getPhone()));
} }
private void updateToken(String token) { private void updateToken(String token) {
@@ -4,7 +4,7 @@ import java.io.Serializable;
public class Order implements Serializable { public class Order implements Serializable {
private int ID; private String UserPhone;
private String ProductId; private String ProductId;
private String ProductName; private String ProductName;
private String Quantity; private String Quantity;
@@ -15,7 +15,17 @@ public class Order implements Serializable {
public Order() { public Order() {
} }
public Order(String productId, String productName, String quantity, String price, String discount, String image) { // public Order(String productId, String productName, String quantity, String price, String discount, String image) {
// ProductId = productId;
// ProductName = productName;
// Quantity = quantity;
// Price = price;
// Discount = discount;
// Image = image;
// }
public Order(String userPhone, String productId, String productName, String quantity, String price, String discount, String image) {
UserPhone = userPhone;
ProductId = productId; ProductId = productId;
ProductName = productName; ProductName = productName;
Quantity = quantity; Quantity = quantity;
@@ -24,22 +34,12 @@ public class Order implements Serializable {
Image = image; Image = image;
} }
public Order(int ID, String productId, String productName, String quantity, String price, String discount, String image) { public String getUserPhone() {
this.ID = ID; return UserPhone;
ProductId = productId;
ProductName = productName;
Quantity = quantity;
Price = price;
Discount = discount;
Image = image;
} }
public int getID() { public void setUserPhone(String userPhone) {
return ID; UserPhone = userPhone;
}
public void setID(int ID) {
this.ID = ID;
} }
public String getProductId() { public String getProductId() {
@@ -121,7 +121,7 @@ public class OrderDetail extends AppCompatActivity {
sendNotificationOrder(order_number); sendNotificationOrder(order_number);
//Delete Cart //Delete Cart
new Database(getBaseContext()).cleanCart(); new Database(getBaseContext()).cleanCart(Common.currentUser.getPhone());
Toast.makeText(OrderDetail.this, "Đặt hàng thành công!", Toast.LENGTH_SHORT).show(); Toast.makeText(OrderDetail.this, "Đặt hàng thành công!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(OrderDetail.this, Home.class)); startActivity(new Intent(OrderDetail.this, Home.class));
finish(); finish();
@@ -160,7 +160,7 @@ public class OrderDetail extends AppCompatActivity {
sendNotificationOrder(order_number); sendNotificationOrder(order_number);
//Delete Cart //Delete Cart
new Database(getBaseContext()).cleanCart(); new Database(getBaseContext()).cleanCart(Common.currentUser.getPhone());
Toast.makeText(OrderDetail.this, "Đặt hàng thành công!", Toast.LENGTH_SHORT).show(); Toast.makeText(OrderDetail.this, "Đặt hàng thành công!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(OrderDetail.this, Home.class)); startActivity(new Intent(OrderDetail.this, Home.class));
finish(); finish();
@@ -216,7 +216,7 @@ public class OrderDetail extends AppCompatActivity {
//Only run when get result //Only run when get result
if (response.code() == 200) { if (response.code() == 200) {
if (response.body().success == 1) { if (response.body().success == 1) {
new Database(getBaseContext()).cleanCart(); new Database(getBaseContext()).cleanCart(Common.currentUser.getPhone());
Toast.makeText(OrderDetail.this, "Đặt hàng thành công!", Toast.LENGTH_SHORT).show(); Toast.makeText(OrderDetail.this, "Đặt hàng thành công!", Toast.LENGTH_SHORT).show();
finish(); finish();
} else { } else {
@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.cepheuen.elegantnumberbutton.view.ElegantNumberButton; import com.cepheuen.elegantnumberbutton.view.ElegantNumberButton;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
import com.waterbase.foodify.Cart; import com.waterbase.foodify.Cart;
import com.waterbase.foodify.Common.Common;
import com.waterbase.foodify.Database.Database; import com.waterbase.foodify.Database.Database;
import com.waterbase.foodify.Model.Order; import com.waterbase.foodify.Model.Order;
import com.waterbase.foodify.R; import com.waterbase.foodify.R;
@@ -56,7 +57,7 @@ public class CartAdapter extends RecyclerView.Adapter<CartViewHolder>{
//Calculate total price //Calculate total price
float total = 0; float total = 0;
List<Order> orders = new Database(cart).getCarts(); List<Order> orders = new Database(cart).getCarts(Common.currentUser.getPhone());
for (Order item : orders) for (Order item : orders)
total += (Float.parseFloat(item.getPrice())) * (Float.parseFloat(item.getQuantity())) * (100 - Long.parseLong(item.getDiscount()))/100; total += (Float.parseFloat(item.getPrice())) * (Float.parseFloat(item.getQuantity())) * (100 - Long.parseLong(item.getDiscount()))/100;
Locale locale = new Locale("vi", "VN"); Locale locale = new Locale("vi", "VN");