diff --git a/app/build.gradle b/app/build.gradle index 40c5161e..c517d0fe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 243 - def appVersionName = '1.19.2' + def appVersionCode = 245 + def appVersionName = '1.19.4' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 2f7859b2..5a644809 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -15,6 +15,7 @@ import it.integry.integrywmsnative.core.menu.MenuService; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; @@ -85,6 +86,12 @@ public class MainApplicationModule { return new ArticoloRESTConsumer(systemRESTConsumer); } + @Provides + @Singleton + CommessaRESTConsumer provideCommessaRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + return new CommessaRESTConsumer(systemRESTConsumer); + } + @Provides @Singleton DepositoRESTConsumer provideDepositoRESTConsumer(EntityRESTConsumer entityRESTConsumer, SystemRESTConsumer systemRESTConsumer) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java index 43d0db37..7aade829 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java @@ -106,6 +106,9 @@ public class DtbOrdt extends EntityBase { private String noteConferma; private String codJflav; + public DtbOrdt() { + this.type = "dtb_ordt"; + } public String getDataOrd() { return dataOrd; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/JtbComt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/JtbComt.java new file mode 100644 index 00000000..444ddfb4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/JtbComt.java @@ -0,0 +1,49 @@ +package it.integry.integrywmsnative.core.model; + +public class JtbComt extends EntityBase { + + private String codJcom; + private String codJfas; + private String codJflav; + private String descrizione; + + public JtbComt() { + this.type = "jtb_comt"; + } + + public String getCodJcom() { + return codJcom; + } + + public JtbComt setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public JtbComt setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getCodJflav() { + return codJflav; + } + + public JtbComt setCodJflav(String codJflav) { + this.codJflav = codJflav; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public JtbComt setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/CommessaRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/CommessaRESTConsumer.java new file mode 100644 index 00000000..8b70a29e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/CommessaRESTConsumer.java @@ -0,0 +1,43 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.JtbComt; +import it.integry.integrywmsnative.core.utility.UtilityQuery; + +@Singleton +public class CommessaRESTConsumer extends _BaseRESTConsumer { + + private final SystemRESTConsumer systemRESTConsumer; + + public CommessaRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + this.systemRESTConsumer = systemRESTConsumer; + } + + + public void getJtbComts(List itemsToFind, RunnableArgs> onComplete, RunnableArgs onFailed) { + var whereCondMap = Stream.of(itemsToFind) + .map(x -> { + HashMap vars = new HashMap<>(); + vars.put("cod_jcom", x); + return vars; + }) + .toList(); + + var whereCond = " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondMap); + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + this.systemRESTConsumer.processSql("SELECT * FROM jtb_comt " + whereCond, typeOfObjectsList, onComplete, onFailed); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index 1c4be179..a2f249c1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -53,6 +53,7 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable private final List mOnPreDestroyList = new ArrayList<>(); private ElevatedToolbar mToolbar; + private String mTextFilter; private FragmentMainAccettazioneBinding mBinding; private final ObservableArrayList mOrdiniInevasiMutableData = new ObservableArrayList<>(); @@ -119,7 +120,9 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable private void initRecyclerView() { - this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList); + this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), x->{ + this.refreshList(getFilteredList(mTextFilter)); + }); MainListAccettazioneAdapter adapter = new MainListAccettazioneAdapter(getActivity(), mOrdiniInevasiMutableData) @@ -225,20 +228,25 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable @Override public boolean onQueryTextChange(String newText) { + List originalList = this.mViewModel.getOrderList().getValue(); + if(originalList == null || originalList.isEmpty()) return false; + mTextFilter = newText; + List filteredOrders = getFilteredList(newText); + + refreshList(filteredOrders); + return true; + } + + private List getFilteredList(String newText) { List filteredOrders = new ArrayList<>(); List originalList = this.mViewModel.getOrderList().getValue(); - - if(originalList == null || originalList.isEmpty()) return false; - + if(originalList == null || originalList.isEmpty() || newText == null) return originalList; for(int i = 0; i < originalList.size(); i++){ - if(originalList.get(i).getRagSocOrd().toLowerCase().contains(newText.toLowerCase())){ filteredOrders.add(originalList.get(i)); } } - - refreshList(filteredOrders); - return true; + return filteredOrders; } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index d29e096d..c1198afa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -84,6 +84,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF @Inject OrdiniUscitaElencoViewModel mViewModel; + private final VenditaFiltroOrdiniViewModel mAppliedFilterViewModel = new VenditaFiltroOrdiniViewModel(); + private FragmentMainOrdiniUscitaBinding mBindings = null; private final ObservableArrayList mOrdiniInevasiMutableData = new ObservableArrayList<>(); @@ -188,6 +190,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.onLoadingStarted(); this.initMtbGrupsCache(this::onLoadingEnded); + mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); + this.refreshList(null); }); @@ -696,7 +700,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF if (filteredList != null) { tmpList = filteredList; } else if (mAppliedFilterViewModel != null) { - mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); mAppliedFilterViewModel.applyAllTests(); tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); } else { @@ -825,22 +828,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF } - private final VenditaFiltroOrdiniViewModel mAppliedFilterViewModel = new VenditaFiltroOrdiniViewModel(); - -// @Override -// public void onFilterClick() { -// DialogVenditaFiltroAvanzatoView.make( -// getActivity(), -// this.mViewModel.getOrderList().getValue(), -// mAppliedFilterViewModel, -// -// filter -> { -// -// mAppliedFilterViewModel = filter; -// refreshList(null); -// -// }).show(); -// } @Override public void addOnPreDestroy(Runnable onPreDestroy) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAgenteLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAgenteLayoutView.java index e1416ecd..ea3ff43d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAgenteLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAgenteLayoutView.java @@ -73,10 +73,18 @@ public class FilterAgenteLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllAgenti()) .filter(x -> !hiddenAgenti.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedAgenti.contains(x))) - .setEnabled(new BindableBoolean(availableAgenti.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedAgenti.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedAgenti.add(x); + else preSelectedAgenti.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableAgenti.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAutomezzoLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAutomezzoLayoutView.java index 74ba99be..5d4ff28e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAutomezzoLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterAutomezzoLayoutView.java @@ -72,10 +72,18 @@ public class FilterAutomezzoLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllAutomezzi()) .filter(x -> !hiddenAutomezzi.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedAutomezzi.contains(x))) - .setEnabled(new BindableBoolean(availableAutomezzi.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedAutomezzi.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedAutomezzi.add(x); + else preSelectedAutomezzi.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableAutomezzi.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterClienteLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterClienteLayoutView.java index 883b0ded..dfe6df91 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterClienteLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterClienteLayoutView.java @@ -72,10 +72,18 @@ public class FilterClienteLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllClienti()) .filter(x -> !hiddenClienti.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedClienti.contains(x))) - .setEnabled(new BindableBoolean(availableClienti.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedClienti.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedClienti.add(x); + else preSelectedClienti.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableClienti.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterDepositoLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterDepositoLayoutView.java index 6e22d61c..d3e4a063 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterDepositoLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterDepositoLayoutView.java @@ -88,10 +88,18 @@ public class FilterDepositoLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllCodMdeps()) .filter(x -> !hiddenDepos.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedCodMdeps.contains(x))) - .setEnabled(new BindableBoolean(availableCodMdeps.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedCodMdeps.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedCodMdeps.add(x); + else preSelectedCodMdeps.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableCodMdeps.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterGruppoMercLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterGruppoMercLayoutView.java index d2645667..32e5d1ae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterGruppoMercLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterGruppoMercLayoutView.java @@ -76,10 +76,18 @@ public class FilterGruppoMercLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllGroupMerc()) .filter(x -> !hiddenGroupMerc.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedGroupMerc.contains(x))) - .setEnabled(new BindableBoolean(availableGroupMerc.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedGroupMerc.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedGroupMerc.add(x); + else preSelectedGroupMerc.remove(x); + }); + + return new ListModel() + .setSelected(new BindableBoolean(preSelectedGroupMerc.contains(x))) + .setEnabled(new BindableBoolean(availableGroupMerc.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterNumeroOrdineLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterNumeroOrdineLayoutView.java index 31418c67..aaf6c17e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterNumeroOrdineLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterNumeroOrdineLayoutView.java @@ -73,10 +73,18 @@ public class FilterNumeroOrdineLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllNumOrds()) .filter(x -> !hiddenNumOrds.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedNumOrds.contains(x))) - .setEnabled(new BindableBoolean(availableNumOrds.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedNumOrds.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if(selectedBoolean.get()) preSelectedNumOrds.add(x); + else preSelectedNumOrds.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableNumOrds.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterPaeseLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterPaeseLayoutView.java index 1a61c331..0d82e428 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterPaeseLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterPaeseLayoutView.java @@ -73,10 +73,18 @@ public class FilterPaeseLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllPaesi()) .filter(x -> !hiddenPaesi.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedPaesi.contains(x))) - .setEnabled(new BindableBoolean(availablePaesi.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedPaesi.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedPaesi.add(x); + else preSelectedPaesi.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availablePaesi.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterTermConsLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterTermConsLayoutView.java index 2a581d63..54dae4ed 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterTermConsLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterTermConsLayoutView.java @@ -73,10 +73,18 @@ public class FilterTermConsLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllTermCons()) .filter(x -> !hiddenSelectedTermCons.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedTermCons.contains(x))) - .setEnabled(new BindableBoolean(availableTermCons.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedTermCons.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedTermCons.add(x); + else preSelectedTermCons.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableTermCons.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterVettoreLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterVettoreLayoutView.java index 399f682f..afdc1d6e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterVettoreLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterVettoreLayoutView.java @@ -74,10 +74,18 @@ public class FilterVettoreLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllVettori()) .filter(x -> !hiddenSelectedVettori.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedVettori.contains(x))) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedVettori.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedVettori.add(x); + else preSelectedVettori.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) .setEnabled(new BindableBoolean(availableVettori.contains(x))) - .setOriginalModel(x)) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterViaggioLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterViaggioLayoutView.java index 4a6d5933..da7d9ffc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterViaggioLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/FilterViaggioLayoutView.java @@ -73,10 +73,18 @@ public class FilterViaggioLayoutView extends FilterLayoutView { listModel.setValue(Stream.of(getAllIDViaggio()) .filter(x -> !hiddenIDViaggio.contains(x)) - .map(x -> new ListModel() - .setSelected(new BindableBoolean(preSelectedIDViaggio.contains(x))) - .setEnabled(new BindableBoolean(availableIDViaggio.contains(x))) - .setOriginalModel(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedIDViaggio.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedIDViaggio.add(x); + else preSelectedIDViaggio.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableIDViaggio.contains(x))) + .setOriginalModel(x); + }) .sorted(c) .toList()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java index a2968891..ecd3475f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java @@ -31,7 +31,7 @@ public class OrdiniUscitaElencoRESTConsumer extends _BaseRESTConsumer { @Override public void onResponse(Call>> call, Response>> response) { analyzeAnswer(response, "getOrdiniFromCommessaCollo", (m) -> { - onComplete.run(response.body().getEntity()); + onComplete.run(response.body().getDto()); }, onFailed); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoBindings.java new file mode 100644 index 00000000..ee2fb0e6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoBindings.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione; + +import java.util.HashMap; + +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; + +public class ProdOrdineProduzioneElencoBindings { + + public static final int NUM_ORD_FILTER_ID = 0; + public static final int COMMESSA_FILTER_ID = 1; + + public static final HashMap AVAILABLE_FILTERS = new HashMap<>() {{ + + put(NUM_ORD_FILTER_ID, new FilterChipDTO() + .setID(NUM_ORD_FILTER_ID) + .setFilterChipText("Numero ordine") + .setFilterLayoutView(new FilterNumeroOrdineLayoutView())); + + put(COMMESSA_FILTER_ID, new FilterChipDTO() + .setID(COMMESSA_FILTER_ID) + .setFilterChipText("Commessa") + .setFilterLayoutView(new FilterCommessaLayoutView())); + + }}; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java index 09875676..df2659e2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -19,6 +19,7 @@ import com.annimon.stream.Stream; import java.math.BigDecimal; import java.util.List; +import java.util.Objects; import javax.inject.Inject; @@ -27,9 +28,11 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.BaseFragment; -import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; +import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.model.JtbComt; +import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; @@ -37,31 +40,38 @@ import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElenc import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoView; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoViewModel; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.OrdineProduzioneFilterViewModel; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.OrdineProduzioneListAdapter; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; /** * A simple {@link Fragment} subclass. */ -public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment { +public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment { public BindableBoolean fabVisible = new BindableBoolean(false); @Inject ProdOrdineProduzioneElencoViewModel mViewModel; - private FragmentProdOrdineProduzioneElencoBinding mBinding; + @Inject + CommessaRESTConsumer mCommessaRESTConsumer; + + private FragmentProdOrdineProduzioneElencoBinding mBindings; private final ObservableArrayList mOrdiniInevasiMutableData = new ObservableArrayList<>(); private AppCompatTextView mAppBarTitle; - private DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel; - + // private DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel; + private OrdineProduzioneFilterViewModel mFilterViewModel = new OrdineProduzioneFilterViewModel(); + private List jtbComtCache; public ProdOrdineProduzioneElencoFragment() { // Required empty public constructor @@ -84,7 +94,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false); + mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false); MainApplication.appComponent .prodOrdineProduzioneElencoComponent() @@ -93,12 +103,13 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements mViewModel.setListener(this); - mBinding.setLifecycleOwner(this); - mBinding.setView(this); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); this.initRecyclerView(); + this.initFilters(); - return mBinding.getRoot(); + return mBindings.getRoot(); } @@ -119,9 +130,16 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements } private void initRecyclerView() { - this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList); + this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), v -> { + this.onLoadingStarted(); + this.initJtbComtCache(this::onLoadingEnded); - mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mFilterViewModel.init(mViewModel.getOrderList().getValue()); + + this.refreshList(null); + }); + + mBindings.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); OrdineProduzioneListAdapter adapter = new OrdineProduzioneListAdapter(getActivity(), mOrdiniInevasiMutableData) .setOnGroupItemClicked(x -> { @@ -146,23 +164,129 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements .anyMatch(y -> y.getSelectedObservable().get())); }); - adapter.setEmptyView(mBinding.ordiniProduzioneEmptyView); + adapter.setEmptyView(mBindings.ordiniProduzioneEmptyView); - mBinding.ordineProduzioneMainList.setAdapter(adapter); + mBindings.ordineProduzioneMainList.setAdapter(adapter); + +// mToolbar.setRecyclerView(mBindings.ordineProduzioneMainList); + } + + private void initFilters() { + var onPredicateChanged = new OnGeneralChangedCallback() { + @Override + public void run() { + refreshList(null); + } + }; + + mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged); + mFilterViewModel.getCurrentCommPredicate().addOnPropertyChangedCallback(onPredicateChanged); + + + for (var filterChipDTO : ProdOrdineProduzioneElencoBindings.AVAILABLE_FILTERS.entrySet()) { + + FilterChipView filterChipView = new FilterChipView( + requireActivity(), + filterChipDTO.getValue().getFilterChipText(), + v -> initBottomSheetDialogFilter(filterChipDTO.getValue())); + + switch (filterChipDTO.getKey()) { + case ProdOrdineProduzioneElencoBindings.COMMESSA_FILTER_ID: + mFilterViewModel.getCurrentCommPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mFilterViewModel.getCurrentCommPredicate().get() == null) { + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentCommPredicate().set(null)); + break; + case ProdOrdineProduzioneElencoBindings.NUM_ORD_FILTER_ID: + mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mFilterViewModel.getCurrentNumOrdsPredicate().get() == null) { + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentNumOrdsPredicate().set(null)); + break; + } + this.mBindings.filterChipsGroup.addView(filterChipView); + } + } + + private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) { + filterChipDTO + .getFilterLayoutView() + .setFilterName(filterChipDTO.getFilterChipText()) + .setContext(requireActivity()); + + var filterLayoutView = filterChipDTO + .getFilterLayoutView(); + + switch (filterChipDTO.getID()) { + case ProdOrdineProduzioneElencoBindings.COMMESSA_FILTER_ID: + ((FilterCommessaLayoutView) filterLayoutView) + .setAllCommesse(mFilterViewModel.getAllCommesse(jtbComtCache)) + .setAvailableCommesse(mFilterViewModel.getAvailableCommesse(jtbComtCache)) + .setOnFilterApplied(mFilterViewModel::setCommessaFilter) + .setPreSelectedCommesse(Stream.of(Objects.requireNonNull(mViewModel.getOrderList().getValue())) + .filter(mFilterViewModel.getCurrentCommPredicate().get() == null ? + x -> false : + mFilterViewModel.getCurrentCommPredicate().get()) + .map(x -> Stream.of(jtbComtCache).filter(y -> x.getCodJcom().equalsIgnoreCase(y.getCodJcom())).findFirst().get()) + .toList()); + break; + case ProdOrdineProduzioneElencoBindings.NUM_ORD_FILTER_ID: + ((FilterNumeroOrdineLayoutView) filterLayoutView) + .setAllNumOrds(mFilterViewModel.getAllNumOrds()) + .setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds()) + .setOnFilterApplied(mFilterViewModel::setNumOrdFilter) + .setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrderList().getValue())) + .filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ? + x -> false : + mFilterViewModel.getCurrentNumOrdsPredicate().get()) + .map(OrdineAccettazioneInevasoDTO::getNumero) + .toList()); + break; + } + + filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG"); - mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList); } private void refreshList(List filteredList) { List tmpList = null; - if(filteredList != null) { + if (filteredList != null) { tmpList = filteredList; - } else if (mAppliedFilterViewModel != null) { - mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); - mAppliedFilterViewModel.applyAllTests(); - tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); + } else if (mFilterViewModel != null) { + mFilterViewModel.applyAllTests(); + tmpList = mFilterViewModel.getMutableFilteredOrderList().getValue(); } else { tmpList = mViewModel.getOrderList().getValue(); } @@ -210,20 +334,20 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements this.mViewModel.loadPicking(selectedOrders); } - @Override - public void onFilterClick() { - DialogOrdineProduzioneFiltroAvanzatoView.make( - getActivity(), - this.mViewModel.getOrderList().getValue(), - mAppliedFilterViewModel, - - filter -> { - - mAppliedFilterViewModel = filter; - refreshList(null); - - }).show(); - } +// @Override +// public void onFilterClick() { +// DialogOrdineProduzioneFiltroAvanzatoView.make( +// getActivity(), +// this.mViewModel.getOrderList().getValue(), +// mAppliedFilterViewModel, +// +// filter -> { +// +// mAppliedFilterViewModel = filter; +// refreshList(null); +// +// }).show(); +// } @Override @@ -256,4 +380,18 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements }).show(getActivity().getSupportFragmentManager(), "tag"); } + + + + + private void initJtbComtCache(Runnable onComplete) { + var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue())) + .flatMap(x -> Stream.of(x.getCodJcom())) + .toList(); + + this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> { + this.jtbComtCache = jtbComtCache; + onComplete.run(); + }, this::onError); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/FilterCommessaLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/FilterCommessaLayoutView.java new file mode 100644 index 00000000..5631ac47 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/FilterCommessaLayoutView.java @@ -0,0 +1,175 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.ComparatorCompat; +import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.JtbComt; +import it.integry.integrywmsnative.core.utility.UtilityBoolean; +import it.integry.integrywmsnative.databinding.LayoutFilterCommessaBinding; +import it.integry.integrywmsnative.ui.filter_chips.FilterLayoutView; + +public class FilterCommessaLayoutView extends FilterLayoutView { + + protected LayoutFilterCommessaBinding mBindings; + + private List allCommesse; + private List availableCommesse; + private List preSelectedCommesse = new ArrayList<>(); + private List hiddenCommesse = new ArrayList<>(); + private final MutableLiveData> listModel = new MutableLiveData<>(); + + private RunnableArgs> onFilterApplied; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.layout_filter_commessa, container, false); + this.mBindings.setView(this); + + refreshList(); + + this.setSearchView(this.mBindings.searchView, newFilter -> { + hiddenCommesse = Stream.of(allCommesse) + .filter(x -> !x.getCodJcom().toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) && + !x.getDescrizione().toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT))) + .toList(); + + refreshList(); + }); + + + new LiveAdapter(listModel, getViewLifecycleOwner(), BR.item) + .map(ListModel.class, R.layout.layout_filter_commessa__list_item) + .into(this.mBindings.recyclerview); + + return mBindings.getRoot(); + } + + private void refreshList() { + ComparatorCompat c = + ComparatorCompat + .chain(new ComparatorCompat((x, y) -> UtilityBoolean.toInt(x.getSelected().get()) - UtilityBoolean.toInt(y.getSelected().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> UtilityBoolean.toInt(x.getEnabled().get()) - UtilityBoolean.toInt(y.getEnabled().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> y.getOriginalModel().getCodJcom().compareTo(x.getOriginalModel().getCodJcom()))) + .reversed(); + + listModel.setValue(Stream.of(getAllCommesse()) + .filter(x -> !hiddenCommesse.contains(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preSelectedCommesse.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preSelectedCommesse.add(x); + else preSelectedCommesse.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(availableCommesse.contains(x))) + .setOriginalModel(x); + }) + .sorted(c) + .toList()); + } + + + public void onConfirm() { + if (onFilterApplied == null) return; + + this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue())) + .filter(x -> x.selected.get()) + .map(x -> x.originalModel) + .toList()); + + dismiss(); + } + + public List getAllCommesse() { + return allCommesse; + } + + public FilterCommessaLayoutView setAllCommesse(List allCommesse) { + this.allCommesse = allCommesse; + return this; + } + + public List getAvailableCommesse() { + return availableCommesse; + } + + public FilterCommessaLayoutView setAvailableCommesse(List availableCommesse) { + this.availableCommesse = availableCommesse; + return this; + } + + public List getPreSelectedCommesse() { + return preSelectedCommesse; + } + + public FilterCommessaLayoutView setPreSelectedCommesse(List preSelectedCommesse) { + this.preSelectedCommesse = preSelectedCommesse; + return this; + } + + public RunnableArgs> getOnFilterApplied() { + return onFilterApplied; + } + + public FilterCommessaLayoutView setOnFilterApplied(RunnableArgs> onFilterApplied) { + this.onFilterApplied = onFilterApplied; + return this; + } + + public static class ListModel { + private BindableBoolean selected = new BindableBoolean(); + private BindableBoolean enabled = new BindableBoolean(); + private JtbComt originalModel; + + public BindableBoolean getSelected() { + return selected; + } + + public ListModel setSelected(BindableBoolean selected) { + this.selected = selected; + return this; + } + + public BindableBoolean getEnabled() { + return enabled; + } + + public ListModel setEnabled(BindableBoolean enabled) { + this.enabled = enabled; + return this; + } + + public JtbComt getOriginalModel() { + return originalModel; + } + + public ListModel setOriginalModel(JtbComt originalModel) { + this.originalModel = originalModel; + return this; + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/OrdineProduzioneFilterViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/OrdineProduzioneFilterViewModel.java new file mode 100644 index 00000000..9da802b7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/OrdineProduzioneFilterViewModel.java @@ -0,0 +1,136 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters; + +import androidx.databinding.ObservableField; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Stream; +import com.annimon.stream.function.Predicate; + +import java.util.List; +import java.util.Objects; + +import it.integry.integrywmsnative.core.model.JtbComt; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; + +public class OrdineProduzioneFilterViewModel { + private final ObservableField> currentNumOrdsPredicate = new ObservableField<>(); + private final ObservableField> currentCommPredicate = new ObservableField<>(); + + + private List initialOrderList; + private final MutableLiveData> currentFilteredOrderList = new MutableLiveData<>(); + + public void init(List initialList) { + this.initialOrderList = initialList; + this.currentFilteredOrderList.setValue(this.initialOrderList); + } + public MutableLiveData> getMutableFilteredOrderList() { + return this.currentFilteredOrderList; + } + + public void setNumOrdFilter(List numOrds) { + if (numOrds == null || numOrds.isEmpty()) currentNumOrdsPredicate.set(null); + else { + currentNumOrdsPredicate.set(o -> numOrds.contains(o.getNumero())); + } + } + + public void setCommessaFilter(List jtbComtList) { + if (jtbComtList == null || jtbComtList.isEmpty()) currentCommPredicate.set(null); + else { + List codMdeps = Stream.of(jtbComtList).map(JtbComt::getCodJcom).toList(); + currentCommPredicate.set(o -> codMdeps.contains(o.getCodJcom())); + } + } + + public void applyAllTests() { + List returnList = null; + + if (currentNumOrdsPredicate.get() == null && + currentCommPredicate.get() == null + ) { + returnList = this.initialOrderList; + } else { + Stream tmpStream = Stream.of(this.initialOrderList) + .filter(x -> + (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) && + (currentCommPredicate.get() == null || (currentCommPredicate.get().test(x)))); + + returnList = tmpStream.toList(); + } + + this.currentFilteredOrderList.setValue(returnList); + } + + public ObservableField> getCurrentNumOrdsPredicate() { + return currentNumOrdsPredicate; + } + + public ObservableField> getCurrentCommPredicate() { + return currentCommPredicate; + } + + + public List getAllCommesse(List commesseFullList) { + List codJcom = Stream.of(initialOrderList) + .map(OrdineAccettazioneInevasoDTO::getCodJcom) + .distinct() + .toList(); + + return Stream.of(Objects.requireNonNull(commesseFullList)) + .filter(x -> codJcom.contains(x.getCodJcom())) + .distinct() + .withoutNulls() + .sortBy(JtbComt::getCodJcom) + .toList(); + } + + public List getAvailableCommesse(List commesseFullList) { + + if (currentNumOrdsPredicate.get() == null) { + return getAllCommesse(commesseFullList); + } else { + List availableCodMdeps = Stream.of(this.initialOrderList) + .filter(x -> + (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) + ) + .map(OrdineAccettazioneInevasoDTO::getCodJcom) + .distinct() + .toList(); + + return Stream.of(Objects.requireNonNull(commesseFullList)) + .filter(x -> availableCodMdeps.contains(x.getCodJcom())) + .distinct() + .withoutNulls() + .sortBy(JtbComt::getCodJcom) + .toList(); + } + } + + public List getAllNumOrds() { + return Stream + .of(Objects.requireNonNull(initialOrderList)) + .filter(x -> x.getNumero() != null) + .sortBy(x -> -x.getNumero()) + .map(x -> x.getNumero() != null ? x.getNumero() : null) + .distinct() + .toList(); + } + + public List getAvailableNumOrds() { + + if (currentCommPredicate.get() == null + ) { + return getAllNumOrds(); + } else { + return Stream.of(this.initialOrderList) + .filter(x -> + (currentCommPredicate.get() == null || (currentCommPredicate.get().test(x))) + ) + .map(OrdineAccettazioneInevasoDTO::getNumero) + .distinct() + .toList(); + } + } + +} diff --git a/app/src/main/res/layout/fragment_main_ordini_uscita.xml b/app/src/main/res/layout/fragment_main_ordini_uscita.xml index d2d969af..d341dd88 100644 --- a/app/src/main/res/layout/fragment_main_ordini_uscita.xml +++ b/app/src/main/res/layout/fragment_main_ordini_uscita.xml @@ -37,60 +37,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:singleSelection="true" /> diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml index 197eb650..f727ec36 100644 --- a/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml @@ -19,11 +19,29 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + android:layout_height="wrap_content" + android:layout_below="@id/filter_chips"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_commessa__list_item.xml b/app/src/main/res/layout/layout_filter_commessa__list_item.xml new file mode 100644 index 00000000..df9a537d --- /dev/null +++ b/app/src/main/res/layout/layout_filter_commessa__list_item.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file