diff --git a/app/build.gradle b/app/build.gradle index 0774f5f2..f7541cbf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 441 - def appVersionName = '1.40.24' + def appVersionCode = 442 + def appVersionName = '1.40.25' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumer.java index 91dcdb01..dc07ca34 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumer.java @@ -114,4 +114,21 @@ public class ColliAccettazioneRESTConsumer extends _BaseRESTConsumer implements }); } + public void checkBarcodeUl(String barcodeUl, RunnableArgs onComplete, RunnableArgs onFailed){ + ColliAccettazioneRESTConsumerService colliAccettazioneRESTConsumerService = RESTBuilder.getService(ColliAccettazioneRESTConsumerService.class); + + colliAccettazioneRESTConsumerService.checkIfBarcodeUlAlreadyRegistered(barcodeUl) + .enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "accettazione/checkIfBarcodeUlAlreadyRegistered", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumerService.java index 42a65b48..5f239012 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliAccettazioneRESTConsumerService.java @@ -12,7 +12,9 @@ import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowResponseDTO; import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.Query; public interface ColliAccettazioneRESTConsumerService { @@ -31,4 +33,7 @@ public interface ColliAccettazioneRESTConsumerService { @POST("wms/accettazione/deleteUDCRow") Call> deleteUDCRow(@Body DeleteUDCRowRequestDTO deleteUDCRowRequestDTO); + @GET("wms/accettazione/checkIfBarcodeUlAlreadyRegistered") + Call> checkIfBarcodeUlAlreadyRegistered(@Query("barcodeUl") String barcodeUl); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java index 962e077b..682f6ed0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumer.java @@ -1,5 +1,7 @@ package it.integry.integrywmsnative.core.rest.consumers; +import androidx.annotation.NonNull; + import javax.inject.Singleton; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -13,6 +15,8 @@ import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO; +import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSRequestDTO; +import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO; @@ -113,4 +117,21 @@ public class ColliSpedizioneRESTConsumer extends _BaseRESTConsumer implements Co } + public void duplicateUDSRow(DuplicateUDSRequestDTO duplicateUDSRequestDTO, RunnableArgs onComplete, RunnableArgs onFailed) { + ColliSpedizioneRESTConsumerService colliSpedizioneRESTConsumerService = RESTBuilder.getService(ColliSpedizioneRESTConsumerService.class); + + colliSpedizioneRESTConsumerService.duplicateUDSRow(duplicateUDSRequestDTO) + .enqueue(new Callback<>() { + @Override + public void onResponse(@NonNull Call> call, @NonNull Response> response) { + analyzeAnswer(response, "spedizione/duplicateUDSRow", onComplete, onFailed); + } + + @Override + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + onFailed.run(new Exception()); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java index 32f0b1fc..5492b609 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliSpedizioneRESTConsumerService.java @@ -6,6 +6,8 @@ import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO; +import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSRequestDTO; +import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO; @@ -35,4 +37,7 @@ public interface ColliSpedizioneRESTConsumerService { @POST("wms/spedizione/deleteUDSRow") Call> deleteUDSRow(@Body DeleteUDSRowRequestDTO deleteUDSRowRequestDTO); + @POST("wms/spedizione/duplicateUDSRow") + Call> duplicateUDSRow(@Body DuplicateUDSRequestDTO duplicateUDSRequestDTO); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/DuplicateUDSRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/DuplicateUDSRequestDTO.java new file mode 100644 index 00000000..24c5bc0d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/DuplicateUDSRequestDTO.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.core.rest.model.uds; + +import it.integry.integrywmsnative.core.model.MtbColt; + +public class DuplicateUDSRequestDTO { + + private MtbColt mtbColt; + + private int numOfDuplicates; + + public MtbColt getMtbColt() { + return mtbColt; + } + + public DuplicateUDSRequestDTO setMtbColt(MtbColt mtbColt) { + this.mtbColt = mtbColt; + return this; + } + + public int getNumOfDuplicates() { + return numOfDuplicates; + } + + public DuplicateUDSRequestDTO setNumOfDuplicates(int numOfDuplicates) { + this.numOfDuplicates = numOfDuplicates; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/DuplicateUDSResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/DuplicateUDSResponseDTO.java new file mode 100644 index 00000000..47d39930 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/DuplicateUDSResponseDTO.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.core.rest.model.uds; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.MtbColt; + +public class DuplicateUDSResponseDTO { + + private List mtbColtList; + + public List getMtbColtList() { + return mtbColtList; + } + + public DuplicateUDSResponseDTO setMtbColtList(List mtbColtList) { + this.mtbColtList = mtbColtList; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index efe86553..92760a91 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -79,6 +79,7 @@ public class DBSettingsModel { private boolean flagTracciamentoImballiCaricoEnabled = false; private boolean flagTracciamentoImballiScaricoEnabled = false; private boolean flagPickingLiberoEnableScanArt = false; + private boolean flagAskDuplicateUDSSpedizione = false; public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; @@ -664,4 +665,13 @@ public class DBSettingsModel { this.flagPickingLiberoEnableScanArt = flagPickingLiberoEnableScanArt; return this; } + + public boolean isFlagAskDuplicateUDSSpedizione() { + return flagAskDuplicateUDSSpedizione; + } + + public DBSettingsModel setFlagAskDuplicateUDSSpedizione(boolean flagAskDuplicateUDSSpedizione) { + this.flagAskDuplicateUDSSpedizione = flagAskDuplicateUDSSpedizione; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 2402e061..d1ebd35a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -388,6 +388,11 @@ public class SettingsManager { .setSection("SPEDIZIONE") .setKeySection("FLAG_ASK_INFO_AGGIUNTIVE") .setSetter(dbSettingsModelIstance::setFlagAskInfoAggiuntiveSpedizione)); + stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) + .setGestName("PICKING") + .setSection("SPEDIZIONE") + .setKeySection("FLAG_ASK_DUPLICATE_UDS") + .setSetter(dbSettingsModelIstance::setFlagAskDuplicateUDSSpedizione)); stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) .setGestName("PICKING") .setSection("SPEDIZIONE") diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java index 3f549c78..78f42a9e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; +import android.text.Html; import android.text.SpannableString; import android.view.Gravity; import android.view.Menu; @@ -741,6 +742,16 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A BarcodeManager.enable(); } + @Override + public void onWarning(String warningText, Runnable action) { + this.runOnUiThread(() -> { + this.onLoadingEnded(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action) + .show(getSupportFragmentManager(), "tag"); + }); + } + @Override public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, LocalDate dataScad, boolean canPartitaMagBeChanged, boolean canOverflowQuantity, String customArtDescription, RunnableArgss onComplete) { DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO().setMtbAart(mtbAart).setInitialNumCnf(initialNumCnf).setInitialQtaCnf(initialQtaCnf).setInitialQtaTot(initialQtaTot).setTotalQtaOrd(totalQtaOrd).setTotalNumCnfOrd(totalNumCnfOrd).setQtaCnfOrd(qtaCnfOrd).setTotalQtaToBeTaken(totalQtaToBeTaken).setTotalNumCnfToBeTaken(totalNumCnfToBeTaken).setQtaCnfToBeTaken(qtaCnfToBeTaken).setTotalQtaAvailable(totalQtaAvailable).setTotalNumCnfAvailable(totalNumCnfAvailable).setQtaCnfAvailable(qtaCnfAvailable).setPartitaMag(partitaMag).setDataScad(dataScad).setCanPartitaMagBeChanged(canPartitaMagBeChanged).setCanLUBeClosed(true).setCanOverflowOrderQuantity(canOverflowQuantity).setCustomArtDescription(customArtDescription); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java index 952a72b5..7ecdec6e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java @@ -247,8 +247,14 @@ public class AccettazioneOrdiniPickingViewModel { try { Ean128Model ean128Model = mEan128Service.decode(barcodeScanDTO); - //Nel caso trovo un SSCC lo aggiungo - this.processBarcodeNotOpenedLU(barcodeScanDTO, ean128Model.Sscc, onComplete); + mColliAccettazioneRESTConsumer.checkBarcodeUl(ean128Model.Sscc, result -> { + if (result){ + this.sendWarning("Barcode ul giĆ  registrato!", onComplete); + } else { + //Nel caso trovo un SSCC lo aggiungo + this.processBarcodeNotOpenedLU(barcodeScanDTO, ean128Model.Sscc, onComplete); + } + }, this::sendError); } catch (Exception e) { this.sendError(e); @@ -933,6 +939,10 @@ public class AccettazioneOrdiniPickingViewModel { if (this.mListener != null) mListener.onError(ex); } + private void sendWarning(String warningText, Runnable action) { + if (this.mListener != null) mListener.onWarning(warningText, action); + } + private void sendLUOpened(MtbColt mtbColt) { if (this.mListener != null) mListener.onLUOpened(mtbColt); } @@ -1050,6 +1060,8 @@ public class AccettazioneOrdiniPickingViewModel { void onFilterPosizioneApplied(String posizioneToFilter); + void onWarning(String warningText, Runnable action); + void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index d2022ba4..d775ef0a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -1072,4 +1072,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo DialogInfoAggiuntiveLUView.newInstance(mtbColt, onComplete, this::onLoadingEnded) .show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName()); } + + @Override + public void onInputDuplicate(RunnableArgs onComplete){ + DialogSimpleInputHelper.makeInputDialog(this, "Numero pedane da duplicare", inputValue -> { + try { + Integer num = Integer.parseInt(inputValue); + onComplete.run(num); + } catch (NumberFormatException ex) { + this.onError(new Exception("Inserire un numero di risorse valido")); + } + }, () -> {}).show(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index f6dc1249..3780c29e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.gest.spedizione; +import androidx.annotation.IntegerRes; import androidx.databinding.ObservableArrayList; import androidx.lifecycle.MutableLiveData; @@ -13,6 +14,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.inject.Inject; @@ -72,6 +74,7 @@ import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestOrderDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO; +import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.PrintULRequestDTO; @@ -1549,31 +1552,35 @@ public class SpedizioneViewModel { this.closeLU(generatedMtbColts -> { - this.mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(generatedMtbColts, filledMtbColts -> { + this.duplicateUDS(generatedMtbColts, duplicatedMtbColts -> { - this.askPositionChange( - filledMtbColts, - positionedMtbColts -> { + generatedMtbColts.addAll(duplicatedMtbColts); - this.askPrint((shouldPrint && SettingsManager.iDB().isFlagPrintEtichetteOnLUClose()), positionedMtbColts, () -> { - positionedMtbColts.stream() - .filter(x -> !this.mColliRegistrati.contains(x)) - .forEach(x -> this.mColliRegistrati.add(x)); + this.mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(generatedMtbColts, filledMtbColts -> { - postCloseOperations(positionedMtbColts); + this.askPositionChange( + filledMtbColts, + positionedMtbColts -> { - this.mIsNewLU = false; + this.askPrint((shouldPrint && SettingsManager.iDB().isFlagPrintEtichetteOnLUClose()), positionedMtbColts, () -> { + positionedMtbColts.stream() + .filter(x -> !this.mColliRegistrati.contains(x)) + .forEach(x -> this.mColliRegistrati.add(x)); + + postCloseOperations(positionedMtbColts); + + this.mIsNewLU = false; + + this.resetMatchedRows(); + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }); - this.resetMatchedRows(); - this.sendLUClosed(); - this.sendOnLoadingEnded(); }); - }); - - }, this::sendError); + }, this::sendError); + }); }); - }); }); }); @@ -1596,8 +1603,35 @@ public class SpedizioneViewModel { this.mColliScaricoRESTConsumer.closeUDS(closeUDSRequestDto, closeResponse -> { onComplete.run(closeResponse.getGeneratedMtbColts()); }, this::sendError); + } + private void duplicateUDS(List mtbColtList, RunnableArgs> onComplete) { + var clonedLu = (MtbColt) this.mCurrentMtbColt.clone(); + boolean noReference = clonedLu.getMtbColr().stream() + .allMatch( + x -> x.getGestioneRif() == null && + x.getDataColloRifD() == null && + x.getSerColloRif() == null && + x.getNumColloRif() == null + ); + + if (mtbColtList.size() > 1 || !noReference || !SettingsManager.iDB().isFlagAskDuplicateUDSSpedizione()) { + onComplete.run(new ArrayList<>()); + return; + } + + var savedMtbColt = mtbColtList.get(0); + + sendInputDuplicate(inputNumber -> { + var duplicateUDSRequestDTO = new DuplicateUDSRequestDTO() + .setMtbColt(savedMtbColt) + .setNumOfDuplicates(inputNumber); + + this.mColliSpedizioneRESTConsumer.duplicateUDSRow(duplicateUDSRequestDTO, data -> { + onComplete.run(data.getMtbColtList()); + }, this::sendError); + }); } private void checkIfShouldBeDeleted(Runnable onDeleted, Runnable onContinue) { @@ -1938,6 +1972,10 @@ public class SpedizioneViewModel { this.mDocumentRESTConsumer.createDocFromColli(loadCollidto, doc -> this.sendOnOrderClosed(), this::sendError); } + private void sendInputDuplicate(RunnableArgs onComplete) { + if (this.mListener != null) mListener.onInputDuplicate(onComplete); + } + public SpedizioneViewModel setListeners(Listener listener) { this.mListener = listener; return this; @@ -1970,6 +2008,8 @@ public class SpedizioneViewModel { void onChooseArtsRequest(List artsList, RunnableArgs> onComplete); void onOrderClosed(); + + void onInputDuplicate(RunnableArgs onComplete); } }