diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index 191e8132..f01b9cef 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -207,12 +207,12 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi } @Override - public void confirmCheckForUnlistedProduct(String barcode) { + public void confirmCheckForUnlistedProduct(String barcode, Runnable onComplete) { DialogSimpleMessageView.makeInfoDialog(getText(R.string.info).toString(), Html.fromHtml(getResources().getString(R.string.confirm_order_unlisted_item)), null, () -> { - this.mViewModel.loadArticolo(barcode); + this.mViewModel.loadArticolo(barcode, onComplete); }, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java index 79ef7990..7a651949 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.List; import javax.inject.Inject; @@ -25,7 +26,6 @@ import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinab import it.integry.integrywmsnative.core.exception.ArtNotFoundInGridException; import it.integry.integrywmsnative.core.exception.EmptyOrderException; import it.integry.integrywmsnative.core.exception.ExpiredProductListException; -import it.integry.integrywmsnative.core.exception.MultipleResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoArtsInGridException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -161,35 +161,45 @@ public class PVOrdineAcquistoEditViewModel { BarcodeManager.disable(); try { - List listArticoli = matchArticoliForBarcode(barcode); - if (listArticoli == null || listArticoli.isEmpty()) { - if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) { - this.mListener.confirmCheckForUnlistedProduct(barcode); - return; - } else { - throw new NoResultFromBarcodeException(barcode); - } - } - if (listArticoli.size() == 1) { - this.addArticoloToOrdine( - listArticoli.get(0), - onComplete, - this::sendError - ); - } else { - this.mListener.chooseArtFromList(listArticoli, (art) -> { - this.addArticoloToOrdine( - art, - onComplete, - this::sendError); - }); - } + List listArticoli = findArticoliByBarcode(barcode); + + if (listArticoli == null || listArticoli.isEmpty()) + onNoArtsFoundByBarcode(barcode, onComplete); + else + addArtFromGriglia(listArticoli, onComplete); + } catch (Exception e) { this.sendError(e); onComplete.run(); } } + private void onNoArtsFoundByBarcode(String barcode, Runnable onComplete) throws NoResultFromBarcodeException { + if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) { + this.mListener.confirmCheckForUnlistedProduct(barcode, onComplete); + } else { + throw new NoResultFromBarcodeException(barcode); + } + } + + private void addArtFromGriglia(List listArticoli, Runnable onComplete) { + if (listArticoli.size() == 1) { + this.addArticoloToOrdine( + listArticoli.get(0), + onComplete, + this::sendError + ); + } else { + this.mListener.chooseArtFromList(listArticoli, (art) -> { + this.addArticoloToOrdine( + art, + onComplete, + this::sendError); + }); + } + } + + private void loadArticoli(Ordine ordine, RunnableArgs> onLoad) { try { mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError); @@ -257,10 +267,11 @@ public class PVOrdineAcquistoEditViewModel { return articolo; } - public List matchArticoliForBarcode(String barcode) throws NoArtsInGridException, MultipleResultFromBarcodeException, NoResultFromBarcodeException { + public List findArticoliByBarcode(String barcode) throws NoArtsInGridException { if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) { throw new NoArtsInGridException(); } + List articoli = Stream.of(mArticoliGriglia).filter(articolo -> articolo.getCodMart().equalsIgnoreCase(barcode) || articolo.getBarcode().contains(barcode) || @@ -367,13 +378,17 @@ public class PVOrdineAcquistoEditViewModel { if (this.mListener != null) mListener.onError(ex); } - public void loadArticolo(String barcode) { + public void loadArticolo(String barcode, Runnable onComplete) { this.sendOnLoadingStarted(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> { RunnableArgs addArtToOrder = (articolo) -> { - ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null); + + ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia) + .filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())) + .findFirstOrElse(null); + if (existingArt != null) { List barcodes = existingArt.getBarcode(); barcodes.addAll(articolo.getBarcode()); @@ -382,7 +397,8 @@ public class PVOrdineAcquistoEditViewModel { } else { mArticoliGriglia.add(articolo); } - this.processBarcode(barcode); + + this.addArtFromGriglia(Collections.singletonList(existingArt), onComplete); }; if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) { @@ -421,7 +437,7 @@ public class PVOrdineAcquistoEditViewModel { void onError(Exception ex); - void confirmCheckForUnlistedProduct(String barcode); + void confirmCheckForUnlistedProduct(String barcode, Runnable onComplete); void confirmExportInvalidProducts(Runnable onConfirm);