mirror of
https://github.com/Nezumi-2711/Foodify.git
synced 2026-09-22 13:38:41 +00:00
Fix bug and create order complete
This commit is contained in:
Generated
+5
-5
@@ -1,17 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="deploymentTargetDropDown">
|
<component name="deploymentTargetDropDown">
|
||||||
<targetSelectedWithDropDown>
|
<runningDeviceTargetSelectedWithDropDown>
|
||||||
<Target>
|
<Target>
|
||||||
<type value="QUICK_BOOT_TARGET" />
|
<type value="RUNNING_DEVICE_TARGET" />
|
||||||
<deviceKey>
|
<deviceKey>
|
||||||
<Key>
|
<Key>
|
||||||
<type value="VIRTUAL_DEVICE_PATH" />
|
<type value="VIRTUAL_DEVICE_PATH" />
|
||||||
<value value="C:\Users\phanh\.android\avd\Pixel_5_API_31.avd" />
|
<value value="C:\Users\phanh\.android\avd\Pixel_3a_API_33_x86_64.avd" />
|
||||||
</Key>
|
</Key>
|
||||||
</deviceKey>
|
</deviceKey>
|
||||||
</Target>
|
</Target>
|
||||||
</targetSelectedWithDropDown>
|
</runningDeviceTargetSelectedWithDropDown>
|
||||||
<timeTargetWasSelectedWithDropDown value="2023-03-18T03:45:12.257058300Z" />
|
<timeTargetWasSelectedWithDropDown value="2023-03-29T09:35:50.968141600Z" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@@ -41,7 +41,7 @@ public interface FoodApi {
|
|||||||
@GET("products/enable?pageNo=0&pageSize=10&sortBy=createdTime&sortDir=desc")
|
@GET("products/enable?pageNo=0&pageSize=10&sortBy=createdTime&sortDir=desc")
|
||||||
Call<Foods> recentFood();
|
Call<Foods> recentFood();
|
||||||
|
|
||||||
@GET("shops?pageNo=0&pageSize=10&sortBy=id&sortDir=asc")
|
@GET("shops/enable?pageNo=0&pageSize=10&sortBy=id&sortDir=asc")
|
||||||
Call<Shops> allShops();
|
Call<Shops> allShops();
|
||||||
|
|
||||||
@GET("products/search/{name}")
|
@GET("products/search/{name}")
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public interface FoodApiToken {
|
|||||||
@DELETE("users/{userId}/addresses/{addressId}")
|
@DELETE("users/{userId}/addresses/{addressId}")
|
||||||
Call<CustomResponse> deleteAddressUser(@Path("userId") int userId, @Path("addressId") int addressId);
|
Call<CustomResponse> deleteAddressUser(@Path("userId") int userId, @Path("addressId") int addressId);
|
||||||
|
|
||||||
@POST("user/{userId}/orders")
|
@POST("users/{userId}/orders")
|
||||||
Call<Order> createOrder(@Path("userId") int userId, @Body Order order);
|
Call<Order> createOrder(@Path("userId") int userId, @Body Order order);
|
||||||
|
|
||||||
@POST("products/{productId}/comments")
|
@POST("products/{productId}/comments")
|
||||||
|
|||||||
@@ -571,26 +571,29 @@ public class FoodDetailActivity extends AppCompatActivity {
|
|||||||
confirm.setOnClickListener(new View.OnClickListener() {
|
confirm.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
progressLayout.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
if(actionCode == CREATE_COMMENT){
|
if(comment_content.getText().toString().trim().length() > 0){
|
||||||
//Create comment
|
progressLayout.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
createComment(comment_content.getText().toString(), ratingBarDialog);
|
if(actionCode == CREATE_COMMENT){
|
||||||
|
//Create comment
|
||||||
dialog.dismiss();
|
createComment(comment_content.getText().toString(), ratingBarDialog);
|
||||||
|
|
||||||
} else if(actionCode == EDIT_COMMENT){
|
|
||||||
//Edit comment
|
|
||||||
if(commentUser != null){
|
|
||||||
|
|
||||||
editComment(comment_content.getText().toString(), ratingBarDialog);
|
|
||||||
|
|
||||||
dialog.dismiss();
|
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!");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,12 @@ import android.os.Looper;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatDelegate;
|
import androidx.appcompat.app.AppCompatDelegate;
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.splashscreen.SplashScreen;
|
import androidx.core.splashscreen.SplashScreen;
|
||||||
@@ -70,6 +72,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
BottomNavigationView bottomNavigationView;
|
BottomNavigationView bottomNavigationView;
|
||||||
private FirebaseAuth mAuth;
|
private FirebaseAuth mAuth;
|
||||||
private FirebaseUser user;
|
private FirebaseUser user;
|
||||||
|
private ConstraintLayout progressLayout;
|
||||||
|
|
||||||
//Location
|
//Location
|
||||||
private static final int REQUEST_CHECK_SETTINGS = 100;
|
private static final int REQUEST_CHECK_SETTINGS = 100;
|
||||||
@@ -98,6 +101,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
user = mAuth.getCurrentUser();
|
user = mAuth.getCurrentUser();
|
||||||
|
|
||||||
if (user != null && Common.CURRENT_USER == null) {
|
if (user != null && Common.CURRENT_USER == null) {
|
||||||
|
progressLayout.setVisibility(View.VISIBLE);
|
||||||
user.getIdToken(true)
|
user.getIdToken(true)
|
||||||
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
|
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -189,10 +193,13 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void getLocationUser(){
|
||||||
|
|
||||||
|
}
|
||||||
private void initComponent() {
|
private void initComponent() {
|
||||||
bottomNavigationView = findViewById(R.id.bottom_nav);
|
bottomNavigationView = findViewById(R.id.bottom_nav);
|
||||||
viewPager2 = findViewById(R.id.viewPager);
|
viewPager2 = findViewById(R.id.viewPager);
|
||||||
|
progressLayout = findViewById(R.id.progress_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bottomNavigation() {
|
private void bottomNavigation() {
|
||||||
|
|||||||
@@ -29,15 +29,20 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.capstone.foodify.API.FoodApi;
|
import com.capstone.foodify.API.FoodApi;
|
||||||
|
import com.capstone.foodify.API.FoodApiToken;
|
||||||
import com.capstone.foodify.API.GoogleMapApi;
|
import com.capstone.foodify.API.GoogleMapApi;
|
||||||
import com.capstone.foodify.Adapter.OrderDetailAdapter;
|
import com.capstone.foodify.Adapter.OrderDetailAdapter;
|
||||||
import com.capstone.foodify.Common;
|
import com.capstone.foodify.Common;
|
||||||
import com.capstone.foodify.Model.Address;
|
import com.capstone.foodify.Model.Address;
|
||||||
|
import com.capstone.foodify.Model.Basket;
|
||||||
import com.capstone.foodify.Model.DistrictWardResponse;
|
import com.capstone.foodify.Model.DistrictWardResponse;
|
||||||
import com.capstone.foodify.Model.GoogleMap.GoogleMapResponse;
|
import com.capstone.foodify.Model.GoogleMap.GoogleMapResponse;
|
||||||
import com.capstone.foodify.Model.GoogleMap.Location;
|
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.R;
|
||||||
import com.capstone.foodify.ZaloPay.Api.CreateOrder;
|
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.gms.maps.model.LatLng;
|
||||||
import com.google.android.material.textfield.TextInputLayout;
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
import com.google.firebase.auth.FirebaseAuth;
|
import com.google.firebase.auth.FirebaseAuth;
|
||||||
@@ -63,9 +68,13 @@ import vn.zalopay.sdk.ZaloPaySDK;
|
|||||||
import vn.zalopay.sdk.listeners.PayOrderListener;
|
import vn.zalopay.sdk.listeners.PayOrderListener;
|
||||||
|
|
||||||
public class OrderCheckOutActivity extends AppCompatActivity {
|
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 LAT_SHOP = 16.0500622;
|
||||||
private static final Double LNG_SHOP = 108.2351611;
|
private static final Double LNG_SHOP = 108.2351611;
|
||||||
private static String finalAddress = null;
|
private static String finalAddress = null;
|
||||||
|
private static double finalLat, finalLng = 0;
|
||||||
ImageView back_image;
|
ImageView back_image;
|
||||||
OrderDetailAdapter adapter;
|
OrderDetailAdapter adapter;
|
||||||
RecyclerView recyclerView;
|
RecyclerView recyclerView;
|
||||||
@@ -74,11 +83,11 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
EditText edt_address;
|
EditText edt_address;
|
||||||
Spinner spn_list_address, spn_district, spn_ward;
|
Spinner spn_list_address, spn_district, spn_ward;
|
||||||
ConstraintLayout manual_input_address_layout;
|
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;
|
RadioButton list_address_input, auto_detect_location, manual_input_address, radio_button_selected, take_food_from_shop;
|
||||||
RadioGroup address_option;
|
RadioGroup address_option;
|
||||||
ConstraintLayout progress_layout;
|
ConstraintLayout progress_layout;
|
||||||
float total;
|
float total, shipCost;
|
||||||
private static final ArrayList<String> wardList = new ArrayList<>();
|
private static final ArrayList<String> wardList = new ArrayList<>();
|
||||||
private static final ArrayList<String> districtList = new ArrayList<>();
|
private static final ArrayList<String> districtList = new ArrayList<>();
|
||||||
|
|
||||||
@@ -118,6 +127,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
txt_distance = findViewById(R.id.txt_distance);
|
txt_distance = findViewById(R.id.txt_distance);
|
||||||
txt_ship_cost = findViewById(R.id.txt_ship_cost);
|
txt_ship_cost = findViewById(R.id.txt_ship_cost);
|
||||||
btn_ZaloPay = findViewById(R.id.btnZaloPay);
|
btn_ZaloPay = findViewById(R.id.btnZaloPay);
|
||||||
|
btn_Pay = findViewById(R.id.btnPay);
|
||||||
|
|
||||||
//Reload user data
|
//Reload user data
|
||||||
Common.reloadUser(this);
|
Common.reloadUser(this);
|
||||||
@@ -193,7 +203,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if(radio_button_selected == take_food_from_shop){
|
if(radio_button_selected == take_food_from_shop){
|
||||||
//Action 4
|
//Action 4
|
||||||
finalAddress = "Đến shop lấy";
|
finalAddress = TAKE_FOOD_FROM_SHOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(finalAddress == null){
|
if(finalAddress == null){
|
||||||
@@ -219,6 +229,28 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
initZaloPaymentMethod();
|
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() {
|
private void getAddress() {
|
||||||
@@ -246,6 +278,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initZaloPaymentMethod(){
|
private void initZaloPaymentMethod(){
|
||||||
|
|
||||||
// handle CreateOrder
|
// handle CreateOrder
|
||||||
btn_ZaloPay.setOnClickListener(new View.OnClickListener() {
|
btn_ZaloPay.setOnClickListener(new View.OnClickListener() {
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
@@ -257,7 +290,6 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if(!Common.CURRENT_USER.isLocked()){
|
if(!Common.CURRENT_USER.isLocked()){
|
||||||
//Create order
|
//Create order
|
||||||
|
|
||||||
//Check address is null or not
|
//Check address is null or not
|
||||||
if(finalAddress != null){
|
if(finalAddress != null){
|
||||||
|
|
||||||
@@ -278,24 +310,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.SUCCESS)
|
createOrderFood(transactionId, ZALO_PAYMENT_METHOD);
|
||||||
.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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -321,6 +336,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(@NonNull AestheticDialog.Builder builder) {
|
public void onClick(@NonNull AestheticDialog.Builder builder) {
|
||||||
startActivity(new Intent(OrderCheckOutActivity.this, MainActivity.class));
|
startActivity(new Intent(OrderCheckOutActivity.this, MainActivity.class));
|
||||||
|
builder.dismiss();
|
||||||
finish();
|
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
|
//Create list order detail object
|
||||||
// Order order = new Order(transactionId, "");
|
List<OrderDetail> listOrderDetail = new ArrayList<>();
|
||||||
//
|
for(Basket tempFood: Common.LIST_BASKET_FOOD){
|
||||||
// FoodApiToken.apiService.createOrder(Common.CURRENT_USER.getId()).enqueue(new Callback<Order>() {
|
OrderDetail orderTemp = new OrderDetail(Integer.parseInt(tempFood.getId()), tempFood.getQuantity());
|
||||||
// @Override
|
listOrderDetail.add(orderTemp);
|
||||||
// public void onResponse(Call<Order> call, Response<Order> response) {
|
}
|
||||||
//
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void onFailure(Call<Order> call, Throwable t) {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
private void getDistanceAndCalculateShipCost(String address) {
|
//Create order object
|
||||||
//Get location from address
|
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<GoogleMapResponse>() {
|
FoodApiToken.apiService.createOrder(Common.CURRENT_USER.getId(), order).enqueue(new Callback<Order>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call<GoogleMapResponse> call, Response<GoogleMapResponse> response) {
|
public void onResponse(Call<Order> call, Response<Order> response) {
|
||||||
GoogleMapResponse jsonResponse = response.body();
|
if(response.code() == 201){
|
||||||
|
new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.SUCCESS)
|
||||||
Double lat = jsonResponse.getResults().get(0).getGeometry().getLocation().getLat();
|
.setTitle("Thành công!")
|
||||||
Double lng = jsonResponse.getResults().get(0).getGeometry().getLocation().getLng();
|
.setMessage("Bạn đã đặt hàng thành công cho đơn hàng #" + transactionId)
|
||||||
|
.setCancelable(true)
|
||||||
LatLng addressFrom = new LatLng(lat, lng);
|
.setOnClickListener(new OnDialogClickListener() {
|
||||||
LatLng addressTo = new LatLng(LAT_SHOP, LNG_SHOP);
|
@Override
|
||||||
|
public void onClick(@NonNull AestheticDialog.Builder builder) {
|
||||||
double distance = CalculationByDistance(addressFrom, addressTo);
|
Common.LIST_BASKET_FOOD.clear();
|
||||||
|
startActivity(new Intent(OrderCheckOutActivity.this, MainActivity.class));
|
||||||
double roundDistance = Math.round(distance * 100.0) / 100.0;
|
builder.dismiss();
|
||||||
|
finish();
|
||||||
//Show distance to user
|
}
|
||||||
txt_distance.setText(roundDistance + " km");
|
}).show();
|
||||||
|
|
||||||
//Calculate ship cost
|
|
||||||
float shipCost = 0;
|
|
||||||
if(roundDistance <= 3){
|
|
||||||
shipCost = 15000;
|
|
||||||
} else if(roundDistance > 3 && roundDistance <= 10){
|
|
||||||
shipCost = 5000 * (float) roundDistance;
|
|
||||||
} else {
|
} 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
|
@Override
|
||||||
public void onFailure(Call<GoogleMapResponse> call, Throwable t) {
|
public void onFailure(Call<Order> call, Throwable t) {
|
||||||
Toast.makeText(OrderCheckOutActivity.this, "Error: " + t, Toast.LENGTH_SHORT).show();
|
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<GoogleMapResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<GoogleMapResponse> call, Response<GoogleMapResponse> 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<GoogleMapResponse> 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
|
int Radius = 6371;// radius of earth in Km
|
||||||
double lat1 = from.latitude;
|
double lat1 = from.latitude;
|
||||||
double lat2 = to.latitude;
|
double lat2 = to.latitude;
|
||||||
@@ -429,11 +472,8 @@ public class OrderCheckOutActivity extends AppCompatActivity {
|
|||||||
double valueResult = Radius * c;
|
double valueResult = Radius * c;
|
||||||
double km = valueResult / 1;
|
double km = valueResult / 1;
|
||||||
DecimalFormat newFormat = new DecimalFormat("####");
|
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(){
|
private boolean validForm(){
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import java.util.List;
|
|||||||
|
|
||||||
public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketViewHolder> {
|
public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketViewHolder> {
|
||||||
|
|
||||||
private static int quantity = 0;
|
|
||||||
|
|
||||||
public List<Basket> listBasketFood;
|
public List<Basket> listBasketFood;
|
||||||
|
|
||||||
@@ -58,7 +57,6 @@ public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketView
|
|||||||
holder.foodName.setText(foodBasket.getName());
|
holder.foodName.setText(foodBasket.getName());
|
||||||
holder.shopName.setText(foodBasket.getShopName());
|
holder.shopName.setText(foodBasket.getShopName());
|
||||||
holder.value.setText(foodBasket.getQuantity());
|
holder.value.setText(foodBasket.getQuantity());
|
||||||
quantity = Integer.parseInt(foodBasket.getQuantity());
|
|
||||||
|
|
||||||
//Check value discountPercent
|
//Check value discountPercent
|
||||||
float cost = 0;
|
float cost = 0;
|
||||||
@@ -89,6 +87,9 @@ public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketView
|
|||||||
holder.increment.setOnClickListener(new View.OnClickListener() {
|
holder.increment.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
int quantity = Integer.parseInt(foodBasket.getQuantity());
|
||||||
|
|
||||||
quantity++;
|
quantity++;
|
||||||
foodBasket.setQuantity(String.valueOf(quantity));
|
foodBasket.setQuantity(String.valueOf(quantity));
|
||||||
holder.value.setText(String.valueOf(quantity));
|
holder.value.setText(String.valueOf(quantity));
|
||||||
@@ -101,9 +102,16 @@ public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketView
|
|||||||
holder.decrement.setOnClickListener(new View.OnClickListener() {
|
holder.decrement.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
int quantity = Integer.parseInt(foodBasket.getQuantity());
|
||||||
|
|
||||||
quantity--;
|
quantity--;
|
||||||
if(quantity == 0){
|
if(quantity == 0){
|
||||||
listBasketFood.remove(holder.getAdapterPosition());
|
listBasketFood.remove(holder.getAdapterPosition());
|
||||||
|
notifyDataSetChanged();
|
||||||
|
|
||||||
|
//Update total price
|
||||||
|
calculateTotalPrice();
|
||||||
} else {
|
} else {
|
||||||
foodBasket.setQuantity(String.valueOf(quantity));
|
foodBasket.setQuantity(String.valueOf(quantity));
|
||||||
holder.value.setText(String.valueOf(quantity));
|
holder.value.setText(String.valueOf(quantity));
|
||||||
|
|||||||
@@ -11,15 +11,18 @@ public class Order {
|
|||||||
private String status;
|
private String status;
|
||||||
private String address;
|
private String address;
|
||||||
private List<OrderDetail> orderDetails;
|
private List<OrderDetail> orderDetails;
|
||||||
|
private String lat;
|
||||||
|
private String lng;
|
||||||
|
|
||||||
public Order(String orderTrackingNumber, int shipperId, String paymentMethod, float shippingCost, String status, String address, List<OrderDetail> orderDetails) {
|
public Order(String orderTrackingNumber, String paymentMethod, float shippingCost, String status, String address, List<OrderDetail> orderDetails, String lat, String lng) {
|
||||||
this.orderTrackingNumber = orderTrackingNumber;
|
this.orderTrackingNumber = orderTrackingNumber;
|
||||||
this.shipperId = shipperId;
|
|
||||||
this.paymentMethod = paymentMethod;
|
this.paymentMethod = paymentMethod;
|
||||||
this.shippingCost = shippingCost;
|
this.shippingCost = shippingCost;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this.orderDetails = orderDetails;
|
this.orderDetails = orderDetails;
|
||||||
|
this.lat = lat;
|
||||||
|
this.lng = lng;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
@@ -96,4 +99,20 @@ public class Order {
|
|||||||
public void setListOrderDetail(List<OrderDetail> listOrderDetail) {
|
public void setListOrderDetail(List<OrderDetail> listOrderDetail) {
|
||||||
this.orderDetails = 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,14 @@ public class OrderDetail {
|
|||||||
private String quantity;
|
private String quantity;
|
||||||
private float subTotal;
|
private float subTotal;
|
||||||
|
|
||||||
|
public OrderDetail(int productId, String quantity) {
|
||||||
|
this.productId = productId;
|
||||||
|
this.quantity = quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrderDetail() {
|
||||||
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user