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

View File

@ -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,15 +161,28 @@ public class PVOrdineAcquistoEditViewModel {
BarcodeManager.disable();
try {
List<ArticoloOrdinabileDTO> listArticoli = matchArticoliForBarcode(barcode);
if (listArticoli == null || listArticoli.isEmpty()) {
List<ArticoloOrdinabileDTO> 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);
return;
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),
@ -184,12 +197,9 @@ public class PVOrdineAcquistoEditViewModel {
this::sendError);
});
}
} catch (Exception e) {
this.sendError(e);
onComplete.run();
}
}
private void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad) {
try {
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError);
@ -257,10 +267,11 @@ public class PVOrdineAcquistoEditViewModel {
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()) {
throw new NoArtsInGridException();
}
List<ArticoloOrdinabileDTO> 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<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) {
List<String> 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);