From 9436236eaab54a3bef1f37a25f04ddac6c7b21d1 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 3 Sep 2025 16:51:48 +0200 Subject: [PATCH 01/16] Fix postValue in Rientro Merce --- .../order_list/ProdRientroMerceOrderListFilterViewModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java index 86e14377..3367e225 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFilterViewModel.java @@ -21,7 +21,7 @@ public class ProdRientroMerceOrderListFilterViewModel { public void init(List initialList) { this.initialOrderList = initialList; - this.currentFilteredOrderList.setValue(this.initialOrderList); + this.currentFilteredOrderList.postValue(this.initialOrderList); } public MutableLiveData> getMutableFilteredOrderList() { From 0aa0b09afa28729c77ee8d61261de90fe31403f4 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 09:47:11 +0200 Subject: [PATCH 02/16] Fix su null della variabile Server in Login --- Jenkinsfile.groovy | 1 + .../core/settings/SettingsManager.java | 14 ++++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index 51b09c0b..ac46081c 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -30,6 +30,7 @@ pipeline { stage('Build') { steps { bat "./gradlew assembleRelease" + bat "./gradlew app:uploadCrashlyticsSymbolFileRelease" archiveArtifacts artifacts: 'app/build/outputs/apk/release/', onlyIfSuccessful: true } } 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 2b10e613..7243e9a9 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 @@ -39,8 +39,6 @@ public class SettingsManager { private static SettingsModel settingsModelIstance; private static DBSettingsModel dbSettingsModelIstance; - private static boolean firstStart = false; - private static Context mContext; private static SystemRESTConsumer mSystemRESTConsumer; private static ImballiRESTConsumer mImballiRESTConsumer; @@ -65,15 +63,15 @@ public class SettingsManager { public void init() { settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class); - if (settingsModelIstance == null) { + if (settingsModelIstance == null) settingsModelIstance = new SettingsModel(); + + if (settingsModelIstance.getServer() == null) settingsModelIstance.setServer(new SettingsModel.Server()); - firstStart = true; - } + dbSettingsModelIstance = new DBSettingsModel(); - } public SettingsModel getSettings() { @@ -89,10 +87,6 @@ public class SettingsManager { return dbSettingsModelIstance; } - public static boolean isFirstStart() { - return firstStart; - } - public static boolean isInstanceAvailable() { return i() != null; } From fc2c0fbe0c3a2c18626430e4f4d4a5c314873e9e Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 10:26:15 +0200 Subject: [PATCH 03/16] -> v1.47.11 (524) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 219e0fbf..a2fa41a8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 523 - def appVersionName = '1.47.10' + def appVersionCode = 524 + def appVersionName = '1.47.11' signingConfigs { release { From 2cb184f24b406f4fa1d1c6b4e9a789364f2bb91e Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 10:35:40 +0200 Subject: [PATCH 04/16] Aggiunto upload simboli su Firebase --- app/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index a2fa41a8..df975f88 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,6 +8,7 @@ apply plugin: 'com.google.firebase.crashlytics' //apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' + android { def appVersionCode = 524 @@ -60,6 +61,9 @@ android { shrinkResources true // Rimuove risorse non utilizzate proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release + firebaseCrashlytics { + mappingFileUploadEnabled false + } } } From bc67098ae07de3e51f0dd8138f0bece7e7fa565b Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 10:36:33 +0200 Subject: [PATCH 05/16] Aggiunto upload simboli su Firebase --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index df975f88..db88020a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release firebaseCrashlytics { - mappingFileUploadEnabled false + mappingFileUploadEnabled true } } } From 8772d11e022de5c37fc2c2683c14357451af9d90 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 10:37:36 +0200 Subject: [PATCH 06/16] Aggiunto upload simboli su Firebase --- Jenkinsfile.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/Jenkinsfile.groovy b/Jenkinsfile.groovy index ac46081c..51b09c0b 100644 --- a/Jenkinsfile.groovy +++ b/Jenkinsfile.groovy @@ -30,7 +30,6 @@ pipeline { stage('Build') { steps { bat "./gradlew assembleRelease" - bat "./gradlew app:uploadCrashlyticsSymbolFileRelease" archiveArtifacts artifacts: 'app/build/outputs/apk/release/', onlyIfSuccessful: true } } From 007d58a17e0d8a2c000fa88fc9b355f3c10d257a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 11:00:48 +0200 Subject: [PATCH 07/16] Aggiunta esclusione classi JJWT dall'obfuscation --- app/proguard-rules.pro | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 9c4ec8eb..46daa1b6 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -34,6 +34,11 @@ (...); @com.google.gson.annotations.SerializedName ; } + +# Per JJWT +-keep class io.jsonwebtoken.** { *; } +-keepnames class io.jsonwebtoken.* { *; } + # Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher. -keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken -keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken From 3a43e9238bfb5f8a2b6abb4ba3b2b75110c969e7 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 11:00:48 +0200 Subject: [PATCH 08/16] Aggiunta esclusione classi JJWT dall'obfuscation --- app/proguard-rules.pro | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 9c4ec8eb..97f6bd08 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -34,6 +34,12 @@ (...); @com.google.gson.annotations.SerializedName ; } + +# Per JJWT +-keep class io.jsonwebtoken.** { *; } +-keepnames class io.jsonwebtoken.* { *; } +-keepnames interface io.jsonwebtoken.* { *; } + # Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher. -keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken -keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken From ee1042704896a9ef508797b6a16e7db2170245ee Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 11:03:45 +0200 Subject: [PATCH 09/16] -> v1.47.12 (525) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index db88020a..d461eed5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 524 - def appVersionName = '1.47.11' + def appVersionCode = 525 + def appVersionName = '1.47.12' signingConfigs { release { From 72edf5228ad453af1cd933a687f18bfacd4c1055 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 11:24:11 +0200 Subject: [PATCH 10/16] Rimosso minify --- app/build.gradle | 8 ++++---- .../core/rest/model/AvailableCodMdepsDTO.java | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d461eed5..940db228 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,13 +52,13 @@ android { buildTypes { debug { ext.enableCrashlytics = false -// minifyEnabled true // Abilita la minimizzazione del codice -// shrinkResources true // Rimuove risorse non utilizzate + minifyEnabled true // Abilita la minimizzazione del codice + shrinkResources true // Rimuove risorse non utilizzate proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { - minifyEnabled true // Abilita la minimizzazione del codice - shrinkResources true // Rimuove risorse non utilizzate +// minifyEnabled true // Abilita la minimizzazione del codice +// shrinkResources true // Rimuove risorse non utilizzate proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release firebaseCrashlytics { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java index e26407cd..34de9e8e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java @@ -1,8 +1,13 @@ package it.integry.integrywmsnative.core.rest.model; +import com.google.gson.annotations.SerializedName; + public class AvailableCodMdepsDTO { + @SerializedName("codMdep") private String codMdep; + + @SerializedName("descrizione") private String descrizione; public String getCodMdep() { From 150be3cae2095d68db82e37672554348b8a78923 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 11:24:11 +0200 Subject: [PATCH 11/16] Rimosso minify --- app/build.gradle | 6 +++--- .../core/rest/model/AvailableCodMdepsDTO.java | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d461eed5..66696528 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,11 +54,11 @@ android { ext.enableCrashlytics = false // minifyEnabled true // Abilita la minimizzazione del codice // shrinkResources true // Rimuove risorse non utilizzate - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' +// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { - minifyEnabled true // Abilita la minimizzazione del codice - shrinkResources true // Rimuove risorse non utilizzate +// minifyEnabled true // Abilita la minimizzazione del codice +// shrinkResources true // Rimuove risorse non utilizzate proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release firebaseCrashlytics { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java index e26407cd..34de9e8e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java @@ -1,8 +1,13 @@ package it.integry.integrywmsnative.core.rest.model; +import com.google.gson.annotations.SerializedName; + public class AvailableCodMdepsDTO { + @SerializedName("codMdep") private String codMdep; + + @SerializedName("descrizione") private String descrizione; public String getCodMdep() { From ac4500e2a2aa46fd936d96f26bc99d66e4ff758c Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 11:25:26 +0200 Subject: [PATCH 12/16] -> v1.47.13 (526) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 66696528..6f720ec3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 525 - def appVersionName = '1.47.12' + def appVersionCode = 526 + def appVersionName = '1.47.13' signingConfigs { release { From dfe22a76cd0ec01f53acc77b379d27a78f0fb58a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Sep 2025 15:55:52 +0200 Subject: [PATCH 13/16] Fix nel dialog delle info aggiuntive delle righe: adesso non viene considerata come qta in arrivo la qta degli ordini del quale sto facendo picking. --- .../InstantItemSituationResponseDto.java | 8 +++++ .../gest/spedizione/SpedizioneActivity.java | 25 ++++++++++++++- .../row_info/BaseDialogRowInfoView.java | 11 ++++++- .../DialogInfoSituazioneArticoloView.java | 23 ++++++++++--- ...logRowInfoProdFabbisognoLineeProdView.java | 5 +-- .../spedizione/ui/SpedizioneListAdapter.java | 32 ++++++------------- 6 files changed, 73 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/giacenza/InstantItemSituationResponseDto.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/giacenza/InstantItemSituationResponseDto.java index b3be44fc..1be4c95a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/giacenza/InstantItemSituationResponseDto.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/giacenza/InstantItemSituationResponseDto.java @@ -19,7 +19,15 @@ public class InstantItemSituationResponseDto { return incomingItems; } + public void setIncomingItems(List incomingItems) { + this.incomingItems = incomingItems; + } + public List getAvailableItems() { return availableItems; } + + public void setAvailableItems(List availableItems) { + this.availableItems = availableItems; + } } 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 c4fbd672..44427581 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 @@ -21,6 +21,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.annimon.stream.Stream; import com.google.android.material.snackbar.Snackbar; +import java.lang.reflect.Constructor; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; @@ -46,6 +47,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgsss; import it.integry.integrywmsnative.core.expansion.RunnableArgssss; +import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; @@ -335,7 +337,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo this.noItemsToPick.set(!isThereAnyItemToPick(updatedData)); }); - SpedizioneListAdapter spedizioneListAdapter = new SpedizioneListAdapter(this, mSpedizioneMutableData, mInfoDialogClassType, getSupportFragmentManager()); + SpedizioneListAdapter spedizioneListAdapter = new SpedizioneListAdapter(this, + mSpedizioneMutableData, + mInfoDialogClassType, + this::openRowInfoDialog); this.mBindings.spedizionePickingList.setAdapter(spedizioneListAdapter); this.mBindings.spedizionePickingList.setLayoutManager(new LinearLayoutManager(this)); @@ -360,6 +365,24 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo } + + private void openRowInfoDialog(SpedizioneListModel item) { + try { + Constructor cons = Class.forName(mInfoDialogClassType.getName()).getConstructors()[0]; + BaseDialogRowInfoView object = (BaseDialogRowInfoView) cons.newInstance(item, mTestateOrdini, (Runnable) () -> { + + }, (Runnable) () -> { + + }); + object.show(getSupportFragmentManager(), "tag"); + + } catch (Exception e) { + UtilityExceptions.defaultException(this, e); + } + + } + + private List convertDataModelToListModel(List dataList) { List tmpList = Stream.of(dataList) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/BaseDialogRowInfoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/BaseDialogRowInfoView.java index c40c2c75..b2e34a83 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/BaseDialogRowInfoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/BaseDialogRowInfoView.java @@ -2,17 +2,22 @@ package it.integry.integrywmsnative.gest.spedizione.dialogs.row_info; import org.jetbrains.annotations.NotNull; +import java.util.List; + import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; public abstract class BaseDialogRowInfoView extends BaseDialogFragment implements IBaseDialogRowInfoView { private final SpedizioneListModel mSpedizioneListModel; + private final List mOrdersList; private final Runnable mOnComplete; private final Runnable mOnAbort; - public BaseDialogRowInfoView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { + public BaseDialogRowInfoView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull List ordersList, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { this.mSpedizioneListModel = spedizioneListModel; + this.mOrdersList = ordersList; this.mOnComplete = onComplete; this.mOnAbort = onAbort; } @@ -21,6 +26,10 @@ public abstract class BaseDialogRowInfoView extends BaseDialogFragment implement return mSpedizioneListModel; } + protected List getOrdersList() { + return mOrdersList; + } + protected Runnable getOnComplete() { return mOnComplete; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java index 267e15b9..98fac9cc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java @@ -19,7 +19,9 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -28,6 +30,7 @@ import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationIncomingItemDto; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; @@ -53,8 +56,8 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView { private DialogInfoSituazioneArticoloBinding mBindings; private Context mContext; - public DialogInfoSituazioneArticoloView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { - super(spedizioneListModel, onComplete, onAbort); + public DialogInfoSituazioneArticoloView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull List ordersList, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { + super(spedizioneListModel, ordersList, onComplete, onAbort); } @NonNull @@ -100,10 +103,22 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView { var result = giacenzaRESTConsumer.getInstantItemSituationSynchronized(codMdep, codMart, partitaMag, codJcom); + if (result.getIncomingItems() != null && !result.getIncomingItems().isEmpty()) { + var filteredList = result.getIncomingItems().stream() + .filter(x -> getOrdersList().stream().noneMatch( + y -> Objects.equals(x.getDataOrd(), y.getDataOrd()) && + Objects.equals(x.getNumOrd(), y.getNumOrd()) && + Objects.equals(x.getGestione(), y.getGestione()))) + .collect(Collectors.toList()); + result.setIncomingItems(filteredList); + } + handler.post(() -> { try { - if(result != null && result.getIncomingItems() != null) this.initIncomingItemsList(result.getIncomingItems()); - if(result != null && result.getAvailableItems() != null) this.initAvailableItemsList(result.getAvailableItems()); + if (result != null && result.getIncomingItems() != null) + this.initIncomingItemsList(result.getIncomingItems()); + if (result != null && result.getAvailableItems() != null) + this.initAvailableItemsList(result.getAvailableItems()); this.onLoadingEnded(); } catch (Exception e) { onError(e); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java index 567fc58f..dcc1a9ca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java @@ -21,6 +21,7 @@ import java.util.List; import javax.inject.Inject; import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.DialogRowInfoProdFabbisognoLineeProdBinding; @@ -40,8 +41,8 @@ public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoV private Context mContext; private DialogRowInfoProdFabbisognoLineeProdBinding mBindings; - public DialogRowInfoProdFabbisognoLineeProdView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { - super(spedizioneListModel, onComplete, onAbort); + public DialogRowInfoProdFabbisognoLineeProdView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull List ordersList, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { + super(spedizioneListModel, ordersList, onComplete, onAbort); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java index e5710c13..aae4d617 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java @@ -12,12 +12,10 @@ import androidx.core.content.res.ResourcesCompat; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableList; -import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.RecyclerView; import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; -import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; @@ -25,10 +23,10 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; @@ -41,7 +39,8 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter mInfoDialogClassType; - private final FragmentManager mFragmentManager; + private final RunnableArgs onInfoRowClicked; + private final List mDataset = new ArrayList<>(); private RunnableArgssss mOnItemClicked; @@ -69,10 +68,13 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter mutableDataSet, Class infoDialogClassType, FragmentManager fragmentManager) { + public SpedizioneListAdapter(AppCompatActivity context, + ObservableArrayList mutableDataSet, + Class infoDialogClassType, + RunnableArgs onInfoRowClicked) { this.mContext = context; this.mInfoDialogClassType = infoDialogClassType; - this.mFragmentManager = fragmentManager; + this.onInfoRowClicked = onInfoRowClicked; mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() { @Override @@ -187,7 +189,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter cons = Class.forName(mInfoDialogClassType.getName()).getConstructors()[0]; - BaseDialogRowInfoView object = (BaseDialogRowInfoView) cons.newInstance(item, (Runnable) () -> { - - }, (Runnable) () -> { - - }); - object.show(mFragmentManager, "tag"); - - } catch (Exception e) { - UtilityExceptions.defaultException(this.mContext, e); - } - - } - } From 4861c689d70e1fc187a186a77fd9e0b460c6578f Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 10 Sep 2025 15:50:02 +0200 Subject: [PATCH 14/16] Fix su codMdep non ricevuto nel caso di picking Extra Item in Spedizione --- app/build.gradle | 2 + .../gest/spedizione/SpedizioneActivity.java | 4 +- .../gest/spedizione/SpedizioneViewModel.java | 21 ++- .../dialogs/scan_art/DialogScanArtView.java | 93 ++++++---- .../scan_art/DialogScanArtViewModel.java | 170 ++++++++---------- 5 files changed, 157 insertions(+), 133 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6f720ec3..c2c04bae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -192,6 +192,8 @@ dependencies { //Barcode generator implementation 'com.journeyapps:zxing-android-embedded:4.3.0' + + implementation("org.javatuples:javatuples:1.2") } repositories { 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 58c691a9..5cd9e95f 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 @@ -739,12 +739,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void addExtraItem() { handler.post(() -> { DialogScanArtView - .newInstance(!mEnableFakeGiacenza, (status, mtbAart, ean128Model, mtbColr) -> { + .newInstance(!mEnableFakeGiacenza, (status, mtbAart, ean128Model, mtbColt) -> { if (status == DialogConsts.Results.YES) { executorService.execute(() -> { try { - this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColr); + this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColt); } catch (Exception e) { onError(e); } 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 7a9efb12..1a86353c 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 @@ -1224,7 +1224,7 @@ public class SpedizioneViewModel { return !stati.isEmpty() ? stati.get(0) : null; } - public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) throws Exception { + public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColt refMtbColt) throws Exception { PickingObjectDTO pickingObjectDTO = new PickingObjectDTO().setMtbAart(mtbAart).setTempPickData(PickDataDTO.fromEan128(ean128Model)); @@ -1243,12 +1243,23 @@ public class SpedizioneViewModel { String partitaMag = null; LocalDate dataScad = null; - MtbColt refMtbColt = null; +// MtbColt refMtbColt = null; - if (mtbColrToUse != null) { - refMtbColt = new MtbColt().setDataCollo(mtbColrToUse.getDataColloD()).setSerCollo(mtbColrToUse.getSerCollo()).setNumCollo(mtbColrToUse.getNumCollo()).setGestione(mtbColrToUse.getGestione()).setMtbColr(new ObservableArrayList<>()); + if (refMtbColt != null && refMtbColt.getMtbColr() != null && !refMtbColt.getMtbColr().isEmpty()) { + MtbColr mtbColrToUse = refMtbColt.getMtbColr().get(0); - refMtbColt.getMtbColr().add(mtbColrToUse); + //Se il collo di riferimento non ha righe, lo creo al volo +// refMtbColt = new MtbColt() +// .setDataCollo(mtbColrToUse.getDataColloD()) +// .setSerCollo(mtbColrToUse.getSerCollo()) +// .setNumCollo(mtbColrToUse.getNumCollo()) +// .setGestione(mtbColrToUse.getGestione()) +//// .setCodMdep(mtbColrToUse.getCodMdepIn()) +//// .setPosizione(mtbColrToUse.getPosizioneIn()) +//// .setBarcodeUl(mtbColrToUse.getBarcodeUlIn()) +// .setMtbColr(new ObservableArrayList<>()); +// +// refMtbColt.getMtbColr().add(mtbColrToUse); pickingObjectDTO.setMtbAart(mtbColrToUse.getMtbAart()).setTempPickData(new PickDataDTO().setSourceMtbColt(refMtbColt)); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java index 3a1a6f89..fe63725e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java @@ -4,15 +4,19 @@ import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; +import android.os.Handler; import android.view.LayoutInflater; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.databinding.ObservableArrayList; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import org.javatuples.Quartet; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.stream.Collectors; import javax.inject.Inject; @@ -27,6 +31,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.databinding.DialogScanArtBinding; @@ -38,6 +43,9 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA @Inject DialogScanArtViewModel mViewModel; + @Inject + Handler handler; + private Context mContext; private final boolean mForceOnlyUL; @@ -46,15 +54,15 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA private int mBarcodeScannerInstanceID; - private RunnableArgssss onPickingCompleted = null; + private RunnableArgssss onPickingCompleted = null; private RunnableArgs onMagazzinoAutomaticoPickingRequest = null; - public static DialogScanArtView newInstance(boolean forceOnlyUL, @NotNull RunnableArgssss onPickingCompleted, RunnableArgs onMagazzinoAutomaticoPickingRequest) { + public static DialogScanArtView newInstance(boolean forceOnlyUL, @NotNull RunnableArgssss onPickingCompleted, RunnableArgs onMagazzinoAutomaticoPickingRequest) { return new DialogScanArtView(forceOnlyUL, onPickingCompleted, onMagazzinoAutomaticoPickingRequest); } - private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss onItemChoosed, RunnableArgs onMagazzinoAutomaticoPickingRequest) { + private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss onItemChoosed, RunnableArgs onMagazzinoAutomaticoPickingRequest) { super(); mForceOnlyUL = forceOnlyUL; @@ -122,37 +130,60 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA private final RunnableArgs onScanSuccessfull = data -> { this.onLoadingStarted(); - this.mViewModel.processBarcodeDTO(data, (status, mtbAart, ean128Model, mtbColrList) -> { + executorService.execute(() -> { - var filteredMtbColrList = mtbColrList; + try { - if (mtbAart != null && filteredMtbColrList != null) { - filteredMtbColrList = filteredMtbColrList.stream() - .filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())) - .collect(Collectors.toList()); + Quartet result = this.mViewModel.processBarcodeDTO(data, pickMagazzinoAutomaticoPosizione -> { + handler.post(() -> { + this.onMagazzinoAutomaticoPickingRequest.run(pickMagazzinoAutomaticoPosizione); + + this.onLoadingEnded(); + dismiss(); + }); + }); + + var status = result.getValue0(); + var mtbAart = result.getValue1(); + var ean128Model = result.getValue2(); + var mtbColt = result.getValue3(); + + List filteredMtbColrList = mtbColt.getMtbColr(); + + if (mtbAart != null && filteredMtbColrList != null) { + filteredMtbColrList = filteredMtbColrList.stream() + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())) + .collect(Collectors.toList()); + } + + + List finalFilteredMtbColrList = filteredMtbColrList; + handler.post(() -> { + if (finalFilteredMtbColrList != null && finalFilteredMtbColrList.size() > 1) { + DialogChooseArtFromListaMtbColrView.make(getActivity(), finalFilteredMtbColrList, mtbColrChose -> { + + mtbColt.setMtbColr(new ObservableArrayList<>()); + mtbColt.getMtbColr().add(mtbColrChose); + onPickingCompleted.run(status, mtbAart, ean128Model, mtbColt); + }).show(); + + } else if (finalFilteredMtbColrList != null && finalFilteredMtbColrList.size() == 1) { + mtbColt.setMtbColr(new ObservableArrayList<>()); + mtbColt.getMtbColr().add(finalFilteredMtbColrList.get(0)); + onPickingCompleted.run(status, mtbAart, ean128Model, mtbColt); + + } else { + onPickingCompleted.run(status, mtbAart, ean128Model, null); + } + + + this.onLoadingEnded(); + + dismiss(); + }); + } catch (Exception ex) { + onError(ex); } - - if (filteredMtbColrList != null && filteredMtbColrList.size() > 1) { - DialogChooseArtFromListaMtbColrView.make(getActivity(), filteredMtbColrList, mtbColrChose -> { - onPickingCompleted.run(status, mtbAart, ean128Model, mtbColrChose); - }).show(); - - } else if (filteredMtbColrList != null && filteredMtbColrList.size() == 1) { - onPickingCompleted.run(status, mtbAart, ean128Model, filteredMtbColrList.get(0)); - - } else { - onPickingCompleted.run(status, mtbAart, ean128Model, null); - } - - - this.onLoadingEnded(); - - dismiss(); - }, pickMagazzinoAutomaticoPosizione -> { - this.onMagazzinoAutomaticoPickingRequest.run(pickMagazzinoAutomaticoPosizione); - - this.onLoadingEnded(); - dismiss(); }); }; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java index b196ffbb..54d7e612 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java @@ -1,22 +1,17 @@ package it.integry.integrywmsnative.view.dialogs.scan_art; -import com.annimon.stream.Stream; - +import org.javatuples.Quartet; import org.jetbrains.annotations.NotNull; -import java.util.List; - import it.integry.barcode_base_android_library.model.BarcodeScanDTO; -import it.integry.integrywmsnative.core.exception.EmptyLUException; import it.integry.integrywmsnative.core.exception.InvalidLUException; import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; @@ -62,23 +57,23 @@ public class DialogScanArtViewModel { return this; } - public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onPickingCompleted, RunnableArgs onMagazzinoAutomaticoPickingRequest) { + public Quartet processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgs onMagazzinoAutomaticoPickingRequest) throws Exception { if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { //Cerco gli articoli presenti nell'ul dell'etichetta anonima - this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onPickingCompleted); + return this.executeEtichettaLU(barcodeScanDTO.getStringValue()); } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { //Cerco l'UL presente all'interno della posizione - this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onPickingCompleted, onMagazzinoAutomaticoPickingRequest); + return this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onMagazzinoAutomaticoPickingRequest); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { - this.executeEtichettaEan128(barcodeScanDTO, onPickingCompleted); + return this.executeEtichettaEan128(barcodeScanDTO); } else if (UtilityBarcode.isEanPeso(barcodeScanDTO) && !mForceOnlyUL) { - this.executeEtichettaEanPeso(barcodeScanDTO, onPickingCompleted); + return this.executeEtichettaEanPeso(barcodeScanDTO); } else { - this.loadArticolo(barcodeScanDTO.getStringValue(), null, onPickingCompleted); + return this.loadArticolo(barcodeScanDTO.getStringValue(), null); } // else { @@ -87,123 +82,108 @@ public class DialogScanArtViewModel { } - - private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { - this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { - - String barcodeProd = null; - - if (ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc; - if (ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin; - if (ean128Model.Content != null) barcodeProd = ean128Model.Content; + private Quartet executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) throws Exception { + var ean128Model = this.mBarcodeRESTConsumer.decodeEan128Synchronized(barcodeScanDTO); - if (!UtilityString.isNullOrEmpty(barcodeProd)) { - if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { - this.executeEtichettaLU(ean128Model.Sscc, onComplete); - } else if (!mForceOnlyUL) { + String barcodeProd = null; + + if (ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc; + if (ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin; + if (ean128Model.Content != null) barcodeProd = ean128Model.Content; + + + if (!UtilityString.isNullOrEmpty(barcodeProd)) { + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + return this.executeEtichettaLU(ean128Model.Sscc); + + } else if (!mForceOnlyUL) { + return this.loadArticolo(barcodeProd, ean128Model); - this.loadArticolo(barcodeProd, ean128Model, onComplete); - } else { - this.sendError(new Exception("Barcode non valido")); - } } else { - //EAN 128 non completo o comunque mancano i riferimenti al prodotto - this.sendError(new NoResultFromBarcodeException(barcodeProd)); + throw new Exception("Barcode non valido"); } - }, this::sendError); - } - - private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { - - try { - Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); - - this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), onComplete); - } catch (Exception ex) { - this.sendError(ex); + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + throw new NoResultFromBarcodeException(barcodeProd); } } + private Quartet executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO) throws Exception { + Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); - private void executeEtichettaLU(String SSCC, RunnableArgssss> onComplete) { - mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { - - if (mtbColt != null && mtbColt.getMtbColr() != null && !mtbColt.getMtbColr().isEmpty()) { - if (mtbColt.getSegno() != -1) { - onComplete.run(DialogConsts.Results.YES, null, null, mtbColt.getMtbColr()); - } else this.sendError(new InvalidLUException()); - } else { - this.sendError(new EmptyLUException()); - } - - }, this::sendError); + return this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128()); } + private Quartet executeEtichettaLU(String SSCC) throws Exception { + var mtbColt = mColliMagazzinoRESTConsumer.getBySsccSynchronized(SSCC, true, false); - private void executeEtichettaPosizione(String stringValue, RunnableArgssss> onComplete, RunnableArgs onMagazzinoAutomaticoPickingRequest) { - MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + if (mtbColt == null || mtbColt.getMtbColr() == null || mtbColt.getMtbColr().isEmpty()) + throw new NoLUFoundException(); + + if (mtbColt.getSegno() == -1) throw new InvalidLUException(); + + return new Quartet<>(DialogConsts.Results.YES, null, null, mtbColt); + + } + + + private Quartet executeEtichettaPosizione(String stringValue, RunnableArgs onMagazzinoAutomaticoPickingRequest) throws Exception { + MtbDepoPosizione foundPosizione = SettingsManager.iDB().getAvailablePosizioni().stream() .filter(x -> x.getPosizione().equalsIgnoreCase(stringValue)) - .single(); + .findFirst() + .orElse(null); - if (foundPosizione == null) { + if (foundPosizione == null) //Nessuna posizione trovata con questo barcode - this.sendError(new ScannedPositionNotExistException()); - return; - } + throw new ScannedPositionNotExistException(); + if (foundPosizione.isMagazzinoAutomatico()) { //Eseguo picking da magazzino automatico onMagazzinoAutomaticoPickingRequest.run(foundPosizione); } else { - this.executePosizione(foundPosizione, null, onComplete); + return this.executePosizione(foundPosizione, null); } + + return null; } - private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgssss> onComplete) { - this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { + private Quartet executePosizione(MtbDepoPosizione posizione, MtbAart articolo) throws Exception { + var mtbColtList = this.mPosizioniRESTConsumer.getBancaliInPosizioneSynchronized(posizione); - if (mtbColtList == null || mtbColtList.isEmpty()) { - this.sendError(new NoLUFoundException()); - } else if (mtbColtList.size() == 1) { - this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { - onComplete.run(DialogConsts.Results.YES, articolo, null, mtbColt.getMtbColr()); - }, this::sendError); - } else { - this.sendError(new TooManyLUFoundInMonoLUPositionException()); - } + if (mtbColtList == null || mtbColtList.isEmpty()) + throw new NoLUFoundException(); - }, this::sendError); + if (mtbColtList.size() != 1) { + throw new TooManyLUFoundInMonoLUPositionException(); + } + + var mtbColt = this.mColliMagazzinoRESTConsumer.getByTestataSynchronized(mtbColtList.get(0), true, false); + return new Quartet<>(DialogConsts.Results.YES, articolo, null, mtbColt); } - private void loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model, RunnableArgssss> onComplete) { - this.mArticoloRESTConsumer.searchByBarcode(barcodeProd, mtbAartList -> { - if (mtbAartList != null && !mtbAartList.isEmpty()) { + private Quartet loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model) throws Exception { + var mtbAartList = this.mArticoloRESTConsumer.searchByBarcodeSynchronized(barcodeProd); - MtbAart firstArt = mtbAartList.get(0); - MtbDepoPosizione firstArtPosition = UtilityPosizione.getFromCache(firstArt.getPosizione()); + if (mtbAartList == null || mtbAartList.isEmpty()) + throw new NoResultFromBarcodeException(barcodeProd); - if (firstArtPosition != null && firstArtPosition.isFlagMonoCollo() && mForceOnlyUL) { - this.executePosizione(firstArtPosition, firstArt, onComplete); - } else if (!mForceOnlyUL) { - onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null); - } else { - this.sendError(new NoResultFromBarcodeException(barcodeProd)); - } + MtbAart firstArt = mtbAartList.get(0); + MtbDepoPosizione firstArtPosition = UtilityPosizione.getFromCache(firstArt.getPosizione()); - } else { - this.sendError(new NoResultFromBarcodeException(barcodeProd)); - } - }, this::sendError); + if (firstArtPosition != null && firstArtPosition.isFlagMonoCollo() && mForceOnlyUL) + return this.executePosizione(firstArtPosition, firstArt); + + if (!mForceOnlyUL) + return new Quartet<>(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null); + + throw new NoResultFromBarcodeException(barcodeProd); } - private void sendError(Exception ex) { - if (this.mListener != null) mListener.onError(ex); - } - public void setListener(Listener listener) { this.mListener = listener; } From 5ae9371c510738ba929e8705a08f0db9613e96ab Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 10 Sep 2025 16:31:50 +0200 Subject: [PATCH 15/16] Fix su loading che appare sul popup di conferma chiusura ordine --- .gitignore | 2 ++ .../integrywmsnative/gest/spedizione/SpedizioneActivity.java | 2 ++ .../integrywmsnative/gest/spedizione/SpedizioneViewModel.java | 3 --- build.gradle | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 00dcad77..29149da5 100644 --- a/.gitignore +++ b/.gitignore @@ -149,3 +149,5 @@ crashlytics.properties crashlytics-build.properties ### AndroidStudio Patch ### !/gradle/wrapper/gradle-wrapper.jar +/.idea/copilot.data.migration.agent.xml +/.idea/copilot.data.migration.edit.xml 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 5cd9e95f..3a93dcc5 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 @@ -855,9 +855,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void closeOrder() { this.fabPopupMenu.dismiss(); + this.onLoadingStarted(); executorService.execute(() -> { try { this.mViewmodel.closeOrder(); + this.onLoadingEnded(); } catch (Exception e) { onError(e); } 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 1a86353c..e24097f7 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 @@ -2124,7 +2124,6 @@ public class SpedizioneViewModel { } public void closeOrder() { - this.sendOnLoadingStarted(); if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) { var printRequestResult = this.sendOnCloseOrderPrintRequest(); @@ -2134,8 +2133,6 @@ public class SpedizioneViewModel { if (this.mIsOrdTrasf && !UtilityString.isNullOrEmpty(SettingsManager.iDB().getCodDtipOrdTrasfV())) { this.sendCreateDocsRequest(); } - - this.sendOnOrderClosed(); } private void onCloseOrderPrintRequested(PrintOrderCloseDTO dto) { diff --git a/build.gradle b/build.gradle index cb7ea5d2..5cc06d05 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { ext { kotlin_version = '2.1.0' - agp_version = '8.12.2' + agp_version = '8.13.0' } repositories { From 6fdadffe779ca9e98aaa79c1c4b54f716bb911f4 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 10 Sep 2025 16:36:04 +0200 Subject: [PATCH 16/16] -> v1.47.14 (527) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c2c04bae..e17f6208 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 526 - def appVersionName = '1.47.13' + def appVersionCode = 527 + def appVersionName = '1.47.14' signingConfigs { release {