diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index fdf8d994..e805548a 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a7111eb6..599f4f67 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
- def appVersionCode = 424
- def appVersionName = '1.40.07'
+ def appVersionCode = 430
+ def appVersionName = '1.40.13'
signingConfigs {
release {
@@ -103,17 +103,17 @@ dependencies {
//Firebase
// Import the Firebase BoM
- implementation platform('com.google.firebase:firebase-bom:29.1.0')
+ implementation platform('com.google.firebase:firebase-bom:32.8.1')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-core'
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-perf'
- implementation 'com.google.android.gms:play-services-basement:18.2.0'
+ implementation 'com.google.android.gms:play-services-basement:18.3.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
- implementation 'com.google.android.material:material:1.10.0'
+ implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
@@ -128,7 +128,7 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.annimon:stream:1.2.2'
- implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2'
+ implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.7.0'
// implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'org.apache.commons:commons-text:1.9'
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 687689be..2383218f 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
@@ -90,7 +90,15 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
- public void retrievePartitaMag(String partitaMag, String codMart, RunnableArgs onComplete, RunnableArgs onFailed){
+ public MtbPartitaMag retrievePartitaMagSyncronized(String partitaMag, String codMart, RunnableArgs onFailed) throws Exception {
+ MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
+ Response> response = service.retrievePartitaMag(codMart, partitaMag)
+ .execute();
+
+ return analyzeAnswer(response, "retrievePartitaMag");
+ }
+
+ public void retrievePartitaMag(String partitaMag, String codMart, RunnableArgs onComplete, RunnableArgs onFailed) {
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
service.retrievePartitaMag(codMart, partitaMag)
.enqueue(new Callback<>() {
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java
index 5570f9ba..fdd81603 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java
@@ -13,15 +13,13 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
public class LocalDateDeserializer implements JsonDeserializer {
-
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
-
-
@Override
public LocalDate deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
if (UtilityString.isNullOrEmpty(date)) return null;
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UtilityString.determineDateFormat(date));
+
return LocalDate.parse(date, formatter);
}
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java
index 629bfabc..a273c07f 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java
@@ -5,6 +5,8 @@ import android.text.Spanned;
import androidx.annotation.StringRes;
+import java.util.HashMap;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -13,6 +15,98 @@ import java.util.regex.Pattern;
*/
public class UtilityString {
+ private static final Map DATE_FORMAT_REGEXPS = new HashMap() {{
+
+ //-----------------------------------------------------------------------------------------
+ //giorno-mese-giorno
+ put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "dd/MM/yyyy");
+ put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}$", "dd.MM.yyyy");
+ put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy");
+
+ //anno-mese-giorno
+ put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd");
+ put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}$", "yyyy.MM.dd");
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd");
+
+
+ //-----------------------------------------------------------------------------------------
+ //senza spazi
+ put("^\\d{8}$", "yyyyMMdd");
+ put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy");
+ put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy");
+
+ put("^\\d{12}$", "yyyyMMddHHmm");
+ put("^\\d{8}\\s\\d{4}$", "yyyyMMdd HHmm");
+
+ put("^\\d{14}$", "yyyyMMddHHmmss");
+ put("^\\d{8}\\s\\d{6}$", "yyyyMMdd HHmmss");
+
+
+ //-----------------------------------------------------------------------------------------
+ //giorno-mese-anno hhmm
+ put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}\\.\\d{2}$", "dd/MM/yyyy HH.mm");
+ put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}:\\d{2}$", "dd/MM/yyyy HH:mm");
+
+ put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}\\.\\d{2}$", "dd.MM.yyyy HH.mm");
+ put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}:\\d{2}$", "dd.MM.yyyy HH:mm");
+
+ put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}\\.\\d{2}$", "dd-MM-yyyy HH.mm");
+ put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}:\\d{2}$", "dd-MM-yyyy HH:mm");
+
+ //anno-mese-giorno hhmm
+ put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}\\.\\d{2}$", "yyyy/MM/dd HH.mm");
+ put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}:\\d{2}$", "yyyy/MM/dd HH:mm");
+
+ put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}\\.\\d{2}$", "yyyy.MM.dd HH.mm");
+ put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}:\\d{2}$", "yyyy.MM.dd HH:mm");
+
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}\\.\\d{2}$", "yyyy-MM-dd HH.mm");
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{2}$", "yyyy-MM-dd HH:mm");
+
+
+ //-----------------------------------------------------------------------------------------
+ //giorno-mese-anno hhmmss
+ put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "dd/MM/yyyy HH.mm.ss");
+ put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd/MM/yyyy HH:mm:ss");
+
+ put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "dd.MM.yyyy HH.mm.ss");
+ put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd.MM.yyyy HH:mm:ss");
+
+ put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "dd-MM-yyyy HH.mm.ss");
+ put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd-MM-yyyy HH:mm:ss");
+
+ //anno-mese-giorno hhmmss
+ put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "yyyy/MM/dd HH.mm.ss");
+ put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}$", "yyyy/MM/dd HH:mm:ss");
+
+ put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "yyyy.MM.dd HH.mm.ss");
+ put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}$", "yyyy.MM.dd HH:mm:ss");
+
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "yyyy-MM-dd HH.mm.ss");
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}$", "yyyy-MM-dd HH:mm:ss");
+
+ //anno-mese-giorno hhmmssS
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}.\\d{1,3}$", "yyyy-MM-dd HH:mm:ss.SSS");
+
+ //-----------------------------------------------------------------------------------------
+ //altri formati
+ put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd MMM yyyy HH:mm:ss");
+ put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd MMMM yyyy HH:mm:ss");
+
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}[T]\\d{1,2}:\\d{2}:\\d{2}$", "yyyy-MM-ddTHH:mm:ss");
+
+ put("^\\d{4}-\\d{1,2}-\\d{1,2}t\\d{1,2}:\\d{2}:\\d{2}.\\d{1,3}z$", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+ put("^(\\d{4})-(\\d{2})-(\\d{2})t(\\d{2}):(\\d{2}):(\\d{2})((\\+|-)(\\d{2}):(\\d{2}))$", "yyyy-MM-dd'T'HH:mm:ss");
+ }};
+
+ public static String determineDateFormat(String dateString) {
+ for (String regexp : DATE_FORMAT_REGEXPS.keySet()) {
+ if (dateString.toLowerCase().matches(regexp)) {
+ return DATE_FORMAT_REGEXPS.get(regexp);
+ }
+ }
+ return null; // Unknown format.
+ }
public static boolean isNullOrEmpty(String stringToCheck){
return stringToCheck == null || stringToCheck.trim().isEmpty();
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java
index c8a67912..28bf7210 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java
@@ -136,6 +136,14 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
return null;
});
+ itemType.areContentsTheSame((oldObject, newObject) ->
+ oldObject.getCodMart().equalsIgnoreCase(newObject.getCodMart()) &&
+ oldObject.getNumOrd().equals(newObject.getNumOrd()) &&
+ oldObject.getDataOrd().equals(newObject.getDataOrd())
+ );
+
+ itemType.areItemSame((oldObject, newObject) -> oldObject == newObject);
+
new LiveAdapter(mItemsInventario)
.map(ArtsInGiacenzaDTO.class, itemType)
.into(this.mBindings.inventarioList);
@@ -199,10 +207,10 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
.setOnFilterApplied(mFilterViewModel::setPositionFilter)
.setPreselected(
Stream.of(Objects.requireNonNull(mViewModel.getItemsInventario().getValue()))
- .filter(mFilterViewModel.getCurrentPositionPredicate().get() == null ?
- x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentPositionPredicate().get()))
- .map(ArtsInGiacenzaDTO::getPosizione)
- .toList()
+ .filter(mFilterViewModel.getCurrentPositionPredicate().get() == null ?
+ x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentPositionPredicate().get()))
+ .map(ArtsInGiacenzaDTO::getPosizione)
+ .toList()
);
}
@@ -213,6 +221,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
public void onInfoClick(ArtsInGiacenzaDTO item) {
try {
+ BarcodeManager.disable();
DialogInfoGiacenzaView.newInstance(item).show(getChildFragmentManager(), DialogInfoGiacenzaView.class.getName());
} catch (Exception e) {
UtilityExceptions.defaultException(this.getContext(), e);
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java
index 07b473a0..f08c9147 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java
@@ -179,7 +179,24 @@ public class ProdRiposizionamentoDaProdViewModel {
Objects.equals(x.getNumOrd(), dtoList.get(0).getNumOrd()) &&
Objects.equals(x.getDataOrd(), dtoList.get(0).getDataOrd())
)
- .findFirstOrElse(null);
+ .findFirstOrElse(new StatoArtInventarioDTO());
+
+ MvwSitArtUdcDetInventario mvwInventario = mvwSitArtUdcDetInventario.get();
+
+ if (mvwInventario.getCodMart().equalsIgnoreCase(dtoList.get(0).getCodMart()) &&
+ Objects.equals(mvwInventario.getNumOrd(), dtoList.get(0).getNumOrd()) &&
+ Objects.equals(mvwInventario.getDataOrd(), dtoList.get(0).getDataOrd())) {
+ BigDecimal colliMag = statoArticolo.getColliMag();
+ Integer pedMag = statoArticolo.getPedMag();
+ BigDecimal qtaMag = statoArticolo.getQtaMag();
+
+ BigDecimal numCnf = mvwInventario.getNumCnf();
+ BigDecimal qtaCol = mvwInventario.getQtaCol();
+
+ statoArticolo.setColliMag(colliMag.add(numCnf));
+ statoArticolo.setQtaMag(qtaMag.add(qtaCol));
+ statoArticolo.setPedMag(pedMag + 1);
+ }
return new ArtsInGiacenzaDTO()
.setCodMart(dtoList.get(0).getCodMart())
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java
index 092ae768..d19784ca 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java
@@ -10,13 +10,9 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
-import java.util.ArrayList;
-import java.util.List;
-
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
@@ -24,7 +20,6 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaBinding;
-import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaSituazioneArticoloBinding;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem;
@@ -34,8 +29,7 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
DialogInfoGiacenzaViewModel mViewModel;
private DialogInfoGiacenzaBinding mBindings;
- private Context mContext;
- private ArtsInGiacenzaDTO item;
+ private final ArtsInGiacenzaDTO item;
public static DialogInfoGiacenzaView newInstance(ArtsInGiacenzaDTO item) {
return new DialogInfoGiacenzaView(item);
@@ -48,9 +42,9 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
- this.mContext = requireContext();
+ Context mContext = requireContext();
- mBindings = DialogInfoGiacenzaBinding.inflate(LayoutInflater.from(this.mContext), null, false);
+ mBindings = DialogInfoGiacenzaBinding.inflate(LayoutInflater.from(mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
@@ -60,7 +54,7 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
setCancelable(true);
- var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
+ var alertDialog = new MaterialAlertDialogBuilder(mContext)
.setView(mBindings.getRoot())
.setNeutralButton(R.string.action_close, null)
.setCancelable(isCancelable())
@@ -86,17 +80,8 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
if (availableItems == null)
return;
- var listItem = Stream.of(availableItems)
- .flatMap(x -> Stream.of(x.getMvwSitArtUdcDetInventarioDTO())
- .map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
- )
- .toList();
-
- List statoArticolo = null;
StatoArtInventarioDTO statoArtInventario = availableItems.getStatoArtInventario();
if (statoArtInventario != null) {
- statoArticolo = Stream.of(statoArtInventario).toList();
-
if (statoArtInventario.colliArrivoIsLessThenZero() &&
statoArtInventario.colliMagIsLessThenZero()) {
this.mBindings.situazioneArticolo.setVisibility(View.GONE);
@@ -105,11 +90,11 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
this.mBindings.situazioneArticolo.setVisibility(View.GONE);
}
- new LiveAdapter(listItem, BR.item)
+ new LiveAdapter(this.item.getSituazioneArticoloAvailableListItem(), BR.item)
.map(DialogInfoSituazioneArticoloAvailableListItem.class, R.layout.dialog_info_giacenza_list_item)
.into(this.mBindings.availableList);
- new LiveAdapter(statoArticolo, BR.item)
+ new LiveAdapter(this.item.getStatoInventario(), BR.item)
.map(StatoArtInventarioDTO.class, R.layout.dialog_info_giacenza_situazione_articolo)
.into(this.mBindings.situazioneArticolo);
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java
index c400cc98..e7e583d6 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java
@@ -1,10 +1,13 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto;
+import com.annimon.stream.Stream;
+
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
+import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem;
public class ArtsInGiacenzaDTO {
@@ -113,4 +116,16 @@ public class ArtsInGiacenzaDTO {
this.dataOrd = dataOrd;
return this;
}
+
+ public List getSituazioneArticoloAvailableListItem() {
+ return Stream.of(this)
+ .flatMap(x -> Stream.of(x.getMvwSitArtUdcDetInventarioDTO())
+ .map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
+ )
+ .toList();
+ }
+
+ public List getStatoInventario(){
+ return Stream.of(this.statoArtInventario).toList();
+ }
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java
index a64b93f4..27dfbdca 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java
@@ -403,32 +403,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
String codMart = dialogInputQuantityV2DTO.getMtbAart().getCodMart();
String flagStato = dialogInputQuantityV2DTO.getMtbAart().getFlagStato();
- if (flagStato.equalsIgnoreCase("I")) {
- DialogSimpleMessageView.makeWarningDialog(
- new SpannableString(Html.fromHtml(String.format(UtilityResources.getString(R.string.item_not_enabled), codMart))),
- null,
- () -> {
- if (!mDialogInputQuantityV2View.isVisible())
- mDialogInputQuantityV2View
- .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
- .setOnComplete((resultDTO, shouldCloseLU) -> {
- PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
- .setNumCnf(resultDTO.getNumCnf())
- .setQtaCnf(resultDTO.getQtaCnf())
- .setQtaTot(resultDTO.getQtaTot())
- .setPartitaMag(resultDTO.getPartitaMag())
- .setDataScad(resultDTO.getDataScad());
-
- this.onLoadingStarted();
- onComplete.run(pickedQuantityDTO, shouldCloseLU);
- })
- .setOnAbort(this::onLoadingEnded)
- .show(requireActivity().getSupportFragmentManager(), "tag");
- },
- this::onLoadingEnded)
- .show(getActivity().getSupportFragmentManager(), "tag");
- } else {
- this.onLoadingEnded();
+ checkIfItemIsActive(flagStato, codMart, () -> {
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
@@ -440,13 +415,23 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
- this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
- .setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
+ }, () -> {});
+ }
+
+ private void checkIfItemIsActive(String flagStato, String codMart, Runnable onContinue, Runnable onNegativeClick){
+ if (flagStato.equalsIgnoreCase("I")) {
+ DialogSimpleMessageView.makeWarningDialog(
+ new SpannableString(Html.fromHtml(String.format(UtilityResources.getString(R.string.item_not_enabled), codMart))),
+ null,
+ onContinue,
+ onNegativeClick)
+ .show(getActivity().getSupportFragmentManager(), "tag");
+ } else {
+ onContinue.run();
}
- ;
}
@Override
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 8fdcaecf..0aa33da3 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
@@ -256,14 +256,19 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
};
public void save() {
+ this.onLoadingStarted();
+
this.mViewModel.validate(validated -> {
- if (validated) {
- this.mAbort = false;
- dismiss();
- this.mOnComplete.run(this.mViewModel.getResult(), false);
- }else {
+
+ requireActivity().runOnUiThread(() -> {
this.onLoadingEnded();
- }
+
+ if (validated) {
+ this.mAbort = false;
+ dismiss();
+ this.mOnComplete.run(this.mViewModel.getResult(), false);
+ }
+ });
});
}
@@ -271,9 +276,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false;
- dismiss();this.onLoadingEnded();
+ dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), true);
- }else {
+ } else {
this.onLoadingEnded();
}
});
@@ -527,13 +532,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mEnableDataCallback = true;
}
- @Override
- public void onError(Exception ex) {
- DialogSimpleMessageView
- .makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
- .show(requireActivity().getSupportFragmentManager(), "tag");
- }
-
@Override
public void onWarning(String text, RunnableArgs result) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)),
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 e9916cd4..42609532 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
@@ -99,7 +99,6 @@ public class DialogInputQuantityV2ViewModel {
private final MagazzinoRESTConsumer mMagazzinoRESTConsumer;
private StatoPartitaMag statoArt;
- private MtbPartitaMag mtbPartitaMag;
@Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) {
@@ -485,46 +484,66 @@ public class DialogInputQuantityV2ViewModel {
}
public void validate(RunnableArgs onValidated) {
- this.sendOnLoadingStarted();
new Thread(() -> {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {
- this.mListener.onError(new InvalidQtaCnfQuantityException());
+ this.sendError(new InvalidQtaCnfQuantityException());
onValidated.run(false);
return;
}
- if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
- if (suggestPartitaMagRunnable != null) {
- internalPartitaMag = suggestPartitaMagRunnable.run(this);
- if (internalPartitaMag == null) {
- this.mListener.onError(new InvalidBatchLotException());
+ if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean()) {
+ if (UtilityString.isNullOrEmpty(internalPartitaMag)) {
+ if (suggestPartitaMagRunnable != null) {
+ internalPartitaMag = suggestPartitaMagRunnable.run(this);
+ if (internalPartitaMag == null) {
+ this.sendError(new InvalidBatchLotException());
+ onValidated.run(false);
+ return;
+ }
+ } else {
+ this.sendError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
} else {
- this.mListener.onError(new InvalidBatchLotException());
- onValidated.run(false);
- return;
+ if (SettingsManager.iDB().isFlagWarningNewPartitaMag()) {
+ MtbPartitaMag mtbPartitaMag = null;
+ try {
+ mtbPartitaMag = retrievePartitaMag(internalPartitaMag, this.getMtbAart().getCodMart());
+ } catch (Exception e) {
+ this.sendError(e);
+ onValidated.run(false);
+ return;
+ }
+
+ if (mtbPartitaMag == null) {
+ boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.batch_lot_inexistent_error_message));
+ if (!result) {
+ onValidated.run(false);
+ return;
+ }
+ }
+ }
}
}
if (this.statoArt == StatoPartitaMag.DISATTIVO) {
- this.mListener.onError(new InactiveBatchLotException(internalPartitaMag));
+ this.sendError(new InactiveBatchLotException(internalPartitaMag));
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
- this.mListener.onError(new InvalidBatchLotException());
+ this.sendError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && this.internalDataScad == null) {
- this.mListener.onError(new InvalidExpireDateException());
+ this.sendError(new InvalidExpireDateException());
onValidated.run(false);
return;
}
@@ -532,7 +551,7 @@ public class DialogInputQuantityV2ViewModel {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
- this.mListener.onError(new OverflowQtaTotOrderedQuantityException());
+ this.sendError(new OverflowQtaTotOrderedQuantityException());
onValidated.run(false);
return;
}
@@ -540,14 +559,14 @@ public class DialogInputQuantityV2ViewModel {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
- this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
+ this.sendError(new OverflowNumCnfOrderedQuantityException());
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
- this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
+ this.sendError(new OverflowQtaTotAvailableQuantityException());
onValidated.run(false);
return;
}
@@ -555,7 +574,7 @@ public class DialogInputQuantityV2ViewModel {
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
- this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
+ this.sendError(new OverflowNumCnfAvailableQuantityException());
onValidated.run(false);
return;
}
@@ -565,13 +584,13 @@ public class DialogInputQuantityV2ViewModel {
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
- this.mListener.onError(new InvalidQuantityException());
+ this.sendError(new InvalidQuantityException());
onValidated.run(false);
return;
}
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
- this.mListener.onError(new InvalidNotesException());
+ this.sendError(new InvalidNotesException());
onValidated.run(false);
return;
}
@@ -579,22 +598,10 @@ public class DialogInputQuantityV2ViewModel {
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
- if (SettingsManager.iDB().isFlagWarningNewPartitaMag()) {
- asyncMagazzinoRESTConsumer(internalPartitaMag, this.getMtbAart().getCodMart());
-
- if (mtbPartitaMag == null) {
- boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.batch_lot_inexistent_error_message));
- if (!result) {
- onValidated.run(false);
- return;
- }
- }
- }
-
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
- boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message));
+ boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message));
if (!result) {
onValidated.run(false);
return;
@@ -604,19 +611,18 @@ public class DialogInputQuantityV2ViewModel {
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
- boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message));
+ boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message));
if (!result) {
onValidated.run(false);
return;
}
}
- this.sendOnLoadingEnded();
onValidated.run(true);
}).start();
}
- private boolean runAsyncWarningDialog(String text) {
+ private boolean runWarningDialogSyncronized(String text) {
try {
final FutureTask