From bc788c3a34a6815bd67f3ad0daa366f4e9cf3033 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Fri, 5 Jul 2024 17:57:19 +0200 Subject: [PATCH 1/2] =?UTF-8?q?[DOLBO]=20Gestito=20extra=20quantity=20in?= =?UTF-8?q?=20duplica=20uds=20e=20aggiornamento=20quantit=C3=A0=20in=20ele?= =?UTF-8?q?nco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/settings/DBSettingsModel.java | 10 ++ .../core/settings/SettingsManager.java | 5 + .../AccettazioneOrdiniPickingViewModel.java | 2 +- .../gest/spedizione/SpedizioneActivity.java | 33 +++++- .../gest/spedizione/SpedizioneViewModel.java | 110 +++++++++++++----- 5 files changed, 125 insertions(+), 35 deletions(-) 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 92760a91..6e09f913 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 @@ -34,6 +34,7 @@ public class DBSettingsModel { private boolean flagSpedizioneCanSelectMultipleOrders; private List notePerditaDocInterni = new ArrayList<>(); private boolean flagSpedizioneUseQtaOrd; + private boolean flagSpedizioneUseColliPedana; private boolean flagOrdinaNuoviArticoliInGriglia; private boolean flagOrdinaArticoliOnScan; private boolean flagConsentiFuoriPianoLogistico; @@ -270,6 +271,15 @@ public class DBSettingsModel { return this; } + public boolean isFlagSpedizioneUseColliPedana() { + return flagSpedizioneUseColliPedana; + } + + public DBSettingsModel setFlagSpedizioneUseColliPedana(boolean flagSpedizioneUseColliPedana) { + this.flagSpedizioneUseColliPedana = flagSpedizioneUseColliPedana; + return this; + } + public DBSettingsModel setFlagOrdinaNuoviArticoliInGriglia(boolean flagOrdinaNuoviArticoliInGriglia) { this.flagOrdinaNuoviArticoliInGriglia = flagOrdinaNuoviArticoliInGriglia; 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 d1ebd35a..0a722da0 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 @@ -315,6 +315,11 @@ public class SettingsManager { .setSection("SPEDIZIONE") .setKeySection("FLAG_USE_QTA_ORD") .setSetter(dbSettingsModelIstance::setFlagSpedizioneUseQtaOrd)); + stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) + .setGestName("PICKING") + .setSection("SPEDIZIONE") + .setKeySection("FLAG_USE_COLLI_PEDANA") + .setSetter(dbSettingsModelIstance::setFlagSpedizioneUseColliPedana)); stbGestSetupReaderList.add(new StbGestSetupReader<>(Integer.class) .setGestName("PICKING") .setSection("SETUP") 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 7ecdec6e..68bff77b 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 @@ -556,7 +556,7 @@ public class AccettazioneOrdiniPickingViewModel { if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) { dataScad = UtilityDate.getNow(); - dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita()); + dataScad = dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita()); } if (partitaMag == null && dataScad == null) { 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 d775ef0a..bc3b3aa6 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 @@ -5,6 +5,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.widget.Toast; @@ -80,6 +81,7 @@ import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAgg import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowQtaTotOrderedQuantityException; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtView; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiView; import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; @@ -211,6 +213,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione(); boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione(); boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd(); + boolean useColliPedana = SettingsManager.iDB().isFlagSpedizioneUseColliPedana(); mViewmodel.init( codMdep, @@ -223,7 +226,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo mColliRegistrati, mGestioneCol, mSegnoCol, mDefaultCausaleUL, mEnableQuantityReset, - useQtaOrd); + useQtaOrd, + useColliPedana); } @@ -280,7 +284,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo fabPopupMenu.getMenu().removeItem(R.id.close_order); } - if(!SettingsManager.iDB().isFlagTracciamentoImballiScaricoEnabled()) + if (!SettingsManager.iDB().isFlagTracciamentoImballiScaricoEnabled()) fabPopupMenu.getMenu().removeItem(R.id.track_packaging); fabPopupMenu.setOnMenuItemClickListener(item -> { @@ -886,6 +890,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo boolean canPartitaMagBeChanged, RunnableArgss onComplete) { + if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) { + dataScad = UtilityDate.getNow(); + dataScad = dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita()); + } + DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() .setMtbAart(mtbAart) .setInitialNumCnf(initialNumCnf) @@ -1074,7 +1083,23 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo } @Override - public void onInputDuplicate(RunnableArgs onComplete){ + public void onInputDuplicate(BigDecimal qtaTot, BigDecimal qtaEvasa, RunnableArgs onComplete, Runnable onNegativeClick) { + String textWarning = UtilityResources.getString(R.string.ordered_quantity_overflow_error_message); + + dialogInputQuantityToDuplicate(inputNumber -> { + if (qtaTot != null && qtaEvasa != null && UtilityBigDecimal.equalsOrGreaterThan(qtaEvasa.multiply(BigDecimal.valueOf(inputNumber)), qtaTot)) { + + DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(textWarning)), + null, + () -> this.onInputDuplicate(qtaTot, qtaEvasa, onComplete, onNegativeClick) + ).show(getSupportFragmentManager(), "tag"); + } else { + onComplete.run(inputNumber); + } + }, onNegativeClick); + } + + private void dialogInputQuantityToDuplicate(RunnableArgs onComplete, Runnable onNegativeClick) { DialogSimpleInputHelper.makeInputDialog(this, "Numero pedane da duplicare", inputValue -> { try { Integer num = Integer.parseInt(inputValue); @@ -1082,6 +1107,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo } catch (NumberFormatException ex) { this.onError(new Exception("Inserire un numero di risorse valido")); } - }, () -> {}).show(); + }, onNegativeClick).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 c4e3d310..df15bc45 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 @@ -10,7 +10,9 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -19,6 +21,7 @@ import java.util.stream.Stream; import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; import it.integry.integrywmsnative.core.exception.EmptyLUException; @@ -79,10 +82,12 @@ 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; import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UntMisUtils; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityPosizione; +import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.spedizione.exceptions.CurrentMonoLUPositionIsNotCorrectException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidMagazzinoAutomaticoMovementException; @@ -92,6 +97,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadExceptio import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowQtaTotOrderedQuantityException; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.TracciamentoImballoDTO; public class SpedizioneViewModel { @@ -117,6 +123,7 @@ public class SpedizioneViewModel { private boolean mIsNewLU; private boolean mEnableQuantityReset; private boolean mUseQtaOrd; + private boolean mUseColliPedana; private boolean mIsOrdTrasf = false; private MtbColt mCurrentMtbColt = null; @@ -165,7 +172,7 @@ public class SpedizioneViewModel { } - public void init(String codMdep, boolean enableGiacenza, boolean enableCheckPartitaMag, boolean shouldAskPesoLU, boolean canOverflowOrderQuantity, List pickingList, List testateOrdini, List colliRegistrati, GestioneEnum gestioneCol, int segnoCol, Integer defaultCausaleUL, boolean enableQuantityReset, boolean useQtaOrd) { + public void init(String codMdep, boolean enableGiacenza, boolean enableCheckPartitaMag, boolean shouldAskPesoLU, boolean canOverflowOrderQuantity, List pickingList, List testateOrdini, List colliRegistrati, GestioneEnum gestioneCol, int segnoCol, Integer defaultCausaleUL, boolean enableQuantityReset, boolean useQtaOrd, boolean useColliPedana) { this.sendOnLoadingStarted(); this.mDefaultCodMdep = codMdep; @@ -178,6 +185,7 @@ public class SpedizioneViewModel { this.mDefaultCausaleOfUL = defaultCausaleUL; this.mEnableQuantityReset = enableQuantityReset; this.mUseQtaOrd = useQtaOrd; + this.mUseColliPedana = useColliPedana; if (enableGiacenza) { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { @@ -985,20 +993,6 @@ public class SpedizioneViewModel { refMtbColt = pickingObjectDTO.getMtbColts().get(0); } -// MtbColr refMtbColr = null; -// -// if (scannedMtbColr != null && refMtbColt != null && refMtbColt.getMtbColr().size() > 0) { -// Optional optionalMtbColr = Stream.of(refMtbColt.getMtbColr()) -// .filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) && -// UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) && -// UtilityString.equalsIgnoreCase(y.getCodCol(), scannedMtbColr.getCodCol()) && -// (!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(y.getPartitaMag(), scannedMtbColr.getPartitaMag()) || UtilityString.isNullOrEmpty(scannedMtbColr.getPartitaMag()))) -// .findFirst(); -// -// if (optionalMtbColr.isPresent()) refMtbColr = optionalMtbColr.get(); -// } - - if (refMtbColr != null) { if (pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) { if (UtilityBigDecimal.equalsOrLowerThan(refMtbColr.getQtaCol(), qtaDaEvadere)) { @@ -1086,8 +1080,12 @@ public class SpedizioneViewModel { } } + BigDecimal initialNumCnf = mUseColliPedana ? pickingObjectDTO.getMtbAart().getColliPedana() : mUseQtaOrd ? numCnfDaPrelevare : null; + BigDecimal initialQtaCnf = mUseColliPedana ? pickingObjectDTO.getMtbAart().getQtaCnf() : mUseQtaOrd ? qtaCnfDaPrelevare : null; + BigDecimal initialQtaTot = mUseColliPedana ? initialNumCnf.multiply(initialQtaCnf) : mUseQtaOrd ? qtaColDaPrelevare : null; + MtbColt finalRefMtbColt = refMtbColt; - this.onItemDispatched(pickingObjectDTO, pickingObjectDTO.getMtbAart(), mUseQtaOrd ? numCnfDaPrelevare : null, mUseQtaOrd ? qtaCnfDaPrelevare : null, mUseQtaOrd ? qtaColDaPrelevare : null, qtaDaEvadere, numCnfDaEvadere, qtaCnfDaEvadere, qtaColDaPrelevare, numCnfDaPrelevare, qtaCnfDaPrelevare, totalQtaAvailable, totalNumCnfAvailable, qtaCnfAvailable, partitaMag, dataScad, mCanOverflowOrderQuantity, canPartitaMagBeChanged, (pickedQuantityDTO, shouldCloseLU) -> { + this.onItemDispatched(pickingObjectDTO, pickingObjectDTO.getMtbAart(), initialNumCnf, initialQtaCnf, initialQtaTot, qtaDaEvadere, numCnfDaEvadere, qtaCnfDaEvadere, qtaColDaPrelevare, numCnfDaPrelevare, qtaCnfDaPrelevare, totalQtaAvailable, totalNumCnfAvailable, qtaCnfAvailable, partitaMag, dataScad, mCanOverflowOrderQuantity, canPartitaMagBeChanged, (pickedQuantityDTO, shouldCloseLU) -> { this.saveNewRow(pickingObjectDTO, finalRefMtbColt, pickedQuantityDTO.getNumCnf(), pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getQtaTot(), pickedQuantityDTO.getPartitaMag(), pickedQuantityDTO.getDataScad(), shouldCloseLU); }); } @@ -1552,9 +1550,11 @@ public class SpedizioneViewModel { this.closeLU(generatedMtbColts -> { - this.duplicateUDS(generatedMtbColts, duplicatedMtbColts -> { + this.validateTheUdsToBeDuplicated(generatedMtbColts, duplicatedMtbColts -> { - generatedMtbColts.addAll(duplicatedMtbColts); + if (duplicatedMtbColts != null) { + generatedMtbColts.addAll(duplicatedMtbColts); + } this.mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(generatedMtbColts, filledMtbColts -> { @@ -1605,7 +1605,7 @@ public class SpedizioneViewModel { }, this::sendError); } - private void duplicateUDS(List mtbColtList, RunnableArgs> onComplete) { + private void validateTheUdsToBeDuplicated(List mtbColtList, RunnableArgs> onComplete) { var clonedLu = (MtbColt) this.mCurrentMtbColt.clone(); boolean noReference = clonedLu.getMtbColr().stream() @@ -1623,15 +1623,59 @@ public class SpedizioneViewModel { var savedMtbColt = mtbColtList.get(0); - sendInputDuplicate(inputNumber -> { - var duplicateUDSRequestDTO = new DuplicateUDSRequestDTO() - .setMtbColt(savedMtbColt) - .setNumOfDuplicates(inputNumber); + //Controllo se si va in extra quantity + if (!SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione()) { + Map> groupedByCodMart = savedMtbColt.getMtbColr() + .stream() + .filter(x -> x.getCodMart() != null) + .collect(Collectors.groupingBy(MtbColr::getCodMart)); - this.mColliSpedizioneRESTConsumer.duplicateUDS(duplicateUDSRequestDTO, data -> { - onComplete.run(data.getMtbColtList()); - }, this::sendError); - }); + for (PickingObjectDTO pickingObjectDTO : Objects.requireNonNull(this.mPickingList.getValue())) { + + if (pickingObjectDTO.getMtbAart() != null) { + String codMart = pickingObjectDTO.getMtbAart().getCodMart(); + + if (groupedByCodMart.containsKey(codMart)) { + BigDecimal qtaTot = UntMisUtils.shouldBeShowInColli(pickingObjectDTO.getMtbAart()) ? pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd() : pickingObjectDTO.getSitArtOrdDTO().getQtaOrd(); + + BigDecimal qtaEvasa = Objects.requireNonNull(groupedByCodMart.get(codMart)).stream().map(MtbColr::getNumCnf).reduce(BigDecimal.ZERO, BigDecimal::add); + + sendInputDuplicate(qtaTot, qtaEvasa, inputNumber -> { + duplicateUDS(savedMtbColt, inputNumber, onComplete); + }, () -> onComplete.run(null)); + } + } + } + } else { + sendInputDuplicate(inputNumber -> { + duplicateUDS(savedMtbColt, inputNumber, onComplete); + }, () -> onComplete.run(null)); + } + } + + private void duplicateUDS(MtbColt savedMtbColt, Integer inputNumber, RunnableArgs> onComplete){ + var duplicateUDSRequestDTO = new DuplicateUDSRequestDTO() + .setMtbColt(savedMtbColt) + .setNumOfDuplicates(inputNumber); + + this.mColliSpedizioneRESTConsumer.duplicateUDS(duplicateUDSRequestDTO, data -> { + Map> groupedByCodMart = data.getMtbColtList() + .stream() + .flatMap(x -> x.getMtbColr().stream()) + .filter(x -> x.getCodMart() != null) + .collect(Collectors.groupingBy(MtbColr::getCodMart)); + + for (PickingObjectDTO pickingObjectDTO : Objects.requireNonNull(this.mPickingList.getValue())) { + if (pickingObjectDTO.getMtbAart() != null) { + String codMart = pickingObjectDTO.getMtbAart().getCodMart(); + if (groupedByCodMart.containsKey(codMart)) { + pickingObjectDTO.getWithdrawMtbColrs() + .addAll(Objects.requireNonNull(groupedByCodMart.get(codMart))); + } + } + } + onComplete.run(data.getMtbColtList()); + }, this::sendError); } private void checkIfShouldBeDeleted(Runnable onDeleted, Runnable onContinue) { @@ -1972,8 +2016,14 @@ public class SpedizioneViewModel { this.mDocumentRESTConsumer.createDocFromColli(loadCollidto, doc -> this.sendOnOrderClosed(), this::sendError); } - private void sendInputDuplicate(RunnableArgs onComplete) { - if (this.mListener != null) mListener.onInputDuplicate(onComplete); + private void sendInputDuplicate(BigDecimal qtaTot, BigDecimal qtaEvasa, RunnableArgs onComplete, Runnable onNegativeClick) { + if (this.mListener != null) + mListener.onInputDuplicate(qtaTot, qtaEvasa, onComplete, onNegativeClick); + } + + private void sendInputDuplicate(RunnableArgs onComplete, Runnable onNegativeClick) { + if (this.mListener != null) + mListener.onInputDuplicate(null, null, onComplete, onNegativeClick); } public SpedizioneViewModel setListeners(Listener listener) { @@ -2009,7 +2059,7 @@ public class SpedizioneViewModel { void onOrderClosed(); - void onInputDuplicate(RunnableArgs onComplete); + void onInputDuplicate(BigDecimal qtaTot, BigDecimal qtaEvasa, RunnableArgs onComplete, Runnable onNegativeClick); } } From 7b11f503d8cc0324d083936cf7038597f4415ac0 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Fri, 5 Jul 2024 17:58:49 +0200 Subject: [PATCH 2/2] -> v1.40.27 (444) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e23a1106..5f786a03 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 443 - def appVersionName = '1.40.26' + def appVersionCode = 444 + def appVersionName = '1.40.27' signingConfigs { release {