Migliorie processBarcode in PVOrdineAcquistoEditActivity

This commit is contained in:
Giuseppe Scorrano 2024-01-09 18:23:13 +01:00
parent 4b1632c265
commit 5728481a94
2 changed files with 47 additions and 31 deletions

View File

@ -207,12 +207,12 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
} }
@Override @Override
public void confirmCheckForUnlistedProduct(String barcode) { public void confirmCheckForUnlistedProduct(String barcode, Runnable onComplete) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.info).toString(), DialogSimpleMessageView.makeInfoDialog(getText(R.string.info).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_order_unlisted_item)), Html.fromHtml(getResources().getString(R.string.confirm_order_unlisted_item)),
null, null,
() -> { () -> {
this.mViewModel.loadArticolo(barcode); this.mViewModel.loadArticolo(barcode, onComplete);
}, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder"); }, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder");
} }

View File

@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.inject.Inject; 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.ArtNotFoundInGridException;
import it.integry.integrywmsnative.core.exception.EmptyOrderException; import it.integry.integrywmsnative.core.exception.EmptyOrderException;
import it.integry.integrywmsnative.core.exception.ExpiredProductListException; 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.NoArtsInGridException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -161,35 +161,45 @@ public class PVOrdineAcquistoEditViewModel {
BarcodeManager.disable(); BarcodeManager.disable();
try { try {
List<ArticoloOrdinabileDTO> listArticoli = matchArticoliForBarcode(barcode); List<ArticoloOrdinabileDTO> listArticoli = findArticoliByBarcode(barcode);
if (listArticoli == null || listArticoli.isEmpty()) {
if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) { if (listArticoli == null || listArticoli.isEmpty())
this.mListener.confirmCheckForUnlistedProduct(barcode); onNoArtsFoundByBarcode(barcode, onComplete);
return; else
} else { addArtFromGriglia(listArticoli, onComplete);
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);
});
}
} catch (Exception e) { } catch (Exception e) {
this.sendError(e); this.sendError(e);
onComplete.run(); 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<ArticoloOrdinabileDTO> 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<List<ArticoloOrdine>> onLoad) { private void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad) {
try { try {
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError); mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError);
@ -257,10 +267,11 @@ public class PVOrdineAcquistoEditViewModel {
return articolo; return articolo;
} }
public List<ArticoloOrdinabileDTO> matchArticoliForBarcode(String barcode) throws NoArtsInGridException, MultipleResultFromBarcodeException, NoResultFromBarcodeException { public List<ArticoloOrdinabileDTO> findArticoliByBarcode(String barcode) throws NoArtsInGridException {
if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) { if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) {
throw new NoArtsInGridException(); throw new NoArtsInGridException();
} }
List<ArticoloOrdinabileDTO> articoli = Stream.of(mArticoliGriglia).filter(articolo -> List<ArticoloOrdinabileDTO> articoli = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) || articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().contains(barcode) || articolo.getBarcode().contains(barcode) ||
@ -367,13 +378,17 @@ public class PVOrdineAcquistoEditViewModel {
if (this.mListener != null) mListener.onError(ex); if (this.mListener != null) mListener.onError(ex);
} }
public void loadArticolo(String barcode) { public void loadArticolo(String barcode, Runnable onComplete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> { pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> {
RunnableArgs<ArticoloOrdinabileDTO> addArtToOrder = (articolo) -> { RunnableArgs<ArticoloOrdinabileDTO> 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) { if (existingArt != null) {
List<String> barcodes = existingArt.getBarcode(); List<String> barcodes = existingArt.getBarcode();
barcodes.addAll(articolo.getBarcode()); barcodes.addAll(articolo.getBarcode());
@ -382,7 +397,8 @@ public class PVOrdineAcquistoEditViewModel {
} else { } else {
mArticoliGriglia.add(articolo); mArticoliGriglia.add(articolo);
} }
this.processBarcode(barcode);
this.addArtFromGriglia(Collections.singletonList(existingArt), onComplete);
}; };
if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) { if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) {
@ -421,7 +437,7 @@ public class PVOrdineAcquistoEditViewModel {
void onError(Exception ex); void onError(Exception ex);
void confirmCheckForUnlistedProduct(String barcode); void confirmCheckForUnlistedProduct(String barcode, Runnable onComplete);
void confirmExportInvalidProducts(Runnable onConfirm); void confirmExportInvalidProducts(Runnable onConfirm);