From b716af3bf449d82ed327e6272767cc53f23d3d8e Mon Sep 17 00:00:00 2001 From: cimenmus Date: Tue, 12 Jun 2018 21:26:45 +0300 Subject: [PATCH] campaign fix --- .idea/caches/build_file_checksums.ser | Bin 538 -> 538 bytes app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 10 +- .../CampaignProductDetailsActivity.java | 399 ++++++++++++++++++ .../activity/CampaignProductListActivity.java | 131 ++++++ .../android/activity/MainActivity.java | 13 +- ...ivity.java => ProductDetailsActivity.java} | 42 +- .../android/fragment/CartFragment.java | 7 +- .../android/fragment/MenuFragment.java | 6 +- .../android/fragment/ProductFragment.java | 4 +- .../CreateOrderSummaryFragment.java | 63 ++- .../pizzapp/android/model/CategoryModel.java | 23 - .../ch/pizzapp/android/view/AppToolbar.java | 14 +- .../activity_campaign_product_details.xml | 261 ++++++++++++ .../layout/activity_campaign_product_list.xml | 32 ++ app/src/main/res/layout/activity_main.xml | 2 +- ...rties.xml => activity_product_details.xml} | 0 .../main/res/layout/layout_orders_bottom.xml | 2 +- .../res/layout/layout_pizzalink_toolbar.xml | 24 +- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/strings.xml | 15 +- 21 files changed, 950 insertions(+), 100 deletions(-) create mode 100644 app/src/main/java/ch/pizzapp/android/activity/CampaignProductDetailsActivity.java create mode 100644 app/src/main/java/ch/pizzapp/android/activity/CampaignProductListActivity.java rename app/src/main/java/ch/pizzapp/android/activity/{ProductPropertiesActivity.java => ProductDetailsActivity.java} (91%) create mode 100644 app/src/main/res/layout/activity_campaign_product_details.xml create mode 100644 app/src/main/res/layout/activity_campaign_product_list.xml rename app/src/main/res/layout/{activity_product_properties.xml => activity_product_details.xml} (100%) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 8217d344b32a2bd8845bf6654af3600cc6e99fd4..1413b72248c20c5ab8dab2c22fd5c9f302a5d386 100644 GIT binary patch delta 33 rcmV++0N($a1eyepm<06o_j|FNZ2=K{j*;(p)O)pgNWW5YSxJ+47={ps delta 33 rcmV++0N($a1eyepm;~v;2==j@Z2=M401N@LV<^nfJu{!!5Z1VO?cWZW diff --git a/app/build.gradle b/app/build.gradle index 9c9abfe..31a7ad7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,6 +21,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support.constraint:constraint-layout:1.1.1' androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a6ac899..f23e80f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,7 +34,7 @@ + android:windowSoftInputMode="adjustPan" /> @@ -51,11 +51,13 @@ android:name=".activity.UpdateProfileActivity" android:screenOrientation="portrait" /> + android:name=".activity.ProductDetailsActivity" + android:screenOrientation="portrait" /> + android:screenOrientation="portrait" /> + + \ No newline at end of file diff --git a/app/src/main/java/ch/pizzapp/android/activity/CampaignProductDetailsActivity.java b/app/src/main/java/ch/pizzapp/android/activity/CampaignProductDetailsActivity.java new file mode 100644 index 0000000..52d9d3f --- /dev/null +++ b/app/src/main/java/ch/pizzapp/android/activity/CampaignProductDetailsActivity.java @@ -0,0 +1,399 @@ +package ch.pizzapp.android.activity; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +import butterknife.BindString; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; +import ch.pizzapp.android.R; +import ch.pizzapp.android.adapter.recycler.ProductCheckboxOptionsRecyclerAdapter; +import ch.pizzapp.android.adapter.recycler.ProductRadioOptionsRecyclerAdapter; +import ch.pizzapp.android.api.ApiConstants; +import ch.pizzapp.android.api.ApiEndPoints; +import ch.pizzapp.android.api.ApiErrorUtils; +import ch.pizzapp.android.api.ApiService; +import ch.pizzapp.android.api.ResponseObject; +import ch.pizzapp.android.helper.DialogHelper; +import ch.pizzapp.android.helper.ImageLoadHelper; +import ch.pizzapp.android.helper.PriceHelper; +import ch.pizzapp.android.helper.SessionHelper; +import ch.pizzapp.android.helper.SharedPrefsHelper; +import ch.pizzapp.android.helper.TextHelper; +import ch.pizzapp.android.interfaces.RecyclerItemClickListener; +import ch.pizzapp.android.model.AddProductToBasketResponseModel; +import ch.pizzapp.android.model.CampaignModel; +import ch.pizzapp.android.model.cart.CartInfoModel; +import ch.pizzapp.android.model.menu.MenuProductModel; +import ch.pizzapp.android.model.menu.MenuProductOptionModel; +import ch.pizzapp.android.model.menu.MenuProductOptionValueModel; +import okhttp3.FormBody; +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class CampaignProductDetailsActivity extends BaseActivity { + + @BindView(R.id.closeImageView) ImageView closeImageView; + @BindView(R.id.backIcon) ImageView backIcon; + @BindView(R.id.productImageView) ImageView productImageView; + @BindView(R.id.productNameTextView) TextView productNameTextView; + @BindView(R.id.productPriceTextView) TextView productPriceTextView; + @BindView(R.id.productDescriptionTextView) TextView productDescriptionTextView; + @BindView(R.id.addToCartButton) Button addToCartButton; + @BindView(R.id.radioRecyclerHeaderTextView) TextView radioRecyclerHeaderTextView; + @BindView(R.id.radioRecyclerView) RecyclerView radioRecyclerView; + @BindView(R.id.checkboxRecyclerHeaderTextView) TextView checkboxRecyclerHeaderTextView; + @BindView(R.id.checkboxRecyclerView) RecyclerView checkboxRecyclerView; + @BindView(R.id.increaseProductCountImageView) ImageView increaseProductCountImageView; + @BindView(R.id.deccreaseProductCountImageView) ImageView deccreaseProductCountImageView; + @BindView(R.id.productCountTextView) TextView productCountTextView; + + @BindString(R.string.no_options_selected_part) String noOptionsSelectedText; + @BindString(R.string.cannot_use_campaign) String cannotUseCampaignText; + + private int productCount = 1; + + private MenuProductModel menuProductModel; + + private ArrayList productRadioOptionValueList = new ArrayList<>(); + private ArrayList productCheckboxOptionValueList = new ArrayList<>(); + private ProductRadioOptionsRecyclerAdapter productRadioOptionsRecyclerAdapter; + private ProductCheckboxOptionsRecyclerAdapter productCheckboxOptionsRecyclerAdapter; + private CampaignModel campaignModel; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_campaign_product_details); + ButterKnife.bind(this); + getDataFromIntent(); + initViews(); + } + + @OnClick({R.id.closeImageView, + R.id.backIcon, + R.id.addToCartButton}) + public void onCLick(View view){ + switch (view.getId()){ + case R.id.closeImageView: + case R.id.backIcon: + finish(); + break; + case R.id.addToCartButton: + if(checkFields()){ + if(SessionHelper.isCustomerLoggedIn()){ + if((campaignModel.getCode().equals(ApiConstants.CAMPAIGN_CODE_PIZZAPASS) && SessionHelper.isUserUsedPizzapassCampaign()) || + (campaignModel.getCode().equals(ApiConstants.CAMPAIGN_CODE_CHAMPAGNE) && SessionHelper.isUserUsedChampagneCampaign())){ + DialogHelper.showAlertDialog(BaseActivity.currentActivity, cannotUseCampaignText); + } + else { + addProductToCart(); + } + } + else { + DialogHelper.showNeedToLoginDialog(R.string.need_to_login_for_shopping); + } + } + break; + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + + for(MenuProductOptionModel menuProductOptionModel : menuProductModel.getProductOptionList()){ + for(MenuProductOptionValueModel menuProductOptionValueModel : menuProductOptionModel.getOptionValueModelList()){ + menuProductOptionValueModel.setSelected(false); + } + } + + for(MenuProductOptionModel menuProductOptionModel : menuProductModel.getProductOptionList()){ + for(MenuProductOptionValueModel menuProductOptionValueModel : menuProductOptionModel.getOptionValueModelList()){ + if(menuProductOptionValueModel.getPrice().equals("0") || menuProductOptionValueModel.getPrice().equals("0.00")){ + + //checkbox + if(!(menuProductOptionModel.getType().toLowerCase().equals("radio") || + menuProductOptionModel.getType().toLowerCase().equals("select"))){ + menuProductOptionValueModel.setSelected(true); + } + + //radio + else if(!isAnyOptionValueSelected(menuProductOptionModel.getOptionValueModelList())){ + menuProductOptionValueModel.setSelected(true); + } + + } + } + } + } + + private void getDataFromIntent(){ + menuProductModel = (MenuProductModel) getIntent().getSerializableExtra("menuProductModel"); + campaignModel = (CampaignModel) getIntent().getSerializableExtra("campaignModel"); + } + private void initViews(){ + setFields(); + fillRadioAndCheckboxOptionLists(); + switch (menuProductModel.getProductOptionType()){ + case RADIO_AND_CHECKBOX: + radioRecyclerView.setVisibility(View.VISIBLE); + checkboxRecyclerView.setVisibility(View.VISIBLE); + radioRecyclerHeaderTextView.setVisibility(View.VISIBLE); + checkboxRecyclerHeaderTextView.setVisibility(View.VISIBLE); + initRadioRecyclerView(); + initCheckboxRecyclerView(); + break; + case RADIO: + radioRecyclerHeaderTextView.setVisibility(View.VISIBLE); + radioRecyclerView.setVisibility(View.VISIBLE); + checkboxRecyclerView.setVisibility(View.GONE); + checkboxRecyclerHeaderTextView.setVisibility(View.GONE); + initRadioRecyclerView(); + break; + case CHECKBOX: + radioRecyclerHeaderTextView.setVisibility(View.GONE); + radioRecyclerView.setVisibility(View.GONE); + checkboxRecyclerHeaderTextView.setVisibility(View.VISIBLE); + checkboxRecyclerView.setVisibility(View.VISIBLE); + initCheckboxRecyclerView(); + break; + } + } + + public void setMenuProductModel(MenuProductModel menuProductModel){ + this.menuProductModel = menuProductModel; + } + + private void initRadioRecyclerView(){ + radioRecyclerView.setNestedScrollingEnabled(false); + GridLayoutManager gridLayoutManager = new GridLayoutManager(BaseActivity.currentActivity, 1); + radioRecyclerView.setLayoutManager(gridLayoutManager); + productRadioOptionsRecyclerAdapter = new ProductRadioOptionsRecyclerAdapter(productRadioOptionValueList, new RecyclerItemClickListener() { + @Override + public void onItemClick(View view, int position) { + if(!productRadioOptionValueList.get(position).isSelected()){ + for(MenuProductOptionValueModel menuProductOptionValueModel : productRadioOptionValueList){ + menuProductOptionValueModel.setSelected(false); + } + productRadioOptionValueList.get(position).setSelected(true); + productRadioOptionsRecyclerAdapter.notifyDataSetChanged(); + productPriceTextView.setText(PriceHelper.calculatePriceAfterRadioOptionValueChanged( + productCount, menuProductModel, productRadioOptionValueList.get(position))); + } + } + }); + radioRecyclerView.setAdapter(productRadioOptionsRecyclerAdapter); + } + + private void initCheckboxRecyclerView(){ + checkboxRecyclerView.setNestedScrollingEnabled(false); + GridLayoutManager gridLayoutManager = new GridLayoutManager(BaseActivity.currentActivity, 1); + checkboxRecyclerView.setLayoutManager(gridLayoutManager); + productCheckboxOptionsRecyclerAdapter = new ProductCheckboxOptionsRecyclerAdapter(productCheckboxOptionValueList, new RecyclerItemClickListener() { + @Override + public void onItemClick(View view, int position) { + productCheckboxOptionValueList.get(position).setSelected( + !productCheckboxOptionValueList.get(position).isSelected()); + productCheckboxOptionsRecyclerAdapter.notifyItemChanged(position); + productPriceTextView.setText( + PriceHelper.calculatePriceAfterCheckboxOptionValueChanged( + productCount, menuProductModel, productCheckboxOptionValueList)); + } + }); + checkboxRecyclerView.setAdapter(productCheckboxOptionsRecyclerAdapter); + } + + private void setFields(){ + TextHelper.setTextFromHTML(productDescriptionTextView, menuProductModel.getDescription()); + ImageLoadHelper.loadImage(productImageView, menuProductModel.getImageURL()); + productNameTextView.setText(menuProductModel.getName()); + productPriceTextView.setText(PriceHelper.getPriceWithCurreny(menuProductModel.getPrice())); + productPriceTextView.setText(PriceHelper.getPriceWithCurreny(menuProductModel.getPrice())); + } + + private void fillRadioAndCheckboxOptionLists(){ + for(MenuProductOptionModel menuProductOptionModel : menuProductModel.getProductOptionList()){ + setSelectedPriceShowingOptions(menuProductOptionModel); + + if(menuProductOptionModel.getType().toLowerCase().equals("radio") || + menuProductOptionModel.getType().toLowerCase().equals("select")){ + radioRecyclerHeaderTextView.setText(menuProductOptionModel.getName()); + productRadioOptionValueList.addAll(menuProductOptionModel.getOptionValueModelList()); + } + else{ + checkboxRecyclerHeaderTextView.setText(menuProductOptionModel.getName()); + productCheckboxOptionValueList.addAll(menuProductOptionModel.getOptionValueModelList()); + } + } + } + + private void setSelectedPriceShowingOptions(MenuProductOptionModel menuProductOptionModel){ + for(MenuProductOptionValueModel menuProductOptionValueModel : menuProductOptionModel.getOptionValueModelList()){ + if(menuProductOptionValueModel.getPrice().equals("0") || menuProductOptionValueModel.getPrice().equals("0.00")){ + + //checkbox + if(!(menuProductOptionModel.getType().toLowerCase().equals("radio") || + menuProductOptionModel.getType().toLowerCase().equals("select"))){ + menuProductOptionValueModel.setSelected(true); + } + + //radio + else if(!isAnyOptionValueSelected(menuProductOptionModel.getOptionValueModelList())){ + menuProductOptionValueModel.setSelected(true); + } + } + } + } + + private void addProductToCart(){ + + DialogHelper.showLoadingDialog(); + Call> call = + ApiService.apiInterface.addProductsToBasket( + ApiEndPoints.API_ADD_PRODUCTS_TO_BASKET + SessionHelper.getCustomerToken().getToken(), + getAddToCartRequestParams()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && response.body().getData() != null){ + if(response.body().isSuccess()){ + DialogHelper.showDialogWithPositiveButton(BaseActivity.currentActivity, response.body().getData().getSuccessMessage()); + getCartItemCount(); + } + else + DialogHelper.showDialogWithPositiveButton(BaseActivity.currentActivity, response.body().getData().getErrorMessage()); + } + else + ApiErrorUtils.parseError(response); + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + + } + + private RequestBody getAddToCartRequestParams(){ + + FormBody.Builder formBodyBuilder = new FormBody.Builder(); + formBodyBuilder.add("product_id", menuProductModel.getId()); + formBodyBuilder.add("quantity", String.valueOf(productCount)); + + for(MenuProductOptionModel productOptionModel : menuProductModel.getProductOptionList()){ + ArrayList selectedCheckboxOptionList = new ArrayList<>(); + for(MenuProductOptionValueModel productOptionValueModel : productOptionModel.getOptionValueModelList()){ + if(productOptionValueModel.isSelected()){ + if(productOptionModel.getType().toLowerCase().equals("checkbox")){ + selectedCheckboxOptionList.add(productOptionValueModel.getProductOptionValueId()); + } + else { + String key = "option[" + productOptionModel.getProductOptionId() + "]"; + formBodyBuilder.add(key, productOptionValueModel.getProductOptionValueId()); + } + } + } + if(productOptionModel.getType().toLowerCase().equals("checkbox")){ + for(int i = 0; i < selectedCheckboxOptionList.size(); i++){ + String key = "option[" + productOptionModel.getProductOptionId() + "][" + String.valueOf(i) + "]"; + formBodyBuilder.add(key, selectedCheckboxOptionList.get(i)); + } + } + } + + return formBodyBuilder.build(); + } + + + private void getCartItemCount(){ + Call> call = ApiService.apiInterface.getCartProducts( + ApiEndPoints.API_GET_CART_PRODUCTS + SessionHelper.getCustomerToken().getToken()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + SharedPrefsHelper.setCartItemCount(response.body().getData().getProducts().size()); + SharedPrefsHelper.setCartTotalPrice(PriceHelper.removeCurrencyFromPrice(response.body().getData().getCartTotalModel().getText())); + if(campaignModel.getCode().equals(ApiConstants.CAMPAIGN_CODE_PIZZAPASS)){ + SessionHelper.setUserUsedPizzapassCampaign(true); + } + else if(campaignModel.getCode().equals(ApiConstants.CAMPAIGN_CODE_CHAMPAGNE)){ + SessionHelper.setUserUsedChampagneCampaign(true); + } + + /* + MainActivity mainActivity = (MainActivity) getActivity(); + mainActivity.setCartItemCount(); + */ + setResult(RESULT_OK); + + finish(); + + } + + } + + @Override + public void onFailure(Call> call, Throwable t) { + + } + }); + } + + + private boolean checkFields(){ + + if(radioRecyclerView.getVisibility() == View.VISIBLE && + !isSelectedAtLeastOne(productRadioOptionValueList)){ + DialogHelper.showAlertDialog(BaseActivity.currentActivity, + radioRecyclerHeaderTextView.getText().toString() + " " + noOptionsSelectedText); + return false; + } + + if(checkboxRecyclerView.getVisibility() == View.VISIBLE && + !isSelectedAtLeastOne(productCheckboxOptionValueList)){ + DialogHelper.showAlertDialog(BaseActivity.currentActivity, + checkboxRecyclerHeaderTextView.getText().toString() + " " + noOptionsSelectedText); + return false; + } + + return true; + } + + private boolean isSelectedAtLeastOne(ArrayList menuProductOptionValueModels){ + for(MenuProductOptionValueModel menuProductOptionValueModel : menuProductOptionValueModels){ + if(menuProductOptionValueModel.isSelected()){ + return true; + } + } + return false; + } + + private boolean isAnyOptionValueSelected(ArrayList menuProductOptionValueModels){ + for (MenuProductOptionValueModel menuProductOptionValueModel : menuProductOptionValueModels){ + if(menuProductOptionValueModel.isSelected()){ + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/app/src/main/java/ch/pizzapp/android/activity/CampaignProductListActivity.java b/app/src/main/java/ch/pizzapp/android/activity/CampaignProductListActivity.java new file mode 100644 index 0000000..d6b85ca --- /dev/null +++ b/app/src/main/java/ch/pizzapp/android/activity/CampaignProductListActivity.java @@ -0,0 +1,131 @@ +package ch.pizzapp.android.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +import butterknife.BindView; +import butterknife.ButterKnife; +import ch.pizzapp.android.R; +import ch.pizzapp.android.adapter.recycler.MenuProductRecyclerAdapter; +import ch.pizzapp.android.api.ApiErrorUtils; +import ch.pizzapp.android.api.ApiService; +import ch.pizzapp.android.api.ResponseArray; +import ch.pizzapp.android.helper.DialogHelper; +import ch.pizzapp.android.helper.DisplayHelper; +import ch.pizzapp.android.interfaces.RecyclerItemClickListener; +import ch.pizzapp.android.model.CampaignModel; +import ch.pizzapp.android.model.menu.MenuProductModel; +import ch.pizzapp.android.view.AppToolbar; +import ch.pizzapp.android.view.GridSpacesItemDecoration; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class CampaignProductListActivity extends BaseActivity { + + @BindView(R.id.campaignProductsAppToolbar) AppToolbar campaignProductsAppToolbar; + @BindView(R.id.campaignProductRecyclerView) RecyclerView campaignProductRecyclerView; + + private ArrayList menuProductList = new ArrayList<>(); + private MenuProductRecyclerAdapter menuProductRecyclerAdapter; + private CampaignModel campaignModel; + + private int REQUEST_CODE_CAMPAIGN_PRODUCT_PROPERTIES = 4756; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_campaign_product_list); + ButterKnife.bind(this); + getDataFromIntent(); + initViews(); + getCampaignProducts(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(requestCode == REQUEST_CODE_CAMPAIGN_PRODUCT_PROPERTIES && resultCode == RESULT_OK){ + setResult(RESULT_OK); + finish(); + } + } + + private void getDataFromIntent(){ + campaignModel = (CampaignModel) getIntent().getSerializableExtra("campaignModel"); + } + + private void initViews(){ + campaignProductsAppToolbar.setTitle(campaignModel.getName()); + initRecyclerView(); + } + + private void initRecyclerView(){ + GridLayoutManager layoutManager = new GridLayoutManager(BaseActivity.currentActivity, 2); + campaignProductRecyclerView.setLayoutManager(layoutManager); + menuProductRecyclerAdapter = new MenuProductRecyclerAdapter( + menuProductList, + true, + new RecyclerItemClickListener() { + @Override + public void onItemClick(View view, int position) { + Intent productPropertiesIntent = new Intent(BaseActivity.currentActivity, CampaignProductDetailsActivity.class); + productPropertiesIntent.putExtra("menuProductModel", menuProductList.get(position)); + productPropertiesIntent.putExtra("campaignModel", campaignModel); + //productPropertiesIntent.putExtra("isFromPizzapassCampaign", categoryModel.isPizzapassCampaign()); + //productPropertiesIntent.putExtra("isFromChampagneCampaign", categoryModel.isChampagneCampaign()); + startActivityForResult(productPropertiesIntent, REQUEST_CODE_CAMPAIGN_PRODUCT_PROPERTIES); + } + }); + campaignProductRecyclerView.addItemDecoration(new GridSpacesItemDecoration(DisplayHelper.dpToPx(12))); + campaignProductRecyclerView.setAdapter(menuProductRecyclerAdapter); + } + + private void getCampaignProducts(){ + DialogHelper.showLoadingDialog(); + Call> call = ApiService.apiInterface.getProductsByCategory(campaignModel.getCategoryId()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()) + fillAndNotifyProductList(response.body().getData()); + else + ApiErrorUtils.parseError(response); + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + + private void fillAndNotifyProductList(ArrayList productList){ + MenuProductModel.checkNull(productList); + menuProductList.clear(); + menuProductList.addAll(productList); + sortProductsByName(); + menuProductRecyclerAdapter.notifyDataSetChanged(); + } + + private void sortProductsByName(){ + Collections.sort(menuProductList, new Comparator() { + @Override + public int compare(MenuProductModel product1, MenuProductModel product2) { + return product1.getName().compareTo(product2.getName()); + } + }); + } + +} diff --git a/app/src/main/java/ch/pizzapp/android/activity/MainActivity.java b/app/src/main/java/ch/pizzapp/android/activity/MainActivity.java index b291db3..76189b0 100644 --- a/app/src/main/java/ch/pizzapp/android/activity/MainActivity.java +++ b/app/src/main/java/ch/pizzapp/android/activity/MainActivity.java @@ -40,7 +40,6 @@ import ch.pizzapp.android.helper.DialogHelper; import ch.pizzapp.android.helper.PriceHelper; import ch.pizzapp.android.helper.SessionHelper; import ch.pizzapp.android.helper.SharedPrefsHelper; -import ch.pizzapp.android.model.CampaignModel; import ch.pizzapp.android.model.CategoryModel; import ch.pizzapp.android.view.AppToolbar; import io.github.luizgrp.sectionedrecyclerviewadapter.SectionParameters; @@ -77,7 +76,6 @@ public class MainActivity extends BaseActivity { private NavigationMenuRecyclerAdapter navigationMenuRecyclerAdapter; //private Badge badge; private Animation animUp,animDown; - private CampaignModel campaignModel; private SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); @@ -95,9 +93,14 @@ public class MainActivity extends BaseActivity { super.onActivityResult(requestCode, resultCode, data); } + @Override + protected void onResume() { + super.onResume(); + setCartItemCount(); + } + private void getDataFromIntent(){ isStartWithOrderHistory = getIntent().getBooleanExtra("isStartWithOrderHistory", false); - campaignModel = (CampaignModel)getIntent().getSerializableExtra("campaignModel"); } private void initViews(){ @@ -158,10 +161,6 @@ public class MainActivity extends BaseActivity { if(isStartWithOrderHistory){ bottomNavigationView.setCurrentItem(1); } - else if (campaignModel != null) { - CategoryModel campaignCategoryModel = new CategoryModel(campaignModel); - openProductsScreen(campaignCategoryModel); - } else { openProductsScreen(categoryList.get(2)); } diff --git a/app/src/main/java/ch/pizzapp/android/activity/ProductPropertiesActivity.java b/app/src/main/java/ch/pizzapp/android/activity/ProductDetailsActivity.java similarity index 91% rename from app/src/main/java/ch/pizzapp/android/activity/ProductPropertiesActivity.java rename to app/src/main/java/ch/pizzapp/android/activity/ProductDetailsActivity.java index 861c9e1..509de53 100644 --- a/app/src/main/java/ch/pizzapp/android/activity/ProductPropertiesActivity.java +++ b/app/src/main/java/ch/pizzapp/android/activity/ProductDetailsActivity.java @@ -1,27 +1,14 @@ package ch.pizzapp.android.activity; -import android.support.design.widget.BottomSheetBehavior; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; -import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; import butterknife.BindString; import butterknife.BindView; @@ -42,20 +29,17 @@ import ch.pizzapp.android.helper.SharedPrefsHelper; import ch.pizzapp.android.helper.TextHelper; import ch.pizzapp.android.interfaces.RecyclerItemClickListener; import ch.pizzapp.android.model.AddProductToBasketResponseModel; -import ch.pizzapp.android.model.AddToBasketOptionModel; -import ch.pizzapp.android.model.ZoneModel; import ch.pizzapp.android.model.cart.CartInfoModel; import ch.pizzapp.android.model.menu.MenuProductModel; import ch.pizzapp.android.model.menu.MenuProductOptionModel; import ch.pizzapp.android.model.menu.MenuProductOptionValueModel; import okhttp3.FormBody; -import okhttp3.MediaType; import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; -public class ProductPropertiesActivity extends BaseActivity { +public class ProductDetailsActivity extends BaseActivity { @BindView(R.id.closeImageView) ImageView closeImageView; @BindView(R.id.backIcon) ImageView backIcon; @@ -73,7 +57,6 @@ public class ProductPropertiesActivity extends BaseActivity { @BindView(R.id.productCountTextView) TextView productCountTextView; @BindString(R.string.no_options_selected_part) String noOptionsSelectedText; - @BindString(R.string.cannot_use_campaign) String cannotUseCampaignText; private int productCount = 1; @@ -83,12 +66,11 @@ public class ProductPropertiesActivity extends BaseActivity { private ArrayList productCheckboxOptionValueList = new ArrayList<>(); private ProductRadioOptionsRecyclerAdapter productRadioOptionsRecyclerAdapter; private ProductCheckboxOptionsRecyclerAdapter productCheckboxOptionsRecyclerAdapter; - private boolean isFromPizzapassCampaign, isFromChampagneCampaign; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_product_properties); + setContentView(R.layout.activity_product_details); ButterKnife.bind(this); getDataFromIntent(); initViews(); @@ -106,9 +88,6 @@ public class ProductPropertiesActivity extends BaseActivity { finish(); break; case R.id.increaseProductCountImageView: - if(isFromPizzapassCampaign || isFromChampagneCampaign){ - return; - } productCount++; productCountTextView.setText(String.valueOf(productCount)); productPriceTextView.setText( @@ -127,13 +106,7 @@ public class ProductPropertiesActivity extends BaseActivity { case R.id.addToCartButton: if(checkFields()){ if(SessionHelper.isCustomerLoggedIn()){ - if((isFromPizzapassCampaign && SessionHelper.isUserUsedPizzapassCampaign()) || - (isFromChampagneCampaign && SessionHelper.isUserUsedChampagneCampaign())){ - DialogHelper.showAlertDialog(BaseActivity.currentActivity, cannotUseCampaignText); - } - else { - addProductToCart(); - } + addProductToCart(); } else { DialogHelper.showNeedToLoginDialog(R.string.need_to_login_for_shopping); @@ -175,9 +148,8 @@ public class ProductPropertiesActivity extends BaseActivity { private void getDataFromIntent(){ menuProductModel = (MenuProductModel) getIntent().getSerializableExtra("menuProductModel"); - isFromPizzapassCampaign = getIntent().getBooleanExtra("isFromPizzapassCampaign", false); - isFromChampagneCampaign = getIntent().getBooleanExtra("isFromChampagneCampaign", false); } + private void initViews(){ setFields(); fillRadioAndCheckboxOptionLists(); @@ -367,12 +339,6 @@ public class ProductPropertiesActivity extends BaseActivity { response.body().isSuccess()){ SharedPrefsHelper.setCartItemCount(response.body().getData().getProducts().size()); SharedPrefsHelper.setCartTotalPrice(PriceHelper.removeCurrencyFromPrice(response.body().getData().getCartTotalModel().getText())); - if(isFromPizzapassCampaign){ - SessionHelper.setUserUsedPizzapassCampaign(true); - } - else if(isFromChampagneCampaign){ - SessionHelper.setUserUsedChampagneCampaign(true); - } /* MainActivity mainActivity = (MainActivity) getActivity(); diff --git a/app/src/main/java/ch/pizzapp/android/fragment/CartFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/CartFragment.java index c02aaa6..e109a4d 100644 --- a/app/src/main/java/ch/pizzapp/android/fragment/CartFragment.java +++ b/app/src/main/java/ch/pizzapp/android/fragment/CartFragment.java @@ -92,10 +92,15 @@ public class CartFragment extends BaseFragment { View view = inflater.inflate(R.layout.fragment_cart, container, false); ButterKnife.bind(this, view); initViews(); - getCartProducts(); return view; } + @Override + public void onResume() { + super.onResume(); + getCartProducts(); + } + @OnClick({R.id.clearCartButton, R.id.continueCartButton}) protected void onClick(View view){ switch (view.getId()){ diff --git a/app/src/main/java/ch/pizzapp/android/fragment/MenuFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/MenuFragment.java index e0ed587..b06d4e7 100644 --- a/app/src/main/java/ch/pizzapp/android/fragment/MenuFragment.java +++ b/app/src/main/java/ch/pizzapp/android/fragment/MenuFragment.java @@ -17,7 +17,7 @@ import butterknife.ButterKnife; import ch.pizzapp.android.R; import ch.pizzapp.android.activity.BaseActivity; import ch.pizzapp.android.activity.MainActivity; -import ch.pizzapp.android.activity.ProductPropertiesActivity; +import ch.pizzapp.android.activity.ProductDetailsActivity; import ch.pizzapp.android.adapter.recycler.MenuProductRecyclerAdapter; import ch.pizzapp.android.api.ApiErrorUtils; import ch.pizzapp.android.api.ApiService; @@ -102,10 +102,8 @@ public class MenuFragment extends BaseFragment { new RecyclerItemClickListener() { @Override public void onItemClick(View view, int position) { - Intent productPropertiesIntent = new Intent(BaseActivity.currentActivity, ProductPropertiesActivity.class); + Intent productPropertiesIntent = new Intent(BaseActivity.currentActivity, ProductDetailsActivity.class); productPropertiesIntent.putExtra("menuProductModel", menuProductList.get(position)); - productPropertiesIntent.putExtra("isFromPizzapassCampaign", categoryModel.isPizzapassCampaign()); - productPropertiesIntent.putExtra("isFromChampagneCampaign", categoryModel.isChampagneCampaign()); startActivityForResult(productPropertiesIntent, REQUEST_CODE_PRODUCT_PROPERTIES); //showBottomsheetDialog(menuProductList.get(position)); } diff --git a/app/src/main/java/ch/pizzapp/android/fragment/ProductFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/ProductFragment.java index 8835994..6f75a3d 100644 --- a/app/src/main/java/ch/pizzapp/android/fragment/ProductFragment.java +++ b/app/src/main/java/ch/pizzapp/android/fragment/ProductFragment.java @@ -15,7 +15,7 @@ import butterknife.ButterKnife; import ch.pizzapp.android.R; import ch.pizzapp.android.activity.BaseActivity; import ch.pizzapp.android.activity.MainActivity; -import ch.pizzapp.android.activity.ProductPropertiesActivity; +import ch.pizzapp.android.activity.ProductDetailsActivity; import ch.pizzapp.android.adapter.recycler.MenuProductRecyclerAdapter; import ch.pizzapp.android.api.ApiConstants; import ch.pizzapp.android.api.ApiErrorUtils; @@ -100,7 +100,7 @@ public class ProductFragment extends BaseFragment { new RecyclerItemClickListener() { @Override public void onItemClick(View view, int position) { - Intent productPropertiesIntent = new Intent(BaseActivity.currentActivity, ProductPropertiesActivity.class); + Intent productPropertiesIntent = new Intent(BaseActivity.currentActivity, ProductDetailsActivity.class); productPropertiesIntent.putExtra("menuProductModel", productList.get(position)); startActivityForResult(productPropertiesIntent, REQUEST_CODE_PRODUCT_PROPERTIES); //showBottomsheetDialog(productList.get(position)); diff --git a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java index 63d0b4e..6fc817a 100644 --- a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java +++ b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java @@ -3,6 +3,7 @@ package ch.pizzapp.android.fragment.createOrder; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -19,8 +20,8 @@ import butterknife.ButterKnife; import butterknife.OnClick; import ch.pizzapp.android.R; import ch.pizzapp.android.activity.BaseActivity; +import ch.pizzapp.android.activity.CampaignProductListActivity; import ch.pizzapp.android.activity.CreateOrderActivity; -import ch.pizzapp.android.activity.MainActivity; import ch.pizzapp.android.api.ApiEndPoints; import ch.pizzapp.android.api.ApiErrorUtils; import ch.pizzapp.android.api.ApiService; @@ -30,12 +31,15 @@ import ch.pizzapp.android.helper.PriceHelper; import ch.pizzapp.android.helper.SessionHelper; import ch.pizzapp.android.helper.SharedPrefsHelper; import ch.pizzapp.android.model.CampaignModel; +import ch.pizzapp.android.model.cart.CartInfoModel; import ch.pizzapp.android.model.cart.CartProductModel; import ch.pizzapp.android.view.AppInfoView; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; +import static android.app.Activity.RESULT_OK; + /** * Created by cimenmus on 17/10/2017. */ @@ -63,6 +67,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { @BindString(R.string.something_went_wrong) String genericErrorText; public static final java.lang.String FRAGMENT_NAME = "orderSummaryFragment"; + private int REQUEST_CODE_CAMPAIGN_PRODUCT_LIST = 7847; private CreateOrderActivity createOrderActivity; public CreateOrderSummaryFragment() {} @@ -84,6 +89,15 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { return view; } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(requestCode == REQUEST_CODE_CAMPAIGN_PRODUCT_LIST && resultCode == RESULT_OK){ + BaseActivity.setCurrentActivity(createOrderActivity); + getCartProducts(); + } + } + @OnClick({R.id.previousTextView, R.id.nextTextView}) protected void onClick(View view){ CreateOrderActivity createOrderActivity = (CreateOrderActivity) getActivity(); @@ -142,6 +156,20 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { } else { checkChampagneCampaign(); + /* + // dummy // + CampaignModel campaignModel = new CampaignModel(); + campaignModel.setCategoryId("71"); + campaignModel.setName("Pizzapass"); + campaignModel.setCode("PIZZAPASS"); + campaignModel.setDescription("10 pizza alana 11. pizza bizden!"); + if(!SessionHelper.isUserUsedPizzapassCampaign()){ + showPizzapassCampaignDialog(campaignModel); + } + else { + checkChampagneCampaign(); + } + */ } } else{ @@ -183,9 +211,9 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - Intent campaignIntent = new Intent(BaseActivity.currentActivity, MainActivity.class); + Intent campaignIntent = new Intent(BaseActivity.currentActivity, CampaignProductListActivity.class); campaignIntent.putExtra("campaignModel", campaignModel); - BaseActivity.currentActivity.startActivity(campaignIntent); + startActivityForResult(campaignIntent, REQUEST_CODE_CAMPAIGN_PRODUCT_LIST); } }, R.string.decline_campaign, @@ -263,9 +291,9 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - Intent campaignIntent = new Intent(BaseActivity.currentActivity, MainActivity.class); + Intent campaignIntent = new Intent(BaseActivity.currentActivity, CampaignProductListActivity.class); campaignIntent.putExtra("campaignModel", campaignModel); - BaseActivity.currentActivity.startActivity(campaignIntent); + startActivityForResult(campaignIntent, REQUEST_CODE_CAMPAIGN_PRODUCT_LIST); } }, R.string.decline_campaign, @@ -384,4 +412,29 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { return containsAnyPizza; } + private void getCartProducts(){ + DialogHelper.showLoadingDialog(); + Call> call = ApiService.apiInterface.getCartProducts( + ApiEndPoints.API_GET_CART_PRODUCTS + SessionHelper.getCustomerToken().getToken()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + createOrderActivity.setCartInfo(response.body().getData()); + } + else + ApiErrorUtils.parseError(response); + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + } diff --git a/app/src/main/java/ch/pizzapp/android/model/CategoryModel.java b/app/src/main/java/ch/pizzapp/android/model/CategoryModel.java index 8a85802..43461ad 100644 --- a/app/src/main/java/ch/pizzapp/android/model/CategoryModel.java +++ b/app/src/main/java/ch/pizzapp/android/model/CategoryModel.java @@ -27,25 +27,11 @@ public class CategoryModel implements Serializable{ @SerializedName("children") private ArrayList subCategoryList; - private String campaignCode; - public void checkNull(){ if(name == null) name = ""; } - public CategoryModel(CampaignModel campaignModel){ - try { - id = Integer.valueOf(campaignModel.getCategoryId()); - } - catch (Exception e){ - id = -1; - } - name = campaignModel.getName(); - subCategoryList = new ArrayList<>(); - campaignCode = campaignModel.getCode(); - } - public static void checkNull(ArrayList categoryList){ for (CategoryModel categoryModel : categoryList){ categoryModel.checkNull(); @@ -94,13 +80,4 @@ public class CategoryModel implements Serializable{ this.subCategoryList = subCategoryList; } - public boolean isPizzapassCampaign() { - return campaignCode != null && campaignCode.toUpperCase().equals(ApiConstants.CAMPAIGN_CODE_PIZZAPASS); - } - - public boolean isChampagneCampaign() { - return campaignCode != null && campaignCode.toUpperCase().equals(ApiConstants.CAMPAIGN_CODE_CHAMPAGNE); - } - - } diff --git a/app/src/main/java/ch/pizzapp/android/view/AppToolbar.java b/app/src/main/java/ch/pizzapp/android/view/AppToolbar.java index b9513bf..d648c71 100644 --- a/app/src/main/java/ch/pizzapp/android/view/AppToolbar.java +++ b/app/src/main/java/ch/pizzapp/android/view/AppToolbar.java @@ -19,8 +19,8 @@ public class AppToolbar extends Toolbar { private View rootView; private TextView toolbarTitleTextView; - private ImageView hamburgerIcon, backIcon; - private boolean showHamburgerIcon, showBackIcon; + private ImageView hamburgerIcon, backIcon, closeIcon; + private boolean showHamburgerIcon, showBackIcon, showCloseIcon; private String title; private int toolbarBackgroundColor, titleTextColor; @@ -42,6 +42,7 @@ public class AppToolbar extends Toolbar { TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AppToolbar, 0, 0); try { showHamburgerIcon = a.getBoolean(R.styleable.AppToolbar_showHamburgerMenuIcon, false); + showCloseIcon = a.getBoolean(R.styleable.AppToolbar_showCloseIcon, false); showBackIcon = a.getBoolean(R.styleable.AppToolbar_showBackIcon, false); title = a.getString(R.styleable.AppToolbar_title); /* @@ -65,17 +66,26 @@ public class AppToolbar extends Toolbar { //this.setBackgroundResource(toolbarBackgroundColor); //toolbarTitleTextView.setTextColor(titleTextColor); hamburgerIcon = (ImageView) rootView.findViewById(R.id.hamburgerIcon); + closeIcon = (ImageView) rootView.findViewById(R.id.closeIcon); backIcon = (ImageView) rootView.findViewById(R.id.backIcon); if(showHamburgerIcon) hamburgerIcon.setVisibility(VISIBLE); if(showBackIcon) backIcon.setVisibility(VISIBLE); + if(showCloseIcon) + closeIcon.setVisibility(VISIBLE); backIcon.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { BaseActivity.currentActivity.onBackPressed(); } }); + closeIcon.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + BaseActivity.currentActivity.onBackPressed(); + } + }); if(title != null) { toolbarTitleTextView.setText(title); toolbarTitleTextView.setVisibility(VISIBLE); diff --git a/app/src/main/res/layout/activity_campaign_product_details.xml b/app/src/main/res/layout/activity_campaign_product_details.xml new file mode 100644 index 0000000..2b7ce3f --- /dev/null +++ b/app/src/main/res/layout/activity_campaign_product_details.xml @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +