Merge branch 'feature/RefactoringGestioneColli' into master-beta
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good

This commit is contained in:
2025-09-10 16:36:36 +02:00
15 changed files with 282 additions and 183 deletions

2
.gitignore vendored
View File

@@ -149,3 +149,5 @@ crashlytics.properties
crashlytics-build.properties crashlytics-build.properties
### AndroidStudio Patch ### ### AndroidStudio Patch ###
!/gradle/wrapper/gradle-wrapper.jar !/gradle/wrapper/gradle-wrapper.jar
/.idea/copilot.data.migration.agent.xml
/.idea/copilot.data.migration.edit.xml

View File

@@ -8,10 +8,11 @@ apply plugin: 'com.google.firebase.crashlytics'
//apply plugin: 'kotlin-android' //apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 523 def appVersionCode = 527
def appVersionName = '1.47.10' def appVersionName = '1.47.14'
signingConfigs { signingConfigs {
release { release {
@@ -53,13 +54,16 @@ android {
ext.enableCrashlytics = false ext.enableCrashlytics = false
minifyEnabled true // Abilita la minimizzazione del codice minifyEnabled true // Abilita la minimizzazione del codice
// shrinkResources true // Rimuove risorse non utilizzate // shrinkResources true // Rimuove risorse non utilizzate
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
release { release {
minifyEnabled true // Abilita la minimizzazione del codice // minifyEnabled true // Abilita la minimizzazione del codice
shrinkResources true // Rimuove risorse non utilizzate // shrinkResources true // Rimuove risorse non utilizzate
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release signingConfig signingConfigs.release
firebaseCrashlytics {
mappingFileUploadEnabled true
}
} }
} }
@@ -188,6 +192,8 @@ dependencies {
//Barcode generator //Barcode generator
implementation 'com.journeyapps:zxing-android-embedded:4.3.0' implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
implementation("org.javatuples:javatuples:1.2")
} }
repositories { repositories {

View File

@@ -41,6 +41,12 @@
<init>(...); <init>(...);
@com.google.gson.annotations.SerializedName <fields>; @com.google.gson.annotations.SerializedName <fields>;
} }
# 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. # Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowshrinking class com.google.gson.reflect.TypeToken -keep,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowshrinking class * extends com.google.gson.reflect.TypeToken -keep,allowshrinking class * extends com.google.gson.reflect.TypeToken

View File

@@ -0,0 +1,28 @@
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() {
return codMdep;
}
public String getDescrizione() {
return descrizione;
}
@Override
public boolean equals(Object obj) {
if((obj) != null) {
return ((AvailableCodMdepsDTO) obj).codMdep.equalsIgnoreCase(codMdep);
}
return false;
}
}

View File

@@ -19,7 +19,15 @@ public class InstantItemSituationResponseDto {
return incomingItems; return incomingItems;
} }
public void setIncomingItems(List<InstantItemSituationIncomingItemDto> incomingItems) {
this.incomingItems = incomingItems;
}
public List<MvwSitArtUdcDetInventario> getAvailableItems() { public List<MvwSitArtUdcDetInventario> getAvailableItems() {
return availableItems; return availableItems;
} }
public void setAvailableItems(List<MvwSitArtUdcDetInventario> availableItems) {
this.availableItems = availableItems;
}
} }

View File

