From c104313d8900864143fc15df195293da6c05749a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 4 Dec 2025 10:04:16 +0100 Subject: [PATCH] Migliorie UI --- .../MainApplicationModule.java | 7 - .../rest/consumers/ArticoloRESTConsumer.java | 13 +- .../core/rest/consumers/MesRESTConsumer.java | 17 +-- .../ProdFabbisognoLineeProdFragment.java | 122 ++++++++++-------- .../ProdFabbisognoLineeProdViewModel.java | 50 +++---- ...rodFabbisognoLineeProdFilterViewModel.java | 60 ++++----- .../ProdFabbisognoLineeProdRESTConsumer.java | 41 +++--- ...logRowInfoProdFabbisognoLineeProdView.java | 65 +++++++--- ...wInfoProdFabbisognoLineeProdViewModel.java | 19 ++- ...agment_prod_rientro_merce_order_detail.xml | 2 +- .../res/layout/dialog_ask_cliente__page1.xml | 2 +- .../res/layout/dialog_ask_cliente__page2.xml | 2 +- .../dialog_ask_magazzino_prossimita.xml | 2 +- app/src/main/res/layout/dialog_exception.xml | 2 +- .../main/res/layout/dialog_input_general.xml | 2 +- .../layout/dialog_print_order_sscc_list.xml | 2 +- .../main/res/layout/dialog_print_ul_sscc.xml | 2 +- ...og_row_info_prod_fabbisogno_linee_prod.xml | 6 +- ...ogno_linee_prod__linea_prod__list_item.xml | 42 ++++++ app/src/main/res/layout/dialog_scan_art.xml | 2 +- .../res/layout/dialog_scan_codice_griglia.xml | 2 +- .../res/layout/dialog_start_production.xml | 2 +- .../res/layout/dialog_switch_user_depo.xml | 6 +- ...dialog_ultime_consegne_filtro_avanzato.xml | 2 +- ...ltimi_arrivi_fornitore_filtro_avanzato.xml | 2 +- ...agment_prod_rientro_merce_order_detail.xml | 2 +- app/src/main/res/values/textview_style.xml | 10 -- 27 files changed, 261 insertions(+), 225 deletions(-) create mode 100644 app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod__linea_prod__list_item.xml diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 4c1ef1d6..09696ced 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -56,7 +56,6 @@ import it.integry.integrywmsnative.core.sound.SoundAlertService; import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer; -import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; @@ -263,12 +262,6 @@ public class MainApplicationModule { return new PosizioniRESTConsumer(restBuilder, systemRESTConsumer, executorService); } - @Provides - @Singleton - ProdFabbisognoLineeProdRESTConsumer providesProdFabbisognoLineeProdRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { - return new ProdFabbisognoLineeProdRESTConsumer(restBuilder, systemRESTConsumer); - } - @Provides @Singleton DocInterniRESTConsumer provideDocInterniRESTConsumer(RESTBuilder restBuilder, MagazzinoRESTConsumer magazzinoRESTConsumer) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java index 1eae8601..60cc7853 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java @@ -132,7 +132,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer { var codMarts = codMartToFind.parallelStream() .filter(Objects::nonNull) .distinct() -.collect(Collectors.toUnmodifiableList()); + .collect(Collectors.toUnmodifiableList()); ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class); var response = articoloRESTConsumer .getByCodMart(new RetrieveArticoloByCodMartRequestDTO() @@ -197,17 +197,6 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer { return this.systemRESTConsumer.processSqlSynchronized("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList); } - public void getArtsGroups(List groupsToFind, RunnableArgs> onComplete, RunnableArgs onFailed) { - executorService.execute(() -> { - try { - var data = getArtsGroupsSynchronized(groupsToFind); - if (onComplete != null) onComplete.run(data); - } catch (Exception ex) { - if (onFailed != null) onFailed.run(ex); - } - }); - } - public List getUntMisArtsSynchronized(List inputUntMis) throws Exception { List> whereCondList = inputUntMis.parallelStream() diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java index eb346382..5330fab4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MesRESTConsumer.java @@ -66,21 +66,14 @@ public class MesRESTConsumer extends _BaseRESTConsumer { } - public void getOrdiniLavorazione(String flagEvaso, RunnableArgs> onComplete, RunnableArgs onFailed) { + public List getOrdiniLavorazioneSynchronized(String flagEvaso) throws Exception { MesRESTConsumerService mesRESTConsumerService = restBuilder.getService(MesRESTConsumerService.class); - mesRESTConsumerService.getOrdiniLavorazione(flagEvaso) - .enqueue(new ManagedErrorCallback<>() { - @Override - public void onResponse(Call>> call, Response>> response) { - analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed); - } + var response = mesRESTConsumerService.getOrdiniLavorazione(flagEvaso) + .execute(); - @Override - public void onFailure(Call>> call, @NonNull final Exception e) { - onFailed.run(e); - } - }); + var data = analyzeAnswer(response, "mes_v2/getOrdiniLavorazione"); + return data; } public void getLineeProduzione(String codJfasParent, RunnableArgs> onComplete, RunnableArgs onFailed) { 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 86fcc1ed..6ac96989 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 @@ -11,7 +11,6 @@ import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.fragment.app.Fragment; -import com.annimon.stream.Stream; import com.ravikoradiya.liveadapter.LiveAdapter; import com.ravikoradiya.liveadapter.Type; @@ -56,6 +55,7 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbiso import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView; +import kotlin.Unit; /** * A simple {@link Fragment} subclass. @@ -119,20 +119,39 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi @Override public void onStart() { super.onStart(); - mViewModel.init(); + + this.onLoadingStarted(); + executorService.execute(() -> { + try { + mViewModel.init(); + this.onLoadingEnded(); + } catch (Exception ex) { + this.onError(ex); + } + }); + } private void initRecyclerView() { mViewModel.getOrdiniList().observe(getViewLifecycleOwner(), data -> { - mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE); this.onLoadingStarted(); - this.initMtbGrupsCache(() -> { - this.initJtbComtCache(this::onLoadingEnded); + + executorService.execute(() -> { + try { + this.initMtbGrupsCache(); + this.initJtbComtCache(); + this.onLoadingEnded(); + + handler.post(() -> { + mFilterViewModel.init(mViewModel.getOrdiniList().getValue()); + this.refreshList(null); + }); + } catch (Exception ex) { + this.onError(ex); + } }); - mFilterViewModel.init(mViewModel.getOrdiniList().getValue()); - this.refreshList(null); }); var itemTypeHeader = new Type(R.layout.fragment_prod_fabbisogno_linee_title_item, BR.item); @@ -142,13 +161,13 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi var item = x.getBinding().getItem(); item.getSelected().set(!item.getSelected().get()); - Stream.of(mProdFabbisognoItemModel) + mProdFabbisognoItemModel.stream() .filter(y -> y instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) y).getOrdineLavorazioneDTO().getCodJfas().equals(item.getTitle())) .forEach(y -> { ((ProdFabbisognoLineeItemModelDto) y).getSelected().set(item.selected.get()); }); - fabVisible.set(Stream.of(mProdFabbisognoItemModel) + fabVisible.set(mProdFabbisognoItemModel.stream() .filter(y -> y instanceof ProdFabbisognoLineeItemModelDto) .anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get())); @@ -159,7 +178,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi var item = x.getBinding().getItem(); item.getSelected().set(!item.getSelected().get()); - fabVisible.set(Stream.of(mProdFabbisognoItemModel) + fabVisible.set(mProdFabbisognoItemModel.stream() .filter(y -> y instanceof ProdFabbisognoLineeItemModelDto) .anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get())); @@ -169,6 +188,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi new LiveAdapter(mProdFabbisognoItemModel) .map(GroupTitleModel.class, itemTypeHeader) .map(ProdFabbisognoLineeItemModelDto.class, itemType) + .onNoData(noData -> { + mBindings.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE); + return Unit.INSTANCE; + }) .into(this.mBindings.inventarioList); } @@ -191,10 +214,6 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi private List convertDataModelToListModel(List itemModel) { - Stream.of(itemModel) - .sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas())) - .toList(); - List listaFinale = new ArrayList<>(); String currentGroup = null; @@ -224,10 +243,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); - List filterList = Stream.of(ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet()) + List filterList = ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet().stream() .map(Map.Entry::getValue) - .sortBy(FilterChipDTO::getPosizione) - .toList(); + .sorted(Comparator.comparing(FilterChipDTO::getPosizione)) + .collect(Collectors.toList()); for (FilterChipDTO filterChipDTO : filterList) { @@ -303,11 +322,11 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi .setAllNumOrds(mFilterViewModel.getAllNumOrds()) .setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds()) .setOnFilterApplied(mFilterViewModel::setNumOrdFilter) - .setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrdiniList().getValue())) + .setPreSelectedNumOrds(Objects.requireNonNull(mViewModel.getOrdiniList().getValue()).stream() .filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ? x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentNumOrdsPredicate().get())) .map(x -> x.getOrdineLavorazioneDTO().getNumOrd()) - .toList()); + .collect(Collectors.toList())); case ProdFabbisognoLineeProdBindings.MGRP_FILTER_ID -> ((FilterGruppoMercLayoutView) filterLayoutView) @@ -322,42 +341,36 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi } - private void initMtbGrupsCache(Runnable onComplete) { - var codMgrpArts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue())) - .flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ? - x.getOrdineLavorazioneDTO().getAvailableClassMerc() : new ArrayList<>())) + private void initMtbGrupsCache() throws Exception { + var codMgrpArts = Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()).stream() + .flatMap(x -> + (x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ? + x.getOrdineLavorazioneDTO().getAvailableClassMerc() : new ArrayList()).stream()) .map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp) - .withoutNulls() + .filter(Objects::nonNull) .distinct() - .toList(); + .collect(Collectors.toList()); - this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> { - this.mtbGrupCache = mtbGrupCache; - onComplete.run(); - }, this::onError); + this.mtbGrupCache = this.mArticoloRESTConsumer.getArtsGroupsSynchronized(codMgrpArts); } - private void initJtbComtCache(Runnable onComplete) { + private void initJtbComtCache() throws Exception { if (this.mViewModel.getOrdiniList().getValue() == null) { this.jtbComtCache = new ArrayList<>(); - onComplete.run(); return; } - var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue())) - .flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getCodJcom())) - .distinct().withoutNulls() - .toList(); + var jtbComts = Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()).stream() + .map(x -> x.getOrdineLavorazioneDTO().getCodJcom()) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); if (jtbComts.isEmpty()) { this.jtbComtCache = new ArrayList<>(); - onComplete.run(); return; } - this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> { - this.jtbComtCache = jtbComtCache; - onComplete.run(); - }, this::onError); + this.jtbComtCache = this.mCommessaRESTConsumer.getJtbComtsSynchronized(jtbComts); } @Override @@ -383,27 +396,34 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi .map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd())) .collect(Collectors.toList())); - LocalDate dataInizio = Stream.of(mProdFabbisognoItemModel) + LocalDate dataInizio = mProdFabbisognoItemModel.stream() .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) .map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrd()) .min(Comparator.naturalOrder()) .orElse(null); - LocalDate dataFine = Stream.of(mProdFabbisognoItemModel) + LocalDate dataFine = mProdFabbisognoItemModel.stream() .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) .map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrd()) .max(Comparator.naturalOrder()) .orElse(null); - List listMtbGrup = Stream.of(mProdFabbisognoItemModel) + List listMtbGrup = mProdFabbisognoItemModel.stream() .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) - .flatMap(x -> Stream.of(((ProdFabbisognoLineeItemModelDto) x).getSelectedMtbGrup())) - .toList(); + .flatMap(x -> ((ProdFabbisognoLineeItemModelDto) x).getSelectedMtbGrup().stream()) + .collect(Collectors.toList()); - this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine, onCompleteData -> { - startPickingActivity(listMtbGrup, onCompleteData); + executorService.execute(() -> { + try { + onLoadingStarted(); + var fabbisognoData = this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine); + onLoadingEnded(); + + startPickingActivity(listMtbGrup, fabbisognoData); + } catch (Exception e) { + this.onError(e); + } }); - } private void startPickingActivity(List listMtbGrup, List fabbisognoList) { @@ -414,10 +434,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi .map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd())) .collect(Collectors.toList())); - Stream streamSitArtOrd = Stream.of(fabbisognoList); + java.util.stream.Stream streamSitArtOrd = fabbisognoList.stream(); streamSitArtOrd = listMtbGrup != null && !listMtbGrup.isEmpty() ? - streamSitArtOrd.filter(x -> Stream.of(listMtbGrup).anyMatch(y -> y.getCodMgrp().equalsIgnoreCase(x.getCodMgrp()))) : + streamSitArtOrd.filter(x -> listMtbGrup.stream().anyMatch(y -> y.getCodMgrp().equalsIgnoreCase(x.getCodMgrp()))) : streamSitArtOrd; List sitArtOrdDTOS = streamSitArtOrd.map(x -> { @@ -439,7 +459,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi return sitArtOrdDTO; }) - .toList(); + .collect(Collectors.toList()); boolean divideByGrpMerc = SettingsManager.iDB().isGroupPoductionByCommodityGroup(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdViewModel.java index c3a41823..0f6cf9f2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/ProdFabbisognoLineeProdViewModel.java @@ -3,14 +3,12 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import com.annimon.stream.Stream; - import java.time.LocalDate; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -35,47 +33,41 @@ public class ProdFabbisognoLineeProdViewModel { this.mMesRESTConsumer = mesRESTConsumer; } - public void init() { + public void init() throws Exception { loadData(); } - public void loadData() { - this.sendOnLoadingStarted(); + public void loadData() throws Exception { - this.mMesRESTConsumer.getOrdiniLavorazione("I", ordini -> { + var ordini = this.mMesRESTConsumer.getOrdiniLavorazioneSynchronized("I"); - List itemModel = Stream.of(ordini) - .filter(x -> x.getCodMdep().equals(SettingsManager.i().getUserSession().getDepo().getCodMdep())) - .map(ord -> new ProdFabbisognoLineeItemModelDto() - .setOrdineLavorazioneDTO(ord) - ) - .sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas())) - .toList(); + List itemModel = ordini.stream() + .filter(x -> x.getCodMdep().equals(SettingsManager.i().getUserSession().getDepo().getCodMdep())) + .map(ord -> + new ProdFabbisognoLineeItemModelDto() + .setOrdineLavorazioneDTO(ord) + ) + .sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas())) + .collect(Collectors.toList()); - ordiniList.postValue(itemModel); - this.sendOnLoadingEnded(); - }, this::sendError); + ordiniList.postValue(itemModel); } public LiveData> getOrdiniList() { return ordiniList; } - public void loadFabbisogno(String ordini, String codMdep, LocalDate dataInizio, LocalDate dataFine, RunnableArgs> onComplete) { - this.sendOnLoadingStarted(); + public List loadFabbisogno(String ordini, String codMdep, LocalDate dataInizio, LocalDate dataFine) throws Exception { - this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(ordini, codMdep, jtbFasi -> { - if (jtbFasi == null) jtbFasi = new ArrayList<>(); + var jtbFasi = this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisognoSynchronized(ordini, codMdep); + if (jtbFasi == null) jtbFasi = new ArrayList<>(); - Stream.of(jtbFasi) - .forEach(x -> { - x.setDataInizio(dataInizio); - x.setDataFine(dataFine); - }); + jtbFasi.forEach(x -> { + x.setDataInizio(dataInizio); + x.setDataFine(dataFine); + }); - this.sendOnLoadingEnded(); - onComplete.run(jtbFasi); - }, this::sendError); + return jtbFasi; } 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 5c88e6dd..14d9c119 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 @@ -3,12 +3,11 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.filters; import androidx.databinding.ObservableField; import androidx.lifecycle.MutableLiveData; -import com.annimon.stream.Stream; -import com.annimon.stream.function.Predicate; - import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.function.Predicate; import java.util.stream.Collectors; import it.integry.integrywmsnative.core.model.MtbGrup; @@ -45,9 +44,11 @@ public class ProdFabbisognoLineeProdFilterViewModel { this.selectedMtbGrup = new ArrayList<>(); } else { this.selectedMtbGrup = mtbGrupList; - var mtbGrups = Stream.of(mtbGrupList).map(MtbGrup::getCodMgrp).toList(); + var mtbGrups = mtbGrupList.stream() + .map(MtbGrup::getCodMgrp) + .collect(Collectors.toList()); - currentGruppoMercPredicate.set(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc()) + currentGruppoMercPredicate.set(x -> x.getOrdineLavorazioneDTO().getAvailableClassMerc().stream() .anyMatch(y -> mtbGrups.contains(y.getCodMgrp()))); } } @@ -59,16 +60,19 @@ public class ProdFabbisognoLineeProdFilterViewModel { currentGruppoMercPredicate.get() == null) { returnList = this.initialList; } else { - returnList = Stream.of(this.initialList) + returnList = this.initialList.stream() .filter(x -> (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) && (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) - ).map(x -> x.setSelectedMtbGrup(this.selectedMtbGrup)).toList(); + ) + .map(x -> x.setSelectedMtbGrup(this.selectedMtbGrup)) + .collect(Collectors.toList()); + ; } this.currentList.setValue(returnList); } - public ObservableField> getCurrentNumOrdsPredicate() { + public ObservableField> getCurrentNumOrdsPredicate() { return currentNumOrdsPredicate; } @@ -87,11 +91,11 @@ public class ProdFabbisognoLineeProdFilterViewModel { public List getAvailableNumOrds() { if (currentGruppoMercPredicate.get() == null) return getAllNumOrds(); else { - return Stream.of(this.initialList) + return this.initialList.stream() .filter(x -> (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x)))) .map(x -> x.getOrdineLavorazioneDTO().getNumOrd()) .distinct() - .toList(); + .collect(Collectors.toList()); } } @@ -100,43 +104,41 @@ public class ProdFabbisognoLineeProdFilterViewModel { } public List getAllGruppoMerc(List mtbGrupFullList) { - var codMgrp = Stream.of(initialList) + var codMgrp = initialList.stream() .flatMap(x -> - Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ? + (x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ? x.getOrdineLavorazioneDTO().getAvailableClassMerc() : - new ArrayList<>())) + new ArrayList()).stream()) .map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp) - .withoutNulls() + .filter(Objects::nonNull) .distinct() - .toList(); + .collect(Collectors.toList()); - return Stream.of(Objects.requireNonNull(mtbGrupFullList)) - .filter(x -> codMgrp.contains(x.getCodMgrp())) + return Objects.requireNonNull(mtbGrupFullList).stream() + .filter(x -> x != null && codMgrp.contains(x.getCodMgrp())) .distinct() - .withoutNulls() - .sortBy(MtbGrup::getDescrizione) - .toList(); + .sorted(Comparator.comparing(MtbGrup::getDescrizione)) + .collect(Collectors.toList()); } - public List getAvailableGruppoMerc(List mtbGrupFullList){ - if (currentNumOrdsPredicate.get() == null){ + public List getAvailableGruppoMerc(List mtbGrupFullList) { + if (currentNumOrdsPredicate.get() == null) { return getAllGruppoMerc(mtbGrupFullList); } else { - List availableCodMgrups = Stream.of(this.initialList) + List availableCodMgrups = this.initialList.stream() .filter(x -> (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) ) - .flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc())) + .flatMap(x -> x.getOrdineLavorazioneDTO().getAvailableClassMerc().stream()) .map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp) .distinct() .toList(); - return Stream.of(Objects.requireNonNull(mtbGrupFullList)) - .filter(x -> availableCodMgrups.contains(x.getCodMgrp())) + return Objects.requireNonNull(mtbGrupFullList).stream() + .filter(x -> x != null && availableCodMgrups.contains(x.getCodMgrp())) .distinct() - .withoutNulls() - .sortBy(MtbGrup::getDescrizione) - .toList(); + .sorted(Comparator.comparing(MtbGrup::getDescrizione)) + .collect(Collectors.toList()); } } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/rest/ProdFabbisognoLineeProdRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/rest/ProdFabbisognoLineeProdRESTConsumer.java index 710cd106..9b422432 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/rest/ProdFabbisognoLineeProdRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/rest/ProdFabbisognoLineeProdRESTConsumer.java @@ -1,26 +1,21 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest; -import androidx.annotation.NonNull; - -import com.google.gson.reflect.TypeToken; +import com.google.common.reflect.TypeToken; import java.lang.reflect.Type; +import java.time.LocalDate; import java.util.ArrayList; -import java.util.Date; import java.util.List; +import javax.inject.Inject; import javax.inject.Singleton; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.JtbFasi; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; -import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback; -import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; -import retrofit2.Call; -import retrofit2.Response; @Singleton public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer { @@ -28,32 +23,25 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer { private final RESTBuilder restBuilder; private final SystemRESTConsumer systemRESTConsumer; + @Inject public ProdFabbisognoLineeProdRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { this.restBuilder = restBuilder; this.systemRESTConsumer = systemRESTConsumer; } - public void loadFabbisogno(String numOrd, String codMdep, RunnableArgs> onComplete, RunnableArgs onFailed) { + public List loadFabbisognoSynchronized(String numOrd, String codMdep) throws Exception { ProdFabbisognoLineeProdRESTConsumerService prodFabbisognoLineeProdRESTConsumerService = restBuilder.getService(ProdFabbisognoLineeProdRESTConsumerService.class); - prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(numOrd, codMdep) - .enqueue(new ManagedErrorCallback<>() { - @Override - public void onResponse(Call>> call, - Response>> response) { - analyzeAnswer(response, "retrieveFabbisogno", onComplete, onFailed); - } + var response = prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(numOrd, codMdep) + .execute(); - @Override - public void onFailure(Call>> call, @NonNull final Exception e) { - onFailed.run(e); - } - }); + var data = analyzeAnswer(response, "approvvigionamento/retrieveFabbisogno"); + return data; } - public void loadFabbisogno(String codMart, String ordini, Date startDate, Date endDate, String codMdep, RunnableArgs> onComplete, RunnableArgs onFailed) { - String sql = "SELECT DISTINCT cod_jfas\n" + + public ArrayList loadCodJfasOfFabbisognoSynchronized(String codMart, String ordini, LocalDate startDate, LocalDate endDate, String codMdep) throws Exception { + String sql = "SELECT DISTINCT jtb_fasi.cod_jfas, jtb_fasi.descrizione\n" + "FROM (SELECT DENSE_RANK() OVER (PARTITION BY dtb_ordt.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord ORDER BY dtb_ord_steps.data_iniz DESC) AS row_n,\n" + " dtb_ord_steps.*\n" + " FROM dtb_ord_steps\n" + @@ -71,11 +59,12 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer { " AND dtb_ordt.num_ord IN ( " + ordini + " )\n" + " AND dtb_ordt.data_ord BETWEEN " + UtilityDB.valueToString(startDate) + " AND " + UtilityDB.valueToString(endDate) + "\n" + " AND dtb_ordr.cod_mart = " + UtilityDB.valueToString(codMart) + ") t\n" + + "INNER JOIN jtb_fasi ON t.cod_jfas = jtb_fasi.cod_jfas\n" + "WHERE t.row_n = 1"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - this.systemRESTConsumer.processSql(sql, typeOfObjectsList, onComplete, onFailed); + Type typeOfObjectsList = new TypeToken>() {}.getType(); + return this.systemRESTConsumer.processSqlSynchronized(sql, typeOfObjectsList); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java index b51c592a..5ca5e49d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; +import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,19 +16,20 @@ import androidx.databinding.DataBindingUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Date; +import java.time.LocalDate; import java.util.List; import javax.inject.Inject; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.JtbFasi; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.DialogRowInfoProdFabbisognoLineeProdBinding; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; -import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; +import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoView implements DialogRowInfoProdFabbisognoLineeProdViewModel.Listener { @@ -35,6 +37,9 @@ public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoV @Inject DialogRowInfoProdFabbisognoLineeProdViewModel mViewModel; + @Inject + Handler handler; + private Context mContext; private DialogRowInfoProdFabbisognoLineeProdBinding mBindings; @@ -70,27 +75,45 @@ public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoV SitArtOrdDTO sitArtOrdDTO = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO(); - this.mViewModel.getFabbisognoList().removeObservers(this); - this.mViewModel.getFabbisognoList().observe(this, this::onFabbisognoListLoaded); + this.mViewModel.getLineeProdList().removeObservers(this); + this.mViewModel.getLineeProdList().observe(this, this::onLineeProdLoaded); + + this.onLoadingStarted(); + executorService.execute(() -> { + try { + this.mViewModel.init( + sitArtOrdDTO.getCodMart(), + sitArtOrdDTO.getCodMdep(), + (String) sitArtOrdDTO.getExtraInfo().get("ordini"), + (LocalDate) sitArtOrdDTO.getExtraInfo().get("dataInizio"), + (LocalDate) sitArtOrdDTO.getExtraInfo().get("dataFine")); + + this.onLoadingEnded(); + } catch (Exception e) { + this.onError(e); + } + }); - this.mViewModel.init( - sitArtOrdDTO.getCodMart(), - sitArtOrdDTO.getCodMdep(), - (String) sitArtOrdDTO.getExtraInfo().get("ordini"), - (Date) sitArtOrdDTO.getExtraInfo().get("dataInizio"), - (Date) sitArtOrdDTO.getExtraInfo().get("dataFine")); } - private void onFabbisognoListLoaded(List fabbisognoList) { + private void onLineeProdLoaded(List fabbisognoList) { for (int i = 0; i < fabbisognoList.size(); i++) { String currentKey = fabbisognoList.get(i).getCodJfas(); ViewGroup.LayoutParams lparams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - TextView tv = new TextView(this.mContext); - tv.setLayoutParams(lparams); - tv.setText(currentKey); - this.mBindings.contentView.addView(tv); + View inflatedLayout= getLayoutInflater().inflate(R.layout.dialog_row_info_prod_fabbisogno_linee_prod__linea_prod__list_item, null, false); + + inflatedLayout.setLayoutParams(lparams); + inflatedLayout.setTag(currentKey); + + TextView tvDescription = inflatedLayout.findViewById(R.id.description); + tvDescription.setText(fabbisognoList.get(i).getDescrizione()); + + TextView tvCode = inflatedLayout.findViewById(R.id.code); + tvCode.setText(fabbisognoList.get(i).getCodJfas()); + + this.mBindings.contentView.addView(inflatedLayout); } } @@ -102,13 +125,17 @@ public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoV @Override public void onLoadingStarted() { - this.mBindings.loadingView.setVisibility(View.VISIBLE); - this.mBindings.contentView.setVisibility(View.GONE); + handler.post(() -> { + this.mBindings.loadingView.setVisibility(View.VISIBLE); + this.mBindings.contentView.setVisibility(View.GONE); + }); } @Override public void onLoadingEnded() { - this.mBindings.loadingView.setVisibility(View.GONE); - this.mBindings.contentView.setVisibility(View.VISIBLE); + handler.post(() -> { + this.mBindings.loadingView.setVisibility(View.GONE); + this.mBindings.contentView.setVisibility(View.VISIBLE); + }); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdViewModel.java index c6b9e622..f51d9e5d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdViewModel.java @@ -2,18 +2,18 @@ package it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbis import androidx.lifecycle.MutableLiveData; -import java.util.Date; +import java.time.LocalDate; import java.util.List; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; -import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; +import it.integry.integrywmsnative.core.model.JtbFasi; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; public class DialogRowInfoProdFabbisognoLineeProdViewModel { private final ProdFabbisognoLineeProdRESTConsumer mProdFabbisognoLineeProdRESTConsumer; - private final MutableLiveData> mFabbisognoList = new MutableLiveData<>(); + private final MutableLiveData> mLineeProdList = new MutableLiveData<>(); private Listener mListener; @@ -23,18 +23,15 @@ public class DialogRowInfoProdFabbisognoLineeProdViewModel { } - public void init(String codMart, String codMdep, String ordni, Date startDate, Date endDate) { - this.sendOnLoadingStarted(); + public void init(String codMart, String codMdep, String ordni, LocalDate startDate, LocalDate endDate) throws Exception { - this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(codMart, ordni, startDate, endDate, codMdep, fabbisognoList -> { - this.mFabbisognoList.postValue(fabbisognoList); - this.sendOnLoadingEnded(); - }, this::sendError); + var lineeProd = this.mProdFabbisognoLineeProdRESTConsumer.loadCodJfasOfFabbisognoSynchronized(codMart, ordni, startDate, endDate, codMdep); + this.mLineeProdList.postValue(lineeProd); } - public MutableLiveData> getFabbisognoList() { - return mFabbisognoList; + public MutableLiveData> getLineeProdList() { + return mLineeProdList; } private void sendOnLoadingStarted() { 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 3f8eb194..51c634a6 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 @@ -134,7 +134,7 @@ tools:text="28 maggio 2021" /> diff --git a/app/src/main/res/layout/dialog_exception.xml b/app/src/main/res/layout/dialog_exception.xml index 60863c6f..4c383e7b 100644 --- a/app/src/main/res/layout/dialog_exception.xml +++ b/app/src/main/res/layout/dialog_exception.xml @@ -38,7 +38,7 @@ diff --git a/app/src/main/res/layout/dialog_input_general.xml b/app/src/main/res/layout/dialog_input_general.xml index 721705aa..9edc5dcd 100644 --- a/app/src/main/res/layout/dialog_input_general.xml +++ b/app/src/main/res/layout/dialog_input_general.xml @@ -40,7 +40,7 @@ + app:cardCornerRadius="16dp" + app:cardElevation="4dp"> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_scan_art.xml b/app/src/main/res/layout/dialog_scan_art.xml index ca6e4f2e..b62cb2bb 100644 --- a/app/src/main/res/layout/dialog_scan_art.xml +++ b/app/src/main/res/layout/dialog_scan_art.xml @@ -23,7 +23,7 @@ - + + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/dialog_switch_user_depo__list_item" /> diff --git a/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml index 6a25b854..17b5d599 100644 --- a/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml @@ -37,7 +37,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.Dialog.HeadlineText" + style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml index 958ae6fd..f5deb0b0 100644 --- a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml @@ -37,7 +37,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.Dialog.HeadlineText" + style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> 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 35e6f088..9becad3a 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 @@ -128,7 +128,7 @@ tools:text="28 maggio 2021" /> - - - - \ No newline at end of file