diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java index 640f0c12..5e57fc58 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java @@ -7,7 +7,7 @@ import dagger.Provides; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.services.inventario.InventarioService; +import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; @Module(subcomponents = {PickingLiberoComponent.class}) public class PickingLiberoModule { @@ -17,8 +17,8 @@ public class PickingLiberoModule { PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, - InventarioService inventarioService + PosizioniRESTConsumer posizioniRESTConsumer ) { - return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, inventarioService); + return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java index 0dbc8a2d..2f6c94ec 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java @@ -15,6 +15,7 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener; @@ -30,9 +31,9 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; -import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -51,7 +52,7 @@ public class PickingLiberoViewModel { private final ArticoloRESTConsumer mArticoloRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; - private final InventarioService inventarioService; + private final PosizioniRESTConsumer mPosizioniRESTConsumer; private boolean mFlagAskCliente; @@ -65,12 +66,12 @@ public class PickingLiberoViewModel { public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, - InventarioService inventarioService + PosizioniRESTConsumer posizioniRESTConsumer ) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; - this.inventarioService = inventarioService; + this.mPosizioniRESTConsumer = posizioniRESTConsumer; } @@ -95,6 +96,9 @@ public class PickingLiberoViewModel { //Cerco gli articoli presenti nell'ul dell'etichetta anonima this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { + //Cerco tramite etichetta un collo in posizione mono ul + this.executeEtichettaPosizione(barcodeScanDTO, onComplete); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi una UL) this.executeEtichettaEan128(barcodeScanDTO, onComplete); @@ -104,11 +108,41 @@ public class PickingLiberoViewModel { this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); } else { + //Cerco tramite ean13 un collo in posizione mono ul definita in anagrafica articolo, altrimenti se abilitato procedo con picking manuale this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); } } + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + this.executePosizione(foundPosizione, null, onComplete); + + } + + private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, Runnable onComplete) { + this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { + + if (mtbColtList == null || mtbColtList.size() == 0) { + if (articolo != null) { + this.dispatchArt(articolo, null); + } else { + this.sendError(new NoLUFoundException()); + } + } else if (mtbColtList.size() == 1) { + this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + pickMerceULtoUL(mtbColt, onComplete); + }, this::sendError); + } else { + this.sendError(new TooManyLUFoundInMonoLUPositionException()); + } + + }, this::sendError); + } + private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { try { Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); @@ -175,17 +209,7 @@ public class PickingLiberoViewModel { MtbAart articolo = mtbAartList.get(0); MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); if (posizione != null && posizione.isFlagMonoCollo()) { - inventarioService.getInventarioDaPosizionePerArticolo(posizione, articolo, (giacenzaArticolo) -> { - if (giacenzaArticolo.size() > 0) { - if (giacenzaArticolo.size() == 1) { - pickMerceULtoUL(inventarioService.mapInventarioToMtbColt(giacenzaArticolo.get(0)), onComplete); - } else { - this.sendError(new NoLUFoundException()); - } - } else { - this.dispatchArt(articolo, ean128Model); - } - }, this::sendError); + this.executePosizione(posizione, articolo, onComplete); } else { this.dispatchArt(articolo, ean128Model); onComplete.run(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java index 66c40b54..e1219bcc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java @@ -8,6 +8,7 @@ import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; @@ -17,6 +18,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; public class DialogScanOrCreateLUViewModel { @@ -62,6 +64,8 @@ public class DialogScanOrCreateLUViewModel { this.executeEtichettaAnonima(barcodeScanDTO, onComplete); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { this.executeEAN128(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEan13(barcodeScanDTO)) { + this.executeEAN13(barcodeScanDTO, onComplete); } else { onComplete.run(); } @@ -73,8 +77,12 @@ public class DialogScanOrCreateLUViewModel { MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) .single(); + this.executePosizione(foundPosizione, onComplete); - this.mPosizioniRESTConsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + } + + private void executePosizione(MtbDepoPosizione posizione, Runnable onComplete) { + this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { if (mtbColtList == null || mtbColtList.size() == 0) { this.sendError(new NoLUFoundException()); @@ -88,7 +96,6 @@ public class DialogScanOrCreateLUViewModel { } }, this::sendError); - } @@ -96,7 +103,7 @@ public class DialogScanOrCreateLUViewModel { this.mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), mShouldCheckResiduo, false, mtbColt -> { if (mtbColt == null) { - if(mEnableCreation) { + if (mEnableCreation) { this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(barcodeScanDTO, GestioneEnum.LAVORAZIONE, createdMtbColt -> { onComplete.run(); this.sendOnLUOpened(createdMtbColt, true); @@ -158,6 +165,22 @@ public class DialogScanOrCreateLUViewModel { }, this::sendError); } + private void executeEAN13(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + this.mArticoloRESTConsumer.getByBarcodeProd(barcodeScanDTO.getStringValue(), articoli -> { + if (articoli.size() == 1) { + MtbAart articolo = articoli.get(0); + MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); + if (posizione != null && posizione.isFlagMonoCollo()) { + this.executePosizione(posizione, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + } else { + this.sendError(new NoLUFoundException()); + } + }, this::sendError); + } + private void sendOnLUVenditaConfirmRequired(RunnableArgs onConfirm) { if (this.mListener != null) mListener.onLUVenditaConfirmRequired(onConfirm); }