@@ -39,8 +39,6 @@ public class SettingsManager {
private static SettingsModel settingsModelIstance; private static SettingsModel settingsModelIstance;
private static DBSettingsModel dbSettingsModelIstance; private static DBSettingsModel dbSettingsModelIstance;
private static boolean firstStart = false;
private static Context mContext; private static Context mContext;
private static SystemRESTConsumer mSystemRESTConsumer; private static SystemRESTConsumer mSystemRESTConsumer;
private static ImballiRESTConsumer mImballiRESTConsumer; private static ImballiRESTConsumer mImballiRESTConsumer;
@@ -65,15 +63,15 @@ public class SettingsManager {
public void init() { public void init() {
settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class); settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class);
if (settingsModelIstance == null) { if (settingsModelIstance == null)
settingsModelIstance = new SettingsModel(); settingsModelIstance = new SettingsModel();
if (settingsModelIstance.getServer() == null)
settingsModelIstance.setServer(new SettingsModel.Server()); settingsModelIstance.setServer(new SettingsModel.Server());
firstStart = true;
}
dbSettingsModelIstance = new DBSettingsModel(); dbSettingsModelIstance = new DBSettingsModel();
} }
public SettingsModel getSettings() { public SettingsModel getSettings() {
@@ -89,10 +87,6 @@ public class SettingsManager {
return dbSettingsModelIstance; return dbSettingsModelIstance;
} }
public static boolean isFirstStart() {
return firstStart;
}
public static boolean isInstanceAvailable() { public static boolean isInstanceAvailable() {
return i() != null; return i() != null;
} }

View File

@@ -21,6 +21,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import java.lang.reflect.Constructor;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; 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.RunnableArgss;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss; import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.expansion.RunnableArgssss; 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.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
@@ -335,7 +337,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.noItemsToPick.set(!isThereAnyItemToPick(updatedData)); 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.setAdapter(spedizioneListAdapter);
this.mBindings.spedizionePickingList.setLayoutManager(new LinearLayoutManager(this)); 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<SpedizioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) { private List<SpedizioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) {
List<PickingObjectDTO> tmpList = Stream.of(dataList) List<PickingObjectDTO> tmpList = Stream.of(dataList)
@@ -749,12 +772,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void addExtraItem() { public void addExtraItem() {
handler.post(() -> { handler.post(() -> {
DialogScanArtView DialogScanArtView
.newInstance(!mEnableFakeGiacenza, (status, mtbAart, ean128Model, mtbColr) -> { .newInstance(!mEnableFakeGiacenza, (status, mtbAart, ean128Model, mtbColt) -> {
if (status == DialogConsts.Results.YES) { if (status == DialogConsts.Results.YES) {
executorService.execute(() -> { executorService.execute(() -> {
try { try {
this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColr); this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColt);
} catch (Exception e) { } catch (Exception e) {
onError(e); onError(e);
} }
@@ -865,9 +888,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void closeOrder() { public void closeOrder() {
this.fabPopupMenu.dismiss(); this.fabPopupMenu.dismiss();
this.onLoadingStarted();
executorService.execute(() -> { executorService.execute(() -> {
try { try {
this.mViewmodel.closeOrder(); this.mViewmodel.closeOrder();
this.onLoadingEnded();
} catch (Exception e) { } catch (Exception e) {
onError(e); onError(e);
} }

View File

@@ -1263,7 +1263,7 @@ public class SpedizioneViewModel {
return !stati.isEmpty() ? stati.get(0) : null; 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)); PickingObjectDTO pickingObjectDTO = new PickingObjectDTO().setMtbAart(mtbAart).setTempPickData(PickDataDTO.fromEan128(ean128Model));
@@ -1282,12 +1282,23 @@ public class SpedizioneViewModel {
String partitaMag = null; String partitaMag = null;
LocalDate dataScad = null; LocalDate dataScad = null;
MtbColt refMtbColt = null; // MtbColt refMtbColt = null;
if (mtbColrToUse != null) { if (refMtbColt != null && refMtbColt.getMtbColr() != null && !refMtbColt.getMtbColr().isEmpty()) {
refMtbColt = new MtbColt().setDataCollo(mtbColrToUse.getDataColloD()).setSerCollo(mtbColrToUse.getSerCollo()).setNumCollo(mtbColrToUse.getNumCollo()).setGestione(mtbColrToUse.getGestione()).setMtbColr(new ObservableArrayList<>()); 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)); pickingObjectDTO.setMtbAart(mtbColrToUse.getMtbAart()).setTempPickData(new PickDataDTO().setSourceMtbColt(refMtbColt));
@@ -2130,7 +2141,6 @@ public class SpedizioneViewModel {
} }
public void closeOrder() { public void closeOrder() {
this.sendOnLoadingStarted();
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) { if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
var printRequestResult = this.sendOnCloseOrderPrintRequest(); var printRequestResult = this.sendOnCloseOrderPrintRequest();
@@ -2140,8 +2150,6 @@ public class SpedizioneViewModel {
if (this.mIsOrdTrasf && !UtilityString.isNullOrEmpty(SettingsManager.iDB().getCodDtipOrdTrasfV())) { if (this.mIsOrdTrasf && !UtilityString.isNullOrEmpty(SettingsManager.iDB().getCodDtipOrdTrasfV())) {
this.sendCreateDocsRequest(); this.sendCreateDocsRequest();
} }
this.sendOnOrderClosed();
} }
private void onCloseOrderPrintRequested(PrintOrderCloseDTO dto) { private void onCloseOrderPrintRequested(PrintOrderCloseDTO dto) {

View File

@@ -2,17 +2,22 @@ package it.integry.integrywmsnative.gest.spedizione.dialogs.row_info;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel;
public abstract class BaseDialogRowInfoView extends BaseDialogFragment implements IBaseDialogRowInfoView { public abstract class BaseDialogRowInfoView extends BaseDialogFragment implements IBaseDialogRowInfoView {
private final SpedizioneListModel mSpedizioneListModel; private final SpedizioneListModel mSpedizioneListModel;
private final List<OrdineUscitaInevasoDTO> mOrdersList;
private final Runnable mOnComplete; private final Runnable mOnComplete;
private final Runnable mOnAbort; private final Runnable mOnAbort;
public BaseDialogRowInfoView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { public BaseDialogRowInfoView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull List<OrdineUscitaInevasoDTO> ordersList, @NotNull Runnable onComplete, @NotNull Runnable onAbort) {
this.mSpedizioneListModel = spedizioneListModel; this.mSpedizioneListModel = spedizioneListModel;
this.mOrdersList = ordersList;
this.mOnComplete = onComplete; this.mOnComplete = onComplete;
this.mOnAbort = onAbort; this.mOnAbort = onAbort;
} }
@@ -21,6 +26,10 @@ public abstract class BaseDialogRowInfoView extends BaseDialogFragment implement
return mSpedizioneListModel; return mSpedizioneListModel;
} }
protected List<OrdineUscitaInevasoDTO> getOrdersList() {
return mOrdersList;
}
protected Runnable getOnComplete() { protected Runnable getOnComplete() {
return mOnComplete; return mOnComplete;
} }

View File

@@ -19,7 +19,9 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
@@ -28,6 +30,7 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; 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.rest.model.giacenza.InstantItemSituationIncomingItemDto;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -53,8 +56,8 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
private DialogInfoSituazioneArticoloBinding mBindings; private DialogInfoSituazioneArticoloBinding mBindings;
private Context mContext; private Context mContext;
public DialogInfoSituazioneArticoloView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { public DialogInfoSituazioneArticoloView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull List<OrdineUscitaInevasoDTO> ordersList, @NotNull Runnable onComplete, @NotNull Runnable onAbort) {
super(spedizioneListModel, onComplete, onAbort); super(spedizioneListModel, ordersList, onComplete, onAbort);
} }
@NonNull @NonNull
@@ -100,10 +103,22 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
var result = giacenzaRESTConsumer.getInstantItemSituationSynchronized(codMdep, codMart, partitaMag, codJcom); 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(() -> { handler.post(() -> {
try { try {
if(result != null && result.getIncomingItems() != null) this.initIncomingItemsList(result.getIncomingItems()); if (result != null && result.getIncomingItems() != null)
if(result != null && result.getAvailableItems() != null) this.initAvailableItemsList(result.getAvailableItems()); this.initIncomingItemsList(result.getIncomingItems());
if (result != null && result.getAvailableItems() != null)
this.initAvailableItemsList(result.getAvailableItems());
this.onLoadingEnded(); this.onLoadingEnded();
} catch (Exception e) { } catch (Exception e) {
onError(e); onError(e);

View File

@@ -21,6 +21,7 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication; 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.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.DialogRowInfoProdFabbisognoLineeProdBinding; import it.integry.integrywmsnative.databinding.DialogRowInfoProdFabbisognoLineeProdBinding;
@@ -40,8 +41,8 @@ public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoV
private Context mContext; private Context mContext;
private DialogRowInfoProdFabbisognoLineeProdBinding mBindings; private DialogRowInfoProdFabbisognoLineeProdBinding mBindings;
public DialogRowInfoProdFabbisognoLineeProdView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull Runnable onComplete, @NotNull Runnable onAbort) { public DialogRowInfoProdFabbisognoLineeProdView(@NotNull SpedizioneListModel spedizioneListModel, @NotNull List<OrdineUscitaInevasoDTO> ordersList, @NotNull Runnable onComplete, @NotNull Runnable onAbort) {
super(spedizioneListModel, onComplete, onAbort); super(spedizioneListModel, ordersList, onComplete, onAbort);
} }

View File

@@ -12,12 +12,10 @@ import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.lang.reflect.Constructor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -25,10 +23,10 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; 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.expansion.RunnableArgssss;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; 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.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -41,7 +39,8 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
private final Context mContext; private final Context mContext;
private final Class<? extends BaseDialogRowInfoView> mInfoDialogClassType; private final Class<? extends BaseDialogRowInfoView> mInfoDialogClassType;
private final FragmentManager mFragmentManager; private final RunnableArgs<SpedizioneListModel> onInfoRowClicked;
private final List<SpedizioneListModel> mDataset = new ArrayList<>(); private final List<SpedizioneListModel> mDataset = new ArrayList<>();
private RunnableArgssss<PickingObjectDTO, MtbColt, MtbColr, Boolean> mOnItemClicked; private RunnableArgssss<PickingObjectDTO, MtbColt, MtbColr, Boolean> mOnItemClicked;
@@ -69,10 +68,13 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
} }
public SpedizioneListAdapter(AppCompatActivity context, ObservableArrayList<SpedizioneListModel> mutableDataSet, Class<? extends BaseDialogRowInfoView> infoDialogClassType, FragmentManager fragmentManager) { public SpedizioneListAdapter(AppCompatActivity context,
ObservableArrayList<SpedizioneListModel> mutableDataSet,
Class<? extends BaseDialogRowInfoView> infoDialogClassType,
RunnableArgs<SpedizioneListModel> onInfoRowClicked) {
this.mContext = context; this.mContext = context;
this.mInfoDialogClassType = infoDialogClassType; this.mInfoDialogClassType = infoDialogClassType;
this.mFragmentManager = fragmentManager; this.onInfoRowClicked = onInfoRowClicked;
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() { mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override @Override
@@ -187,7 +189,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
holder.mBinding.infoRow.setOnClickListener(new OnSingleClickListener() { holder.mBinding.infoRow.setOnClickListener(new OnSingleClickListener() {
@Override @Override
public void onSingleClick(View v) { public void onSingleClick(View v) {
openInfoDialog(pickingObjectDTO); onInfoRowClicked.run(pickingObjectDTO);
} }
}); });
} }
@@ -227,20 +229,4 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
} }
private void openInfoDialog(SpedizioneListModel item) {
try {
Constructor<?> 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);
}
}
} }

View File

@@ -4,15 +4,19 @@ import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.databinding.ObservableArrayList;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.javatuples.Quartet;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Inject; 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.expansion.RunnableArgssss;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; 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.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.databinding.DialogScanArtBinding; import it.integry.integrywmsnative.databinding.DialogScanArtBinding;
@@ -38,6 +43,9 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
@Inject @Inject
DialogScanArtViewModel mViewModel; DialogScanArtViewModel mViewModel;
@Inject
Handler handler;
private Context mContext; private Context mContext;
private final boolean mForceOnlyUL; private final boolean mForceOnlyUL;
@@ -46,15 +54,15 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
private int mBarcodeScannerInstanceID; private int mBarcodeScannerInstanceID;
private RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColr> onPickingCompleted = null; private RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> onPickingCompleted = null;
private RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest = null; private RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest = null;
public static DialogScanArtView newInstance(boolean forceOnlyUL, @NotNull RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColr> onPickingCompleted, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) { public static DialogScanArtView newInstance(boolean forceOnlyUL, @NotNull RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> onPickingCompleted, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) {
return new DialogScanArtView(forceOnlyUL, onPickingCompleted, onMagazzinoAutomaticoPickingRequest); return new DialogScanArtView(forceOnlyUL, onPickingCompleted, onMagazzinoAutomaticoPickingRequest);
} }
private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColr> onItemChoosed, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) { private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> onItemChoosed, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) {
super(); super();
mForceOnlyUL = forceOnlyUL; mForceOnlyUL = forceOnlyUL;
@@ -124,37 +132,60 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
this.onLoadingStarted(); this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, (status, mtbAart, ean128Model, mtbColrList) -> { executorService.execute(() -> {
var filteredMtbColrList = mtbColrList; try {
if (mtbAart != null && filteredMtbColrList != null) { Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> result = this.mViewModel.processBarcodeDTO(data, pickMagazzinoAutomaticoPosizione -> {
filteredMtbColrList = filteredMtbColrList.stream() handler.post(() -> {
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())) this.onMagazzinoAutomaticoPickingRequest.run(pickMagazzinoAutomaticoPosizione);
.collect(Collectors.toList());
this.onLoadingEnded();
dismiss();
});
});
var status = result.getValue0();
var mtbAart = result.getValue1();
var ean128Model = result.getValue2();
var mtbColt = result.getValue3();
List<MtbColr> filteredMtbColrList = mtbColt.getMtbColr();
if (mtbAart != null && filteredMtbColrList != null) {
filteredMtbColrList = filteredMtbColrList.stream()
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()))
.collect(Collectors.toList());
}
List<MtbColr> 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();
}); });
}; };
} }

View File

@@ -1,22 +1,17 @@
package it.integry.integrywmsnative.view.dialogs.scan_art; package it.integry.integrywmsnative.view.dialogs.scan_art;
import com.annimon.stream.Stream; import org.javatuples.Quartet;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; 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.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException; import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; 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.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.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@@ -62,23 +57,23 @@ public class DialogScanArtViewModel {
return this; return this;
} }
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onPickingCompleted, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) { public Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) throws Exception {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima //Cerco gli articoli presenti nell'ul dell'etichetta anonima
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onPickingCompleted); return this.executeEtichettaLU(barcodeScanDTO.getStringValue());
} else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) {
//Cerco l'UL presente all'interno della posizione //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)) { } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onPickingCompleted); return this.executeEtichettaEan128(barcodeScanDTO);
} else if (UtilityBarcode.isEanPeso(barcodeScanDTO) && !mForceOnlyUL) { } else if (UtilityBarcode.isEanPeso(barcodeScanDTO) && !mForceOnlyUL) {
this.executeEtichettaEanPeso(barcodeScanDTO, onPickingCompleted); return this.executeEtichettaEanPeso(barcodeScanDTO);
} else { } else {
this.loadArticolo(barcodeScanDTO.getStringValue(), null, onPickingCompleted); return this.loadArticolo(barcodeScanDTO.getStringValue(), null);
} }
// else { // else {
@@ -87,123 +82,108 @@ public class DialogScanArtViewModel {
} }
private Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) throws Exception {
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) { var ean128Model = this.mBarcodeRESTConsumer.decodeEan128Synchronized(barcodeScanDTO);
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;
if (!UtilityString.isNullOrEmpty(barcodeProd)) { String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete); if (ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc;
} else if (!mForceOnlyUL) { 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 { } else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto throw new Exception("Barcode non valido");
this.sendError(new NoResultFromBarcodeException(barcodeProd));
} }
}, this::sendError); } else {
} //EAN 128 non completo o comunque mancano i riferimenti al prodotto
throw new NoResultFromBarcodeException(barcodeProd);
private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) {
try {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), onComplete);
} catch (Exception ex) {
this.sendError(ex);
} }
} }
private Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO) throws Exception {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
private void executeEtichettaLU(String SSCC, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) { return this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128());
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);
} }
private Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> executeEtichettaLU(String SSCC) throws Exception {
var mtbColt = mColliMagazzinoRESTConsumer.getBySsccSynchronized(SSCC, true, false);
private void executeEtichettaPosizione(String stringValue, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) { if (mtbColt == null || mtbColt.getMtbColr() == null || mtbColt.getMtbColr().isEmpty())
MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) throw new NoLUFoundException();
if (mtbColt.getSegno() == -1) throw new InvalidLUException();
return new Quartet<>(DialogConsts.Results.YES, null, null, mtbColt);
}
private Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> executeEtichettaPosizione(String stringValue, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) throws Exception {
MtbDepoPosizione foundPosizione = SettingsManager.iDB().getAvailablePosizioni().stream()
.filter(x -> x.getPosizione().equalsIgnoreCase(stringValue)) .filter(x -> x.getPosizione().equalsIgnoreCase(stringValue))
.single(); .findFirst()
.orElse(null);
if (foundPosizione == null) { if (foundPosizione == null)
//Nessuna posizione trovata con questo barcode //Nessuna posizione trovata con questo barcode
this.sendError(new ScannedPositionNotExistException()); throw new ScannedPositionNotExistException();
return;
}
if (foundPosizione.isMagazzinoAutomatico()) { if (foundPosizione.isMagazzinoAutomatico()) {
//Eseguo picking da magazzino automatico //Eseguo picking da magazzino automatico
onMagazzinoAutomaticoPickingRequest.run(foundPosizione); onMagazzinoAutomaticoPickingRequest.run(foundPosizione);
} else { } else {
this.executePosizione(foundPosizione, null, onComplete); return this.executePosizione(foundPosizione, null);
} }
return null;
} }
private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) { private Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> executePosizione(MtbDepoPosizione posizione, MtbAart articolo) throws Exception {
this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, barcodeUlInPosizioneList -> { var barcodeUlInPosizioneList = this.mPosizioniRESTConsumer.getBancaliInPosizioneSynchronized(posizione);
if (barcodeUlInPosizioneList == null || barcodeUlInPosizioneList.isEmpty()) { if (barcodeUlInPosizioneList == null || barcodeUlInPosizioneList.isEmpty())
this.sendError(new NoLUFoundException()); throw new NoLUFoundException();
} else if (barcodeUlInPosizioneList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getBySSCC(barcodeUlInPosizioneList.get(0), true, false, mtbColt -> {
onComplete.run(DialogConsts.Results.YES, articolo, null, mtbColt.getMtbColr());
}, this::sendError);
} else {
this.sendError(new TooManyLUFoundInMonoLUPositionException());
}
}, this::sendError); if (barcodeUlInPosizioneList.size() != 1) {
throw new TooManyLUFoundInMonoLUPositionException();
}
var mtbColt = this.mColliMagazzinoRESTConsumer.getBySsccSynchronized(barcodeUlInPosizioneList.get(0), true, false);
return new Quartet<>(DialogConsts.Results.YES, articolo, null, mtbColt);
} }
private void loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) { private Quartet<DialogConsts.Results, MtbAart, Ean128Model, MtbColt> loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model) throws Exception {
this.mArticoloRESTConsumer.searchByBarcode(barcodeProd, mtbAartList -> { var mtbAartList = this.mArticoloRESTConsumer.searchByBarcodeSynchronized(barcodeProd);
if (mtbAartList != null && !mtbAartList.isEmpty()) {
MtbAart firstArt = mtbAartList.get(0); if (mtbAartList == null || mtbAartList.isEmpty())
MtbDepoPosizione firstArtPosition = UtilityPosizione.getFromCache(firstArt.getPosizione()); throw new NoResultFromBarcodeException(barcodeProd);
if (firstArtPosition != null && firstArtPosition.isFlagMonoCollo() && mForceOnlyUL) { MtbAart firstArt = mtbAartList.get(0);
this.executePosizione(firstArtPosition, firstArt, onComplete); MtbDepoPosizione firstArtPosition = UtilityPosizione.getFromCache(firstArt.getPosizione());
} else if (!mForceOnlyUL) {
onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null);
} else {
this.sendError(new NoResultFromBarcodeException(barcodeProd));
}
} else { if (firstArtPosition != null && firstArtPosition.isFlagMonoCollo() && mForceOnlyUL)
this.sendError(new NoResultFromBarcodeException(barcodeProd)); return this.executePosizione(firstArtPosition, firstArt);
}
}, this::sendError); 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) { public void setListener(Listener listener) {
this.mListener = listener; this.mListener = listener;
} }

View File

@@ -3,7 +3,7 @@
buildscript { buildscript {
ext { ext {
kotlin_version = '2.1.0' kotlin_version = '2.1.0'
agp_version = '8.12.2' agp_version = '8.13.0'
} }
repositories { repositories {