In accettazione da bolla inserita ricerca per descrizione articolo e aggiunta conferma della quantità al long click

This commit is contained in:
Marco Elefante 2024-06-26 12:16:46 +02:00
parent bec80d980f
commit 4f490eb737
5 changed files with 235 additions and 36 deletions

View File

@ -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;
@ -83,6 +90,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private final AccettazioneBollaPickingFilterViewModel mAppliedFilterViewModel = new AccettazioneBollaPickingFilterViewModel();
private final ObservableArrayList<AccettazioneBollaPickingListModel> mAccettazioneMutableData = new ObservableArrayList<>();
@ -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<FilterChipDTO> 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<PickingObjectDTO> 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();

View File

@ -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<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {
{
put(DESCR_FILTER_ID, new FilterChipDTO()
.setID(DESCR_FILTER_ID)
.setPosizione(1)
.setFilterChipText("Descrizione articolo")
.setFilterLayoutView(new FilterDescrLayoutView()));
}
};
}

View File

@ -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);
}
}

View File

@ -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<Predicate<PickingObjectDTO>> currentDescrPredicate = new ObservableField<>();
private List<PickingObjectDTO> initialOrderList;
private final MutableLiveData<List<PickingObjectDTO>> currentFilteredOrderList = new MutableLiveData<>();
public void init(List<PickingObjectDTO> initialList) {
this.initialOrderList = initialList;
this.currentFilteredOrderList.setValue(this.initialOrderList);
}
public MutableLiveData<List<PickingObjectDTO>> getMutableFilteredOrderList() {
return this.currentFilteredOrderList;
}
public void setDescrFilter(List<String> descrs) {
if (descrs == null || descrs.isEmpty()) currentDescrPredicate.set(null);
else {
currentDescrPredicate.set(o -> descrs.contains(o.getMtbAart().getDescrizione()));
}
}
public void applyAllTests() {
List<PickingObjectDTO> returnList;
if (currentDescrPredicate.get() == null) {
returnList = this.initialOrderList;
} else {
Stream<PickingObjectDTO> tmpStream = Stream.of(this.initialOrderList)
.filter(x ->(currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x)))
);
returnList = tmpStream.toList();
}
this.currentFilteredOrderList.setValue(returnList);
}
public ObservableField<Predicate<PickingObjectDTO>> getCurrentDescrPredicate() {
return currentDescrPredicate;
}
public List<String> 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<String> getAvailableDescrs() {
return Stream.of(this.initialOrderList)
.map(x -> x.getMtbAart().getDescrizioneEstesa())
.distinct()
.toList();
}
}

View File

@ -33,6 +33,7 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
private final List<AccettazioneBollaPickingListModel> mDataset = new ArrayList<>();
private RunnableArgs<PickingObjectDTO> mOnItemClicked;
private RunnableArgs<PickingObjectDTO> mOnItemLongClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
@ -75,6 +76,9 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
this.mOnItemClicked = onItemClicked;
}
public void setOnLongClickListener(RunnableArgs<PickingObjectDTO> 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