From 663d172edfca6879ef3fcc9a95373c15c3b2dc79 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 5 Dec 2025 17:30:32 +0100 Subject: [PATCH 1/8] Aggiornato AGP 8.13.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5cc06d05..73d72efc 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { ext { kotlin_version = '2.1.0' - agp_version = '8.13.0' + agp_version = '8.13.1' } repositories { From 2e3af6d1b3954980b4fc54e265cc19b93eb53eaf Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 9 Dec 2025 13:32:09 +0100 Subject: [PATCH 2/8] -> v1.50.00 (549) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 48175594..eb0dc414 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 548 - def appVersionName = '1.49.04' + def appVersionCode = 549 + def appVersionName = '1.50.00' signingConfigs { release { From 36061faeeb4c99fe71bab51223b1715734f6dcbc Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 9 Dec 2025 16:15:19 +0100 Subject: [PATCH 3/8] -> v1.50.01 (550) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index eb0dc414..b79169f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 549 - def appVersionName = '1.50.00' + def appVersionCode = 550 + def appVersionName = '1.50.01' signingConfigs { release { From f86296d2a1eca872695716b78c00f666ba881e3d Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 9 Dec 2025 17:04:27 +0100 Subject: [PATCH 4/8] -> v1.50.02(551) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b79169f4..b9c9eaa1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 550 - def appVersionName = '1.50.01' + def appVersionCode = 551 + def appVersionName = '1.50.02' signingConfigs { release { From 8e2d110792310e3b5856b6597d81ac808aa8ca20 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Wed, 10 Dec 2025 13:33:44 +0100 Subject: [PATCH 5/8] Rimosso da VerificaGiacenze il carcamento di tutta la gacenza dopo aver scansionato il deposito --- .../MainApplicationModule.java | 4 +- .../consumers/GiacenzaPvRESTConsumer.java | 13 +- .../GiacenzaPvRESTConsumerService.java | 3 +- .../VerificaGiacenzeFragment.java | 19 +- .../VerificaGiacenzeModule.java | 4 +- .../VerificaGiacenzeViewModel.java | 193 +++++++----------- 6 files changed, 92 insertions(+), 144 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 09696ced..78d6cbf3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -276,8 +276,8 @@ public class MainApplicationModule { @Provides @Singleton - GiacenzaPvRESTConsumer provideGiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { - return new GiacenzaPvRESTConsumer(restBuilder, executorService); + GiacenzaPvRESTConsumer provideGiacenzaPvRESTConsumer(RESTBuilder restBuilder) { + return new GiacenzaPvRESTConsumer(restBuilder); } @Provides diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumer.java index 02a6b03a..a3435250 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumer.java @@ -13,23 +13,17 @@ import it.integry.integrywmsnative.core.rest.model.pv.UpdateRowVerificaRequestDT public class GiacenzaPvRESTConsumer extends _BaseRESTConsumer { - private final RESTBuilder restBuilder; - private final ExecutorService executorService; - public GiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { + public GiacenzaPvRESTConsumer(RESTBuilder restBuilder) { this.restBuilder = restBuilder; - this.executorService = executorService; } - - public List retrieveGiacenzeSynchronized(String codMdep) throws Exception { + public List retrieveGiacenzeSynchronized(String codMdep, String codMart) throws Exception { GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 120); - var response = giacenzaPvRESTConsumerService.retrieve(codMdep) - .execute(); + var response = giacenzaPvRESTConsumerService.retrieve(codMdep, codMart).execute(); var giacenzeList = analyzeAnswer(response, "retrieve-giacenze-pv"); - return giacenzeList != null ? giacenzeList : new ArrayList<>(); } @@ -64,5 +58,4 @@ public class GiacenzaPvRESTConsumer extends _BaseRESTConsumer { analyzeAnswer(response, "close-verifica-pv"); } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumerService.java index 0d039c12..ff21c7e0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumerService.java @@ -17,8 +17,7 @@ import retrofit2.http.Query; public interface GiacenzaPvRESTConsumerService { @GET("wms/pv/verifica_giacenze/retrieve") - Call>> retrieve(@Query("codMdep") String codMdep); - + Call>> retrieve(@Query("codMdep") String codMdep, @Query("codMart") String codMart); @POST("wms/pv/verifica_giacenze/save_new_row") Call> saveNewRowVerifica(@Body SaveNewRowVerificaRequestDTO saveNewRowVerificaRequest); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeFragment.java index 927b8db1..60045ae8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeFragment.java @@ -13,6 +13,7 @@ import com.ravikoradiya.liveadapter.Type; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicReference; @@ -38,6 +39,7 @@ import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemD import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditView; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_deposito.DialogAskDepositoView; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; @@ -91,7 +93,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra } private void init() { - executorService.execute(() -> { boolean recoveredSession = false; @@ -129,7 +130,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra try { this.onLoadingStarted(); - mViewModel.loadDeposito(codMdep); if (!recoveredSession) mViewModel.createNew(codMdep); @@ -162,7 +162,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra CountDownLatch countDownLatch = new CountDownLatch(1); AtomicReference codMdepAtomic = new AtomicReference<>(); - DialogAskDepositoView.newInstance(codMdep -> { codMdepAtomic.set(codMdep); countDownLatch.countDown(); @@ -173,7 +172,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra return codMdepAtomic.get(); } - private void initRecyclerView() { var itemType = new Type(R.layout.lista_verifica_giacenze_picked_item_list_model, BR.item); @@ -213,13 +211,12 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra this.mViewModel.processBarcodeDTO(data); } catch (Exception e) { this.onError(e); + } finally { + handler.post(this::onLoadingEnded); } }); - - this.onLoadingEnded(); }; - private void openItemAction(VerificaGiacenzeRowEntity item) { var anagrafica = mViewModel.searchAnagraficaByCodMart(item.getCodMart()); @@ -261,7 +258,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra }); } - public PickedQuantityDTO onItemDispatched(MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, @@ -338,7 +334,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra }); } - @Override public void onDestroy() { super.onDestroy(); @@ -350,4 +345,10 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra public void onCreateActionBar(AppCompatTextView titleText, Context context) { titleText.setText(R.string.verifica_giacenze_menu); } + + @Override + public void onChooseArtRequest(List artsList, RunnableArgs onComplete) { + DialogChooseArtFromListaArtsView.newInstance(true, artsList, onComplete) + .show(requireActivity().getSupportFragmentManager(), "dialog-choose-art"); + } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeModule.java index 169f646a..c575d701 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeModule.java @@ -16,8 +16,8 @@ import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer; public class VerificaGiacenzeModule { @Provides - VerificaGiacenzeViewModel providesVerificaGiacenzeViewModel(ExecutorService executorService, Handler handler, VerificaGiacenzeRowMapper verificaGiacenzeRowMapper, VerificaGiacenzeRepository verificaGiacenzeRepository, VerificaGiacenzeRowRepository verificaGiacenzeRowRepository, GiacenzaPvRESTConsumer giacenzaPvRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { - return new VerificaGiacenzeViewModel(executorService, handler, verificaGiacenzeRowMapper, giacenzaPvRESTConsumer, verificaGiacenzeRepository, verificaGiacenzeRowRepository, articoloRESTConsumer); + VerificaGiacenzeViewModel providesVerificaGiacenzeViewModel(Handler handler, VerificaGiacenzeRowMapper verificaGiacenzeRowMapper, VerificaGiacenzeRepository verificaGiacenzeRepository, VerificaGiacenzeRowRepository verificaGiacenzeRowRepository, GiacenzaPvRESTConsumer giacenzaPvRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + return new VerificaGiacenzeViewModel(handler, verificaGiacenzeRowMapper, giacenzaPvRESTConsumer, verificaGiacenzeRepository, verificaGiacenzeRowRepository, articoloRESTConsumer); } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeViewModel.java index 33f11e77..eb9a08c6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_verifica_giacenze/VerificaGiacenzeViewModel.java @@ -11,8 +11,8 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.concurrent.ExecutorService; -import java.util.stream.Collectors; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; @@ -22,8 +22,8 @@ import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRow import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRepository; import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRowRepository; import it.integry.integrywmsnative.core.exception.NoArtsFoundException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; -import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeMapper; import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeRowMapper; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; @@ -31,7 +31,6 @@ import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; import it.integry.integrywmsnative.core.rest.model.pv.CloseVerificaRequestDTO; import it.integry.integrywmsnative.core.rest.model.pv.DeleteRowVerificaRequestDTO; -import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO; import it.integry.integrywmsnative.core.rest.model.pv.SaveNewRowVerificaRequestDTO; import it.integry.integrywmsnative.core.rest.model.pv.UpdateRowVerificaRequestDTO; import it.integry.integrywmsnative.core.utility.UtilityBarcode; @@ -39,8 +38,6 @@ import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; public class VerificaGiacenzeViewModel { - - private final ExecutorService executorService; private final Handler handler; private final VerificaGiacenzeRowMapper verificaGiacenzeRowMapper; private final GiacenzaPvRESTConsumer giacenzaPvRESTConsumer; @@ -50,21 +47,17 @@ public class VerificaGiacenzeViewModel { private Listener listener; - private MutableLiveData currentVerifica = new MutableLiveData<>(); + private final MutableLiveData currentVerifica = new MutableLiveData<>(); private final MutableLiveData> currentVerificaRows = new MutableLiveData<>(new ArrayList<>()); - - private List currentLoadedGiacenza = null; - private List currentLoadedAnagrafiche = null; + private List currentLoadedAnagrafiche = new ArrayList<>(); @Inject - public VerificaGiacenzeViewModel(ExecutorService executorService, - Handler handler, + public VerificaGiacenzeViewModel(Handler handler, VerificaGiacenzeRowMapper verificaGiacenzeRowMapper, GiacenzaPvRESTConsumer giacenzaPvRESTConsumer, VerificaGiacenzeRepository verificaGiacenzeRepository, VerificaGiacenzeRowRepository verificaGiacenzeRowRepository, ArticoloRESTConsumer articoloRESTConsumer) { - this.executorService = executorService; this.handler = handler; this.verificaGiacenzeRowMapper = verificaGiacenzeRowMapper; this.giacenzaPvRESTConsumer = giacenzaPvRESTConsumer; @@ -87,8 +80,7 @@ public class VerificaGiacenzeViewModel { currentVerifica.postValue(null); currentVerificaRows.postValue(new ArrayList<>()); - currentLoadedGiacenza = null; - currentLoadedAnagrafiche = null; + currentLoadedAnagrafiche = new ArrayList<>(); } public LiveData getCurrentVerifica() { @@ -99,60 +91,6 @@ public class VerificaGiacenzeViewModel { return currentVerificaRows; } - public void loadDeposito(String codMdep) throws Exception { - currentLoadedGiacenza = this.giacenzaPvRESTConsumer.retrieveGiacenzeSynchronized(codMdep); - - if (currentLoadedGiacenza == null) { - throw new Exception("Errore nel recupero delle giacenze"); - } - - var codMartsToRetrieve = currentLoadedGiacenza.parallelStream() - .map(GiacenzaPvDTO::getCodMart) - .collect(Collectors.toUnmodifiableList()); - - currentLoadedAnagrafiche = this.articoloRESTConsumer.getByCodMartsSynchronized(codMartsToRetrieve); - - if (currentLoadedAnagrafiche == null) { - throw new Exception("Errore nel recupero delle anagrafiche"); - } - - currentLoadedAnagrafiche.forEach(x -> x.setFlagTracciabilita("N")); - } - - public void randomizeElements(int elementsCount) { - - for (int i = 0; i < elementsCount; i++) { - var randomIndex = (int) (Math.random() * currentLoadedAnagrafiche.size()); - var randomAnagrafica = currentLoadedAnagrafiche.get(randomIndex); - - var foundGiacenza = currentLoadedGiacenza.parallelStream() - .filter(x -> x.getCodMart().equalsIgnoreCase(randomAnagrafica.getCodMart())) - .findFirst() - .orElse(null); - var qtaGiacenza = foundGiacenza != null ? foundGiacenza.getQtaInv() : BigDecimal.ZERO; - - var rowToInsert = new VerificaGiacenzeRowEntity(); - rowToInsert.setParentId(currentVerifica.getValue().getId()); - rowToInsert.setCodMart(randomAnagrafica.getCodMart()); - rowToInsert.setDescrizione(randomAnagrafica.getDescrizione()); - rowToInsert.setScanCodBarre(randomAnagrafica.getBarCode()); - rowToInsert.setNumConf(BigDecimal.valueOf((int) (Math.random() * 100))); - rowToInsert.setQtaConf(randomAnagrafica.getQtaCnf()); - rowToInsert.setQta(UtilityBigDecimal.multiply(rowToInsert.getNumConf(), randomAnagrafica.getQtaCnf())); - rowToInsert.setQtaInGiacenza(qtaGiacenza); - - - insertRow(rowToInsert); - - try { - Thread.sleep(50); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - } - public void createNew(String codMdep) { var verificaGiacenzeEntity = new VerificaGiacenzeEntity(); verificaGiacenzeEntity.setCodMdep(codMdep); @@ -172,7 +110,7 @@ public class VerificaGiacenzeViewModel { } public void close() throws Exception { - if (currentVerificaRows.getValue().isEmpty()) { + if (currentVerificaRows.getValue() == null || currentVerificaRows.getValue().isEmpty()) { delete(); return; } @@ -187,32 +125,52 @@ public class VerificaGiacenzeViewModel { } public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) throws Exception { - if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { var ean13 = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); this.loadArticolo(ean13.getPrecode()); - } else { this.loadArticolo(barcodeScanDTO.getStringValue()); } } + private void loadArticolo(String barcodeProd) throws Exception { + var mtbAartList = this.articoloRESTConsumer.searchByBarcodeSynchronized(barcodeProd); - private void loadArticolo(String barcodeProd) throws NoArtsFoundException, CloneNotSupportedException { - var foundMtbAart = searchAnagraficaByBarcode(barcodeProd); + if (mtbAartList != null && !mtbAartList.isEmpty()) { + MtbAart loadedArticolo; - if (foundMtbAart == null) - throw new NoArtsFoundException(); + if (mtbAartList.size() == 1) loadedArticolo = mtbAartList.get(0); + else loadedArticolo = this.sendChooseArtRequest(mtbAartList); - loadArticolo(foundMtbAart); + if (loadedArticolo == null) return; + loadedArticolo.setFlagTracciabilita("N"); + + this.updateCurrentAnagrafiche(loadedArticolo); + this.loadArticolo(loadedArticolo); + } else throw new NoArtsFoundException(); } - public void loadArticolo(MtbAart mtbAart) throws NoArtsFoundException, CloneNotSupportedException { - var foundGiacenza = currentLoadedGiacenza.parallelStream() - .filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())) + private void updateCurrentAnagrafiche(MtbAart loadedArticolo) { + MtbAart mtbAart = currentLoadedAnagrafiche.stream() + .filter(x -> x.getCodMart().equalsIgnoreCase(loadedArticolo.getCodMart())) .findFirst() .orElse(null); + if (mtbAart != null) currentLoadedAnagrafiche.remove(mtbAart); + + currentLoadedAnagrafiche.add(loadedArticolo); + } + + public void loadArticolo(MtbAart mtbAart) throws Exception { + var foundGiacenzaList = giacenzaPvRESTConsumer.retrieveGiacenzeSynchronized( + Objects.requireNonNull(currentVerifica.getValue()).getCodMdep(), + mtbAart.getCodMart() + ); + + if (foundGiacenzaList == null || foundGiacenzaList.isEmpty() || foundGiacenzaList.stream().count() > 1) + throw new Exception("Errore nel recupero delle giacenze"); + var foundGiacenza = foundGiacenzaList.get(0); + var numCnfGiacenza = foundGiacenza != null ? UtilityBigDecimal.divide(foundGiacenza.getQtaInv(), mtbAart.getQtaCnf()) : BigDecimal.ZERO; var qtaCnfGiacenza = mtbAart.getQtaCnf(); var qtaGiacenza = foundGiacenza != null ? foundGiacenza.getQtaInv() : BigDecimal.ZERO; @@ -226,7 +184,7 @@ public class VerificaGiacenzeViewModel { boolean isNewRow = false; - var rowToSave = currentVerificaRows.getValue().parallelStream() + var rowToSave = Objects.requireNonNull(currentVerificaRows.getValue()).parallelStream() .filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())) .findFirst() .orElse(null); @@ -235,7 +193,7 @@ public class VerificaGiacenzeViewModel { isNewRow = true; rowToSave = new VerificaGiacenzeRowEntity(); - rowToSave.setParentId(currentVerifica.getValue().getId()); + rowToSave.setParentId(Objects.requireNonNull(currentVerifica.getValue()).getId()); rowToSave.setCodMart(mtbAart.getCodMart()); rowToSave.setPartitaMag(null); rowToSave.setDescrizione(mtbAart.getDescrizione()); @@ -246,21 +204,18 @@ public class VerificaGiacenzeViewModel { initialQtaTot = rowToSave.getQta(); } - var pickedQuantity = this.sendOnItemDispatched(mtbAart, + var pickedQuantity = this.sendOnItemDispatched( + mtbAart, initialNumCnf, qtaCnfGiacenza, initialQtaTot, numCnfGiacenza, qtaGiacenza, incomingNumCnf, - incomingQta, - null, - null + incomingQta ); - if (pickedQuantity == null) - return; - + if (pickedQuantity == null) return; rowToSave.setNumConf(pickedQuantity.getNumCnf()); rowToSave.setQtaConf(pickedQuantity.getQtaCnf()); @@ -272,7 +227,6 @@ public class VerificaGiacenzeViewModel { } else { updateRow(rowToSave); } - } public MtbAart searchAnagraficaByCodMart(String codMart) { @@ -282,24 +236,6 @@ public class VerificaGiacenzeViewModel { .orElse(null); } - public MtbAart searchAnagraficaByBarcode(String barcode) { - MtbAart mtbAart = currentLoadedAnagrafiche.parallelStream() - .filter(x -> barcode.equals(x.getBarCode())) - .findFirst() - .orElse(null); - - if (mtbAart == null) { - mtbAart = currentLoadedAnagrafiche.parallelStream() - .filter(x -> x.getMtbAartBarCode() != null && - x.getMtbAartBarCode().stream() - .anyMatch(y -> barcode.equals(y.getCodBarre()))) - .findFirst() - .orElse(null); - } - - return mtbAart; - } - public void insertRow(VerificaGiacenzeRowEntity rowEntity) { this.sendOnLoadingStarted(); @@ -316,7 +252,7 @@ public class VerificaGiacenzeViewModel { verificaGiacenzeRowRepository.insert(rowEntity, insertedData -> { handler.post(() -> { - currentVerificaRows.getValue().add(insertedData); + Objects.requireNonNull(currentVerificaRows.getValue()).add(insertedData); notifyRowChanged(); }); }, this::sendError); @@ -339,7 +275,7 @@ public class VerificaGiacenzeViewModel { var indexInList = -1; List value = currentVerificaRows.getValue(); - for (int i = 0; i < value.size(); i++) { + for (int i = 0; i < Objects.requireNonNull(value).size(); i++) { VerificaGiacenzeRowEntity entity = value.get(i); if (Objects.equals(entity.getId(), rowEntity.getId())) { @@ -374,7 +310,7 @@ public class VerificaGiacenzeViewModel { verificaGiacenzeRowRepository.delete(rowEntity, () -> { handler.post(() -> { - currentVerificaRows.getValue().remove(rowEntity); + Objects.requireNonNull(currentVerificaRows.getValue()).remove(rowEntity); notifyRowChanged(); }); @@ -386,6 +322,25 @@ public class VerificaGiacenzeViewModel { this.sendOnLoadingEnded(); } + private MtbAart sendChooseArtRequest(List mtbAarts) { + final CountDownLatch latch = new CountDownLatch(1); + AtomicReference result = new AtomicReference<>(); + + listener.onChooseArtRequest(mtbAarts, data -> { + result.set(data); + latch.countDown(); + }); + + try { + latch.await(); + return result.get(); + } catch (InterruptedException e) { + this.sendError(e); + } + + return null; + } + private PickedQuantityDTO sendOnItemDispatched(MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, @@ -393,15 +348,13 @@ public class VerificaGiacenzeViewModel { BigDecimal inWarehouseNumCnf, BigDecimal inWarehouseQtaTot, BigDecimal incomingNumCnf, - BigDecimal incomingQtaTot, - String partitaMag, - LocalDate dataScad) { + BigDecimal incomingQtaTot) { if (listener != null) - return this.listener.onItemDispatched(mtbAart, - initialNumCnf, initialQtaCnf, initialQtaTot, - inWarehouseNumCnf, inWarehouseQtaTot, - incomingNumCnf, incomingQtaTot, - partitaMag, dataScad); + return this.listener.onItemDispatched( + mtbAart, initialNumCnf, initialQtaCnf, + initialQtaTot, inWarehouseNumCnf, inWarehouseQtaTot, + incomingNumCnf, incomingQtaTot, null, null + ); return null; } @@ -435,5 +388,7 @@ public class VerificaGiacenzeViewModel { LocalDate dataScad); void onError(Exception ex); + + void onChooseArtRequest(List artsList, RunnableArgs onComplete); } } \ No newline at end of file From cc67ac5f47ab7aa5c69c278e5ec3a925c6abaee8 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Wed, 10 Dec 2025 13:37:53 +0100 Subject: [PATCH 6/8] -> v1.50.03 (552) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b9c9eaa1..b0ad4c08 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 551 - def appVersionName = '1.50.02' + def appVersionCode = 552 + def appVersionName = '1.50.03' signingConfigs { release { From 268ce9fce962dad7ac151c7d001785763ae1e43c Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 10 Dec 2025 18:49:56 +0100 Subject: [PATCH 7/8] Sistemato dialog caricamento in accettazione merce --- .../MainAccettazioneOrdiniElencoFragment.java | 1 - .../AccettazioneOrdiniPickingActivity.java | 29 ++++--- .../AccettazioneOrdiniPickingModule.java | 41 ---------- .../AccettazioneOrdiniPickingViewModel.java | 80 +++++++++++-------- 4 files changed, 66 insertions(+), 85 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_elenco/MainAccettazioneOrdiniElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_elenco/MainAccettazioneOrdiniElencoFragment.java index 95ae7fdd..b2d0e50a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_elenco/MainAccettazioneOrdiniElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_elenco/MainAccettazioneOrdiniElencoFragment.java @@ -78,7 +78,6 @@ public class MainAccettazioneOrdiniElencoFragment extends BaseFragment implement @Override public void onSaveInstanceState(@NonNull Bundle outState) { - onLoadingEnded(); outState.putString("mToolbar", DataCache.addItem(mToolbar)); super.onSaveInstanceState(outState); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java index 5bc7e97a..a6b567ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java @@ -11,7 +11,6 @@ import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.PopupMenu; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; @@ -158,7 +157,17 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A boolean useQtaOrd = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd(); mViewModel.setListeners(this); - mViewModel.init(mOrders, mSitArts, useQtaOrd); + + this.onLoadingStarted(); + executorService.execute(() -> { + try { + mViewModel.init(mOrders, mSitArts, useQtaOrd); + this.onLoadingEnded(); + } catch (Exception e) { + this.onError(e); + } + }); + } private void initFab() { @@ -370,7 +379,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A private void refreshList() { - runOnUiThread(() -> { + handler.post(() -> { List tmpList; if (mAppliedFilterViewModel != null) { @@ -778,7 +787,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onWarning(String warningText, Runnable action) { - this.runOnUiThread(() -> { + handler.post(() -> { this.onLoadingEnded(); DialogSimpleMessageView .makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action) @@ -806,7 +815,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onRowSaved() { - runOnUiThread(() -> { + handler.post(() -> { Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT) .setBackgroundTint(getResources().getColor(R.color.green_500)) .show(); @@ -815,7 +824,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onFilterCodMartApplied(String codMartToFilter) { - runOnUiThread(() -> { + handler.post(() -> { var codMarts = new ArrayList(); codMarts.add(codMartToFilter); @@ -825,7 +834,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onFilterPosizioneApplied(String posizioneToFilter) { - runOnUiThread(() -> { + handler.post(() -> { var posizioni = new ArrayList(); posizioni.add(posizioneToFilter); @@ -836,7 +845,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) { - runOnUiThread(() -> { + handler.post(() -> { DialogVersamentoAutomaticoULDoneView.newInstance(versamentoAutomaticoULResponseDTO, onComplete).show(getSupportFragmentManager(), "tag"); }); @@ -844,7 +853,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { - runOnUiThread(() -> { + handler.post(() -> { String text = getResources().getString(R.string.alert_delete_mtb_colr); DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false)).show(getSupportFragmentManager(), "tag"); }); @@ -852,7 +861,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A @Override public void onLUOpened(MtbColt mtbColt) { - runOnUiThread(() -> { + handler.post(() -> { noLUPresent.set(false); Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT) .setBackgroundTint(getResources().getColor(R.color.green_500)) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingModule.java index 8306edc7..63c4d336 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingModule.java @@ -1,50 +1,9 @@ package it.integry.integrywmsnative.gest.accettazione_ordini_picking; import dagger.Module; -import dagger.Provides; -import it.integry.integrywmsnative.core.ean128.Ean128Service; -import it.integry.integrywmsnative.core.rest.RESTBuilder; -import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.ColliAccettazioneRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; -import it.integry.integrywmsnative.gest.accettazione_ordini_picking.rest.AccettazioneOrdiniPickingRESTConsumer; -import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; @Module(subcomponents = AccettazioneOrdiniPickingComponent.class) public class AccettazioneOrdiniPickingModule { - @Provides - AccettazioneOrdiniPickingRESTConsumer providesAccettazionePickingRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { - return new AccettazioneOrdiniPickingRESTConsumer(restBuilder, systemRESTConsumer); - } - - @Provides - BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() { - return new BottomSheetFragmentLUContentViewModel(); - } - - @Provides - AccettazioneOrdiniPickingViewModel providesAccettazioneViewModel( - ArticoloRESTConsumer articoloRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer, - ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - AccettazioneOrdiniPickingRESTConsumer accettazioneOrdiniPickingRESTConsumer, - ColliAccettazioneRESTConsumer colliAccettazioneRESTConsumer, - ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, - Ean128Service ean128Service, - ImballiRESTConsumer imballiRESTConsumer) { - return new AccettazioneOrdiniPickingViewModel(articoloRESTConsumer, - barcodeRESTConsumer, - colliMagazzinoRESTConsumer, - accettazioneOrdiniPickingRESTConsumer, - colliAccettazioneRESTConsumer, - colliLavorazioneRESTConsumer, - ean128Service, - imballiRESTConsumer); - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java index 879ddd96..1f727946 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java @@ -1,5 +1,7 @@ package it.integry.integrywmsnative.gest.accettazione_ordini_picking; +import android.os.Handler; + import androidx.annotation.NonNull; import androidx.databinding.ObservableArrayList; import androidx.lifecycle.MutableLiveData; @@ -11,6 +13,8 @@ import java.math.BigDecimal; import java.time.LocalDate; 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; @@ -72,6 +76,8 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.Tracciament public class AccettazioneOrdiniPickingViewModel { + private final ExecutorService executorService; + private final Handler handler; private final ArticoloRESTConsumer mArticoloRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; @@ -96,7 +102,9 @@ public class AccettazioneOrdiniPickingViewModel { private final List mHistoryUsedAarts = new ArrayList<>(); @Inject - public AccettazioneOrdiniPickingViewModel(ArticoloRESTConsumer articoloRESTConsumer, + public AccettazioneOrdiniPickingViewModel(Handler handler, + ExecutorService executorService, + ArticoloRESTConsumer articoloRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, AccettazioneOrdiniPickingRESTConsumer accettazioneOrdiniPickingRESTConsumer, @@ -104,6 +112,8 @@ public class AccettazioneOrdiniPickingViewModel { ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, Ean128Service ean128Service, ImballiRESTConsumer imballiRESTConsumer) { + this.handler = handler; + this.executorService = executorService; this.mArticoloRESTConsumer = articoloRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; @@ -115,23 +125,24 @@ public class AccettazioneOrdiniPickingViewModel { } - public void init(List orders, List sitArts, boolean useQtaOrd) { + public void init(List orders, List sitArts, boolean useQtaOrd) throws Exception { this.mOrders = orders; this.mUseQtaOrd = useQtaOrd; - List mSitArts = Stream.of(sitArts) + List mSitArts = sitArts.stream() .filter(x -> UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) .toList(); - getEmptyPickingList(mSitArts, this.mPickingList::postValue); + var pickingList = getEmptyPickingList(mSitArts); + this.mPickingList.postValue(pickingList); //Definizione della gestione collo di default - Boolean isOrdTrasf = Stream.of(mOrders) + Boolean isOrdTrasf = mOrders.stream() .map(OrdineAccettazioneInevasoDTO::isOrdTrasf) - .withoutNulls() - .distinctBy(x -> x) + .filter(Objects::nonNull) + .distinct() .findFirst() .get(); @@ -145,10 +156,10 @@ public class AccettazioneOrdiniPickingViewModel { //Definizione della gestione collo di default - List foundGestioni = Stream.of(mOrders) + List foundGestioni = mOrders.stream() .map(OrdineAccettazioneInevasoDTO::getGestioneEnum) - .withoutNulls() - .distinctBy(x -> x) + .filter(Objects::nonNull) + .distinct() .toList(); if (foundGestioni.size() == 1) { @@ -157,7 +168,7 @@ public class AccettazioneOrdiniPickingViewModel { } else defaultGestioneOfUL = foundGestioni.get(0) == GestioneEnum.PRODUZIONE ? GestioneEnum.LAVORAZIONE : foundGestioni.get(0); } else { - this.sendError(new InvalidLUMultiGestioneException()); + throw new InvalidLUMultiGestioneException(); } switch (defaultGestioneOfUL) { @@ -166,32 +177,31 @@ public class AccettazioneOrdiniPickingViewModel { } } - private void getEmptyPickingList(List sitArtOrdList, RunnableArgs> onComplete) { + private List getEmptyPickingList(List sitArtOrdList) throws Exception { - List codMarts = Stream.of(sitArtOrdList) + List codMarts = sitArtOrdList.stream() .map(SitArtOrdDTO::getCodMart) - .toList(); + .collect(Collectors.toList()); - this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> { - List pickingList = Stream.of(sitArtOrdList) - .map(sitArtOrdDTO -> { - MtbAart mtbAart = null; + var listMtbAarts = this.mArticoloRESTConsumer.getByCodMartsSynchronized(codMarts); + List pickingList = sitArtOrdList.stream() + .map(sitArtOrdDTO -> { + MtbAart mtbAart = null; - for (MtbAart mtbAartItem : listMtbAarts) { - if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) { - mtbAart = mtbAartItem; - break; - } + for (MtbAart mtbAartItem : listMtbAarts) { + if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) { + mtbAart = mtbAartItem; + break; } + } - return new PickingObjectDTO() - .setSitArtOrdDTO(sitArtOrdDTO) - .setMtbAart(mtbAart); - }) - .toList(); + return new PickingObjectDTO() + .setSitArtOrdDTO(sitArtOrdDTO) + .setMtbAart(mtbAart); + }) + .collect(Collectors.toList()); - onComplete.run(pickingList); - }, this::sendError); + return pickingList; } public MutableLiveData> getPickingList() { @@ -654,8 +664,10 @@ public class AccettazioneOrdiniPickingViewModel { .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) .setMtbAart(pickingObjectDTO.getMtbAart()); - pickingObjectDTO.getWithdrawMtbColrs().add(insertedMtbColr); - mCurrentMtbColt.getMtbColr().add(insertedMtbColr); + handler.post(() -> { + pickingObjectDTO.getWithdrawMtbColrs().add(insertedMtbColr); + mCurrentMtbColt.getMtbColr().add(insertedMtbColr); + }); //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei resetMatchedRows(); @@ -771,7 +783,9 @@ public class AccettazioneOrdiniPickingViewModel { pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete); } - this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); + handler.post(() -> { + this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); + }); this.resetMatchedRows(); this.sendOnRowSaved(); From 9aa9b9121f29b3e0dda2a0ff48ec5682c0f38e05 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 10 Dec 2025 18:51:16 +0100 Subject: [PATCH 8/8] -> v1.50.04 (553) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b0ad4c08..18204f4a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 552 - def appVersionName = '1.50.03' + def appVersionCode = 553 + def appVersionName = '1.50.04' signingConfigs { release {