From ee30b914ad805934e2fee839f7a66c5e7eb0c787 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 8 Jan 2020 17:47:54 +0100 Subject: [PATCH 1/6] Completata implementazione Basket colli --- app/src/main/AndroidManifest.xml | 2 +- .../consumers/ColliMagazzinoRESTConsumer.java | 113 ++++---- .../ColliMagazzinoRESTConsumerService.java | 6 + .../core/settings/SettingsModel.java | 107 ++++++- .../core/ContenutoBancaleListAdapter.java | 19 +- .../ProdRecuperoMaterialeViewModel.java | 2 +- .../ProdVersamentoMaterialViewModel.java | 2 +- .../RettificaGiacenzeMainListAdapter.java | 2 - .../viewmodel/RettificaGiacenzeViewModel.java | 2 +- .../viewmodel/VersamentoMerceViewModel.java | 2 +- .../ui/DeactivatableViewPager.java | 129 ++++++++- .../ask_cliente/DialogAskClienteAdapter.java | 2 +- .../DialogAskPositionOfLU.java | 3 + .../DialogAskPositionOfLUAdapter.java | 2 +- .../dialogs/basket_lu/DialogBasketLU.java | 88 ++++++ .../DialogBasketLU_ViewPagerAdapter.java | 131 +++++++++ .../DialogBasketLU_BaseViewModel.java | 30 ++ .../interfaces/IDialogBasketLUViewModel.java | 28 ++ .../DialogBasketLU_Page1_ListAdapter.java | 76 +++++ .../page1/DialogBasketLU_Page1_ViewModel.java | 90 ++++++ .../DialogBasketLU_Page2_ListAdapter.java | 83 ++++++ .../page2/DialogBasketLU_Page2_ViewModel.java | 90 ++++++ .../DialogScanOrCreateLU.java | 24 +- app/src/main/res/drawable/ic_black_back.png | Bin 0 -> 490 bytes .../res/drawable/ic_black_shopping_cart.png | Bin 0 -> 1242 bytes app/src/main/res/drawable/ic_black_tick.png | Bin 0 -> 484 bytes .../res/layout/dialog_ask_should_print.xml | 269 +++++++++--------- app/src/main/res/layout/dialog_basket_lu.xml | 52 ++++ .../dialog_basket_lu__mtb_colr_model.xml | 139 +++++++++ .../dialog_basket_lu__mtb_colt_model.xml | 104 +++++++ .../res/layout/dialog_basket_lu__page1.xml | 72 +++++ .../res/layout/dialog_basket_lu__page2.xml | 121 ++++++++ .../res/layout/dialog_scan_or_create_lu.xml | 106 +++++-- .../res/layout/lista_bancali_list_model.xml | 4 +- .../lista_contenuto_bancale_list_model.xml | 67 +++-- app/src/main/res/values-it/strings.xml | 4 + app/src/main/res/values/strings.xml | 7 +- 37 files changed, 1704 insertions(+), 274 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU_ViewPagerAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/DialogBasketLU_BaseViewModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/IDialogBasketLUViewModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ListAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ListAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java create mode 100644 app/src/main/res/drawable/ic_black_back.png create mode 100644 app/src/main/res/drawable/ic_black_shopping_cart.png create mode 100644 app/src/main/res/drawable/ic_black_tick.png create mode 100644 app/src/main/res/layout/dialog_basket_lu.xml create mode 100644 app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml create mode 100644 app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml create mode 100644 app/src/main/res/layout/dialog_basket_lu__page1.xml create mode 100644 app/src/main/res/layout/dialog_basket_lu__page2.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9c827172..73effea7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> - + { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { - List codMarts = Stream.of(mtbColt.getMtbColr()) - .map(MtbColr::getCodMart) - .withoutNulls() - .distinct() - .toList(); - - ArticoloRESTConsumer.getByCodMart(codMarts, arts -> { - - if (arts != null && arts.size() > 0) { - for (MtbColr mtbColr : mtbColt.getMtbColr()) { - - MtbAart foundMtbAart = null; - - List mtbAartStream = Stream.of(arts) - .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())).toList(); - - if (mtbAartStream != null && mtbAartStream.size() > 0) { - foundMtbAart = mtbAartStream.get(0); - } - - mtbColr.setMtbAart(foundMtbAart); - mtbColr.setGestione(mtbColt.getGestione()); - mtbColr.setSerCollo(mtbColt.getSerCollo()); - mtbColr.setNumCollo(mtbColt.getNumCollo()); - mtbColr.setDataCollo(mtbColt.getDataColloS()); - } - - - onComplete.run(mtbColt); - } - - }, onFailed); - + List mtbColtList = new ArrayList<>(); + mtbColtList.add(mtbColt); + fillMtbAartsOfMtbColts(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed); } else { onComplete.run(mtbColt); } @@ -470,6 +425,47 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } + + public static void fillMtbAartsOfMtbColts(List mtbColts, RunnableArgs> onComplete, RunnableArgs onFailed) { + List codMarts = new ArrayList<>(); + + for (MtbColt mtbColt : mtbColts) { + codMarts.addAll(Stream.of(mtbColt.getMtbColr()) + .map(MtbColr::getCodMart) + .withoutNulls() + .distinct() + .toList()); + } + + + ArticoloRESTConsumer.getByCodMart(codMarts, arts -> { + + if (arts != null && arts.size() > 0) { + for (MtbColt mtbColt : mtbColts) { + for (MtbColr mtbColr : mtbColt.getMtbColr()) { + + MtbAart foundMtbAart = null; + + List mtbAartStream = Stream.of(arts) + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())).toList(); + + if (mtbAartStream != null && mtbAartStream.size() > 0) { + foundMtbAart = mtbAartStream.get(0); + } + + mtbColr.setMtbAart(foundMtbAart); + mtbColr.setGestione(mtbColt.getGestione()); + mtbColr.setSerCollo(mtbColt.getSerCollo()); + mtbColr.setNumCollo(mtbColt.getNumCollo()); + mtbColr.setDataCollo(mtbColt.getDataColloS()); + } + } + } + + onComplete.run(mtbColts); + }, onFailed); + } + public static void getMultipleByTestate(List testate, boolean onlyResiduo, RunnableArgs> onComplete, RunnableArgs onFailed) { ArrayList resultMtbColt = new ArrayList<>(); cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, resultMtbColt, () -> { @@ -631,4 +627,23 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { } + + + public static void retrieveBasketColli(RunnableArgs> onComplete, RunnableArgs onFailed) { + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.getColliInBasket(SettingsManager.i().getUserSession().getDepo().getCodMdep()).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "GetBySSCC", mtbColts -> { + fillMtbAartsOfMtbColts(mtbColts, onComplete, onFailed); + }, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + if(onFailed != null) onFailed.run(new Exception(t)); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java index e5471436..025b83d1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java @@ -2,11 +2,14 @@ package it.integry.integrywmsnative.core.rest.consumers; import com.google.gson.JsonObject; +import java.util.List; + import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.model.MtbColt; import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; @@ -18,4 +21,7 @@ public interface ColliMagazzinoRESTConsumerService { @POST("getColloByBarcode") Call> getColloByBarcode(@Query("codBarreCollo") String sscc, @Query("onlyResiduo") boolean onlyResiduo, @Query("throwExcIfNull") boolean throwExcIfNull); + @GET("getColliInBasket") + Call>> getColliInBasket(@Query("codMdep") String codMdep); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java index 27d2b48b..03c8554c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java @@ -22,20 +22,125 @@ public class SettingsModel { public String codAzienda; public String host; public int port; + + public String getCodAzienda() { + return codAzienda; + } + + public Server setCodAzienda(String codAzienda) { + this.codAzienda = codAzienda; + return this; + } + + public String getHost() { + return host; + } + + public Server setHost(String host) { + this.host = host; + return this; + } + + public int getPort() { + return port; + } + + public Server setPort(int port) { + this.port = port; + return this; + } } public static class User { public String username; public String password; public String fullname; + + public String getUsername() { + return username; + } + + public User setUsername(String username) { + this.username = username; + return this; + } + + public String getPassword() { + return password; + } + + public User setPassword(String password) { + this.password = password; + return this; + } + + public String getFullname() { + return fullname; + } + + public User setFullname(String fullname) { + this.fullname = fullname; + return this; + } } public static class UserSession { public String profileDB; public AvailableCodMdepsDTO depo; public Integer defaultOrdinamentoPickingAccettazione = 0; -// public String codMdep; + + public String getProfileDB() { + return profileDB; + } + + public UserSession setProfileDB(String profileDB) { + this.profileDB = profileDB; + return this; + } + + public AvailableCodMdepsDTO getDepo() { + return depo; + } + + public UserSession setDepo(AvailableCodMdepsDTO depo) { + this.depo = depo; + return this; + } + + public Integer getDefaultOrdinamentoPickingAccettazione() { + return defaultOrdinamentoPickingAccettazione; + } + + public UserSession setDefaultOrdinamentoPickingAccettazione(Integer defaultOrdinamentoPickingAccettazione) { + this.defaultOrdinamentoPickingAccettazione = defaultOrdinamentoPickingAccettazione; + return this; + } } + public Server getServer() { + return server; + } + public SettingsModel setServer(Server server) { + this.server = server; + return this; + } + + public User getUser() { + return user; + } + + public SettingsModel setUser(User user) { + this.user = user; + return this; + } + + public UserSession getUserSession() { + return userSession; + } + + public SettingsModel setUserSession(UserSession userSession) { + this.userSession = userSession; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java index fe963a00..571f2c1f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java @@ -74,12 +74,25 @@ public class ContenutoBancaleListAdapter extends RecyclerView.Adapter { if(mOnItemClickListener != null) { - mOnItemClickListener.onItemClick(item, position); + mOnItemClickListener.onItemClick(mtbColr, position); } }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java index 15f12385..e0d97260 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java @@ -288,7 +288,7 @@ public class ProdRecuperoMaterialeViewModel { }; if(sourceMtbColt != null) saveRunnable.run(sourceMtbColt); - else DialogScanOrCreateLU.make(mContext, false, false, saveRunnable).show(); + else DialogScanOrCreateLU.make(mContext, true, false, saveRunnable).show(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java index 99a30c7c..43d4dca2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java @@ -86,7 +86,7 @@ public class ProdVersamentoMaterialViewModel { public void openLU() { - DialogScanOrCreateLU.make(mContext, true, true, false, mtbColt -> { + DialogScanOrCreateLU.make(mContext, false, false, true, false, mtbColt -> { if (mtbColt == null) { ((IPoppableActivity) mContext).pop(); } else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java index 760af892..6d574a10 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java @@ -67,10 +67,8 @@ public class RettificaGiacenzeMainListAdapter extends RecyclerView.Adapter } public void openLU() { - DialogScanOrCreateLU.make(mContext, false, false, mtbColt -> { + DialogScanOrCreateLU.make(mContext, true, false, mtbColt -> { if(mtbColt == null) { ((IPoppableActivity)mContext).pop(); } else { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java index cceb9441..56f08ae9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java @@ -68,7 +68,7 @@ public class VersamentoMerceViewModel { } public void openLU() { - DialogScanOrCreateLU.make(mContext, true, false, mtbColt -> { + DialogScanOrCreateLU.make(mContext, true, false, true, false, mtbColt -> { if(mtbColt == null) { ((IPoppableActivity)mContext).pop(); } else if((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)){ diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java b/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java index 3298829d..200d73aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java +++ b/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java @@ -1,21 +1,37 @@ package it.integry.integrywmsnative.ui; +import android.animation.LayoutTransition; import android.content.Context; import androidx.viewpager.widget.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; +import android.view.animation.Animation; +import android.view.animation.Interpolator; +import android.view.animation.Transformation; -public class DeactivatableViewPager extends ViewPager { +public class DeactivatableViewPager extends ViewPager implements Animation.AnimationListener { private View mCurrentView; + private PagerAnimation mAnimation = new PagerAnimation(); + private boolean mAnimStarted = false; + private long mAnimDuration = 100; + public DeactivatableViewPager(Context context) { super(context); + mAnimation.setAnimationListener(this); + + setLayerType(View.LAYER_TYPE_HARDWARE, null); +// getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); } public DeactivatableViewPager(Context context, AttributeSet attrs) { super(context, attrs); + mAnimation.setAnimationListener(this); + + setLayerType(View.LAYER_TYPE_HARDWARE, null); +// getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); } @Override @@ -31,30 +47,113 @@ public class DeactivatableViewPager extends ViewPager { @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (mCurrentView == null) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - return; + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + if (!mAnimStarted && mCurrentView != null) { + mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); + int height = mCurrentView.getMeasuredHeight(); + + if (height < getMinimumHeight()) { + height = getMinimumHeight(); + } + + int newHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); + if (/*getLayoutParams().height != 0 && */heightMeasureSpec != height && height > 0 && height < 100000) { +// animate() +// .y(height) +// .withLayer() +// .start(); +// mAnimation.setDimensions(height, getLayoutParams().height); +// mAnimation.setDuration(mAnimDuration); +// startAnimation(mAnimation); +// mAnimStarted = true; + } else { + } + heightMeasureSpec = newHeight; } - int height = 0; - mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); - int h = mCurrentView.getMeasuredHeight(); - if (h > height) height = h; - heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } - public void measureCurrentView(View currentView) { + /** + * This method should be called when the ViewPager changes to another page. For best results + * call this method in the adapter's setPrimary + * + * @param currentView PagerAdapter item view + */ + public void onPageChanged(View currentView) { mCurrentView = currentView; requestLayout(); } - public int measureFragment(View view) { - if (view == null) - return 0; - view.measure(0, 0); - return view.getMeasuredHeight(); + /** + * Custom animation to animate the change of height in the + */ + private class PagerAnimation extends Animation { + private int targetHeight; + private int currentHeight; + private int heightChange; + + /** + * Set the dimensions for the animation. + * + * @param targetHeight View's target height + * @param currentHeight View's current height + */ + void setDimensions(int targetHeight, int currentHeight) { + this.targetHeight = targetHeight; + this.currentHeight = currentHeight; + this.heightChange = targetHeight - currentHeight; + } + + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + if (interpolatedTime >= 1) { + getLayoutParams().height = targetHeight; + } else { + int stepHeight = (int) (heightChange * interpolatedTime); + getLayoutParams().height = currentHeight + stepHeight; + } + requestLayout(); + } + + @Override + public boolean willChangeBounds() { + return true; + } + } + + /** + * Sets the duration of the animation. + * + * @param duration Duration in ms + */ + public void setAnimationDuration(long duration) { + mAnimDuration = duration; + } + + /** + * Sets the interpolator used by the animation. + * + * @param interpolator {@link Interpolator} + */ + public void setAnimationInterpolator(Interpolator interpolator) { + mAnimation.setInterpolator(interpolator); + } + + @Override + public void onAnimationStart(Animation animation) { + mAnimStarted = true; + } + + @Override + public void onAnimationEnd(Animation animation) { + mAnimStarted = false; + } + + @Override + public void onAnimationRepeat(Animation animation) { } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java index 184f454b..bc7c418d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java @@ -102,7 +102,7 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if(position != lastPage) { - viewPager.measureCurrentView(mDatasetViews.get(position).getKey().getRoot()); + viewPager.onPageChanged(mDatasetViews.get(position).getKey().getRoot()); mDatasetViews.get(position).getValue().onShow(); lastPage = position; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java index 9698bf7d..d41ff95b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java @@ -27,6 +27,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityProgress; @@ -84,6 +85,8 @@ public class DialogAskPositionOfLU { // mDialog.setCancelable(false); mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + UtilityDialog.setTo90PercentSize(mContext, mDialog); + mDialog.setOnShowListener(dialog -> { ((AppCompatTextView) adapter.getPage(0).findViewById(R.id.description_text)).setText(mCheckForLineaProd ? R.string.ask_production_line_of_lu_message : R.string.ask_position_of_lu_message); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java index 0bcb48d4..939ad643 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java @@ -37,7 +37,7 @@ public class DialogAskPositionOfLUAdapter extends PagerAdapter { this.mDatasetViews.add(view); DeactivatableViewPager pager = (DeactivatableViewPager) container; - pager.measureCurrentView(view); + pager.onPageChanged(view); return view; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU.java new file mode 100644 index 00000000..dbf5b69c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU.java @@ -0,0 +1,88 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.databinding.DialogBasketLuBinding; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel; +import it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page1.DialogBasketLU_Page1_ListAdapter; +import it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page1.DialogBasketLU_Page1_ViewModel; +import it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page2.DialogBasketLU_Page2_ViewModel; + +public class DialogBasketLU { + + private Context mContext; + private Dialog mDialog; + private DialogBasketLuBinding mBinding; + + private RunnableArgs mOnComplete; + + public static Dialog make(final Context context, RunnableArgs onComplete) { + return new DialogBasketLU(context, onComplete).mDialog; + } + + + private DialogBasketLU(Context context, RunnableArgs onComplete) { + mContext = context; + mOnComplete = onComplete; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_basket_lu, null, false); + + mDialog = new Dialog(context); + + mDialog.setContentView(mBinding.getRoot()); + + mDialog.setCanceledOnTouchOutside(false); + mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + UtilityDialog.setTo90PercentSize(context, mDialog); + + this.initViewPager(); + } + + private void initViewPager() { + List> views = new ArrayList<>(); + views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_basket_lu__page1, DialogBasketLU_Page1_ViewModel.class)); + views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_basket_lu__page2, DialogBasketLU_Page2_ViewModel.class)); + + DialogBasketLU_ViewPagerAdapter viewPagerAdapter = new DialogBasketLU_ViewPagerAdapter(mContext, views); + mBinding.viewpager.setAdapter(viewPagerAdapter); + mBinding.viewpager.beginFakeDrag(); + mBinding.viewpager.addOnPageChangeListener(viewPagerAdapter); + mBinding.viewpager.setEnabled(false); + + + mDialog.setOnShowListener(v -> { + viewPagerAdapter.getViewModel(R.layout.dialog_basket_lu__page2).setOnConfirmClickListener(data -> { + MtbColt mtbColt = (MtbColt) data; + + mOnComplete.run(mtbColt); + mDialog.dismiss(); + }); + + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU_ViewPagerAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU_ViewPagerAdapter.java new file mode 100644 index 00000000..bf4e2edc --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLU_ViewPagerAdapter.java @@ -0,0 +1,131 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.ui.DeactivatableViewPager; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.IDialogAskClienteViewModel; +import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; + +public class DialogBasketLU_ViewPagerAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener { + + private Context mContext; + + private List> mDatasetLayout; + private List> mDatasetViews; + + private DeactivatableViewPager viewPager; + + public DialogBasketLU_ViewPagerAdapter(Context context, List> datasetLayouts) { + this.mContext = context; + this.mDatasetLayout = datasetLayouts; + this.mDatasetViews = new ArrayList<>(); + } + + @Override + public View instantiateItem(ViewGroup container, int position) { + viewPager = (DeactivatableViewPager) container; + + Integer viewId = mDatasetLayout.get(position).getKey(); + + + LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + ViewDataBinding mBinding = DataBindingUtil.inflate(inflater, viewId, null, false); + + Class viewModelClass = mDatasetLayout.get(position).getValue(); + IDialogBasketLUViewModel viewModel = null; + + try { + viewModel = (IDialogBasketLUViewModel) viewModelClass.newInstance(); + viewModel.setBinding(mBinding); + viewModel.setContext(mContext); + viewModel.setOnDone(data -> { + int newIndex = viewPager.getCurrentItem() + 1; + + if(newIndex <= getCount()) { + this.mDatasetViews.get(newIndex).getValue().setInputData(data); + this.mDatasetViews.get(newIndex).getValue().onPreShow(); + viewPager.setCurrentItem(newIndex, true); + } + }); + viewModel.setOnPrev(() -> { + int newIndex = viewPager.getCurrentItem() - 1; + + if(newIndex >= 0) { + viewPager.setCurrentItem(newIndex, true); + } + }); + } catch (IllegalAccessException | InstantiationException e) { + e.printStackTrace(); + } + + mBinding.setVariable(it.integry.integrywmsnative.BR.viewmodel, viewModel); + + container.addView(mBinding.getRoot()); + this.mDatasetViews.add(new AbstractMap.SimpleEntry<>(mBinding, viewModel)); + + return mBinding.getRoot(); + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((LinearLayout)object); + } + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { + return view == o; + } + + + @Override + public int getCount() { + return mDatasetLayout.size(); + } + + public IDialogBasketLUViewModel getViewModel(@NonNull int layoutID) { + for(int i = 0; i < mDatasetLayout.size(); i++) { + if(mDatasetLayout.get(i).getKey() == layoutID) { + return this.mDatasetViews.get(i).getValue(); + } + } + return null; + } + + private int lastPage = -1; + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if(position != lastPage) { + mDatasetViews.get(position).getValue().onShow(); + viewPager.onPageChanged(mDatasetViews.get(position).getKey().getRoot()); + lastPage = position; + } + } + + @Override + public void onPageSelected(int position) { + // mDatasetViews.get(position).getValue().onShow(); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/DialogBasketLU_BaseViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/DialogBasketLU_BaseViewModel.java new file mode 100644 index 00000000..da560f4e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/DialogBasketLU_BaseViewModel.java @@ -0,0 +1,30 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces; + + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public abstract class DialogBasketLU_BaseViewModel implements IDialogBasketLUViewModel { + + private Runnable mOnPrev; + private RunnableArgs mOnDone; + + @Override + public void setOnPrev(Runnable onPrev) { + this.mOnPrev = onPrev; + } + + @Override + public void setOnDone(RunnableArgs onDone) { + this.mOnDone = onDone; + } + + + protected void done(Object data) { + if(this.mOnDone != null) mOnDone.run(data); + } + + protected void previous() { + mOnPrev.run(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/IDialogBasketLUViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/IDialogBasketLUViewModel.java new file mode 100644 index 00000000..4e507fca --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/interfaces/IDialogBasketLUViewModel.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces; + +import android.content.Context; +import androidx.databinding.ViewDataBinding; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public interface IDialogBasketLUViewModel { + + void setContext(Context context); + + void setBinding(ViewDataBinding binding); + + void setInputData(Object data); + + void onShow(); + + void onPreShow(); + + void setOnConfirmClickListener(RunnableArgs onConfirm); + + void setOnAbortClickListener(Runnable onAbort); + + void setOnPrev(Runnable onPrev); + + void setOnDone(RunnableArgs onDone); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ListAdapter.java new file mode 100644 index 00000000..5e044ac5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ListAdapter.java @@ -0,0 +1,76 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page1; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.databinding.DialogBasketLuMtbColtModelBinding; + +public class DialogBasketLU_Page1_ListAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private List mDataset; + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogBasketLuMtbColtModelBinding mViewDataBinding; + + + public ViewHolder(DialogBasketLuMtbColtModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbColt mtbColt) { + mViewDataBinding.setMtbColt(mtbColt); + mViewDataBinding.executePendingBindings(); + } + } + + public DialogBasketLU_Page1_ListAdapter(Context context, List myDataset, IRecyclerItemClicked onItemClickListener) { + mContext = context; + mDataset = myDataset; + mOnItemClickListener = onItemClickListener; + } + + @Override + public DialogBasketLU_Page1_ListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogBasketLuMtbColtModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_basket_lu__mtb_colt_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogBasketLU_Page1_ListAdapter.ViewHolder holder, int position) { + MtbColt item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(DialogBasketLU_Page1_ListAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java new file mode 100644 index 00000000..9cc6d8ed --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java @@ -0,0 +1,90 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page1; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.databinding.ViewDataBinding; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.databinding.DialogBasketLuBinding; +import it.integry.integrywmsnative.databinding.DialogBasketLuPage1Binding; +import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.DialogBasketLU_BaseViewModel; +import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; + +public class DialogBasketLU_Page1_ViewModel extends DialogBasketLU_BaseViewModel implements IDialogBasketLUViewModel { + + private Context mContext; + private DialogBasketLuPage1Binding mBinding; + + private List availableMtbColts; + private DialogBasketLU_Page1_ListAdapter mAdapter; + + @Override + public void setContext(Context context) { + this.mContext = context; + } + + @Override + public void setBinding(ViewDataBinding binding) { + this.mBinding = (DialogBasketLuPage1Binding) binding; + } + + @Override + public void setInputData(Object data) { + + } + + @Override + public void onShow() { + ColliMagazzinoRESTConsumer.retrieveBasketColli(mtbColts -> { + availableMtbColts = mtbColts; + if(mtbColts != null && mtbColts.size() > 0) initRecyclerView(availableMtbColts); + + mBinding.emptyView.setVisibility(mtbColts != null && mtbColts.size() > 0 ? View.GONE : View.VISIBLE); + }, ex -> { + mBinding.emptyView.setVisibility(View.VISIBLE); + }); + } + + @Override + public void onPreShow() { + } + + @Override + public void setOnConfirmClickListener(RunnableArgs onConfirm) { + + } + + @Override + public void setOnAbortClickListener(Runnable onAbort) { + + } + + + + + + private void initRecyclerView(List dataset) { + mBinding.dialogBasketLuMainList.setNestedScrollingEnabled(false); + mBinding.dialogBasketLuMainList.setHasFixedSize(true); + mBinding.dialogBasketLuMainList.setLayoutManager(new LinearLayoutManager(mContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mBinding.dialogBasketLuMainList.addItemDecoration(itemDecorator); + + mAdapter = new DialogBasketLU_Page1_ListAdapter(mContext, dataset, (item, position) -> { + this.done(item); + }); + + mBinding.dialogBasketLuMainList.setAdapter(mAdapter); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ListAdapter.java new file mode 100644 index 00000000..131eb1e4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ListAdapter.java @@ -0,0 +1,83 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page2; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityNumber; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogBasketLuMtbColrModelBinding; + +public class DialogBasketLU_Page2_ListAdapter extends RecyclerView.Adapter{ + + protected Context mContext; + + private List mDataset; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogBasketLuMtbColrModelBinding mViewDataBinding; + + + public ViewHolder(DialogBasketLuMtbColrModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbColr mtbColt) { + mViewDataBinding.setMtbColr(mtbColt); + mViewDataBinding.executePendingBindings(); + } + } + + public DialogBasketLU_Page2_ListAdapter(Context context, List myDataset) { + mContext = context; + mDataset = myDataset; + } + + @Override + public DialogBasketLU_Page2_ListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogBasketLuMtbColrModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_basket_lu__mtb_colr_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogBasketLU_Page2_ListAdapter.ViewHolder holder, int position) { + MtbColr mtbColr = mDataset.get(position); + holder.bind(mtbColr); + + //Setting qty with unt_mis + if(!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissa())){ + String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); + + if(mtbColr.getMtbAart() != null) { + text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : ""; + } + + holder.mViewDataBinding.qtaTextview.setText(text); + } else { + holder.mViewDataBinding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col)); + } + } + + @Override + public void onViewRecycled(DialogBasketLU_Page2_ListAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java new file mode 100644 index 00000000..ee388813 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java @@ -0,0 +1,90 @@ +package it.integry.integrywmsnative.view.dialogs.basket_lu.pages.page2; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.databinding.ViewDataBinding; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.databinding.DialogBasketLuPage2Binding; +import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.DialogBasketLU_BaseViewModel; +import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; + +public class DialogBasketLU_Page2_ViewModel extends DialogBasketLU_BaseViewModel implements IDialogBasketLUViewModel { + + private Context mContext; + private DialogBasketLuPage2Binding mBinding; + + private MtbColt mMtbColt; + private DialogBasketLU_Page2_ListAdapter mAdapter; + + private RunnableArgs mOnConfirm; + + @Override + public void setContext(Context context) { + this.mContext = context; + } + + @Override + public void setBinding(ViewDataBinding binding) { + this.mBinding = (DialogBasketLuPage2Binding) binding; + } + + @Override + public void setInputData(Object data) { + mMtbColt = (MtbColt) data; + + } + + @Override + public void onPreShow() { + if(mMtbColt != null && mMtbColt.getMtbColr() != null && mMtbColt.getMtbColr().size() > 0) initRecyclerView(mMtbColt.getMtbColr()); + mBinding.emptyView.setVisibility(mMtbColt != null && mMtbColt.getMtbColr() != null && mMtbColt.getMtbColr().size() > 0 ? View.GONE : View.VISIBLE); + + mBinding.buttonAbort.setOnClickListener(v -> { + previous(); + }); + + mBinding.buttonConfirm.setOnClickListener(v -> { + mOnConfirm.run(mMtbColt); + }); + } + + @Override + public void onShow() { + + } + + @Override + public void setOnConfirmClickListener(RunnableArgs onConfirm) { + mOnConfirm = onConfirm; + } + + @Override + public void setOnAbortClickListener(Runnable onAbort) { + + } + + + private void initRecyclerView(List dataset) { + mBinding.dialogBasketLuMtbColrList.setNestedScrollingEnabled(false); + mBinding.dialogBasketLuMtbColrList.setHasFixedSize(true); + mBinding.dialogBasketLuMtbColrList.setLayoutManager(new LinearLayoutManager(mContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mBinding.dialogBasketLuMtbColrList.addItemDecoration(itemDecorator); + + mAdapter = new DialogBasketLU_Page2_ListAdapter(mContext, dataset); + + mBinding.dialogBasketLuMtbColrList.setAdapter(mAdapter); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java index 746d1f86..e7e0f8c5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java @@ -35,6 +35,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLU; public class DialogScanOrCreateLU { @@ -54,18 +55,18 @@ public class DialogScanOrCreateLU { public static Dialog make(final Context context, RunnableArgs onDialogDismiss) { - return new DialogScanOrCreateLU(context, false, true, true, onDialogDismiss).mDialog; + return new DialogScanOrCreateLU(context, false, true, true, true, onDialogDismiss).mDialog; } - public static Dialog make(final Context context, boolean disableCreation, boolean shouldCheckIfExistDoc, RunnableArgs onDialogDismiss) { - return new DialogScanOrCreateLU(context, disableCreation, true, shouldCheckIfExistDoc, onDialogDismiss).mDialog; + public static Dialog make(final Context context, boolean enableCreation, boolean shouldCheckIfExistDoc, RunnableArgs onDialogDismiss) { + return new DialogScanOrCreateLU(context, false, enableCreation, true, shouldCheckIfExistDoc, onDialogDismiss).mDialog; } - public static Dialog make(final Context context, boolean disableCreation, boolean checkResiduo, boolean shouldCheckIfExistDoc, RunnableArgs onDialogDismiss) { - return new DialogScanOrCreateLU(context, disableCreation, checkResiduo, shouldCheckIfExistDoc, onDialogDismiss).mDialog; + public static Dialog make(final Context context, boolean enableBasket, boolean enableCreation, boolean checkResiduo, boolean shouldCheckIfExistDoc, RunnableArgs onDialogDismiss) { + return new DialogScanOrCreateLU(context, enableBasket, enableCreation, checkResiduo, shouldCheckIfExistDoc, onDialogDismiss).mDialog; } - private DialogScanOrCreateLU(Context context, boolean disableCreation, boolean checkResiduo, boolean shouldCheckIfExistDoc, RunnableArgs onDialogDismiss) { + private DialogScanOrCreateLU(Context context, boolean enableBasket, boolean enableCreation, boolean checkResiduo, boolean shouldCheckIfExistDoc, RunnableArgs onDialogDismiss) { mOnDialogDismiss = null; currentMtbColt = null; mShouldCheckResiduo = checkResiduo; @@ -77,7 +78,8 @@ public class DialogScanOrCreateLU { mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_or_create_lu, null, false); - if(disableCreation) mBinding.dialogScanOrCreateLuCreationLayout.setVisibility(View.GONE); + mBinding.dialogScanOrCreateLuCreationLayout.setVisibility(enableCreation ? View.VISIBLE : View.GONE); + mBinding.dialogScanOrCreateLuBasketLayout.setVisibility(enableBasket ? View.VISIBLE : View.GONE); mDialog = new Dialog(context); mDialog.setContentView(mBinding.getRoot()); @@ -102,6 +104,12 @@ public class DialogScanOrCreateLU { UtilityExceptions.defaultException(mContext, ex, progressDialog); }); }); + + mBinding.viewBasket.setOnClickListener(v -> { + DialogBasketLU.make(mContext, mtbColt -> { + sendMtbColt(mtbColt, null); + }).show(); + }); } private void initBarcode(Context context) { @@ -275,7 +283,7 @@ public class DialogScanOrCreateLU { private void sendMtbColt(MtbColt mtbColtToSend, Dialog progressDialog) { currentMtbColt = mtbColtToSend; - progressDialog.dismiss(); + if(progressDialog != null) progressDialog.dismiss(); mDialog.dismiss(); mOnDialogDismiss.run(mtbColtToSend); } diff --git a/app/src/main/res/drawable/ic_black_back.png b/app/src/main/res/drawable/ic_black_back.png new file mode 100644 index 0000000000000000000000000000000000000000..1973bf62a70aeaa86ef03d6276e983c0ead5df80 GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lNlHo=X<(1 zhE&XXduP8_Q=&xM$I}arI(J;lSZg_3%E{)Gl=7@eVzXC0ULjndQSdf9K-1u2_~qv> zzy3OC-BI_W;{K&e<95TYmEWe*VgT-DS3| zjqYiO=dXLct!J6j>Jzo_(&cj;J2+-;acYx4@qt;gPT??r%8y1K`w0)(js7^G2?o6U{&VX( z{s(*(ar){9AW#?@jM)>Op2 z?JADk+Av+TfA!sj=<+AsAKpkYxxa3SI<R4Iccl5raoPD_nnb+h;!%yD z|A0{tF^9zXM}!~-A~D9O!F5q>FMrzRoykOYUX|5 zF)-8B_3c;H)!*)}+6BWf48t%C!!V3=YyqAH-UogK)`0a)Vr{7DB=8I{n;k?) zKhe^-0NkG>6AC;8ETf;)(D)O0FhM@X$~NE<`pJxqCE%9cv$BaTDR&OM2JB8;M@qI1 zKR;Df5y>274n5Ua0p@$o%?2s2_Ro<}_!yZ3_G^m>Wd^v2e(&uo7Aee{K863Fo>x;h z$^ra(pHNd5!5I|C)d=QrwzEz12Wsj9SpaU(elUmC)HQRIcFhA|r<%F|-l5C`xfg%O zIijXch{SrHQd8&WG-VB)BfNzFV)nS2IzPMd>wi&Aod=2aTpVtfD>K0N6lzH&*7F55 zb#jWeq@`KUCW^GA66=}0gV=<`lHRALu7*;rXA=@j`nH<73KHv?-6<>JLkbyECDt>` zi@2CodX_vLrHaIo9_X{eoxlkuV_J!JECcW1u9+ehfU6k@ zpR~9lZG;mUh@I4Ux0>v_mm|xR?cHsC+0Fs7bz$H%W6l zzJyynS!Ek8F}atIi8pHM^YTa{F?(9-+*d&Pn0UCQ&PHwqRuhPsYpHX-fbyZS0^HP6 zXDg=?2=bA8`OrAoR+-P`m>um-rzZ;w*cs3@?h(}4%8xw@@{xP_kod`0ndC<66Tvn{ zJ!gCyNE*Pd1Mzsrf602SdEA|Gw3Q01(>F|LmzT1Jd!)16wvprvSOLE5L(!D+1)k)C z{9&67L*a<*r!_!2dd=A^a2d0q(zuMUb4$;F0dP*Zt>LWuK(b-T3l|%PZG9! z@ELGDuuPT5B7e)Jd>hw+&pYnJ%UQaOkr!!xDZW@h`L^&r{p^ERI*MG!%|6)2|IzF$)|=zZYu7F)}bBv%u@Xzvw4qT=5TZkPMQ)nY)2Q zxaBx0))i>S>hRd!0`BT5XNF-IhG7_nVHk#C7{(OwAAHSXD0@B^+W-In07*qoM6N<$ Ef|CJN1^@s6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_black_tick.png b/app/src/main/res/drawable/ic_black_tick.png new file mode 100644 index 0000000000000000000000000000000000000000..ca369c8ed3393b935d2eb38f87008528749fce6d GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lNlHoXL`Cg zhE&XXd*`gzVFwY1hsxhPS-97+u)a3dZt8B*tCcFh)zl#-UTDY_r0Y3rX3WVs{F}}_ zx%0;{!*P;|Cmda}FBaI_5H*)!`vIv6=68*kFNlVwFs^Ax%dS4CD6(B)?$_HN_ix|5 zW2tX^^q;m8>rXoa9H#%^{UEjVfaYtd{fv1{*DNAyAFXd#JR{ZbvgHS#?LV?FZJ5&e zky+Ay0+B?(*N^E35-;rgUE?r6<`4G+#vcr32ZUzy@A&`f@&3=h9m0Ex7la;fFL~xJ zTL4tL_FRMd zsW{GgKXtwM4*rmxD$(?@`jjQheeg%? z6RD<;>=ITikJC527wDNEcwbRsf5SRwgF44tXM=wnWq%njMaX}3{k5W)*QPEv{6OK0 fE~N03dLcaH+a;+r$6o_uje)__)z4*}Q$iB}G8@?s literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/dialog_ask_should_print.xml b/app/src/main/res/layout/dialog_ask_should_print.xml index 89f20f30..262086bf 100644 --- a/app/src/main/res/layout/dialog_ask_should_print.xml +++ b/app/src/main/res/layout/dialog_ask_should_print.xml @@ -3,9 +3,10 @@ @@ -14,92 +15,91 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - - - + android:background="@color/light_blue_300" + android:gravity="center_horizontal"> - - - - - - + android:layout_margin="24dp" + android:src="@drawable/ic_error_white_24dp" /> + + - + + + android:gravity="center_horizontal" + android:text="@string/action_print" /> - - + android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" + android:gravity="left" + android:text="@string/message_print_packing_list" /> - + - + + + + + + + + + + + + @@ -107,72 +107,71 @@ - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_basket_lu.xml b/app/src/main/res/layout/dialog_basket_lu.xml new file mode 100644 index 00000000..637234c8 --- /dev/null +++ b/app/src/main/res/layout/dialog_basket_lu.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml b/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml new file mode 100644 index 00000000..68efafe6 --- /dev/null +++ b/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml b/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml new file mode 100644 index 00000000..8ce8e930 --- /dev/null +++ b/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_basket_lu__page1.xml b/app/src/main/res/layout/dialog_basket_lu__page1.xml new file mode 100644 index 00000000..f02bb45a --- /dev/null +++ b/app/src/main/res/layout/dialog_basket_lu__page1.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_basket_lu__page2.xml b/app/src/main/res/layout/dialog_basket_lu__page2.xml new file mode 100644 index 00000000..93d1e48f --- /dev/null +++ b/app/src/main/res/layout/dialog_basket_lu__page2.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_scan_or_create_lu.xml b/app/src/main/res/layout/dialog_scan_or_create_lu.xml index 5e09ce58..3d3d9e25 100644 --- a/app/src/main/res/layout/dialog_scan_or_create_lu.xml +++ b/app/src/main/res/layout/dialog_scan_or_create_lu.xml @@ -92,46 +92,90 @@ - + + + + + android:orientation="vertical" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - + android:gravity="center_horizontal" + android:layout_marginTop="12dp" + android:layout_marginBottom="12dp" + android:textSize="16sp" + android:textStyle="bold" + android:layout_gravity="center_horizontal" + style="@style/TextViewMaterial" + android:text="OPPURE" /> + + + + + - - - - + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/lista_bancali_list_model.xml b/app/src/main/res/layout/lista_bancali_list_model.xml index 17f9fabe..17babf85 100644 --- a/app/src/main/res/layout/lista_bancali_list_model.xml +++ b/app/src/main/res/layout/lista_bancali_list_model.xml @@ -64,8 +64,8 @@ android:layout_height="wrap_content"> + @@ -26,28 +27,54 @@ app:layout_constraintEnd_toStartOf="@+id/qta_box" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> - - - + android:orientation="horizontal"> + + + + - + + + + + style="@style/AppTheme.NewMaterial.Text" + tools:text="280.45\nCONF" /> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d964b564..7148499b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -238,6 +238,7 @@ Posizionamento Vuoi procedere con la stampa di una %s Crea nuova UL + Visualizza basket Apri UL Resi su ultime consegne Ultime consegne @@ -302,4 +303,7 @@ Distribuisci quantità Articolo Personalizzazione SaporiVeri + Basket + Usa + Indietro \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 074a3a91..e6cc977f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -167,7 +167,8 @@ No items to pick No documents to show No orders to dispatch - .no compatible orders found + . + no compatible orders found No items No LU poured into production @@ -241,6 +242,7 @@ Placement Do you want print a %s? Create new LU + View basket Open LU Returns on latest deliveries @@ -307,4 +309,7 @@ SaporVeri Customization Distribute quantity Article + Basket + Use + Back From 5fa7fa772da1f128dbf977009f11f3555b6a13cd Mon Sep 17 00:00:00 2001 From: ValerioC Date: Thu, 9 Jan 2020 11:33:09 +0100 Subject: [PATCH 2/6] Corretto calcolo qtaCnf in versamento diretto --- .../core/ChooseOrdsLavFromListAdapter.java | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java index cd6dee09..94d0cce0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java @@ -95,7 +95,8 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter ordiniSelezionati = getSelectedData(); @@ -103,23 +104,40 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter 0){ + usedCnf = BigDecimal.ONE; + } usedCol = usedCnf.multiply(mtbColr.getQtaCnf()).setScale(0,BigDecimal.ROUND_FLOOR); } else { usedCol = residuoCol.multiply(BigDecimal.valueOf(perc)).divide(BigDecimal.valueOf(100)).setScale(0, BigDecimal.ROUND_FLOOR); - usedCnf = usedCol.divide(mtbColr.getQtaCnf()).setScale(0, BigDecimal.ROUND_CEILING); + if (usedCol.compareTo(BigDecimal.ZERO) <= 0 && offsetCol.compareTo(BigDecimal.ZERO) > 0){ + usedCol = BigDecimal.ONE; + } + usedCnf = usedCol.divide(mtbColr.getQtaCnf()).setScale(3, BigDecimal.ROUND_FLOOR); } - offset = offset.subtract(usedCol); + offsetCol = offsetCol.subtract(usedCol); + offsetCnf = offsetCnf.subtract(usedCnf); c.setQtaCol(usedCol.floatValue()); c.setNumCnf(usedCnf.floatValue()); } - if (ordiniSelezionati.size() > 0 && offset.floatValue() != 0) { + if (ordiniSelezionati.size() > 0) { CheckableOrdineLavoro majorOrder = Stream.of(ordiniSelezionati).max((o1, o2) -> Integer.compare(o1.getItem().getOrdineLav().getHrNum(), o2.getItem().getOrdineLav().getHrNum())).get(); if (majorOrder == null) { majorOrder = ordiniSelezionati.get(0); } - majorOrder.setQtaCol(majorOrder.getQtaCol().get() + offset.floatValue()); + if (offsetCnf.floatValue() != 0 || offsetCol.floatValue() != 0){ + if ( SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.getMtbAart() != null && !mtbColr.getMtbAart().isFlagQtaCnfFissa())) { + majorOrder.setNumCnf(majorOrder.getNumCnf().get() + offsetCnf.floatValue()); + majorOrder.setQtaCol(majorOrder.getQtaCol().get() + offsetCol.floatValue()); + } else { + majorOrder.setQtaCol(majorOrder.getQtaCol().get() + offsetCol.floatValue()); + majorOrder.setNumCnf(majorOrder.getQtaCol().get() / mtbColr.getQtaCnf().floatValue()); + } + + + } } } From b2bfcbbc0699824d1babfb90a99e5e17973a87ef Mon Sep 17 00:00:00 2001 From: ValerioC Date: Thu, 9 Jan 2020 11:34:31 +0100 Subject: [PATCH 3/6] -> v 1.11.3 (122) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 40f2f587..f9c901ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 121 - def appVersionName = '1.11.2' + def appVersionCode = 122 + def appVersionName = '1.11.3' signingConfigs { release { From 5d151efc564e6c920d3b1b691f0e14de509a6f87 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 9 Jan 2020 12:08:18 +0100 Subject: [PATCH 4/6] Modificato filtro in Resi --- .../integrywmsnative/core/model/GtbAnag.java | 398 ++++++++++++++++++ .../DialogUltimeConsegneFiltroAvanzato.java | 41 +- .../UltimeConsegneClienteRESTConsumer.java | 23 +- .../UltimeConsegneClienteViewModel.java | 87 ++-- .../UltimiArriviFornitoreFragment.java | 109 +---- .../core/UltimiArriviFornitoreViewModel.java | 154 +++++++ ...ogUltimiArriviFornitoreFiltroAvanzato.java | 41 +- .../UltimiArriviFornitoreRESTConsumer.java | 30 +- .../fragment_ultimi_arrivi_fornitore.xml | 2 +- 9 files changed, 691 insertions(+), 194 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/GtbAnag.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/GtbAnag.java b/app/src/main/java/it/integry/integrywmsnative/core/model/GtbAnag.java new file mode 100644 index 00000000..f71ba1ea --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/GtbAnag.java @@ -0,0 +1,398 @@ +package it.integry.integrywmsnative.core.model; + +import java.math.BigDecimal; +import java.util.Date; + +public class GtbAnag { + + private String codAnag; + private String ragSoc; + private String indirizzo; + private String cap; + private String citta; + private String prov; + private String nazione; + private String telefono; + private String fax; + private String partIva; + private String codFisc; + private String note; + private String personaRif; + private String allegato; + private String eMail; + private String eMailPec; + private String flagPersonaFg; + private String sesso; + private String codCentroAzi; + private String codRuop; + private Date dataNascita; + private String luogoNascita; + private String provNascita; + private String nome; + private String ragSoc2; + private Integer classeMerito; + private Date dataIns; + private String numCell; + private String cciaa; + private String tipoAzienda; + private String cuuPa; + private String cognome; + private String diacod; + private BigDecimal lat; + private BigDecimal lng; + private String flagInformativa; + private String flagConsenso; + private String precode; + private Boolean insDestinatario; + + public String getCodAnag() { + return codAnag; + } + + public GtbAnag setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getRagSoc() { + return ragSoc; + } + + public GtbAnag setRagSoc(String ragSoc) { + this.ragSoc = ragSoc; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public GtbAnag setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public String getCap() { + return cap; + } + + public GtbAnag setCap(String cap) { + this.cap = cap; + return this; + } + + public String getCitta() { + return citta; + } + + public GtbAnag setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProv() { + return prov; + } + + public GtbAnag setProv(String prov) { + this.prov = prov; + return this; + } + + public String getNazione() { + return nazione; + } + + public GtbAnag setNazione(String nazione) { + this.nazione = nazione; + return this; + } + + public String getTelefono() { + return telefono; + } + + public GtbAnag setTelefono(String telefono) { + this.telefono = telefono; + return this; + } + + public String getFax() { + return fax; + } + + public GtbAnag setFax(String fax) { + this.fax = fax; + return this; + } + + public String getPartIva() { + return partIva; + } + + public GtbAnag setPartIva(String partIva) { + this.partIva = partIva; + return this; + } + + public String getCodFisc() { + return codFisc; + } + + public GtbAnag setCodFisc(String codFisc) { + this.codFisc = codFisc; + return this; + } + + public String getNote() { + return note; + } + + public GtbAnag setNote(String note) { + this.note = note; + return this; + } + + public String getPersonaRif() { + return personaRif; + } + + public GtbAnag setPersonaRif(String personaRif) { + this.personaRif = personaRif; + return this; + } + + public String getAllegato() { + return allegato; + } + + public GtbAnag setAllegato(String allegato) { + this.allegato = allegato; + return this; + } + + public String geteMail() { + return eMail; + } + + public GtbAnag seteMail(String eMail) { + this.eMail = eMail; + return this; + } + + public String geteMailPec() { + return eMailPec; + } + + public GtbAnag seteMailPec(String eMailPec) { + this.eMailPec = eMailPec; + return this; + } + + public String getFlagPersonaFg() { + return flagPersonaFg; + } + + public GtbAnag setFlagPersonaFg(String flagPersonaFg) { + this.flagPersonaFg = flagPersonaFg; + return this; + } + + public String getSesso() { + return sesso; + } + + public GtbAnag setSesso(String sesso) { + this.sesso = sesso; + return this; + } + + public String getCodCentroAzi() { + return codCentroAzi; + } + + public GtbAnag setCodCentroAzi(String codCentroAzi) { + this.codCentroAzi = codCentroAzi; + return this; + } + + public String getCodRuop() { + return codRuop; + } + + public GtbAnag setCodRuop(String codRuop) { + this.codRuop = codRuop; + return this; + } + + public Date getDataNascita() { + return dataNascita; + } + + public GtbAnag setDataNascita(Date dataNascita) { + this.dataNascita = dataNascita; + return this; + } + + public String getLuogoNascita() { + return luogoNascita; + } + + public GtbAnag setLuogoNascita(String luogoNascita) { + this.luogoNascita = luogoNascita; + return this; + } + + public String getProvNascita() { + return provNascita; + } + + public GtbAnag setProvNascita(String provNascita) { + this.provNascita = provNascita; + return this; + } + + public String getNome() { + return nome; + } + + public GtbAnag setNome(String nome) { + this.nome = nome; + return this; + } + + public String getRagSoc2() { + return ragSoc2; + } + + public GtbAnag setRagSoc2(String ragSoc2) { + this.ragSoc2 = ragSoc2; + return this; + } + + public Integer getClasseMerito() { + return classeMerito; + } + + public GtbAnag setClasseMerito(Integer classeMerito) { + this.classeMerito = classeMerito; + return this; + } + + public Date getDataIns() { + return dataIns; + } + + public GtbAnag setDataIns(Date dataIns) { + this.dataIns = dataIns; + return this; + } + + public String getNumCell() { + return numCell; + } + + public GtbAnag setNumCell(String numCell) { + this.numCell = numCell; + return this; + } + + public String getCciaa() { + return cciaa; + } + + public GtbAnag setCciaa(String cciaa) { + this.cciaa = cciaa; + return this; + } + + public String getTipoAzienda() { + return tipoAzienda; + } + + public GtbAnag setTipoAzienda(String tipoAzienda) { + this.tipoAzienda = tipoAzienda; + return this; + } + + public String getCuuPa() { + return cuuPa; + } + + public GtbAnag setCuuPa(String cuuPa) { + this.cuuPa = cuuPa; + return this; + } + + public String getCognome() { + return cognome; + } + + public GtbAnag setCognome(String cognome) { + this.cognome = cognome; + return this; + } + + public String getDiacod() { + return diacod; + } + + public GtbAnag setDiacod(String diacod) { + this.diacod = diacod; + return this; + } + + public BigDecimal getLat() { + return lat; + } + + public GtbAnag setLat(BigDecimal lat) { + this.lat = lat; + return this; + } + + public BigDecimal getLng() { + return lng; + } + + public GtbAnag setLng(BigDecimal lng) { + this.lng = lng; + return this; + } + + public String getFlagInformativa() { + return flagInformativa; + } + + public GtbAnag setFlagInformativa(String flagInformativa) { + this.flagInformativa = flagInformativa; + return this; + } + + public String getFlagConsenso() { + return flagConsenso; + } + + public GtbAnag setFlagConsenso(String flagConsenso) { + this.flagConsenso = flagConsenso; + return this; + } + + public String getPrecode() { + return precode; + } + + public GtbAnag setPrecode(String precode) { + this.precode = precode; + return this; + } + + public Boolean getInsDestinatario() { + return insDestinatario; + } + + public GtbAnag setInsDestinatario(Boolean insDestinatario) { + this.insDestinatario = insDestinatario; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzato.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzato.java index 8b3005e2..177f2a2d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzato.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzato.java @@ -21,7 +21,9 @@ import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityString; @@ -32,30 +34,30 @@ public class DialogUltimeConsegneFiltroAvanzato { private AlertDialog mAlert; private Context mContext; private DialogUltimeConsegneFiltroAvanzatoViewModel mBaseViewModel; - private RunnableArgss, DialogUltimeConsegneFiltroAvanzatoViewModel> mOnDismiss; + private RunnableArgs mOnDismiss; private ArrayAdapter arrayAdapterRagSoc; - private List mItems; - private List mFilteredItems; + private List mItems; + private List mFilteredItems; - private Predicate currentRagSocPredicate = null; - private Predicate currentDataDocPredicate = null; + private Predicate currentRagSocPredicate = null; + private Predicate currentDataDocPredicate = null; public static AlertDialog make(final Context context, - final List items, + final List items, DialogUltimeConsegneFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogUltimeConsegneFiltroAvanzatoViewModel> onDismiss) { + RunnableArgs onDismiss) { return new DialogUltimeConsegneFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert; } public DialogUltimeConsegneFiltroAvanzato(final Context context, - final List items, + final List items, DialogUltimeConsegneFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogUltimeConsegneFiltroAvanzatoViewModel> onDismiss) { + RunnableArgs onDismiss) { mContext = context; mItems = items; mBaseViewModel = baseViewModel; @@ -89,7 +91,7 @@ public class DialogUltimeConsegneFiltroAvanzato { mAlert.setOnDismissListener(dialogInterface -> { - if(mOnDismiss != null) mOnDismiss.run(mFilteredItems, viewModel); + if(mOnDismiss != null) mOnDismiss.run(viewModel); }); refreshList(); @@ -144,26 +146,13 @@ public class DialogUltimeConsegneFiltroAvanzato { refreshList(); }); - - BindableString.resetListeners(viewModel.dataDoc); - BindableString.registerListener(viewModel.dataDoc, value -> { - if (UtilityString.isNullOrEmpty(value)) currentDataDocPredicate = null; - else { - currentDataDocPredicate = o -> o.getDataDocD().equals(viewModel.dataDocDate); - } - - refreshList(); - - arrayAdapterRagSoc.clear(); - arrayAdapterRagSoc.addAll(getAvailableRagSocs(true)); - }); } private List getAvailableRagSocs(boolean skipRecalc) { if(currentDataDocPredicate == null){ mFilteredItems = mItems; } else if(!skipRecalc){ - Stream tmpStream = Stream.of(mItems) + Stream tmpStream = Stream.of(mItems) .filter(x -> (currentDataDocPredicate == null || (currentDataDocPredicate.test(x))) ); @@ -171,7 +160,7 @@ public class DialogUltimeConsegneFiltroAvanzato { mFilteredItems = tmpStream.toList(); } - return Stream.of(mFilteredItems).map(DocumentoResoDTO::getRagSoc).distinct().withoutNulls().toList(); + return Stream.of(mFilteredItems).map(x -> x.getCodAnag() + " - " + x.getRagSoc()).distinct().withoutNulls().toList(); } @@ -180,7 +169,7 @@ public class DialogUltimeConsegneFiltroAvanzato { if(currentRagSocPredicate == null && currentDataDocPredicate == null){ mFilteredItems = mItems; } else { - Stream tmpStream = Stream.of(mItems) + Stream tmpStream = Stream.of(mItems) .filter(x -> (currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) && (currentDataDocPredicate== null || (currentDataDocPredicate.test(x))) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java index 96575640..85fdde8b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; @@ -22,7 +23,27 @@ import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; public class UltimeConsegneClienteRESTConsumer { - public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, int limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { + public static void getAvailableCodAnagClienti(RunnableArgs> onComplete, RunnableArgs onFailed) { + String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " + + "FROM gtb_anag " + + "INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " + + "WHERE flag_stato = 'A'"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { String sql = "SELECT consegne.*, " + " rag_soc," + diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java index c0afc93a..3a36e6db 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java @@ -7,12 +7,14 @@ import android.view.View; import androidx.recyclerview.widget.LinearLayoutManager; +import com.annimon.stream.Optional; import com.annimon.stream.Stream; import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; @@ -31,52 +33,36 @@ public class UltimeConsegneClienteViewModel { private List mItems; private List mRenderedItems = new ArrayList<>(); + private List mAvailableGtbAnags = null; + private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel; public UltimeConsegneClienteViewModel(Context context, FragmentMainUltimeConsegneClienteBinding binding) { this.mContext = context; this.mBinding = binding; - this.initList(); - this.mBinding.mainFab.hide(); this.mBinding.mainFab.setOnClickListener(v -> { dispatchConsegne(); }); + + openFilterDialog(); } public void openFilterDialog() { - DialogUltimeConsegneFiltroAvanzato.make(mContext, mItems, mAppliedFilterViewModel, (filteredOrderList, filter) -> { - mAppliedFilterViewModel = filter; - - if(filteredOrderList != null){ - - refreshItems(filteredOrderList); - } - - }).show(); - } - - private void initList() { - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti( - SettingsManager.i().userSession.depo.getCodMdep(), - null, - null, - 100, - 365, - consegne -> { - this.mItems = consegne; + UltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> { + mAvailableGtbAnags = gtbAnags; + progressDialog.dismiss(); - this.initDataAdapter(consegne); - refreshItems(consegne); - - progressDialog.dismiss(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); + DialogUltimeConsegneFiltroAvanzato.make(mContext, gtbAnags, mAppliedFilterViewModel, (filter) -> { + mAppliedFilterViewModel = filter; + refreshItems(); + }).show(); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + }); } private void initDataAdapter(ArrayList dataset) { @@ -90,12 +76,43 @@ public class UltimeConsegneClienteViewModel { } - private void refreshItems(List items){ - mBinding.emptyView.setVisibility((items != null && items.size() > 0) ? View.GONE : View.VISIBLE); + private void refreshItems(){ - mRenderedItems.clear(); - if(items != null) mRenderedItems.addAll(items); - mAdapter.updateItems(mRenderedItems); + Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; + String currentCodAnagFilter = null; + + Optional singleGtbAnag = Stream.of(mAvailableGtbAnags) + .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) + .findSingle(); + + if(singleGtbAnag.isPresent()) { + currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); + } + + UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti( + SettingsManager.i().userSession.depo.getCodMdep(), + currentCodAnagFilter, + null, + null, + 365, + consegne -> { + + this.mItems = consegne; + + this.initDataAdapter(consegne); + mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE); + + mRenderedItems.clear(); + if(this.mItems != null) mRenderedItems.addAll(this.mItems); + mAdapter.updateItems(mRenderedItems); + + progressDialog.dismiss(); + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + }); } private void onSingleSelectionChanged(DocumentoResoDTO dto) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java index edcb109c..7c608c24 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java @@ -14,6 +14,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.annimon.stream.Optional; import com.annimon.stream.Stream; import java.util.ArrayList; @@ -21,6 +22,7 @@ import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; +import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; @@ -30,6 +32,7 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; import it.integry.integrywmsnative.ui.ElevatedToolbar; @@ -42,14 +45,7 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr private Runnable mOnPreDestroy; private ElevatedToolbar mToolbar; - private FragmentUltimiArriviFornitoreBinding mBinding; - - private List mItems; - private List mRenderedItems = new ArrayList<>(); - - private UltimiArriviFornitoreListAdapter mAdapter; - - private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; + private UltimiArriviFornitoreViewModel mViewModel; public UltimiArriviFornitoreFragment() { // Required empty public constructor @@ -68,14 +64,14 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false); + FragmentUltimiArriviFornitoreBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false); - mBinding.setViewmodel(this); + mViewModel = new UltimiArriviFornitoreViewModel(getActivity(), mBinding); + + mBinding.setViewmodel(mViewModel); mToolbar.setRecyclerView(mBinding.recyclerView); - this.initView(); - // Inflate the layout for this fragment return mBinding.getRoot(); } @@ -104,98 +100,11 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr - private void initView() { - this.initList(); - - this.mBinding.mainFab.hide(); - this.mBinding.mainFab.setOnClickListener(v -> { - dispatchConsegne(); - }); - - } - - private void initList() { - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(getActivity()); - - UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori( - SettingsManager.i().userSession.depo.getCodMdep(), - null, - null, - consegne -> { - this.mItems = consegne; - - this.initDataAdapter(consegne); - refreshItems(consegne); - - progressDialog.dismiss(); - }, ex -> { - UtilityExceptions.defaultException(getActivity(), ex, progressDialog); - }); - } - - - - private void initDataAdapter(ArrayList dataset) { - mAdapter = new UltimiArriviFornitoreListAdapter(getActivity(), dataset); - mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); - - mBinding.recyclerView.setHasFixedSize(true); - mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - mBinding.recyclerView.setAdapter(mAdapter); - mBinding.fastscroll.setRecyclerView(mBinding.recyclerView); - - } - - - private void onSingleSelectionChanged(DocumentoResoDTO dto) { - List selectedOrders = getSelectedItems(); - - if(dto.isSelected()) { - Stream.of(selectedOrders) - .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) - .forEach(x -> x.setSelected(false)); - } - - if(selectedOrders != null && selectedOrders.size() > 0) { - mBinding.mainFab.show(); - } - else { - mBinding.mainFab.hide(); - } - } - - private List getSelectedItems() { - return Stream.of(this.mItems) - .filter(DocumentoResoDTO::isSelected) - .toList(); - } - - - private void dispatchConsegne() { - List selectedConsegne = getSelectedItems(); - - PickingResiActivity.startActivity(getActivity(), getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); - } - @Override public void onFilterClick() { - DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), mItems, mAppliedFilterViewModel, (filteredOrderList, filter) -> { - mAppliedFilterViewModel = filter; - - if(filteredOrderList != null){ - - refreshItems(filteredOrderList); - } - - }).show(); + mViewModel.openFilterDialog(); } - private void refreshItems(List items){ - mBinding.emptyView.setVisibility((items != null && items.size() > 0) ? View.GONE : View.VISIBLE); - mRenderedItems.clear(); - if(items != null) mRenderedItems.addAll(items); - mAdapter.updateItems(mRenderedItems); - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java new file mode 100644 index 00000000..edd936b9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java @@ -0,0 +1,154 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core; + +import android.app.Dialog; +import android.content.Context; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; +import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; + +public class UltimiArriviFornitoreViewModel { + + private Context mContext; + private FragmentUltimiArriviFornitoreBinding mBinding; + + private List mItems; + private List mRenderedItems = new ArrayList<>(); + + private List mAvailableGtbAnags = null; + + private UltimiArriviFornitoreListAdapter mAdapter; + + private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; + + public UltimiArriviFornitoreViewModel(Context context, FragmentUltimiArriviFornitoreBinding binding) { + this.mContext = context; + this.mBinding = binding; + + this.mBinding.mainFab.hide(); + this.mBinding.mainFab.setOnClickListener(v -> { + dispatchConsegne(); + }); + + openFilterDialog(); + } + + + + private void initDataAdapter(ArrayList dataset) { + mAdapter = new UltimiArriviFornitoreListAdapter(mContext, dataset); + mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); + + mBinding.recyclerView.setHasFixedSize(true); + mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); + mBinding.recyclerView.setAdapter(mAdapter); + mBinding.fastscroll.setRecyclerView(mBinding.recyclerView); + + } + + + public void openFilterDialog() { + Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + UltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> { + mAvailableGtbAnags = gtbAnags; + progressDialog.dismiss(); + + DialogUltimiArriviFornitoreFiltroAvanzato.make(mContext, mAvailableGtbAnags, mAppliedFilterViewModel, (filter) -> { + mAppliedFilterViewModel = filter; + refreshItems(); + }).show(); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + }); + } + + + private void dispatchConsegne() { + List selectedConsegne = getSelectedItems(); + + PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); + } + + private List getSelectedItems() { + return Stream.of(this.mItems) + .filter(DocumentoResoDTO::isSelected) + .toList(); + } + + + private void refreshItems(){ + + Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; + String currentCodAnagFilter = null; + + Optional singleGtbAnag = Stream.of(mAvailableGtbAnags) + .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) + .findSingle(); + + if(singleGtbAnag.isPresent()) { + currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); + } + + + UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori( + SettingsManager.i().userSession.depo.getCodMdep(), + currentCodAnagFilter, + null, + null, + 365, + consegne -> { + this.mItems = consegne; + + this.initDataAdapter(consegne); + + mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE); + + mRenderedItems.clear(); + if(this.mItems != null) mRenderedItems.addAll(this.mItems); + mAdapter.updateItems(mRenderedItems); + + progressDialog.dismiss(); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + }); + + + } + + + private void onSingleSelectionChanged(DocumentoResoDTO dto) { + List selectedOrders = getSelectedItems(); + + if(dto.isSelected()) { + Stream.of(selectedOrders) + .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) + .forEach(x -> x.setSelected(false)); + } + + if(selectedOrders != null && selectedOrders.size() > 0) { + mBinding.mainFab.show(); + } + else { + mBinding.mainFab.hide(); + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java index d0f4a6b5..55756808 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java @@ -21,7 +21,9 @@ import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityString; @@ -34,29 +36,29 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato { private AlertDialog mAlert; private Context mContext; private DialogUltimiArriviFiltroAvanzatoViewModel mBaseViewModel; - private RunnableArgss, DialogUltimiArriviFiltroAvanzatoViewModel> mOnDismiss; + private RunnableArgs mOnDismiss; private ArrayAdapter arrayAdapterRagSoc; - private List mItems; - private List mFilteredItems; + private List mItems; + private List mFilteredItems; - private Predicate currentRagSocPredicate = null; - private Predicate currentDataDocPredicate = null; + private Predicate currentRagSocPredicate = null; + private Predicate currentDataDocPredicate = null; public static AlertDialog make(final Context context, - final List items, + final List items, DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) { + RunnableArgs onDismiss) { return new DialogUltimiArriviFornitoreFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert; } public DialogUltimiArriviFornitoreFiltroAvanzato(final Context context, - final List items, + final List items, DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) { + RunnableArgs onDismiss) { mContext = context; mItems = items; mBaseViewModel = baseViewModel; @@ -90,7 +92,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato { mAlert.setOnDismissListener(dialogInterface -> { - if(mOnDismiss != null) mOnDismiss.run(mFilteredItems, viewModel); + if(mOnDismiss != null) mOnDismiss.run(viewModel); }); refreshList(); @@ -145,26 +147,13 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato { refreshList(); }); - - BindableString.resetListeners(viewModel.dataDoc); - BindableString.registerListener(viewModel.dataDoc, value -> { - if (UtilityString.isNullOrEmpty(value)) currentDataDocPredicate = null; - else { - currentDataDocPredicate = o -> o.getDataDocD().equals(viewModel.dataDocDate); - } - - refreshList(); - - arrayAdapterRagSoc.clear(); - arrayAdapterRagSoc.addAll(getAvailableRagSocs(true)); - }); } private List getAvailableRagSocs(boolean skipRecalc) { if(currentDataDocPredicate == null){ mFilteredItems = mItems; } else if(!skipRecalc){ - Stream tmpStream = Stream.of(mItems) + Stream tmpStream = Stream.of(mItems) .filter(x -> (currentDataDocPredicate == null || (currentDataDocPredicate.test(x))) ); @@ -172,7 +161,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato { mFilteredItems = tmpStream.toList(); } - return Stream.of(mFilteredItems).map(DocumentoResoDTO::getRagSoc).distinct().withoutNulls().toList(); + return Stream.of(mFilteredItems).map(x -> x.getCodAnag() + " - " + x.getRagSoc()).distinct().withoutNulls().toList(); } @@ -181,7 +170,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato { if(currentRagSocPredicate == null && currentDataDocPredicate == null){ mFilteredItems = mItems; } else { - Stream tmpStream = Stream.of(mItems) + Stream tmpStream = Stream.of(mItems) .filter(x -> (currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) && (currentDataDocPredicate== null || (currentDataDocPredicate.test(x))) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java index 0abbf8be..5141ca40 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java @@ -4,7 +4,9 @@ import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.List; +import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -13,19 +15,37 @@ import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; public class UltimiArriviFornitoreRESTConsumer { - public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, RunnableArgs> onComplete, RunnableArgs onFailed) { + public static void getAvailableCodAnagFornitori(RunnableArgs> onComplete, RunnableArgs onFailed) { + String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " + + "FROM gtb_anag " + + "INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " + + "WHERE flag_stato = 'A'"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { - int numberOfConsegnePerForn = 100; - int numberOfDayToAnalyze = 365; String sql = "SELECT consegne.*, " + " rag_soc " + "FROM WMS_GetUltimeConsegneFornitori(" + - UtilityDB.valueToString(numberOfConsegnePerForn) + ", " + + UtilityDB.valueToString(limitConsegnePerCli) + ", " + UtilityDB.valueToString(codAnag) + ", " + UtilityDB.valueToString(codMart) + ", " + UtilityDB.valueToString(codMdep) + ", " + - UtilityDB.valueToString(numberOfDayToAnalyze) + ") consegne " + + UtilityDB.valueToString(limitDays) + ") consegne " + "LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " + "ORDER BY rag_soc, " + " counter_consegna "; diff --git a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml index e99b9c24..a5f6d06a 100644 --- a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml +++ b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml @@ -6,7 +6,7 @@ + type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel" /> From 1ad9dc88397238beb5687c92682c6759221ee29c Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 9 Jan 2020 15:39:33 +0100 Subject: [PATCH 5/6] =?UTF-8?q?Disabilitato=20pulsante=20"Non=20visualizza?= =?UTF-8?q?re=20pi=C3=B9=20aggiornamenti"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../it/integry/integrywmsnative/core/update/UpdatesManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java index bca2182f..c3d4f623 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java @@ -44,8 +44,8 @@ public class UpdatesManager { .setDisplay(Display.DIALOG) .setUpdateFrom(UpdateFrom.JSON) .setUpdateJSON(currentVersionUrl) + .setButtonDoNotShowAgain(null) .setButtonUpdateClickListener((dialog, which) -> { - installAPK(context, currentDownloadUrl); }); appUpdater.start(); From 1a13e3e2da2e4d2da630bdc79285e888dc47b815 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 9 Jan 2020 18:57:58 +0100 Subject: [PATCH 6/6] -> v1.11.4 (123) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f9c901ae..a9d66d66 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 122 - def appVersionName = '1.11.3' + def appVersionCode = 123 + def appVersionName = '1.11.4' signingConfigs { release {