diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 22f18092..07e82282 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -71,6 +71,7 @@ import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMate import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent; import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent; +import it.integry.integrywmsnative.gest.prod_rientro_merce.order_list.ProdRientroMerceOrderListComponent; import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdComponent; import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdModule; import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza.DialogInfoGiacenzaComponent; @@ -379,6 +380,8 @@ public interface MainApplicationComponent { DialogSwitchUserDepoComponent.Factory dialogSwitchUserDepoComponent(); + ProdRientroMerceOrderListComponent.Factory prodRientroMerceOrderListComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); 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 index 91bf0da0..2397e97e 100644 --- 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 @@ -1,12 +1,12 @@ 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 java.util.stream.Collectors; import javax.inject.Singleton; @@ -26,15 +26,15 @@ public class CommessaRESTConsumer extends _BaseRESTConsumer { public void getJtbComts(List itemsToFind, RunnableArgs> onComplete, RunnableArgs onFailed) { - var whereCondMap = Stream.of(itemsToFind) - .withoutNulls() + var whereCondMap = itemsToFind.stream() .filter(x -> !UtilityString.isNullOrEmpty(x)) .map(x -> { - HashMap vars = new HashMap<>(); - vars.put("cod_jcom", x); - return vars; + HashMap codJcom = new HashMap<>() {{ + put("cod_jcom", x); + }}; + return codJcom; }) - .toList(); + .collect(Collectors.toUnmodifiableList()); if(whereCondMap.isEmpty()) { onComplete.run(new ArrayList<>()); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFilterBindings.java similarity index 96% rename from app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java rename to app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFilterBindings.java index b4426983..1495d1d3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFilterBindings.java @@ -12,10 +12,10 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaese import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterViaggioLayoutView; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; -public class OrdiniUscitaElencoBindings { +public class OrdiniUscitaElencoFilterBindings { public static final int DEPOSITO_FILTER_ID = 0; 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 abcfb925..f60e7674 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 @@ -17,10 +17,12 @@ import com.annimon.stream.Stream; import com.google.android.material.datepicker.MaterialDatePicker; import java.util.ArrayList; +import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -63,10 +65,10 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaese import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterViaggioLayoutView; -import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.VenditaFiltroOrdiniViewModel; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.OrdiniUscitaElencoFiltroViewModel; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui.OrdiniUscitaElencoAdapter; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui.OrdiniUscitaElencoListModel; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; import it.integry.integrywmsnative.ui.ElevatedToolbar; @@ -91,7 +93,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF @Inject OrdiniUscitaElencoViewModel mViewModel; - private final VenditaFiltroOrdiniViewModel mAppliedFilterViewModel = new VenditaFiltroOrdiniViewModel(); + private final OrdiniUscitaElencoFiltroViewModel mAppliedFilterViewModel = new OrdiniUscitaElencoFiltroViewModel(); private FragmentMainOrdiniUscitaBinding mBindings = null; @@ -277,10 +279,10 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentCommessaPredicate().addOnPropertyChangedCallback(onPredicateChanged); - List filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()) + List filterList = OrdiniUscitaElencoFilterBindings.AVAILABLE_FILTERS.entrySet().stream() .map(Map.Entry::getValue) - .sortBy(FilterChipDTO::getPosizione) - .toList(); + .sorted(Comparator.comparing(FilterChipDTO::getPosizione)) + .collect(Collectors.toList()); for (FilterChipDTO filterChipDTO : filterList) { @@ -290,7 +292,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF v -> initBottomSheetDialogFilter(filterChipDTO)); switch (filterChipDTO.getID()) { - case OrdiniUscitaElencoBindings.DEPOSITO_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.DEPOSITO_FILTER_ID -> { mAppliedFilterViewModel.getCurrentDepositoPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -311,7 +313,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentDepositoPredicate().set(null)); } - case OrdiniUscitaElencoBindings.VIAGGIO_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.VIAGGIO_FILTER_ID -> { mAppliedFilterViewModel.getCurrentIdViaggioPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -332,7 +334,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentIdViaggioPredicate().set(null)); } - case OrdiniUscitaElencoBindings.NUM_ORD_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.NUM_ORD_FILTER_ID -> { mAppliedFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -353,7 +355,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentNumOrdsPredicate().set(null)); } - case OrdiniUscitaElencoBindings.CLIENTE_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.CLIENTE_FILTER_ID -> { mAppliedFilterViewModel.getCurrentClientePredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -374,7 +376,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentClientePredicate().set(null)); } - case OrdiniUscitaElencoBindings.VETTORE_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.VETTORE_FILTER_ID -> { mAppliedFilterViewModel.getCurrentVettorePredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -395,7 +397,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentVettorePredicate().set(null)); } - case OrdiniUscitaElencoBindings.AUTOMEZZO_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.AUTOMEZZO_FILTER_ID -> { mAppliedFilterViewModel.getCurrentAutomezzoPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -416,7 +418,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentAutomezzoPredicate().set(null)); } - case OrdiniUscitaElencoBindings.PAESE_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.PAESE_FILTER_ID -> { mAppliedFilterViewModel.getCurrentPaesePredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -437,7 +439,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentPaesePredicate().set(null)); } - case OrdiniUscitaElencoBindings.AGENTE_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.AGENTE_FILTER_ID -> { mAppliedFilterViewModel.getCurrentAgentePredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -458,7 +460,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentAgentePredicate().set(null)); } - case OrdiniUscitaElencoBindings.TERM_CONS_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.TERM_CONS_FILTER_ID -> { mAppliedFilterViewModel.getCurrentTermConsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -479,7 +481,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentTermConsPredicate().set(null)); } - case OrdiniUscitaElencoBindings.DATA_CONS_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.DATA_CONS_FILTER_ID -> { mAppliedFilterViewModel.getCurrentDataConsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -503,7 +505,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentDataConsPredicate().set(null); }); } - case OrdiniUscitaElencoBindings.GRUPPO_MERC_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.GRUPPO_MERC_FILTER_ID -> { mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -527,7 +529,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentGruppoMercPredicate().set(null); }); } - case OrdiniUscitaElencoBindings.COMMESSA_FILTER_ID -> { + case OrdiniUscitaElencoFilterBindings.COMMESSA_FILTER_ID -> { mAppliedFilterViewModel.getCurrentCommessaPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override public void run() { @@ -560,7 +562,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF } private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) { - if (filterChipDTO.getID() == OrdiniUscitaElencoBindings.DATA_CONS_FILTER_ID) { + if (filterChipDTO.getID() == OrdiniUscitaElencoFilterBindings.DATA_CONS_FILTER_ID) { var datePicker = MaterialDatePicker.Builder.datePicker() .setTitleText(filterChipDTO.getFilterChipText()) @@ -583,7 +585,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF .getFilterLayoutView(); switch (filterChipDTO.getID()) { - case OrdiniUscitaElencoBindings.COMMESSA_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.COMMESSA_FILTER_ID -> ((FilterCommessaLayoutView) filterLayoutView) .setAllCommesse(mAppliedFilterViewModel.getAllCommesse(this.jtbComtCache)) .setAvailableCommesse(mAppliedFilterViewModel.getAvailableCommesse(this.jtbComtCache)) @@ -594,7 +596,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentCommessaPredicate().get()) .map(x -> Stream.of(jtbComtCache).filter(y -> x.getCodJcom().equalsIgnoreCase(y.getCodJcom())).findFirst().get()) .toList()); - case OrdiniUscitaElencoBindings.DEPOSITO_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.DEPOSITO_FILTER_ID -> ((FilterDepositoLayoutView) filterLayoutView) .setAllCodMdeps(mAppliedFilterViewModel.getAllCodMdeps(mtbDepoCache)) .setAvailableCodMdeps(mAppliedFilterViewModel.getAvailableCodMdeps(mtbDepoCache)) @@ -605,7 +607,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentDepositoPredicate().get()) .map(x -> Stream.of(mtbDepoCache).filter(y -> x.getCodMdep().equalsIgnoreCase(y.getCodMdep())).findFirst().get()) .toList()); - case OrdiniUscitaElencoBindings.VIAGGIO_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.VIAGGIO_FILTER_ID -> ((FilterViaggioLayoutView) filterLayoutView) .setAllIDViaggio(mAppliedFilterViewModel.getAllIDViaggio()) .setAvailableIDViaggio(mAppliedFilterViewModel.getAvailableIDViaggio()) @@ -616,7 +618,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentIdViaggioPredicate().get()) .map(OrdineUscitaInevasoDTO::getIdViaggio) .toList()); - case OrdiniUscitaElencoBindings.NUM_ORD_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.NUM_ORD_FILTER_ID -> ((FilterNumeroOrdineLayoutView) filterLayoutView) .setAllNumOrds(mAppliedFilterViewModel.getAllNumOrds()) .setAvailableNumOrds(mAppliedFilterViewModel.getAvailableNumOrds()) @@ -627,7 +629,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentNumOrdsPredicate().get()) .map(OrdineUscitaInevasoDTO::getNumOrd) .toList()); - case OrdiniUscitaElencoBindings.CLIENTE_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.CLIENTE_FILTER_ID -> ((FilterClienteLayoutView) filterLayoutView) .setAllClienti(mAppliedFilterViewModel.getAllClienti()) .setAvailableClienti(mAppliedFilterViewModel.getAvailableClienti()) @@ -638,7 +640,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentClientePredicate().get()) .map(OrdineUscitaInevasoDTO::getRagSocOrd) .toList()); - case OrdiniUscitaElencoBindings.VETTORE_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.VETTORE_FILTER_ID -> ((FilterVettoreLayoutView) filterLayoutView) .setAllVettori(mAppliedFilterViewModel.getAllVettori()) .setAvailableVettori(mAppliedFilterViewModel.getAvailableVettori()) @@ -649,7 +651,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentVettorePredicate().get()) .map(x -> x.getCodVvet() + (!UtilityString.isNullOrEmpty(x.getCodVvet()) ? " - " + x.getDescrizioneVettore() : "")) .toList()); - case OrdiniUscitaElencoBindings.AUTOMEZZO_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.AUTOMEZZO_FILTER_ID -> ((FilterAutomezzoLayoutView) filterLayoutView) .setAllAutomezzi(mAppliedFilterViewModel.getAllAutomezzi()) .setAvailableAutomezzi(mAppliedFilterViewModel.getAvailableAutomezzi()) @@ -660,7 +662,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentAutomezzoPredicate().get()) .map(OrdineUscitaInevasoDTO::getDescrizioneAuto) .toList()); - case OrdiniUscitaElencoBindings.PAESE_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.PAESE_FILTER_ID -> ((FilterPaeseLayoutView) filterLayoutView) .setAllPaesi(mAppliedFilterViewModel.getAllPaesi()) .setAvailablePaesi(mAppliedFilterViewModel.getAvailablePaesi()) @@ -671,7 +673,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentPaesePredicate().get()) .map(OrdineUscitaInevasoDTO::getCitta) .toList()); - case OrdiniUscitaElencoBindings.AGENTE_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.AGENTE_FILTER_ID -> ((FilterAgenteLayoutView) filterLayoutView) .setAllAgenti(mAppliedFilterViewModel.getAllAgenti()) .setAvailableAgenti(mAppliedFilterViewModel.getAvailableAgenti()) @@ -682,7 +684,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentAgentePredicate().get()) .map(OrdineUscitaInevasoDTO::getCitta) .toList()); - case OrdiniUscitaElencoBindings.TERM_CONS_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.TERM_CONS_FILTER_ID -> ((FilterTermConsLayoutView) filterLayoutView) .setAllTermCons(mAppliedFilterViewModel.getAllTermCons()) .setAvailableTermCons(mAppliedFilterViewModel.getAvailableTermCons()) @@ -693,7 +695,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentTermConsPredicate().get()) .map(OrdineUscitaInevasoDTO::getCitta) .toList()); - case OrdiniUscitaElencoBindings.GRUPPO_MERC_FILTER_ID -> + case OrdiniUscitaElencoFilterBindings.GRUPPO_MERC_FILTER_ID -> ((FilterGruppoMercLayoutView) filterLayoutView) .setAllGroupMerc(mAppliedFilterViewModel.getAllGruppoMerc(mtbGrupCache)) .setAvailableGroupMerc(mAppliedFilterViewModel.getAvailableGruppoMerc(mtbGrupCache)) @@ -730,7 +732,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.mOrdiniInevasiMutableData.clear(); this.mOrdiniInevasiMutableData.addAll(list); - fabVisible.set(Stream.of(mOrdiniInevasiMutableData) + fabVisible.set(mOrdiniInevasiMutableData.stream() .anyMatch(y -> y.getSelectedObservable().get())); }); } @@ -901,12 +903,17 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF onComplete.run(); return; } - var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue())) - .flatMap(x -> Stream.of(x.getCodJcom())) - .distinct().withoutNulls() - .toList(); - if (jtbComts.isEmpty()) { + List jtbComts = null; + if(this.mViewModel.getOrderList().getValue() != null) { + jtbComts = this.mViewModel.getOrderList().getValue().stream() + .map(OrdineUscitaInevasoDTO::getCodJcom) + .distinct() + .filter(Objects::nonNull) + .collect(Collectors.toUnmodifiableList()); + } + + if (jtbComts == null || jtbComts.isEmpty()) { this.jtbComtCache = new ArrayList<>(); onComplete.run(); return; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java similarity index 99% rename from app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java rename to app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java index 25576357..5589489b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java @@ -21,7 +21,7 @@ import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; -public class VenditaFiltroOrdiniViewModel { +public class OrdiniUscitaElencoFiltroViewModel { private final ObservableField> currentDepositoPredicate = new ObservableField<>(); private final ObservableField> currentIdViaggioPredicate = new ObservableField<>(); 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 index ecc01702..d778177f 100644 --- 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 @@ -3,7 +3,7 @@ package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione; import java.util.HashMap; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; public class ProdOrdineProduzioneElencoBindings { 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 fed528ba..5d2f2a0a 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 @@ -43,7 +43,7 @@ import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAcc import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione_ordini_picking.AccettazioneOrdiniPickingActivity; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.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; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdBindings.java index d7c70c43..eb2f2603 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdBindings.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdBindings.java @@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod; import java.util.HashMap; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdFragment.java index 417e1364..224dc1f9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdFragment.java @@ -10,8 +10,6 @@ import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.fragment.app.Fragment; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; import com.annimon.stream.Stream; import com.ravikoradiya.liveadapter.LiveAdapter; @@ -19,12 +17,11 @@ import com.ravikoradiya.liveadapter.Type; import java.time.LocalDate; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -41,19 +38,14 @@ import it.integry.integrywmsnative.core.model.MtbGrup; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; -import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDB; -import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeListSingleItemBinding; import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding; import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeTitleItemBinding; -import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView; -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_fabbisogno_linee_prod.dto.GroupTitleModel; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; @@ -386,10 +378,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi public void dispatchOrders() { String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - String ordini = UtilityDB.listValueToString(Stream.of(mProdFabbisognoItemModel) + String ordini = UtilityDB.listValueToString(mProdFabbisognoItemModel.stream() .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) - .map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd().toString()) - .toList()); + .map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd())) + .collect(Collectors.toList())); LocalDate dataInizio = Stream.of(mProdFabbisognoItemModel) .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) @@ -417,10 +409,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi private void startPickingActivity(List listMtbGrup, List fabbisognoList) { String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - String ordini = UtilityDB.listValueToString(Stream.of(mProdFabbisognoItemModel) + String ordini = UtilityDB.listValueToString(mProdFabbisognoItemModel.stream() .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) - .map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd().toString()) - .toList()); + .map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd())) + .collect(Collectors.toList())); Stream streamSitArtOrd = Stream.of(fabbisognoList); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/filters/ProdFabbisognoLineeProdFilterViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/filters/ProdFabbisognoLineeProdFilterViewModel.java index 297578a4..5c88e6dd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/filters/ProdFabbisognoLineeProdFilterViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/filters/ProdFabbisognoLineeProdFilterViewModel.java @@ -9,10 +9,9 @@ import com.annimon.stream.function.Predicate; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; import it.integry.integrywmsnative.core.model.MtbGrup; -import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; -import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; @@ -78,13 +77,11 @@ public class ProdFabbisognoLineeProdFilterViewModel { } public List getAllNumOrds() { - return Stream - .of(Objects.requireNonNull(initialList)) - .filter(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null) - .sortBy(x -> -x.getOrdineLavorazioneDTO().getNumOrd()) - .map(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null ? x.getOrdineLavorazioneDTO().getNumOrd() : null) + return Objects.requireNonNull(initialList).stream() + .map(x -> x.getOrdineLavorazioneDTO().getNumOrd()) + .sorted() .distinct() - .toList(); + .collect(Collectors.toList()); } public List getAvailableNumOrds() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java index 12d30271..372fff5a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java @@ -10,11 +10,11 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatTextView; -import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableField; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import javax.inject.Inject; @@ -120,13 +120,12 @@ public class ProdRientroMerceFragment extends BaseFragment implements @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce, container, false); + mBindings = FragmentProdRientroMerceBinding.inflate(LayoutInflater.from(getActivity()), container, false); mBindings.setLifecycleOwner(this); mBindings.setView(this); mBindings.setViewmodel(mViewModel); mViewModel.setListener(this); - return mBindings.getRoot(); } @@ -149,6 +148,7 @@ public class ProdRientroMerceFragment extends BaseFragment implements } + @Override public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); @@ -172,6 +172,20 @@ public class ProdRientroMerceFragment extends BaseFragment implements private void ordersUpdated(List ordiniLavorazioneList) { this.mProdRientroMerceOrderListFragment.pushOrderList(ordiniLavorazioneList); + + if (mProdRientroMerceOrderDetailFragment != null && mProdRientroMerceOrderDetailFragment.getCurrentOrder().getValue() != null) { + var orderToRefresh = mProdRientroMerceOrderDetailFragment.getCurrentOrder().getValue(); + + Optional foundOrder = ordiniLavorazioneList.stream().filter(x -> x.getNumOrd() == orderToRefresh.getNumOrd() && + x.getDataOrd().equals(orderToRefresh.getDataOrd()) && + x.getGestione().equalsIgnoreCase(orderToRefresh.getGestione())) + .findFirst(); + + if(foundOrder.isPresent()) + mProdRientroMerceOrderDetailFragment.setOrder(foundOrder.get()); + else + mProdRientroMerceOrderDetailFragment.setOrder(null); + } } @Override @@ -220,4 +234,6 @@ public class ProdRientroMerceFragment extends BaseFragment implements else onComplete.run(); } + + } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java index 4e00882f..33c0baf2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java @@ -27,6 +27,10 @@ public class ProdRientroMerceViewModel { this.mMesRESTConsumer = mesRESTConsumer; } + + + + public void refreshOrderList() { this.sendOnOrdersLoadingStarted(); String codAnag = SettingsManager.iDB().getFilterFornitoreProd(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java index c990983b..08337977 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java @@ -174,6 +174,10 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements } + public MutableLiveData getCurrentOrder() { + return currentOrder; + } + private void onConnected(BluetoothSerialDevice connectedDevice) { Toast.makeText(requireActivity(), "Connesso a: " + connectedDevice.getMac(), Toast.LENGTH_LONG).show(); mConnectedBluetoothDevice = connectedDevice; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java index 96837a25..f5335f1f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java @@ -74,16 +74,18 @@ public class ProdRientroMerceOrderDetailViewModel { //this.sendOnLoadingStarted(); this.mtbColtsOfOrder.postValue(null); - this.prodRientroMerceOrderDetailRESTConsumer.getMtbColtsOfOrder(currentOrder, mtbColts -> { - for (MtbColt mtbColt : mtbColts) { - mtbColt.getMtbColr().get(0) - .setDescrizione(currentOrder.getDescrizioneProd()) - .setUntMis(currentOrder.getUntOrd()); - } + if (currentOrder != null) { + this.prodRientroMerceOrderDetailRESTConsumer.getMtbColtsOfOrder(currentOrder, mtbColts -> { + for (MtbColt mtbColt : mtbColts) { + mtbColt.getMtbColr().get(0) + .setDescrizione(currentOrder.getDescrizioneProd()) + .setUntMis(currentOrder.getUntOrd()); + } - this.mtbColtsOfOrder.postValue(mtbColts); - //this.sendOnLoadingEnded(); - }, this::sendError); + this.mtbColtsOfOrder.postValue(mtbColts); + //this.sendOnLoadingEnded(); + }, this::sendError); + } } public void retrieveOrderData(RunnableArgss onComplete) { @@ -139,7 +141,7 @@ public class ProdRientroMerceOrderDetailViewModel { this.prodRientroMerceOrderDetailRESTConsumer.importColliDaProduzione(importColliDaProduzioneRequestDTO, mtbColtSaved -> { - if(SettingsManager.iDB().isProduzioneGeneraDocCar() || SettingsManager.iDB().isProduzioneGeneraDocScar()) { + if (SettingsManager.iDB().isProduzioneGeneraDocCar() || SettingsManager.iDB().isProduzioneGeneraDocScar()) { CaricoProdFinDTO caricoProdFinDTO = new CaricoProdFinDTO() .setEscludiArticoliGestitiDaWmsInScarico(true) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListComponent.java new file mode 100644 index 00000000..51d5eb39 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list; + +import dagger.Subcomponent; + +@Subcomponent +public interface ProdRientroMerceOrderListComponent { + + @Subcomponent.Factory + interface Factory { + ProdRientroMerceOrderListComponent create(); + } + + void inject(ProdRientroMerceOrderListFragment prodRientroMerceOrderListFragment); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterBindings.java new file mode 100644 index 00000000..c24a5b1a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterBindings.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list; + +import java.util.HashMap; + +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; +import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView; + +public class ProdRientroMerceOrderListFilterBindings { + public static final int COMMESSA_FILTER_ID = 0; + + + public static final HashMap AVAILABLE_FILTERS = new HashMap<>() {{ + put(COMMESSA_FILTER_ID, new FilterChipDTO() + .setID(COMMESSA_FILTER_ID) + .setPosizione(9) + .setFilterChipText("Commessa") + .setFilterLayoutView(new FilterCommessaLayoutView())); + }}; +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java new file mode 100644 index 00000000..86e14377 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java @@ -0,0 +1,113 @@ +package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list; + +import androidx.databinding.ObservableField; +import androidx.lifecycle.MutableLiveData; + +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import it.integry.integrywmsnative.core.model.JtbComt; +import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; + +public class ProdRientroMerceOrderListFilterViewModel { + + private final ObservableField> currentCommessaPredicate = 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 setCommessaFilter(List jtbComtList) { + if (jtbComtList == null || jtbComtList.isEmpty()) currentCommessaPredicate.set(null); + else { + List codJcoms = jtbComtList.stream() + .map(JtbComt::getCodJcom) + .collect(Collectors.toList()); + currentCommessaPredicate.set(o -> codJcoms.contains(o.getCodJcom())); + } + } + + + public void applyAllTests() { + + List returnList = null; + + if ( + currentCommessaPredicate.get() == null + ) { + returnList = this.initialOrderList; + } else { + Stream tmpStream = this.initialOrderList.stream() + .filter(x -> + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) + ); + + returnList = tmpStream.collect(Collectors.toList()); + } + + this.currentFilteredOrderList.setValue(returnList); + } + + public ObservableField> getCurrentCommessaPredicate() { + return currentCommessaPredicate; + } + + + + + + public List getAllCommesse(List commesseFullList) { + List codJcom = initialOrderList.stream() + .map(OrdineLavorazioneDTO::getCodJcom) + .distinct() + .collect(Collectors.toUnmodifiableList()); + + return Objects.requireNonNull(commesseFullList).stream() + .filter(x -> x != null && codJcom.contains(x.getCodJcom())) + .distinct() + .sorted((o1, o2) -> o1.getCodJcom().compareTo(o2.getCodJfas())) + .collect(Collectors.toUnmodifiableList()); + } + + public List getAvailableCommesse(List commesseFullList) { + +// if (currentIdViaggioPredicate.get() == null ) { + return getAllCommesse(commesseFullList); +// } else { +// List availableCommesse = Stream.of(this.initialOrderList) +// .filter(x -> +// (currentIdViaggioPredicate.get() == null || (currentIdViaggioPredicate.get().test(x))) && +// (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) && +// (currentDataConsPredicate.get() == null || (currentDataConsPredicate.get().test(x))) && +// (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && +// (currentClientePredicate.get() == null || (currentClientePredicate.get().test(x))) && +// (currentVettorePredicate.get() == null || (currentVettorePredicate.get().test(x))) && +// (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && +// (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && +// (currentAutomezzoPredicate.get() == null || (currentAutomezzoPredicate.get().test(x))) && +// (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && +// (currentTermConsPredicate.get() == null || (currentTermConsPredicate.get().test(x))) +// ) +// .map(OrdineUscitaInevasoDTO::getCodJcom) +// .distinct() +// .toList(); +// +// return Stream.of(Objects.requireNonNull(commesseFullList)) +// .filter(x -> availableCommesse.contains(x.getCodJcom())) +// .distinct() +// .withoutNulls() +// .sortBy(JtbComt::getCodJcom) +// .toList(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java index 0fffb242..3a956920 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java @@ -6,7 +6,6 @@ import android.view.View; import android.view.ViewGroup; import androidx.core.content.ContextCompat; -import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; @@ -18,17 +17,32 @@ import com.annimon.stream.Stream; import java.math.RoundingMode; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.data_cache.DataCache; +import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.JtbComt; +import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListBinding; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; +import it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView; /** * A simple {@link Fragment} subclass. @@ -37,14 +51,27 @@ import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; */ public class ProdRientroMerceOrderListFragment extends Fragment { + @Inject + CommessaRESTConsumer mCommessaRESTConsumer; + private final ObservableArrayList mOrdiniApertiMutableData = new ObservableArrayList<>(); private FragmentProdRientroMerceOrderListBinding mBindings = null; private RunnableArgs mOnItemSelectedRunnable; + private ElevatedToolbar mToolbar; private OnRefreshListener onRefreshListener; + private final ProdRientroMerceOrderListFilterViewModel mAppliedFilterViewModel = new ProdRientroMerceOrderListFilterViewModel(); + private List internalOrderList = new ArrayList<>(); + + private List jtbComtCache; + public ProdRientroMerceOrderListFragment() { // Required empty public constructor + MainApplication.appComponent + .prodRientroMerceOrderListComponent() + .create() + .inject(this); } public static ProdRientroMerceOrderListFragment newInstance(ElevatedToolbar elevatedToolbar) { @@ -56,6 +83,7 @@ public class ProdRientroMerceOrderListFragment extends Fragment { return prodRientroMerceOrderListFragment; } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -68,21 +96,23 @@ public class ProdRientroMerceOrderListFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_rientro_merce_order_list, container, false); + mBindings = FragmentProdRientroMerceOrderListBinding.inflate(inflater, container, false); mBindings.setLifecycleOwner(this); - if (savedInstanceState == null) this.initRecyclerView(); + if (savedInstanceState == null) { + this.initRecyclerView(); + this.initFilters(); + } return mBindings.getRoot(); } private void initRecyclerView() { - SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL); - itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireActivity(), SimpleDividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(requireActivity(), R.drawable.divider)); this.mBindings.mainList.addItemDecoration(itemDecorator); - ProdRientroMerceOrderListAdapter prodRientroMerceOrderListAdapter = new ProdRientroMerceOrderListAdapter(getActivity(), mOrdiniApertiMutableData) .setEmptyView(this.mBindings.emptyView) .setOnItemClicked(x -> { @@ -100,10 +130,139 @@ public class ProdRientroMerceOrderListFragment extends Fragment { }); } - public void pushOrderList(List orderList) { - this.mOrdiniApertiMutableData.clear(); - this.mOrdiniApertiMutableData.addAll(convertDataModelToListModel(orderList)); + private void initFilters() { + var onPredicateChanged = new OnGeneralChangedCallback() { + @Override + public void run() { + refreshList(); + } + }; + mAppliedFilterViewModel.getCurrentCommessaPredicate().addOnPropertyChangedCallback(onPredicateChanged); + + List filterList = ProdRientroMerceOrderListFilterBindings.AVAILABLE_FILTERS.entrySet().stream() + .map(Map.Entry::getValue) + .sorted(Comparator.comparing(FilterChipDTO::getPosizione)) + .collect(Collectors.toList()); + + for (FilterChipDTO filterChipDTO : filterList) { + + FilterChipView filterChipView = new FilterChipView( + requireActivity(), + filterChipDTO.getFilterChipText(), + v -> initBottomSheetDialogFilter(filterChipDTO)); + + switch (filterChipDTO.getID()) { + + case ProdRientroMerceOrderListFilterBindings.COMMESSA_FILTER_ID -> { + mAppliedFilterViewModel.getCurrentCommessaPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentCommessaPredicate().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(() -> { + mAppliedFilterViewModel.setCommessaFilter(null); + mAppliedFilterViewModel.getCurrentCommessaPredicate().set(null); + }); + } + } + + + 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 ProdRientroMerceOrderListFilterBindings.COMMESSA_FILTER_ID -> + ((FilterCommessaLayoutView) filterLayoutView) + .setAllCommesse(mAppliedFilterViewModel.getAllCommesse(this.jtbComtCache)) + .setAvailableCommesse(mAppliedFilterViewModel.getAvailableCommesse(this.jtbComtCache)) + .setOnFilterApplied(mAppliedFilterViewModel::setCommessaFilter) + .setPreSelectedCommesse(internalOrderList.stream() + .filter(mAppliedFilterViewModel.getCurrentCommessaPredicate().get() == null ? + x -> false : + Objects.requireNonNull(mAppliedFilterViewModel.getCurrentCommessaPredicate().get())) + .map(x -> jtbComtCache.parallelStream() + .filter(y -> x.getCodJcom().equalsIgnoreCase(y.getCodJcom())).findFirst().get()) + .collect(Collectors.toList())); + } + + if (!filterLayoutView.isAdded()) + filterLayoutView.show(requireActivity().getSupportFragmentManager(), "bottom-sheet-filters"); + + } + + + private void initJtbComtCache(Runnable onComplete) { + if (this.internalOrderList == null || this.internalOrderList.isEmpty()) { + this.jtbComtCache = new ArrayList<>(); + onComplete.run(); + return; + } + + List jtbComts = this.internalOrderList.stream() + .map(OrdineLavorazioneDTO::getCodJcom) + .distinct() + .filter(Objects::nonNull) + .collect(Collectors.toUnmodifiableList()); + + if (jtbComts.isEmpty()) { + this.jtbComtCache = new ArrayList<>(); + onComplete.run(); + return; + } + + this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> { + this.jtbComtCache = jtbComtCache; + onComplete.run(); + }, this::onError); + } + + public void pushOrderList(List orderList) { + this.internalOrderList = orderList; + + onOrderLoadingStarted(); + this.initJtbComtCache(() -> { + mAppliedFilterViewModel.init(internalOrderList); + refreshList(); + onOrderLoadingEnded(); + }); + + } + + private void refreshList() { + requireActivity().runOnUiThread(() -> { + List tmpList; + + mAppliedFilterViewModel.applyAllTests(); + tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); + + this.mOrdiniApertiMutableData.clear(); + this.mOrdiniApertiMutableData.addAll(convertDataModelToListModel(tmpList)); + }); } public void onOrderLoadingStarted() { @@ -115,6 +274,14 @@ public class ProdRientroMerceOrderListFragment extends Fragment { } + public void onError(Exception ex) { + requireActivity().runOnUiThread(() -> { + onOrderLoadingEnded(); + UtilityExceptions.defaultException(getActivity(), ex); + BarcodeManager.enable(); + }); + } + private List convertDataModelToListModel(List dataList) { ComparatorCompat comparator = ComparatorCompat diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java index d561e910..c9da016c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/dto/OrdineLavorazioneDTO.java @@ -43,7 +43,7 @@ public class OrdineLavorazioneDTO { private String gestione; - private Integer numOrd; + private int numOrd; private String descrizioneProd; @@ -166,11 +166,11 @@ public class OrdineLavorazioneDTO { this.gestione = gestione; } - public Integer getNumOrd() { + public int getNumOrd() { return numOrd; } - public void setNumOrd(Integer numOrd) { + public void setNumOrd(int numOrd) { this.numOrd = numOrd; } diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterLayoutView.java index 132d0694..8131dea1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterLayoutView.java @@ -9,6 +9,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.SearchView; +import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import it.integry.integrywmsnative.core.di.BindableBoolean; @@ -24,14 +25,26 @@ public abstract class FilterLayoutView extends BottomSheetDialogFragment { private SearchView mSearchView; private RunnableArgs mOnFilterChanged; + @Override + public void onStart() { + super.onStart(); + } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + var behavior = BottomSheetBehavior.from((View) view.getParent()); + behavior.setSkipCollapsed(true); + + getDialog().setOnShowListener(dialogInterface -> { + behavior.setState(BottomSheetBehavior.STATE_EXPANDED); + }); + if (mSearchView != null) this.initSearchView(); } + protected void initSearchView() { mSearchView.setOnSearchClickListener(v -> { 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/ui/filter_chips/filters/FilterCommessaLayoutView.java similarity index 91% rename from app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/FilterCommessaLayoutView.java rename to app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/filters/FilterCommessaLayoutView.java index 5631ac47..88c095bc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/filters/FilterCommessaLayoutView.java +++ b/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/filters/FilterCommessaLayoutView.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters; +package it.integry.integrywmsnative.ui.filter_chips.filters; import android.os.Bundle; import android.view.LayoutInflater; @@ -7,17 +7,16 @@ 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 java.util.stream.Collectors; import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.R; @@ -43,16 +42,16 @@ public class FilterCommessaLayoutView extends FilterLayoutView { @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); + mBindings = LayoutFilterCommessaBinding.inflate(inflater, container, false); this.mBindings.setView(this); refreshList(); this.setSearchView(this.mBindings.searchView, newFilter -> { - hiddenCommesse = Stream.of(allCommesse) + hiddenCommesse = allCommesse.stream() .filter(x -> !x.getCodJcom().toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) && !x.getDescrizione().toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT))) - .toList(); + .collect(Collectors.toList()); refreshList(); }); @@ -73,7 +72,7 @@ public class FilterCommessaLayoutView extends FilterLayoutView { .thenComparing(new ComparatorCompat<>((x, y) -> y.getOriginalModel().getCodJcom().compareTo(x.getOriginalModel().getCodJcom()))) .reversed(); - listModel.setValue(Stream.of(getAllCommesse()) + listModel.setValue(getAllCommesse().stream() .filter(x -> !hiddenCommesse.contains(x)) .map(x -> { var selectedBoolean = new BindableBoolean(preSelectedCommesse.contains(x)); @@ -88,17 +87,17 @@ public class FilterCommessaLayoutView extends FilterLayoutView { .setOriginalModel(x); }) .sorted(c) - .toList()); + .collect(Collectors.toList())); } public void onConfirm() { if (onFilterApplied == null) return; - this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue())) + this.onFilterApplied.run(Objects.requireNonNull(listModel.getValue()).stream() .filter(x -> x.selected.get()) .map(x -> x.originalModel) - .toList()); + .collect(Collectors.toList())); dismiss(); } diff --git a/app/src/main/res/layout-large/fragment_prod_rientro_merce_order_detail.xml b/app/src/main/res/layout-large/fragment_prod_rientro_merce_order_detail.xml index 2b88eeaf..34084d5d 100644 --- a/app/src/main/res/layout-large/fragment_prod_rientro_merce_order_detail.xml +++ b/app/src/main/res/layout-large/fragment_prod_rientro_merce_order_detail.xml @@ -137,7 +137,7 @@ style="@style/TextViewMaterial.Dialog.HeadlineText" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@{`Ordine #`+ view.currentOrder.numOrd.toString()}" + android:text="@{`Ordine #`+ view.currentOrder.numOrd}" android:textStyle="bold" tools:text="Ordine #218" /> 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 3accde27..7c86adde 100644 --- a/app/src/main/res/layout/fragment_main_ordini_uscita.xml +++ b/app/src/main/res/layout/fragment_main_ordini_uscita.xml @@ -78,7 +78,7 @@ android:orientation="vertical" app:layout_constraintGuide_percent="0.85" /> - - + diff --git a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml index 8c36d9b7..dfebdd42 100644 --- a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml +++ b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml @@ -131,7 +131,7 @@ style="@style/TextViewMaterial.Dialog.HeadlineText" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@{`Ordine #`+ view.currentOrder.numOrd.toString()}" + android:text="@{`Ordine #`+ view.currentOrder.numOrd}" android:textStyle="bold" tools:text="Ordine #218" /> diff --git a/app/src/main/res/layout/fragment_prod_rientro_merce_order_list.xml b/app/src/main/res/layout/fragment_prod_rientro_merce_order_list.xml index 743ee057..38235587 100644 --- a/app/src/main/res/layout/fragment_prod_rientro_merce_order_list.xml +++ b/app/src/main/res/layout/fragment_prod_rientro_merce_order_list.xml @@ -18,13 +18,34 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/filter_chips"> - + android:layout_height="wrap_content" + android:orientation="vertical"> + + + + + + + - - + diff --git a/app/src/main/res/layout/layout_filter_commessa.xml b/app/src/main/res/layout/layout_filter_commessa.xml index 1557e4a8..853037fb 100644 --- a/app/src/main/res/layout/layout_filter_commessa.xml +++ b/app/src/main/res/layout/layout_filter_commessa.xml @@ -11,13 +11,13 @@ + type="it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView" /> + type="it.integry.integrywmsnative.ui.filter_chips.filters.FilterCommessaLayoutView.ListModel" />