add to cart

This commit is contained in:
2017-10-13 23:33:31 +03:00
parent d60cc3aafa
commit 88b060e50d
10 changed files with 191 additions and 11 deletions

View File

@@ -45,6 +45,7 @@ dependencies {
compile 'com.github.AndroidDeveloperLB:DialogShard:3'
compile 'com.github.HITGIF:TextFieldBoxes:1.3.3'
compile 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.1.3'
compile 'q.rorbin:badgeview:1.1.0'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}

View File

@@ -8,15 +8,18 @@ import android.support.v4.widget.DrawerLayout;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindColor;
import butterknife.BindView;
import butterknife.ButterKnife;
import ch.pizzalink.android.R;
@@ -33,6 +36,8 @@ import ch.pizzalink.android.view.PizzalinkToolbar;
import io.github.luizgrp.sectionedrecyclerviewadapter.SectionParameters;
import io.github.luizgrp.sectionedrecyclerviewadapter.SectionedRecyclerViewAdapter;
import io.github.luizgrp.sectionedrecyclerviewadapter.StatelessSection;
import q.rorbin.badgeview.Badge;
import q.rorbin.badgeview.QBadgeView;
public class MainActivity extends BaseActivity {
@@ -41,11 +46,15 @@ public class MainActivity extends BaseActivity {
@BindView(R.id.pizzalinkToolbar) PizzalinkToolbar pizzalinkToolbar;
@BindView(R.id.bottomNavigationView) BottomNavigationViewEx bottomNavigationView;
@BindColor(R.color.red) int redColor;
@BindColor(R.color.white) int whiteColor;
private FragmentManager fragmentManager;
private String currentFragmentName = "";
private int currentCategoryId = -1;
private ArrayList<CategoryModel> categoryList = new ArrayList<>();
private NavigationMenuRecyclerAdapter navigationMenuRecyclerAdapter;
private Badge badge;
private SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter();
@@ -61,6 +70,7 @@ public class MainActivity extends BaseActivity {
initNavigationDrawer();
initBottomNavigationView();
showStartScreen();
setCartItemCount();
}
private void showStartScreen(){
@@ -274,4 +284,21 @@ public class MainActivity extends BaseActivity {
}
}
public void setCartItemCount(){
addBadgeAt(1, SharedPrefsHelper.getCartItemCount());
}
private void addBadgeAt(int position, int number) {
// add badge
badge = new QBadgeView(this)
.setBadgeNumber(number)
.setBadgeBackgroundColor(redColor)
.setBadgeTextColor(whiteColor)
.setBadgeGravity(Gravity.TOP | Gravity.END)
.bindTarget(bottomNavigationView.getBottomNavigationItemView(position));
if(number == 0)
badge.hide(true);
}
}

View File

@@ -17,12 +17,14 @@ import ch.pizzalink.android.R;
import ch.pizzalink.android.api.ApiErrorUtils;
import ch.pizzalink.android.api.ApiService;
import ch.pizzalink.android.api.ResponseArray;
import ch.pizzalink.android.api.ResponseObject;
import ch.pizzalink.android.helper.DialogHelper;
import ch.pizzalink.android.helper.DisplayHelper;
import ch.pizzalink.android.helper.NetworkHelper;
import ch.pizzalink.android.helper.SessionHelper;
import ch.pizzalink.android.helper.SharedPrefsHelper;
import ch.pizzalink.android.model.CategoryModel;
import ch.pizzalink.android.model.cart.CartInfoModel;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -69,7 +71,7 @@ public class SplashActivity extends BaseActivity {
if(SessionHelper.isCustomerLoggedIn()){
if(SessionHelper.getCustomerToken().isCustomerTokenAlive())
openActivity(MainActivity.class);
getCartItemCount();
else
refreshCustomerToken();
}
@@ -99,7 +101,7 @@ public class SplashActivity extends BaseActivity {
if(response.isSuccessful() && response.body().isSuccess()) {
SessionManager.saveCustomerToken(response.body().getCustomerToken(), Constants.PUSULA_CARD_MEMBER_TYPE_CUSTOMER);
startMainActivity();
getCartItemCount();
}
else
@@ -115,6 +117,30 @@ public class SplashActivity extends BaseActivity {
*/
}
private void getCartItemCount(){
Call<ResponseObject<CartInfoModel>> call = ApiService.apiInterface.getCartProducts(
SessionHelper.getCustomerToken().getToken());
call.enqueue(new Callback<ResponseObject<CartInfoModel>>() {
@Override
public void onResponse(Call<ResponseObject<CartInfoModel>> call, Response<ResponseObject<CartInfoModel>> response) {
if(response.isSuccessful() &&
response.body().getData() != null &&
response.body().isSuccess()){
SharedPrefsHelper.setCartItemCount(response.body().getData().getProducts().size());
openActivity(MainActivity.class);
}
else
ApiErrorUtils.parseError(response);
}
@Override
public void onFailure(Call<ResponseObject<CartInfoModel>> call, Throwable t) {
DialogHelper.showFailedDialog();
}
});
}

View File

@@ -14,5 +14,7 @@ public class ApiEndPoints {
public static final String API_GET_CLEAR_CART = PREFIX + "clearBasket" + SUFFIX;
public static final String API_GET_PRODUCTS_BY_CATEGORY = PREFIX + "getProductsByCategory" + SUFFIX;
public static final String API_GET_PRODUCT = PREFIX + "getProduct" + SUFFIX;
//public static final String API_ADD_PRODUCTS_TO_BASKET = PREFIX + "addProductsToBasket" + SUFFIX + "&token=sor37aVmOYP1v4OxpCsv11w3DkeGDttB";
public static final String API_ADD_PRODUCTS_TO_BASKET = PREFIX + "addProductsToBasket" + SUFFIX;
}

View File

@@ -2,6 +2,7 @@ package ch.pizzalink.android.api;
import java.util.HashMap;
import ch.pizzalink.android.model.AddProductToBasketResponseModel;
import ch.pizzalink.android.model.cart.CartInfoModel;
import ch.pizzalink.android.model.CategoryModel;
import ch.pizzalink.android.model.OrderModel;
@@ -10,6 +11,7 @@ import ch.pizzalink.android.model.menu.MenuProductModel;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
@@ -59,15 +61,21 @@ public interface ApiInterface {
@GET(ApiEndPoints.API_GET_PRODUCTS_BY_CATEGORY)
Call<ResponseArray<MenuProductModel>> getProductsByCategory(@Query("category_id") String categoryId);
/*
@POST(ApiEndPoints.API_GET_PRODUCT)
Call<ResponseObject<MenuProductModel>> getProductById(@Body HashMap<String, Object> body);
*/
@FormUrlEncoded
@POST(ApiEndPoints.API_GET_PRODUCT)
Call<ResponseArray<MenuProductModel>> getProductById(@Field("product_id") int productId);
@POST(ApiEndPoints.API_ADD_PRODUCTS_TO_BASKET)
Call<ResponseObject<AddProductToBasketResponseModel>> addProductsToBasket(@Body HashMap<String, Object> body);
/*
@FormUrlEncoded
@POST(ApiEndPoints.API_ADD_PRODUCTS_TO_BASKET)
Call<ResponseObject<AddProductToBasketResponseModel>> addProductsToBasket(@FieldMap HashMap<String, Object> fields);
*/

View File

@@ -14,19 +14,31 @@ import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import ch.pizzalink.android.R;
import ch.pizzalink.android.activity.BaseActivity;
import ch.pizzalink.android.activity.MainActivity;
import ch.pizzalink.android.adapter.recycler.ProductCheckboxOptionsRecyclerAdapter;
import ch.pizzalink.android.adapter.recycler.ProductRadioOptionsRecyclerAdapter;
import ch.pizzalink.android.api.ApiErrorUtils;
import ch.pizzalink.android.api.ApiService;
import ch.pizzalink.android.api.ResponseObject;
import ch.pizzalink.android.helper.DialogHelper;
import ch.pizzalink.android.helper.PriceHelper;
import ch.pizzalink.android.helper.SessionHelper;
import ch.pizzalink.android.helper.SharedPrefsHelper;
import ch.pizzalink.android.interfaces.RecyclerItemClickListener;
import ch.pizzalink.android.model.AddProductToBasketResponseModel;
import ch.pizzalink.android.model.menu.MenuProductModel;
import ch.pizzalink.android.model.menu.MenuProductOptionModel;
import ch.pizzalink.android.model.menu.MenuProductOptionValueModel;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Created by cimenmus on 08/10/2017.
@@ -95,6 +107,7 @@ public class ProductPropertiesBottomSheetDialog extends BottomSheetDialogFragmen
productPriceTextView.getText().toString(), productCount + 1, productCount));
break;
case R.id.addToCartButton:
addProductToCart();
break;
}
}
@@ -198,6 +211,65 @@ public class ProductPropertiesBottomSheetDialog extends BottomSheetDialogFragmen
menuProductOptionValueModel.setSelected(true);
}
}
private void addProductToCart(){
DialogHelper.showLoadingDialog();
Call<ResponseObject<AddProductToBasketResponseModel>> call =
ApiService.apiInterface.addProductsToBasket(getAddToCartRequestParams());
call.enqueue(new Callback<ResponseObject<AddProductToBasketResponseModel>>() {
@Override
public void onResponse(Call<ResponseObject<AddProductToBasketResponseModel>> call, Response<ResponseObject<AddProductToBasketResponseModel>> response) {
DialogHelper.hideLoadingDialog();
if(response.isSuccessful() && response.body().getData() != null){
if(response.body().isSuccess()){
dismiss();
DialogHelper.showDialogWithPositiveButton(BaseActivity.currentActivity, response.body().getData().getSuccessMessage());
SharedPrefsHelper.setCartItemCount(SharedPrefsHelper.getCartItemCount() + 1);
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.setCartItemCount();
}
else
DialogHelper.showDialogWithPositiveButton(BaseActivity.currentActivity, response.body().getData().getErrorMessage());
}
else
ApiErrorUtils.parseError(response);
}
@Override
public void onFailure(Call<ResponseObject<AddProductToBasketResponseModel>> call, Throwable t) {
DialogHelper.hideLoadingDialog();
DialogHelper.showFailedDialog();
}
});
}
private HashMap<String, Object> getAddToCartRequestParams(){
HashMap<String, Object> params = new HashMap<>();
for(MenuProductOptionModel productOptionModel : menuProductModel.getProductOptionList()){
ArrayList<String> selectedOptionsList = new ArrayList<>();
for(MenuProductOptionValueModel productOptionValueModel : productOptionModel.getOptionValueModelList()){
if(productOptionValueModel.isSelected()){
selectedOptionsList.add(productOptionValueModel.getProductOptionValueId());
//params.put("product[" + productOptionModel.getProductOptionId() + "]", productOptionValueModel.getProductOptionValueId());
}
}
params.put("product[" + productOptionModel.getProductOptionId() + "]", selectedOptionsList);
}
params.put("product_id", menuProductModel.getId());
params.put("token", SessionHelper.getCustomerToken().getToken());
params.put("quantity", productCount);
return params;
}
/*
@Override
public void onItemClick(Item item) {

View File

@@ -20,12 +20,14 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
import ch.pizzalink.android.R;
import ch.pizzalink.android.activity.BaseActivity;
import ch.pizzalink.android.activity.MainActivity;
import ch.pizzalink.android.adapter.recycler.CartRecyclerAdapter;
import ch.pizzalink.android.api.ApiErrorUtils;
import ch.pizzalink.android.api.ApiService;
import ch.pizzalink.android.api.ResponseObject;
import ch.pizzalink.android.helper.DialogHelper;
import ch.pizzalink.android.helper.SessionHelper;
import ch.pizzalink.android.helper.SharedPrefsHelper;
import ch.pizzalink.android.interfaces.RecyclerItemClickListener;
import ch.pizzalink.android.model.cart.CartInfoModel;
import ch.pizzalink.android.model.cart.CartProductModel;
@@ -133,6 +135,9 @@ public class CartFragment extends BaseFragment {
cartProductList.clear();
cartRecyclerAdapter.notifyDataSetChanged();
setCartLayoutsVisibility();
SharedPrefsHelper.setCartItemCount(0);
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.setCartItemCount();
}
else
@@ -175,14 +180,14 @@ public class CartFragment extends BaseFragment {
private void setCartLayoutsVisibility(){
if(cartProductList.size() > 0){
noProductsOnCartTextView.setVisibility(View.GONE);
cartFragmentMainLayout.setBackgroundColor(grayColor);
//cartFragmentMainLayout.setBackgroundColor(grayColor);
cartRecyclerView.setVisibility(View.VISIBLE);
cartInfoLayout.setVisibility(View.VISIBLE);
}
else {
cartRecyclerView.setVisibility(View.GONE);
cartInfoLayout.setVisibility(View.GONE);
cartFragmentMainLayout.setBackgroundColor(whiteColor);
//cartFragmentMainLayout.setBackgroundColor(whiteColor);
noProductsOnCartTextView.setVisibility(View.VISIBLE);
}
}

View File

@@ -30,6 +30,7 @@ public class SharedPrefsHelper {
private static final String PREF_KEY_USER = SHARED_PREFS_NAME + "user";
private static final String PREF_KEY_CUSTOMER_TOKEN = SHARED_PREFS_NAME + "customerToken";
private static final String PREF_KEY_USER_LOG_IN_STATUS = SHARED_PREFS_NAME + "userLoginStatus";
private static final String PREF_KEY_CART_ITEM_COUNT = SHARED_PREFS_NAME + "cartItemCount";
private static SharedPreferences sharedPreferences =
BaseActivity.currentActivity
@@ -62,6 +63,7 @@ public class SharedPrefsHelper {
public static void clearCustomerInfo(){
editor.remove(PREF_KEY_USER);
editor.remove(PREF_KEY_CUSTOMER_TOKEN);
editor.remove(PREF_KEY_CART_ITEM_COUNT);
editor.apply();
}
@@ -79,7 +81,6 @@ public class SharedPrefsHelper {
editor.apply();
}
public static void setCustomerLoggedIn(boolean loggedId){
editor.putBoolean(PREF_KEY_USER_LOG_IN_STATUS, loggedId);
editor.apply();
@@ -89,6 +90,15 @@ public class SharedPrefsHelper {
return sharedPreferences.getBoolean(PREF_KEY_USER_LOG_IN_STATUS, false);
}
public static void setCartItemCount(int cartItemCount){
editor.putInt(PREF_KEY_CART_ITEM_COUNT, cartItemCount);
editor.apply();
}
public static int getCartItemCount(){
return sharedPreferences.getInt(PREF_KEY_CART_ITEM_COUNT, 0);
}
/*
public static void saveCategoryList(ArrayList<Category> cats){

View File

@@ -0,0 +1,30 @@
package ch.pizzalink.android.model;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by cimenmus on 13/10/2017.
*/
public class AddProductToBasketResponseModel {
@Expose @SerializedName("success") private String successMessage;
@Expose @SerializedName("parameter") private String errorMessage;
public String getSuccessMessage() {
return successMessage;
}
public void setSuccessMessage(String successMessage) {
this.successMessage = successMessage;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}

View File

@@ -39,7 +39,6 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="24dp"