From 4f490eb737fe7242ca60033a68ac42a0f064b5e1 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Wed, 26 Jun 2024 12:16:46 +0200 Subject: [PATCH 1/3] =?UTF-8?q?In=20accettazione=20da=20bolla=20inserita?= =?UTF-8?q?=20ricerca=20per=20descrizione=20articolo=20e=20aggiunta=20conf?= =?UTF-8?q?erma=20della=20quantit=C3=A0=20al=20long=20click?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccettazioneBollaPickingActivity.java | 97 +++++++++++++++++-- .../AccettazioneBollaPickingBindings.java | 22 +++++ .../AccettazioneBollaPickingViewModel.java | 67 ++++++++----- ...cettazioneBollaPickingFilterViewModel.java | 75 ++++++++++++++ .../AccettazioneBollaPickingListAdapter.java | 10 ++ 5 files changed, 235 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingBindings.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/filters/AccettazioneBollaPickingFilterViewModel.java diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java index 7710b378..6ae8b99d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java @@ -22,6 +22,8 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; import javax.inject.Inject; @@ -33,6 +35,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.BaseActivity; +import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbAart; @@ -54,11 +57,15 @@ import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.SitBo import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.TestataBollaAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.AccettazioneBollaPickingOrderBy; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.accettazione_bolla_picking.filters.AccettazioneBollaPickingFilterViewModel; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListAdapter; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListModel; +import it.integry.integrywmsnative.gest.accettazione_ordini_picking.filters.FilterDescrLayoutView; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; @@ -82,8 +89,9 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac private ActivityAccettazioneBollaPickingBinding mBindings; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; - - + + private final AccettazioneBollaPickingFilterViewModel mAppliedFilterViewModel = new AccettazioneBollaPickingFilterViewModel(); + private final ObservableArrayList mAccettazioneMutableData = new ObservableArrayList<>(); public BindableBoolean noItemsToPick = new BindableBoolean(false); @@ -150,7 +158,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac this.initVars(); this.initBarcodeReader(); this.initRecyclerView(); -// this.initFilters(); + this.initFilters(); this.initFab(); boolean useQtaBolla = SettingsManager.iDB().isFlagAccettazioneBollaUseQtaOrd(); @@ -201,16 +209,85 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac this.mBindings.accettazionePickingList.setAdapter(adapter); this.mViewModel.getPickingList().observe(this, updatedData -> { -// mAppliedFilterViewModel.init(updatedData); + mAppliedFilterViewModel.init(updatedData); refreshList(); }); + adapter.setOnLongClickListener(clickedItem -> { + this.mViewModel.dispatchBollaRow(clickedItem, true); + }); + adapter.setOnItemClicked(clickedItem -> { this.mViewModel.dispatchBollaRow(clickedItem); }); } + private void initFilters() { + + var onPredicateChanged = new OnGeneralChangedCallback() { + @Override + public void run() { + refreshList(); + } + }; + + mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(onPredicateChanged); + + List filterList = Stream.of(AccettazioneBollaPickingBindings.AVAILABLE_FILTERS.entrySet()).map(Map.Entry::getValue).sortBy(FilterChipDTO::getPosizione).toList(); + + for (FilterChipDTO filterChipDTO : filterList) { + + FilterChipView filterChipView = new FilterChipView(this, filterChipDTO.getFilterChipText(), v -> initBottomSheetDialogFilter(filterChipDTO)); + + if (filterChipDTO.getID() == AccettazioneBollaPickingBindings.DESCR_FILTER_ID) { + mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null) { + mViewModel.resetMatchedRows(); + 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.getCurrentDescrPredicate().set(null)); + } + + this.mBindings.filterChipsGroup.addView(filterChipView); + } + } + + private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) { + + filterChipDTO.getFilterLayoutView().setFilterName(filterChipDTO.getFilterChipText()).setContext(this); + + var filterLayoutView = filterChipDTO.getFilterLayoutView(); + + if (filterChipDTO.getID() == AccettazioneBollaPickingBindings.DESCR_FILTER_ID) { + ((FilterDescrLayoutView) filterLayoutView) + .setAll(mAppliedFilterViewModel.getAllDescrs()) + .setAvailable(mAppliedFilterViewModel.getAvailableDescrs()) + .setOnFilterApplied(mAppliedFilterViewModel::setDescrFilter) + .setPreselected( + Stream.of(Objects.requireNonNull(mViewModel.getPickingList().getValue())) + .filter(mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null ? x -> false : Objects.requireNonNull(mAppliedFilterViewModel.getCurrentDescrPredicate().get())) + .map(x -> x.getMtbAart().getDescrizioneEstesa()).toList() + ); + } + + + if (!filterLayoutView.isAdded()) filterLayoutView.show(getSupportFragmentManager(), "TAG"); + } private void initFab() { fabPopupMenu = new PopupMenu(this, this.mBindings.accettazioneOrdineInevasoFab, @@ -246,13 +323,13 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac runOnUiThread(() -> { List tmpList; -// if (mAppliedFilterViewModel != null) { -// mAppliedFilterViewModel.applyAllTests(); -// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); -// } else { + if (mAppliedFilterViewModel != null) { + mAppliedFilterViewModel.applyAllTests(); + tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); + } else { tmpList = mViewModel.getPickingList().getValue(); -// } -// + } + var list = convertDataModelToListModel(tmpList); this.mAccettazioneMutableData.clear(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingBindings.java new file mode 100644 index 00000000..40df6a37 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingBindings.java @@ -0,0 +1,22 @@ +package it.integry.integrywmsnative.gest.accettazione_bolla_picking; + +import java.util.HashMap; + +import it.integry.integrywmsnative.gest.accettazione_ordini_picking.filters.FilterDescrLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; + +public class AccettazioneBollaPickingBindings { + + public static final int DESCR_FILTER_ID = 0; + + public static final HashMap AVAILABLE_FILTERS = new HashMap<>() { + { + + put(DESCR_FILTER_ID, new FilterChipDTO() + .setID(DESCR_FILTER_ID) + .setPosizione(1) + .setFilterChipText("Descrizione articolo") + .setFilterLayoutView(new FilterDescrLayoutView())); + } + }; +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java index ad521005..6e8b80eb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java @@ -443,7 +443,11 @@ public class AccettazioneBollaPickingViewModel { dispatchBollaRow(pickingObjectDTO); } - public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO) { + public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO){ + dispatchBollaRow(pickingObjectDTO, false); + } + + public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO, boolean longClick) { if (this.mCurrentMtbColt == null) return; AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(); @@ -578,31 +582,42 @@ public class AccettazioneBollaPickingViewModel { } } - this.sendOnItemDispatched( - pickingObjectDTO, - pickingObjectDTO.getMtbAart(), - initialNumCnf, initialQtaCnf, initialQtaTot, - qtaDaEvadere, - numCnfDaEvadere, - qtaCnfDaEvadere, - qtaColDaPrelevare, - numCnfDaPrelevare, - qtaCnfDaPrelevare, - null, - null, - null, - partitaMag, - dataScad, - true, - (pickedQuantityDTO, shouldCloseLU) -> { - this.saveNewRow(pickingObjectDTO, - pickedQuantityDTO.getNumCnf(), - pickedQuantityDTO.getQtaCnf(), - pickedQuantityDTO.getQtaTot(), - pickedQuantityDTO.getPartitaMag(), - pickedQuantityDTO.getDataScad(), - shouldCloseLU); - }); + if (!longClick){ + this.sendOnItemDispatched( + pickingObjectDTO, + pickingObjectDTO.getMtbAart(), + initialNumCnf, initialQtaCnf, initialQtaTot, + qtaDaEvadere, + numCnfDaEvadere, + qtaCnfDaEvadere, + qtaColDaPrelevare, + numCnfDaPrelevare, + qtaCnfDaPrelevare, + null, + null, + null, + partitaMag, + dataScad, + true, + (pickedQuantityDTO, shouldCloseLU) -> { + this.saveNewRow(pickingObjectDTO, + pickedQuantityDTO.getNumCnf(), + pickedQuantityDTO.getQtaCnf(), + pickedQuantityDTO.getQtaTot(), + pickedQuantityDTO.getPartitaMag(), + pickedQuantityDTO.getDataScad(), + shouldCloseLU); + }); + } else { + this.saveNewRow( + pickingObjectDTO, + initialNumCnf, + initialQtaCnf, + initialQtaTot, + partitaMag, + dataScad, + false); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/filters/AccettazioneBollaPickingFilterViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/filters/AccettazioneBollaPickingFilterViewModel.java new file mode 100644 index 00000000..6280da7f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/filters/AccettazioneBollaPickingFilterViewModel.java @@ -0,0 +1,75 @@ +package it.integry.integrywmsnative.gest.accettazione_bolla_picking.filters; + +import androidx.databinding.ObservableField; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Stream; +import com.annimon.stream.function.Predicate; + +import java.util.List; +import java.util.Objects; + +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.PickingObjectDTO; + +public class AccettazioneBollaPickingFilterViewModel { + private final ObservableField> currentDescrPredicate = 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 setDescrFilter(List descrs) { + if (descrs == null || descrs.isEmpty()) currentDescrPredicate.set(null); + else { + currentDescrPredicate.set(o -> descrs.contains(o.getMtbAart().getDescrizione())); + } + } + + public void applyAllTests() { + + List returnList; + + if (currentDescrPredicate.get() == null) { + returnList = this.initialOrderList; + } else { + Stream tmpStream = Stream.of(this.initialOrderList) + .filter(x ->(currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) + ); + + returnList = tmpStream.toList(); + } + + this.currentFilteredOrderList.setValue(returnList); + } + + public ObservableField> getCurrentDescrPredicate() { + return currentDescrPredicate; + } + + public List getAllDescrs() { + return Stream + .of(Objects.requireNonNull(initialOrderList)) + .filter(x -> x.getMtbAart().getDescrizioneEstesa() != null) + .sortBy(x -> x.getMtbAart().getDescrizioneEstesa()) + .map(x -> x.getMtbAart().getDescrizioneEstesa() != null ? x.getMtbAart().getDescrizioneEstesa() : null) + .distinct() + .toList(); + } + + public List getAvailableDescrs() { + return Stream.of(this.initialOrderList) + .map(x -> x.getMtbAart().getDescrizioneEstesa()) + .distinct() + .toList(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java index 1d6ca3bb..bf8f8a83 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java @@ -33,6 +33,7 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd private final List mDataset = new ArrayList<>(); private RunnableArgs mOnItemClicked; + private RunnableArgs mOnItemLongClicked; static class SubheaderHolder extends RecyclerView.ViewHolder { @@ -75,6 +76,9 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd this.mOnItemClicked = onItemClicked; } + public void setOnLongClickListener(RunnableArgs onItemLongClicked){ + this.mOnItemLongClicked = onItemLongClicked; + } @Override public AccettazioneBollaPickingListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { @@ -160,6 +164,12 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd if (this.mOnItemClicked != null) this.mOnItemClicked.run(pickingObjectDTO.getOriginalModel()); }); + + holder.mBinding.getRoot().setOnLongClickListener(v -> { + if (this.mOnItemLongClicked != null) + this.mOnItemLongClicked.run(pickingObjectDTO.getOriginalModel()); + return true; + }); } @Override From 074fb10b4417a7b6b9644cd513d70418122cb9f7 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Wed, 26 Jun 2024 16:03:07 +0200 Subject: [PATCH 2/3] Fix chiamata servizi duplicateUDS --- .../core/rest/consumers/ColliSpedizioneRESTConsumer.java | 6 +++--- .../rest/consumers/ColliSpedizioneRESTConsumerService.java | 4 ++-- .../gest/spedizione/SpedizioneViewModel.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java index 682f6ed0..a44d8bc2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java @@ -117,14 +117,14 @@ public class ColliSpedizioneRESTConsumer extends _BaseRESTConsumer implements Co } - public void duplicateUDSRow(DuplicateUDSRequestDTO duplicateUDSRequestDTO, RunnableArgs onComplete, RunnableArgs onFailed) { + public void duplicateUDS(DuplicateUDSRequestDTO duplicateUDSRequestDTO, RunnableArgs onComplete, RunnableArgs onFailed) { ColliSpedizioneRESTConsumerService colliSpedizioneRESTConsumerService = RESTBuilder.getService(ColliSpedizioneRESTConsumerService.class); - colliSpedizioneRESTConsumerService.duplicateUDSRow(duplicateUDSRequestDTO) + colliSpedizioneRESTConsumerService.duplicateUDS(duplicateUDSRequestDTO) .enqueue(new Callback<>() { @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { - analyzeAnswer(response, "spedizione/duplicateUDSRow", onComplete, onFailed); + analyzeAnswer(response, "spedizione/duplicateUDS", onComplete, onFailed); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java index 5492b609..b80f725d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java @@ -37,7 +37,7 @@ public interface ColliSpedizioneRESTConsumerService { @POST("wms/spedizione/deleteUDSRow") Call> deleteUDSRow(@Body DeleteUDSRowRequestDTO deleteUDSRowRequestDTO); - @POST("wms/spedizione/duplicateUDSRow") - Call> duplicateUDSRow(@Body DuplicateUDSRequestDTO duplicateUDSRequestDTO); + @POST("wms/spedizione/duplicateUDS") + Call> duplicateUDS(@Body DuplicateUDSRequestDTO duplicateUDSRequestDTO); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 3780c29e..c4e3d310 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -1628,7 +1628,7 @@ public class SpedizioneViewModel { .setMtbColt(savedMtbColt) .setNumOfDuplicates(inputNumber); - this.mColliSpedizioneRESTConsumer.duplicateUDSRow(duplicateUDSRequestDTO, data -> { + this.mColliSpedizioneRESTConsumer.duplicateUDS(duplicateUDSRequestDTO, data -> { onComplete.run(data.getMtbColtList()); }, this::sendError); }); From 74a3749e44bf9a80e4acd02426cd096f99f409ad Mon Sep 17 00:00:00 2001 From: MarcoE Date: Wed, 26 Jun 2024 16:13:43 +0200 Subject: [PATCH 3/3] -> v1.40.26 (443) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f7541cbf..e23a1106 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 442 - def appVersionName = '1.40.25' + def appVersionCode = 443 + def appVersionName = '1.40.26' signingConfigs { release {