From c548c6484f1c3082b9a39e200dfaf06633f4fee2 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Fri, 19 Jul 2024 17:55:14 +0200 Subject: [PATCH 1/2] Aggiunto suggerimento data scadenza in caso di partita esistente --- .../rest/consumers/MagazzinoRESTConsumer.java | 22 ++++++++++ .../MagazzinoRESTConsumerService.java | 7 ++- .../core/settings/DBSettingsModel.java | 11 +++++ .../core/settings/SettingsManager.java | 6 +++ .../gest/spedizione/SpedizioneActivity.java | 3 +- .../gest/spedizione/SpedizioneModule.java | 7 ++- .../gest/spedizione/SpedizioneViewModel.java | 32 ++++++++++++-- .../DialogInputQuantityV2DTO.java | 13 ++++++ .../DialogInputQuantityV2View.java | 6 ++- .../DialogInputQuantityV2ViewModel.java | 43 +++++++++++++++++++ 10 files changed, 137 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java index af1b4f46..602ce4b0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java @@ -1,13 +1,19 @@ package it.integry.integrywmsnative.core.rest.consumers; +import androidx.annotation.NonNull; + +import java.util.Date; +import java.util.List; import java.util.concurrent.ExecutorService; import javax.inject.Singleton; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; import retrofit2.Call; import retrofit2.Callback; @@ -59,4 +65,20 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer { } }); } + + public void retrieveAllPartitaMag(List codMarts, Date dataScad, RunnableArgs> onComplete, RunnableArgs onFailed) { + MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class); + service.retrieveAllPartitaMag(codMarts, UtilityDate.formatDate(dataScad, UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)) + .enqueue(new Callback<>() { + @Override + public void onResponse(@NonNull Call>> call, @NonNull Response>> response) { + analyzeAnswer(response, "retrieveAllPartitaMag", onComplete, onFailed); + } + + @Override + public void onFailure(@NonNull Call>> call, @NonNull Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java index 2797ffee..60cd5dbd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java @@ -3,14 +3,12 @@ package it.integry.integrywmsnative.core.rest.consumers; import java.util.List; import it.integry.integrywmsnative.core.model.MtbPartitaMag; -import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; import retrofit2.http.POST; -import retrofit2.http.Path; import retrofit2.http.Query; public interface MagazzinoRESTConsumerService { @@ -22,6 +20,7 @@ public interface MagazzinoRESTConsumerService { Call> retrievePartitaMag(@Query("codMart") String codMart, @Query("partitaMag") String partitaMag); - - + @POST("wms/partita-magazzino/retrieveAllPartitaMag") + Call>> retrieveAllPartitaMag(@Body List codMarts, + @Query("dataScad") String dataScad); } 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 6e09f913..5f2448bb 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 @@ -82,6 +82,8 @@ public class DBSettingsModel { private boolean flagPickingLiberoEnableScanArt = false; private boolean flagAskDuplicateUDSSpedizione = false; + private boolean suggestDataScad = false; + public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; } @@ -684,4 +686,13 @@ public class DBSettingsModel { this.flagAskDuplicateUDSSpedizione = flagAskDuplicateUDSSpedizione; return this; } + + public boolean isSuggestDataScad() { + return suggestDataScad; + } + + public DBSettingsModel setSuggestDataScad(boolean suggestDataScad) { + this.suggestDataScad = suggestDataScad; + 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 0a722da0..7a85f68a 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 @@ -456,6 +456,12 @@ public class SettingsManager { .setKeySection("GENERA_DOC") .setSetter(dbSettingsModelIstance::setFlagGeneraDocumentoSpedizione) .setDefaultValue(false)); + stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) + .setGestName("PICKING") + .setSection("SPEDIZIONE") + .setKeySection("SUGGEST_DATA_SCAD") + .setSetter(dbSettingsModelIstance::setSuggestDataScad) + .setDefaultValue(false)); stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) .setGestName("PICKING") .setSection("ACCETTAZIONE_BOLLA") 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 bc3b3aa6..2ca1a6a5 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 @@ -916,7 +916,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo .setCanLUBeClosed(true) .setCanPartitaMagBeChanged(canPartitaMagBeChanged) .setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null) - .setNotifyProductLotStatus(SettingsManager.iDB().isNotifyLotStatus()); + .setNotifyProductLotStatus(SettingsManager.iDB().isNotifyLotStatus()) + .setMtbPartitaMagList(mViewmodel.getmPartitaMagList()); if (!mDialogInputQuantityV2View.isVisible()) mDialogInputQuantityV2View diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java index dad4a875..e2f150e2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java @@ -11,6 +11,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsum import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; @@ -36,7 +37,8 @@ public class SpedizioneModule { ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer, - ImballiRESTConsumer imballiRESTConsumer) { + ImballiRESTConsumer imballiRESTConsumer, + MagazzinoRESTConsumer magazzinoRESTConsumer) { return new SpedizioneViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, @@ -48,7 +50,8 @@ public class SpedizioneModule { colliSpedizioneRESTConsumer, colliLavorazioneRESTConsumer, magazzinoAutomaticoRESTConsumer, - imballiRESTConsumer); + imballiRESTConsumer, + magazzinoRESTConsumer); } } 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 df15bc45..52d48cfb 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,6 +10,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.Comparator; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -59,6 +60,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsum import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; @@ -105,6 +107,7 @@ public class SpedizioneViewModel { private List mTestateOrdini; private MutableLiveData> mPickingList = new MutableLiveData<>(); private List mColliRegistrati = new ArrayList<>(); + private List mPartitaMagList = new ArrayList<>(); private Listener mListener; @@ -143,6 +146,7 @@ public class SpedizioneViewModel { private final ImballiRESTConsumer mImballiRESTConsumer; private ColliScaricoRESTConsumerInterface mColliScaricoRESTConsumer; + private MagazzinoRESTConsumer magazzinoRESTConsumer; @Inject public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer, @@ -156,7 +160,8 @@ public class SpedizioneViewModel { ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer, - ImballiRESTConsumer imballiRESTConsumer) { + ImballiRESTConsumer imballiRESTConsumer, + MagazzinoRESTConsumer magazzinoRESTConsumer) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mColliDataRecoverService = colliDataRecoverService; @@ -169,6 +174,7 @@ public class SpedizioneViewModel { this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer; this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer; this.mImballiRESTConsumer = imballiRESTConsumer; + this.magazzinoRESTConsumer = magazzinoRESTConsumer; } @@ -190,21 +196,35 @@ public class SpedizioneViewModel { if (enableGiacenza) { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { this.mPickingList.postValue(pickingObjectList); - this.sendOnLoadingEnded(); }, ex -> this.sendError(new OrdersLoadException(ex))); } else { getEmptyPickingList(pickingList, pickingObjectList -> { this.mPickingList.postValue(pickingObjectList); - this.sendOnLoadingEnded(); }); } + getPartitaMagList(pickingList, mtbPartitaMagList -> { + this.mPartitaMagList = mtbPartitaMagList; + this.sendOnLoadingEnded(); + }); + this.mDefaultGestioneOfUL = gestioneCol; this.mDefaultSegnoCol = segnoCol; this.initDefaultVars(); } + private void getPartitaMagList(List sitArtOrdList, RunnableArgs> onComplete) { + if (SettingsManager.iDB().isSuggestDataScad()) { + List codMarts = sitArtOrdList.stream() + .map(x -> x.getCodMart().trim()) + .collect(Collectors.toList()); + + this.magazzinoRESTConsumer.retrieveAllPartitaMag(codMarts, new Date(), onComplete, this::sendError); + } else { + onComplete.run(new ArrayList<>()); + } + } private void getEmptyPickingList(List sitArtOrdList, RunnableArgs> onComplete) { List codMarts = sitArtOrdList.stream() @@ -1653,7 +1673,7 @@ public class SpedizioneViewModel { } } - private void duplicateUDS(MtbColt savedMtbColt, Integer inputNumber, RunnableArgs> onComplete){ + private void duplicateUDS(MtbColt savedMtbColt, Integer inputNumber, RunnableArgs> onComplete) { var duplicateUDSRequestDTO = new DuplicateUDSRequestDTO() .setMtbColt(savedMtbColt) .setNumOfDuplicates(inputNumber); @@ -1982,6 +2002,10 @@ public class SpedizioneViewModel { return mPickingList; } + public List getmPartitaMagList() { + return mPartitaMagList; + } + public ArrayList getCreatedMtbColts() { return (ArrayList) this.mColliRegistrati; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index bc2df22e..84547c37 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -2,9 +2,11 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.List; import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -57,6 +59,8 @@ public class DialogInputQuantityV2DTO { private String customArtDescription; + private List mtbPartitaMagList; + public MtbAart getMtbAart() { return mtbAart; } @@ -380,4 +384,13 @@ public class DialogInputQuantityV2DTO { this.warnOnQuantityOverflow = warnOnQuantityOverflow; return this; } + + public List getMtbPartitaMagList() { + return mtbPartitaMagList; + } + + public DialogInputQuantityV2DTO setMtbPartitaMagList(List mtbPartitaMagList) { + this.mtbPartitaMagList = mtbPartitaMagList; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 0aa33da3..ba92bce0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -27,6 +27,7 @@ import com.pedromassango.doubleclick.DoubleClickListener; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; +import java.util.Objects; import javax.inject.Inject; import javax.inject.Singleton; @@ -177,6 +178,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia .setSuggestPartitaMagRunnable(mDialogInputQuantityV2DTO.getSuggestPartitaMag()) .setDataScad(mDialogInputQuantityV2DTO.getDataScad()) .setDisableTracciabilitaCheck(mDialogInputQuantityV2DTO.isDisableTracciabilitaCheck()) + .setmPartitaMagList(mDialogInputQuantityV2DTO.getMtbPartitaMagList()) .setStatoArt(mDialogInputQuantityV2DTO.getStatoPartitaMag() != null ? mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt() : null); mBindings.setView(this); @@ -301,7 +303,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> { if (this.mEnableDataCallback) { - this.mViewModel.setPartitaMag(value); + this.mViewModel.setNewPartitaMag(value); } }); @@ -403,7 +405,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia UtilityObservable.addPropertyChanged(this.mViewModel.blockedQtaTot, (value) -> { toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value); - if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) { + if (Objects.requireNonNull(this.mViewModel.mtbAart.get()).isFlagQtaCnfFissaBoolean()) { this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable() && !value); } else { if (value) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java index 6b7af810..dc2f3a77 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java @@ -4,8 +4,13 @@ import androidx.databinding.ObservableField; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Optional; import java.util.concurrent.FutureTask; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Stream; import javax.inject.Inject; @@ -100,6 +105,8 @@ public class DialogInputQuantityV2ViewModel { private StatoPartitaMag statoArt; + private List mPartitaMagList; + @Inject public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) { this.mBarcodeRESTConsumer = barcodeRESTConsumer; @@ -354,6 +361,11 @@ public class DialogInputQuantityV2ViewModel { return this; } + public DialogInputQuantityV2ViewModel setmPartitaMagList(List mPartitaMagList) { + this.mPartitaMagList = mPartitaMagList; + return this; + } + public DialogInputQuantityV2ViewModel setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) { this.warnOnQuantityOverflow = warnOnQuantityOverflow; return this; @@ -378,6 +390,37 @@ public class DialogInputQuantityV2ViewModel { return this; } + public void setNewPartitaMag(String internalPartitaMag) { + this.internalPartitaMag = internalPartitaMag; + + if (mPartitaMagList != null && SettingsManager.iDB().isSuggestDataScad()){ + Optional partitaMag = mPartitaMagList.stream() + .filter(x -> x.getPartitaMag().equalsIgnoreCase(internalPartitaMag)) + .findFirst(); + + if (partitaMag.isPresent()){ + setNewDataScad(partitaMag.get().getDataScad()); + } else { + MtbAart localMtbAart = mtbAart.get(); + LocalDate dataScad = null; + + if (localMtbAart != null && localMtbAart.getGgScadPartita() != null && localMtbAart.getGgScadPartita() > 0) { + dataScad = UtilityDate.getNow(); + dataScad.plusDays(localMtbAart.getGgScadPartita()); + } + + setNewDataScad(dataScad); + } + } + + this.mListener.onDataChanged(); + } + + public void setNewDataScad(LocalDate internalDataScad) { + this.internalDataScad = internalDataScad; + this.mListener.onDataChanged(); + } + public DialogInputQuantityV2ViewModel setDataScad(LocalDate internalDataScad) { this.internalDataScad = internalDataScad; return this; From c6975badceaa0b3f96b3be6d4da13272517e2cb6 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Mon, 22 Jul 2024 09:09:27 +0200 Subject: [PATCH 2/2] -> v1.40.28 (445) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5f786a03..1f758b62 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 444 - def appVersionName = '1.40.27' + def appVersionCode = 445 + def appVersionName = '1.40.28' signingConfigs { release {