diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index b0df3ee..43f6bd4 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -1,17 +1,17 @@
-
+
-
+
-
+
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApi.java b/app/src/main/java/com/capstone/foodify/API/FoodApi.java
index 189561a..af4c6c3 100644
--- a/app/src/main/java/com/capstone/foodify/API/FoodApi.java
+++ b/app/src/main/java/com/capstone/foodify/API/FoodApi.java
@@ -41,7 +41,7 @@ public interface FoodApi {
@GET("products/enable?pageNo=0&pageSize=10&sortBy=createdTime&sortDir=desc")
Call recentFood();
- @GET("shops?pageNo=0&pageSize=10&sortBy=id&sortDir=asc")
+ @GET("shops/enable?pageNo=0&pageSize=10&sortBy=id&sortDir=asc")
Call allShops();
@GET("products/search/{name}")
diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
index 860d24e..880284a 100644
--- a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
+++ b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java
@@ -81,7 +81,7 @@ public interface FoodApiToken {
@DELETE("users/{userId}/addresses/{addressId}")
Call deleteAddressUser(@Path("userId") int userId, @Path("addressId") int addressId);
- @POST("user/{userId}/orders")
+ @POST("users/{userId}/orders")
Call createOrder(@Path("userId") int userId, @Body Order order);
@POST("products/{productId}/comments")
diff --git a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java
index 487d141..c6a825b 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java
@@ -571,26 +571,29 @@ public class FoodDetailActivity extends AppCompatActivity {
confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- progressLayout.setVisibility(View.VISIBLE);
- if(actionCode == CREATE_COMMENT){
- //Create comment
+ if(comment_content.getText().toString().trim().length() > 0){
+ progressLayout.setVisibility(View.VISIBLE);
- createComment(comment_content.getText().toString(), ratingBarDialog);
-
- dialog.dismiss();
-
- } else if(actionCode == EDIT_COMMENT){
- //Edit comment
- if(commentUser != null){
-
- editComment(comment_content.getText().toString(), ratingBarDialog);
+ if(actionCode == CREATE_COMMENT){
+ //Create comment
+ createComment(comment_content.getText().toString(), ratingBarDialog);
dialog.dismiss();
+
+ } else if(actionCode == EDIT_COMMENT){
+ //Edit comment
+ if(commentUser != null){
+
+ editComment(comment_content.getText().toString(), ratingBarDialog);
+
+ dialog.dismiss();
+ }
+
}
-
+ } else {
+ comment_content.setError("Khung bình luận không được để trống!");
}
-
}
});
diff --git a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
index 8e3bdc8..9f44df3 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java
@@ -14,10 +14,12 @@ import android.os.Looper;
import android.provider.Settings;
import android.util.Log;
import android.view.MenuItem;
+import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDelegate;
+import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.splashscreen.SplashScreen;
@@ -70,6 +72,7 @@ public class MainActivity extends AppCompatActivity {
BottomNavigationView bottomNavigationView;
private FirebaseAuth mAuth;
private FirebaseUser user;
+ private ConstraintLayout progressLayout;
//Location
private static final int REQUEST_CHECK_SETTINGS = 100;
@@ -98,6 +101,7 @@ public class MainActivity extends AppCompatActivity {
user = mAuth.getCurrentUser();
if (user != null && Common.CURRENT_USER == null) {
+ progressLayout.setVisibility(View.VISIBLE);
user.getIdToken(true)
.addOnCompleteListener(new OnCompleteListener() {
@Override
@@ -189,10 +193,13 @@ public class MainActivity extends AppCompatActivity {
}
+ private void getLocationUser(){
+ }
private void initComponent() {
bottomNavigationView = findViewById(R.id.bottom_nav);
viewPager2 = findViewById(R.id.viewPager);
+ progressLayout = findViewById(R.id.progress_layout);
}
private void bottomNavigation() {
diff --git a/app/src/main/java/com/capstone/foodify/Activity/OrderCheckOutActivity.java b/app/src/main/java/com/capstone/foodify/Activity/OrderCheckOutActivity.java
index c79a8f8..1703833 100644
--- a/app/src/main/java/com/capstone/foodify/Activity/OrderCheckOutActivity.java
+++ b/app/src/main/java/com/capstone/foodify/Activity/OrderCheckOutActivity.java
@@ -29,15 +29,20 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.capstone.foodify.API.FoodApi;
+import com.capstone.foodify.API.FoodApiToken;
import com.capstone.foodify.API.GoogleMapApi;
import com.capstone.foodify.Adapter.OrderDetailAdapter;
import com.capstone.foodify.Common;
import com.capstone.foodify.Model.Address;
+import com.capstone.foodify.Model.Basket;
import com.capstone.foodify.Model.DistrictWardResponse;
import com.capstone.foodify.Model.GoogleMap.GoogleMapResponse;
import com.capstone.foodify.Model.GoogleMap.Location;
+import com.capstone.foodify.Model.Order;
+import com.capstone.foodify.Model.OrderDetail;
import com.capstone.foodify.R;
import com.capstone.foodify.ZaloPay.Api.CreateOrder;
+import com.capstone.foodify.ZaloPay.Helper.Helpers;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.material.textfield.TextInputLayout;
import com.google.firebase.auth.FirebaseAuth;
@@ -63,9 +68,13 @@ import vn.zalopay.sdk.ZaloPaySDK;
import vn.zalopay.sdk.listeners.PayOrderListener;
public class OrderCheckOutActivity extends AppCompatActivity {
+ private static final String TAKE_FOOD_FROM_SHOP = "Đến shop lấy";
+ private static final String ZALO_PAYMENT_METHOD = "ZALO PAY";
+ private static final String CASH_PAYMENT = "CASH";
private static final Double LAT_SHOP = 16.0500622;
private static final Double LNG_SHOP = 108.2351611;
private static String finalAddress = null;
+ private static double finalLat, finalLng = 0;
ImageView back_image;
OrderDetailAdapter adapter;
RecyclerView recyclerView;
@@ -74,11 +83,11 @@ public class OrderCheckOutActivity extends AppCompatActivity {
EditText edt_address;
Spinner spn_list_address, spn_district, spn_ward;
ConstraintLayout manual_input_address_layout;
- Button change_address_button, confirm_address_button, btn_ZaloPay;
+ Button change_address_button, confirm_address_button, btn_ZaloPay, btn_Pay;
RadioButton list_address_input, auto_detect_location, manual_input_address, radio_button_selected, take_food_from_shop;
RadioGroup address_option;
ConstraintLayout progress_layout;
- float total;
+ float total, shipCost;
private static final ArrayList wardList = new ArrayList<>();
private static final ArrayList districtList = new ArrayList<>();
@@ -118,6 +127,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
txt_distance = findViewById(R.id.txt_distance);
txt_ship_cost = findViewById(R.id.txt_ship_cost);
btn_ZaloPay = findViewById(R.id.btnZaloPay);
+ btn_Pay = findViewById(R.id.btnPay);
//Reload user data
Common.reloadUser(this);
@@ -193,7 +203,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
if(radio_button_selected == take_food_from_shop){
//Action 4
- finalAddress = "Đến shop lấy";
+ finalAddress = TAKE_FOOD_FROM_SHOP;
}
if(finalAddress == null){
@@ -219,6 +229,28 @@ public class OrderCheckOutActivity extends AppCompatActivity {
});
initZaloPaymentMethod();
+
+ //Set event for button pay by CASH
+ btn_Pay.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ progress_layout.setVisibility(View.VISIBLE);
+
+ if(!Common.CURRENT_USER.isLocked()){
+ if(finalAddress != null){
+ createOrderFood(Helpers.getAppTransId(), CASH_PAYMENT);
+ } else {
+ Toast.makeText(OrderCheckOutActivity.this, "Bạn chưa xác nhận địa chỉ!", Toast.LENGTH_SHORT).show();
+ progress_layout.setVisibility(View.GONE);
+ }
+ } else {
+ //Show notification account locked
+ FirebaseAuth.getInstance().signOut();
+ Common.showErrorServerNotification(OrderCheckOutActivity.this, "Tài khoản của bạn đã bị khoá!");
+ }
+
+ }
+ });
}
private void getAddress() {
@@ -246,6 +278,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
}
private void initZaloPaymentMethod(){
+
// handle CreateOrder
btn_ZaloPay.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@@ -257,7 +290,6 @@ public class OrderCheckOutActivity extends AppCompatActivity {
if(!Common.CURRENT_USER.isLocked()){
//Create order
-
//Check address is null or not
if(finalAddress != null){
@@ -278,24 +310,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
runOnUiThread(new Runnable() {
@Override
public void run() {
- new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.SUCCESS)
- .setTitle("Thành công!")
- .setMessage("Bạn đã thanh toán thành công cho đơn hàng #" + transactionId)
- .setCancelable(true)
- .setOnClickListener(new OnDialogClickListener() {
- @Override
- public void onClick(@NonNull AestheticDialog.Builder builder) {
-
- createOrderFood(transactionId);
-
- Common.LIST_BASKET_FOOD.clear();
- startActivity(new Intent(OrderCheckOutActivity.this, MainActivity.class));
- finish();
- }
- })
- .show();
-
- progress_layout.setVisibility(View.GONE);
+ createOrderFood(transactionId, ZALO_PAYMENT_METHOD);
}
});
@@ -321,6 +336,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
@Override
public void onClick(@NonNull AestheticDialog.Builder builder) {
startActivity(new Intent(OrderCheckOutActivity.this, MainActivity.class));
+ builder.dismiss();
finish();
}
})
@@ -348,72 +364,99 @@ public class OrderCheckOutActivity extends AppCompatActivity {
});
}
- private void createOrderFood(String transactionId) {
+ private void createOrderFood(String transactionId, String paymentMethod) {
-// //Create order object
-// Order order = new Order(transactionId, "");
-//
-// FoodApiToken.apiService.createOrder(Common.CURRENT_USER.getId()).enqueue(new Callback() {
-// @Override
-// public void onResponse(Call call, Response response) {
-//
-// }
-//
-// @Override
-// public void onFailure(Call call, Throwable t) {
-//
-// }
-// });
- }
+ //Create list order detail object
+ List listOrderDetail = new ArrayList<>();
+ for(Basket tempFood: Common.LIST_BASKET_FOOD){
+ OrderDetail orderTemp = new OrderDetail(Integer.parseInt(tempFood.getId()), tempFood.getQuantity());
+ listOrderDetail.add(orderTemp);
+ }
- private void getDistanceAndCalculateShipCost(String address) {
- //Get location from address
+ //Create order object
+ Order order = new Order(transactionId, paymentMethod, shipCost, "AWAITING" , finalAddress, listOrderDetail, String.valueOf(finalLat), String.valueOf(finalLng));
- GoogleMapApi.apiService.getGeoCode(address, Common.MAP_API).enqueue(new Callback() {
+ FoodApiToken.apiService.createOrder(Common.CURRENT_USER.getId(), order).enqueue(new Callback() {
@Override
- public void onResponse(Call call, Response response) {
- GoogleMapResponse jsonResponse = response.body();
-
- Double lat = jsonResponse.getResults().get(0).getGeometry().getLocation().getLat();
- Double lng = jsonResponse.getResults().get(0).getGeometry().getLocation().getLng();
-
- LatLng addressFrom = new LatLng(lat, lng);
- LatLng addressTo = new LatLng(LAT_SHOP, LNG_SHOP);
-
- double distance = CalculationByDistance(addressFrom, addressTo);
-
- double roundDistance = Math.round(distance * 100.0) / 100.0;
-
- //Show distance to user
- txt_distance.setText(roundDistance + " km");
-
- //Calculate ship cost
- float shipCost = 0;
- if(roundDistance <= 3){
- shipCost = 15000;
- } else if(roundDistance > 3 && roundDistance <= 10){
- shipCost = 5000 * (float) roundDistance;
+ public void onResponse(Call call, Response response) {
+ if(response.code() == 201){
+ new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.SUCCESS)
+ .setTitle("Thành công!")
+ .setMessage("Bạn đã đặt hàng thành công cho đơn hàng #" + transactionId)
+ .setCancelable(true)
+ .setOnClickListener(new OnDialogClickListener() {
+ @Override
+ public void onClick(@NonNull AestheticDialog.Builder builder) {
+ Common.LIST_BASKET_FOOD.clear();
+ startActivity(new Intent(OrderCheckOutActivity.this, MainActivity.class));
+ builder.dismiss();
+ finish();
+ }
+ }).show();
} else {
- shipCost = 3000 * (float) roundDistance;
+ Toast.makeText(OrderCheckOutActivity.this, "Đã có lỗi hệ thống! Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
}
-
- txt_ship_cost.setText(Common.changeCurrencyUnit(shipCost));
-
- //Update total order
- total = total + shipCost;
- txt_total.setText(Common.changeCurrencyUnit(total));
-
- progress_layout.setVisibility(View.GONE);
}
@Override
- public void onFailure(Call call, Throwable t) {
- Toast.makeText(OrderCheckOutActivity.this, "Error: " + t, Toast.LENGTH_SHORT).show();
+ public void onFailure(Call call, Throwable t) {
+ Toast.makeText(OrderCheckOutActivity.this, "Đã xảy ra lỗi kết nối hệ thống!", Toast.LENGTH_SHORT).show();
}
});
}
- public double CalculationByDistance(LatLng from, LatLng to) {
+ private void getDistanceAndCalculateShipCost(String address) {
+ //Get location from address
+ if(!address.equals(TAKE_FOOD_FROM_SHOP)){
+ GoogleMapApi.apiService.getGeoCode(address, Common.MAP_API).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ GoogleMapResponse jsonResponse = response.body();
+
+ Double lat = jsonResponse.getResults().get(0).getGeometry().getLocation().getLat();
+ Double lng = jsonResponse.getResults().get(0).getGeometry().getLocation().getLng();
+
+ finalLat = lat;
+ finalLng = lng;
+
+ LatLng addressFrom = new LatLng(lat, lng);
+ LatLng addressTo = new LatLng(LAT_SHOP, LNG_SHOP);
+
+ int distance = CalculationByDistance(addressFrom, addressTo);
+
+ //Show distance to user
+ txt_distance.setText(distance + " km");
+
+ //Calculate ship cost
+ if(distance <= 3){
+ shipCost = 15000;
+ } else if(distance > 3 && distance <= 10){
+ shipCost = 5000 * (float) distance;
+ } else {
+ shipCost = 3000 * (float) distance;
+ }
+
+ txt_ship_cost.setText(Common.changeCurrencyUnit(shipCost));
+
+ //Update total order
+ total = total + shipCost;
+ txt_total.setText(Common.changeCurrencyUnit(total));
+
+ progress_layout.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Toast.makeText(OrderCheckOutActivity.this, "Error: " + t, Toast.LENGTH_SHORT).show();
+ }
+ });
+ } else {
+ progress_layout.setVisibility(View.GONE);
+ }
+
+ }
+
+ public int CalculationByDistance(LatLng from, LatLng to) {
int Radius = 6371;// radius of earth in Km
double lat1 = from.latitude;
double lat2 = to.latitude;
@@ -429,11 +472,8 @@ public class OrderCheckOutActivity extends AppCompatActivity {
double valueResult = Radius * c;
double km = valueResult / 1;
DecimalFormat newFormat = new DecimalFormat("####");
- int kmInDec = Integer.valueOf(newFormat.format(km));
- double meter = valueResult % 1000;
- int meterInDec = Integer.valueOf(newFormat.format(meter));
- return Radius * c;
+ return Integer.valueOf(newFormat.format(km));
}
private boolean validForm(){
diff --git a/app/src/main/java/com/capstone/foodify/Adapter/BasketAdapter.java b/app/src/main/java/com/capstone/foodify/Adapter/BasketAdapter.java
index 685e4b0..ae9075a 100644
--- a/app/src/main/java/com/capstone/foodify/Adapter/BasketAdapter.java
+++ b/app/src/main/java/com/capstone/foodify/Adapter/BasketAdapter.java
@@ -23,7 +23,6 @@ import java.util.List;
public class BasketAdapter extends RecyclerView.Adapter {
- private static int quantity = 0;
public List listBasketFood;
@@ -58,7 +57,6 @@ public class BasketAdapter extends RecyclerView.Adapter orderDetails;
+ private String lat;
+ private String lng;
- public Order(String orderTrackingNumber, int shipperId, String paymentMethod, float shippingCost, String status, String address, List orderDetails) {
+ public Order(String orderTrackingNumber, String paymentMethod, float shippingCost, String status, String address, List orderDetails, String lat, String lng) {
this.orderTrackingNumber = orderTrackingNumber;
- this.shipperId = shipperId;
this.paymentMethod = paymentMethod;
this.shippingCost = shippingCost;
this.status = status;
this.address = address;
this.orderDetails = orderDetails;
+ this.lat = lat;
+ this.lng = lng;
}
public int getId() {
@@ -96,4 +99,20 @@ public class Order {
public void setListOrderDetail(List listOrderDetail) {
this.orderDetails = listOrderDetail;
}
+
+ public String getLat() {
+ return lat;
+ }
+
+ public void setLat(String lat) {
+ this.lat = lat;
+ }
+
+ public String getLng() {
+ return lng;
+ }
+
+ public void setLng(String lng) {
+ this.lng = lng;
+ }
}
diff --git a/app/src/main/java/com/capstone/foodify/Model/OrderDetail.java b/app/src/main/java/com/capstone/foodify/Model/OrderDetail.java
index 7e07aec..93fb70b 100644
--- a/app/src/main/java/com/capstone/foodify/Model/OrderDetail.java
+++ b/app/src/main/java/com/capstone/foodify/Model/OrderDetail.java
@@ -7,6 +7,14 @@ public class OrderDetail {
private String quantity;
private float subTotal;
+ public OrderDetail(int productId, String quantity) {
+ this.productId = productId;
+ this.quantity = quantity;
+ }
+
+ public OrderDetail() {
+ }
+
public int getId() {
return id;
}