diff --git a/app/build.gradle b/app/build.gradle index 698e702d..ffb56619 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 = 553 + def appVersionName = '1.50.04' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index ac463c67..73d61be5 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 4d08a513..f7477c69 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); - 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/accettazione_ordini_elenco/MainAccettazioneOrdiniElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_elenco/MainAccettazioneOrdiniElencoFragment.java index e7d82ab1..8ef1eea2 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 5e753f29..4edc0406 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; @@ -159,7 +158,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() { @@ -376,7 +385,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A private void refreshList() { - runOnUiThread(() -> { + handler.post(() -> { List tmpList; if (mAppliedFilterViewModel != null) { 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 e8ad863e..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,59 +1,9 @@ package it.integry.integrywmsnative.gest.accettazione_ordini_picking; -import android.os.Handler; - -import java.util.concurrent.ExecutorService; - 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( - Handler handler, - ExecutorService executorService, - ArticoloRESTConsumer articoloRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer, - ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - AccettazioneOrdiniPickingRESTConsumer accettazioneOrdiniPickingRESTConsumer, - ColliAccettazioneRESTConsumer colliAccettazioneRESTConsumer, - ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, - Ean128Service ean128Service, - ImballiRESTConsumer imballiRESTConsumer) { - return new AccettazioneOrdiniPickingViewModel( - handler, - executorService, - 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 483ab0d0..13012ac4 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 @@ -13,6 +13,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicReference; @@ -126,7 +127,7 @@ 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; @@ -136,13 +137,14 @@ public class AccettazioneOrdiniPickingViewModel { UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) .collect(Collectors.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(); @@ -156,10 +158,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) { @@ -168,7 +170,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) { @@ -177,32 +179,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() { @@ -784,9 +785,9 @@ public class AccettazioneOrdiniPickingViewModel { pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete); } - handler.post(() -> { - this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); - }); + handler.post(() -> { + this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); + }); this.resetMatchedRows(); this.sendOnRowSaved(); 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 04f647b8..8e25d25c 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); @@ -214,13 +212,12 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra this.onLoadingEnded(); } catch (Exception e) { this.onError(e); + } finally { + handler.post(this::onLoadingEnded); } }); - - this.onLoadingEnded(); }; - private void openItemAction(VerificaGiacenzeRowEntity item) { var anagrafica = mViewModel.searchAnagraficaByCodMart(item.getCodMart()); @@ -262,7 +259,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra }); } - public PickedQuantityDTO onItemDispatched(MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, @@ -340,7 +336,6 @@ public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFra }); } - @Override public void onDestroy() { super.onDestroy(); @@ -351,4 +346,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