From ff091479680ac635375eb1d741058c91db4b0657 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Mon, 27 Mar 2023 11:44:20 +0200 Subject: [PATCH 01/13] [CARELLI - Ordini Acquisto] Aggiunto controllo modifica ed esportazione ordini con listino non valido --- .../data_store/db/entity/ArticoloOrdine.java | 12 +++ .../ExpiredProductListException.java | 10 +++ .../InvalidProductOrderedException.java | 15 ++++ .../MultipleResultFromBarcodeException.java | 15 ++++ .../PVOrdiniAcquistoRESTConsumer.java | 5 ++ .../core/settings/DBSettingsModel.java | 10 +++ .../core/settings/SettingsManager.java | 7 +- .../PVOrdineAcquistoEditActivity.java | 10 +++ .../PVOrdineAcquistoEditViewModel.java | 77 ++++++++++++++++++- .../PVOrdiniAcquistoGrigliaFragment.java | 17 ++++ .../PVOrdiniAcquistoGrigliaViewModel.java | 23 ++++++ ...coli_ordine_acquisto__list_single_item.xml | 14 ++++ app/src/main/res/values-it/strings.xml | 3 + app/src/main/res/values/custom_colors.xml | 4 +- app/src/main/res/values/strings.xml | 3 + 15 files changed, 219 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/exception/ExpiredProductListException.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/exception/InvalidProductOrderedException.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/exception/MultipleResultFromBarcodeException.java diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java index d6f5dbaa..823f705f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java @@ -94,6 +94,9 @@ public class ArticoloOrdine { @Ignore private int bgTint; + @Ignore + private boolean invalid = false; + public Integer getArticoloOrdineId() { return articoloOrdineId; @@ -300,4 +303,13 @@ public class ArticoloOrdine { this.ctMaxOrd = ctMaxOrd; return this; } + + public boolean isInvalid() { + return invalid; + } + + public ArticoloOrdine setInvalid(boolean invalid) { + this.invalid = invalid; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/ExpiredProductListException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/ExpiredProductListException.java new file mode 100644 index 00000000..10c7ac45 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/ExpiredProductListException.java @@ -0,0 +1,10 @@ +package it.integry.integrywmsnative.core.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public final class ExpiredProductListException extends Exception { + public ExpiredProductListException() { + super(UtilityResources.getString(R.string.expired_list_session)); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/InvalidProductOrderedException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/InvalidProductOrderedException.java new file mode 100644 index 00000000..ae3c3beb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/InvalidProductOrderedException.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public final class InvalidProductOrderedException extends Exception { + + public InvalidProductOrderedException() { + super(UtilityResources.getString(R.string.invalid_product_ordered)); + } + + public InvalidProductOrderedException(String product) { + super(UtilityResources.getString(R.string.invalid_product_ordered) + " (" + product + ")"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/MultipleResultFromBarcodeException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/MultipleResultFromBarcodeException.java new file mode 100644 index 00000000..081d3372 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/MultipleResultFromBarcodeException.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public final class MultipleResultFromBarcodeException extends Exception { + + public MultipleResultFromBarcodeException() { + super(UtilityResources.getString(R.string.multiple_results_from_barcode)); + } + + public MultipleResultFromBarcodeException(String barcode) { + super(UtilityResources.getString(R.string.multiple_results_from_barcode) + " (" + barcode + ")"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java index 16459e4d..347fbda3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java @@ -12,6 +12,7 @@ import javax.inject.Singleton; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.view_model.OrdiniAcquistoGrigliaDTO; +import it.integry.integrywmsnative.core.exception.InvalidProductOrderedException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; @@ -90,6 +91,10 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { int i = 0; for (ArticoloOrdine art : articoli) { i++; + if (art.isInvalid()) { + onFailed.run(new InvalidProductOrderedException(art.getCodMart())); + return; + } artRows.add(convertArtToDTO(art, i)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 8b8a7001..a49ae8b1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -38,6 +38,7 @@ public class DBSettingsModel { private boolean flagSpedizioneUseQtaOrd; private boolean flagOrdinaNuoviArticoliInGriglia; private boolean flagOrdinaArticoliOnScan; + private boolean flagConsentiFuoriPianoLogistico; private String docInterniCheckFornitore; private String produzioneDefaultCodAnag; private boolean flagPrintPackingListOnOrderClose; @@ -416,4 +417,13 @@ public class DBSettingsModel { this.flagCanAddUnknownItemsInventario = flagCanAddUnknownItemsInventario; return this; } + + public boolean isFlagConsentiFuoriPianoLogistico() { + return flagConsentiFuoriPianoLogistico; + } + + public DBSettingsModel setFlagConsentiFuoriPianoLogistico(boolean flagConsentiFuoriPianoLogistico) { + this.flagConsentiFuoriPianoLogistico = flagConsentiFuoriPianoLogistico; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 5a71fd62..4e7cfc1b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -305,6 +305,10 @@ public class SettingsManager { .setGestName("PVM") .setSection("ORDINI_A") .setKeySection("ORDINA_ARTICOLI_ON_SCAN")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PVM") + .setSection("ORDINI_A") + .setKeySection("FLAG_CONSENTI_ORIDNE_DA_GRIGLIA")); stbGestSetupList.add(new StbGestSetup() .setGestName("PVM") .setSection("DOC_INTERNI") @@ -381,6 +385,7 @@ public class SettingsManager { dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); dbSettingsModelIstance.setFlagPickLiberoAllowEmptyDest(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_DEST", Boolean.class)); dbSettingsModelIstance.setFlagOrdinaArticoliOnScan(getValueFromList(list, "ORDINI_A", "ORDINA_ARTICOLI_ON_SCAN", Boolean.class)); + dbSettingsModelIstance.setFlagConsentiFuoriPianoLogistico(getValueFromList(list, "ORDINI_A", "FLAG_CONSENTI_ORIDNE_DA_GRIGLIA", Boolean.class)); dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", Boolean.class)); dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", Boolean.class)); dbSettingsModelIstance.setFlagAskInfoAggiuntiveSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_ASK_INFO_AGGIUNTIVE", Boolean.class)); @@ -420,7 +425,7 @@ public class SettingsManager { .filter(x -> x.getSection().equalsIgnoreCase(section) && x.getKeySection().equalsIgnoreCase(keySectionName)) .findFirstOrElse(null); - if(value != null) { + if (value != null) { if (clazz == String.class) { return clazz.cast(value.getValue()); } else if (clazz == Boolean.class) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index b0682e60..d2c37f17 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -202,6 +202,16 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi onSuccess, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder"); } + @Override + public void confirmCheckForUnlistedProduct(String barcode) { + DialogSimpleMessageView.makeInfoDialog(getText(R.string.info).toString(), + Html.fromHtml(getResources().getString(R.string.confirm_order_unlisted_item)), + null, + () -> { + this.mViewModel.loadArticolo(barcode); + }, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder"); + } + @Override public int getColorFromResource(int resId) { return getResources().getColor(resId); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java index b90be94d..971360d3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; @@ -22,7 +23,10 @@ import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGriglia import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO; +import it.integry.integrywmsnative.core.exception.ArtNotFoundInGridException; import it.integry.integrywmsnative.core.exception.EmptyOrderException; +import it.integry.integrywmsnative.core.exception.ExpiredProductListException; +import it.integry.integrywmsnative.core.exception.MultipleResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoArtsInGridException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -31,6 +35,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsu import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityString; public class PVOrdineAcquistoEditViewModel { @@ -58,6 +63,8 @@ public class PVOrdineAcquistoEditViewModel { private List mArticoliGriglia = new ArrayList<>(); private final MutableLiveData> mArticoli = new MutableLiveData<>(); + private Calendar dataInizioModifica; + public PVOrdineAcquistoEditViewModel(OrdineRepository ordineRepository, GrigliaRepository grigliaRepository, @@ -75,6 +82,14 @@ public class PVOrdineAcquistoEditViewModel { this.mCurrentOrdine = ordine; mArticoliGriglia.clear(); mArticoliGriglia.addAll(articoliGriglia); + + Calendar today = Calendar.getInstance(); + today.set(Calendar.MILLISECOND, 0); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.HOUR_OF_DAY, 0); + + this.dataInizioModifica = today; this.refreshListArticoli(); } @@ -82,10 +97,21 @@ public class PVOrdineAcquistoEditViewModel { refreshListArticoli(null); } + public boolean checkOrderSessionValid() { + Calendar today = Calendar.getInstance(); + today.set(Calendar.MILLISECOND, 0); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.HOUR_OF_DAY, 0); + + return today.after(this.dataInizioModifica); + } + public void refreshListArticoli(Runnable onSuccess) { this.sendOnLoadingStarted(); this.loadArticoli(mCurrentOrdine, articoli -> { articoli = Stream.of(articoli).map(this::completeDataArticoli).sorted((a, b) -> a.getDataIns().after(b.getDataIns()) ? -1 : 1).toList(); + this.mArticoli.postValue(articoli); this.sendOnLoadingEnded(); if (onSuccess != null) @@ -109,6 +135,8 @@ public class PVOrdineAcquistoEditViewModel { art.setFlagQtaMultipla(artGrid.getFlagQtaMultipla()); art.setCtMaxOrd(BigDecimal.valueOf(artGrid.getCtMaxOrd())); art.setSystemNote(artGrid.generateSystemNote()); + } else { + art.setInvalid(true); } return art; } @@ -135,7 +163,12 @@ public class PVOrdineAcquistoEditViewModel { ArticoloOrdinabileDTO articoloDTO = getArticoloFromBarcode(barcode); if (articoloDTO == null) { - throw new NoResultFromBarcodeException(barcode); + if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) { + this.mListener.confirmCheckForUnlistedProduct(barcode); + return; + } else { + throw new NoResultFromBarcodeException(barcode); + } } this.addArticoloToOrdine( articoloDTO, @@ -168,7 +201,7 @@ public class PVOrdineAcquistoEditViewModel { }; if (isAutoOrderOnScan()) { - if (!UtilityBigDecimal.isNullOrZero(articolo.getCtMaxOrd()) && UtilityBigDecimal.greaterThan(BigDecimal.valueOf(articolo.getQtaOrd() + articolo.getQtaCnf()), articolo.getCtMaxOrd())) { + if (!UtilityBigDecimal.isNullOrZero(articolo.getCtMaxOrd()) && UtilityBigDecimal.greaterThan(BigDecimal.valueOf(articolo.getQtaOrd() + articolo.getQtaCnf()), articolo.getCtMaxOrd().multiply(BigDecimal.valueOf(articolo.getQtaCnf())))) { mListener.confirmExceedingQtyOrder(saveAction); } else { saveAction.run(); @@ -280,6 +313,10 @@ public class PVOrdineAcquistoEditViewModel { public void exportOrdine(Runnable onComplete) { this.sendOnLoadingStarted(); + if (!checkOrderSessionValid()) { + this.sendError(new ExpiredProductListException()); + return; + } if (mArticoli.getValue() == null) { this.sendError(new EmptyOrderException()); return; @@ -311,6 +348,40 @@ public class PVOrdineAcquistoEditViewModel { if (this.mListener != null) mListener.onError(ex); } + public void loadArticolo(String barcode) { + this.sendOnLoadingStarted(); + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> { + if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) { + this.sendError(new ArtNotFoundInGridException()); + return; + } + if (grigliaDTO.getArticoli().size() > 1) { + this.sendError(new MultipleResultFromBarcodeException()); + return; + } + ArticoloOrdinabileDTO newArt = Stream.of(grigliaDTO.getArticoli()).findFirstOrElse(null); + if (newArt == null) { + this.sendError(new ArtNotFoundInGridException()); + return; + } + + ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(newArt.getCodMart())).findFirstOrElse(null); + if (existingArt != null) { + List barcodes = existingArt.getBarcode(); + barcodes.addAll(newArt.getBarcode()); + barcodes = Stream.of(barcodes).distinct().toList(); + existingArt.setBarcode(barcodes); + } else { + mArticoliGriglia.add(newArt); + } + + this.processBarcode(barcode); + + + }, this::sendError); + } + public interface Listener extends ILoadingListener { void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess); @@ -319,6 +390,8 @@ public class PVOrdineAcquistoEditViewModel { int getColorFromResource(int resId); void onError(Exception ex); + + void confirmCheckForUnlistedProduct(String barcode); } public PVOrdineAcquistoEditViewModel setListener(Listener listener) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index 382c6634..a47e941b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -15,6 +15,7 @@ import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import javax.inject.Inject; @@ -30,6 +31,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaReposito import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO; import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; +import it.integry.integrywmsnative.core.exception.ExpiredProductListException; import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; @@ -133,6 +135,13 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi private void setListaArticoli(List listArticoli) { mListArticoli.clear(); mListArticoli.addAll(listArticoli); + Calendar today = Calendar.getInstance(); + today.set(Calendar.MILLISECOND, 0); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.HOUR_OF_DAY, 0); + + this.mPvOrdiniAcquistoGrigliaViewModel.setDataCaricamentoListino(today); mBinding.countArtLis.setText(String.valueOf(listArticoli.size())); } @@ -172,6 +181,10 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi } private void editOrdine(Ordine ordine) { + if (this.mPvOrdiniAcquistoGrigliaViewModel.checkProductListSessionInvalid()) { + this.onError(new ExpiredProductListException()); + return; + } requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine, mListArticoli)); } @@ -207,6 +220,10 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi } public void createNewOrder() { + if (this.mPvOrdiniAcquistoGrigliaViewModel.checkProductListSessionInvalid()) { + this.onError(new ExpiredProductListException()); + return; + } this.onLoadingStarted(); mPvOrdiniAcquistoGrigliaViewModel.createNewOrder(mGriglia, order -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java index 84426639..6c1d6842 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java @@ -1,5 +1,7 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto; +import java.util.Calendar; + import javax.inject.Inject; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; @@ -18,6 +20,8 @@ public class PVOrdiniAcquistoGrigliaViewModel { private final OrdineRepository ordineRepository; private final GrigliaRepository grigliaRepository; + private Calendar dataCaricamentoListino; + @Inject public PVOrdiniAcquistoGrigliaViewModel(PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer, ArticoloGrigliaRepository articoloGrigliaRepository, @@ -45,4 +49,23 @@ public class PVOrdiniAcquistoGrigliaViewModel { ordineRepository.delete(ordine, onSuccess, onFail); } + public Calendar getDataCaricamentoListino() { + return dataCaricamentoListino; + } + + public PVOrdiniAcquistoGrigliaViewModel setDataCaricamentoListino(Calendar dataCaricamentoListino) { + this.dataCaricamentoListino = dataCaricamentoListino; + return this; + } + + + public boolean checkProductListSessionInvalid() { + Calendar today = Calendar.getInstance(); + today.set(Calendar.MILLISECOND, 0); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.HOUR_OF_DAY, 0); + + return today.after(this.dataCaricamentoListino); + } } diff --git a/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml b/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml index 585543d8..ea53fd72 100644 --- a/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml +++ b/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml @@ -6,6 +6,8 @@ + + @@ -55,6 +57,17 @@ android:src="@drawable/ic_baseline_new_24" android:tint="@color/orange_600" /> + + @@ -95,6 +108,7 @@ android:layout_height="wrap_content" android:background="@drawable/badge_round_corner" android:backgroundTint="@{articolo.bgTint}" + android:visibility="@{articolo.invalid ? View.GONE : View.VISIBLE}" android:gravity="center" android:paddingLeft="6dp" android:paddingTop="2dp" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0764d670..917731b3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -445,4 +445,7 @@ Qta massima ordinabile Quantità massima superata Vuoi cotinuare comunque con il salvataggio?]]>\ + Vuoi provare a cercarlo comunque nel sistema?]]> + L\'ordine presenta un articolo non valido per la lista selezionata! + \ No newline at end of file diff --git a/app/src/main/res/values/custom_colors.xml b/app/src/main/res/values/custom_colors.xml index 359eeedf..230b4313 100644 --- a/app/src/main/res/values/custom_colors.xml +++ b/app/src/main/res/values/custom_colors.xml @@ -26,12 +26,10 @@ #f5f5f5 - #E8F0FE #C9D5F0 - #1A1A73E8 #331A73E8 #4D1A73E8 @@ -85,7 +83,6 @@ #303F9F - #B3E5FC #81D4FA #4fc3f7 @@ -102,6 +99,7 @@ #EF6C00 + #EFB4B4 #ef9a9a #e57373 #EF5350 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb347c69..41b33558 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -452,4 +452,7 @@ Max orderable qty Max quantity exceeded Do you wish to continue?]]> + Do you want to search for it regardless?]]> + One or more ordered products are not available in the selected list! + From 28f4ac4414a2ce6ac57c0ef3a6fae5be9f590ebf Mon Sep 17 00:00:00 2001 From: ValerioC Date: Tue, 28 Mar 2023 12:11:14 +0200 Subject: [PATCH 02/13] =?UTF-8?q?[CARELLI=20-=20Ordini=20Acquisto]=20Corre?= =?UTF-8?q?tto=20controllo=20su=20ordini=20chiusi=20a=20fine=20validit?= =?UTF-8?q?=C3=A0=20lisitno?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../16.json | 1168 +++++++++++++++++ .../core/data_store/db/AppDatabase.java | 10 +- .../core/data_store/db/entity/Ordine.java | 5 +- .../views/InputQuantityToReturnDialog.java | 8 - .../PVOrdineAcquistoEditViewModel.java | 5 +- .../PVOrdiniAcquistoGrigliaFragment.java | 4 +- .../PVOrdiniAcquistoGrigliaViewModel.java | 2 +- app/src/main/res/values-it/strings.xml | 2 +- 8 files changed, 1186 insertions(+), 18 deletions(-) create mode 100644 app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/16.json diff --git a/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/16.json b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/16.json new file mode 100644 index 00000000..ac0a8c46 --- /dev/null +++ b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/16.json @@ -0,0 +1,1168 @@ +{ + "formatVersion": 1, + "database": { + "version": 16, + "identityHash": "0609508b3a8434bb8d3e3cc99e766d67", + "entities": [ + { + "tableName": "articoli_griglia", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`articolo_griglia_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cod_mart` TEXT, `descrizione` TEXT, `unt_mis` TEXT, `qta_cnf` REAL NOT NULL, `bar_code` TEXT, `merce_da_ric` REAL NOT NULL, `media_sett` REAL NOT NULL, `flag_qta_multipla` TEXT, `qta_min_ordinabile` REAL NOT NULL, `gg_scadenza` INTEGER NOT NULL, `giacenza` REAL NOT NULL, `qta_prevista_vendita` REAL NOT NULL, `qta_proposta` REAL NOT NULL, `qta_ord` REAL NOT NULL, `id_griglia` INTEGER NOT NULL, `new_no_promo` INTEGER NOT NULL, FOREIGN KEY(`id_griglia`) REFERENCES `griglie`(`griglia_id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "articoloGrigliaId", + "columnName": "articolo_griglia_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaCnf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "barCode", + "columnName": "bar_code", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "merceDaRic", + "columnName": "merce_da_ric", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "mediaSett", + "columnName": "media_sett", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "flagQtaMultipla", + "columnName": "flag_qta_multipla", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaMinOrdinabile", + "columnName": "qta_min_ordinabile", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "ggScadenza", + "columnName": "gg_scadenza", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "giacenza", + "columnName": "giacenza", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "qtaPrevistaVendita", + "columnName": "qta_prevista_vendita", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "qtaProposta", + "columnName": "qta_proposta", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "qtaOrd", + "columnName": "qta_ord", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "idGriglia", + "columnName": "id_griglia", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "newNoPromo", + "columnName": "new_no_promo", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "articolo_griglia_id" + ] + }, + "indices": [ + { + "name": "index_articoli_griglia_id_griglia", + "unique": false, + "columnNames": [ + "id_griglia" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_articoli_griglia_id_griglia` ON `${TABLE_NAME}` (`id_griglia`)" + } + ], + "foreignKeys": [ + { + "table": "griglie", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_griglia" + ], + "referencedColumns": [ + "griglia_id" + ] + } + ] + }, + { + "tableName": "griglie", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`griglia_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cod_alis` TEXT, `descr_lisa` TEXT, `descr_depo` TEXT)", + "fields": [ + { + "fieldPath": "grigliaId", + "columnName": "griglia_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrLisa", + "columnName": "descr_lisa", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrDepo", + "columnName": "descr_depo", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "griglia_id" + ] + }, + "indices": [ + { + "name": "index_griglie_cod_alis", + "unique": true, + "columnNames": [ + "cod_alis" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_griglie_cod_alis` ON `${TABLE_NAME}` (`cod_alis`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "ordini", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`ordine_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `data_ins` INTEGER, `annotazioni` TEXT, `transmitted` INTEGER NOT NULL, `transmission_date` INTEGER, `gestione` TEXT, `data_ord` INTEGER, `num_ord` INTEGER, `cod_mdep` TEXT, `id_griglia` INTEGER, `cod_alis` TEXT)", + "fields": [ + { + "fieldPath": "ordineId", + "columnName": "ordine_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "dataIns", + "columnName": "data_ins", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "annotazioni", + "columnName": "annotazioni", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "transmitted", + "columnName": "transmitted", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "transmissionDate", + "columnName": "transmission_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "gestione", + "columnName": "gestione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOrd", + "columnName": "data_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numOrd", + "columnName": "num_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMdep", + "columnName": "cod_mdep", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "idGriglia", + "columnName": "id_griglia", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "ordine_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "articoli_ordine", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`articolo_ordine_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cod_mart` TEXT, `descrizione` TEXT, `unt_mis` TEXT, `qta_cnf` REAL NOT NULL, `bar_code` TEXT, `merce_da_ric` REAL NOT NULL, `media_sett` REAL NOT NULL, `flag_qta_multipla` TEXT, `qta_min_ordinabile` REAL NOT NULL, `id_ordine` INTEGER NOT NULL, `qta_ord` REAL NOT NULL, `data_ins` INTEGER, `new_no_promo` INTEGER NOT NULL, `system_note` TEXT, `cod_alis` TEXT, FOREIGN KEY(`id_ordine`) REFERENCES `ordini`(`ordine_id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "articoloOrdineId", + "columnName": "articolo_ordine_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaCnf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "barCode", + "columnName": "bar_code", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "merceDaRic", + "columnName": "merce_da_ric", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "mediaSett", + "columnName": "media_sett", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "flagQtaMultipla", + "columnName": "flag_qta_multipla", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaMinOrdinabile", + "columnName": "qta_min_ordinabile", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "idOrdine", + "columnName": "id_ordine", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "qtaOrd", + "columnName": "qta_ord", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "dataIns", + "columnName": "data_ins", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "newNoPromo", + "columnName": "new_no_promo", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "systemNote", + "columnName": "system_note", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "articolo_ordine_id" + ] + }, + "indices": [ + { + "name": "index_articoli_ordine_id_ordine", + "unique": false, + "columnNames": [ + "id_ordine" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_articoli_ordine_id_ordine` ON `${TABLE_NAME}` (`id_ordine`)" + }, + { + "name": "index_articoli_ordine_id_ordine_cod_mart", + "unique": true, + "columnNames": [ + "id_ordine", + "cod_mart" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_articoli_ordine_id_ordine_cod_mart` ON `${TABLE_NAME}` (`id_ordine`, `cod_mart`)" + } + ], + "foreignKeys": [ + { + "table": "ordini", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_ordine" + ], + "referencedColumns": [ + "ordine_id" + ] + } + ] + }, + { + "tableName": "mtb_colt", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `username` TEXT, `gestione` TEXT, `data_collo` INTEGER, `ser_collo` TEXT, `num_collo` INTEGER, `rif_ord` TEXT, `cod_anag` TEXT, `cod_vdes` TEXT, `cod_mdep` TEXT, `cod_vlis` TEXT, `cod_dtip` TEXT, `cod_tcol` TEXT, `ser_doc` TEXT, `annotazioni` TEXT, `posizione` TEXT, `cod_dtip_provv` TEXT, `ser_doc_provv` TEXT, `cod_jfas` TEXT, `data_ord` INTEGER, `data_doc` INTEGER, `data_doc_provv` INTEGER, `cod_mgrp` TEXT, `data_vers` INTEGER, `segno` INTEGER, `num_ord` INTEGER, `num_doc` INTEGER, `num_doc_provv` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "gestione", + "columnName": "gestione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataCollo", + "columnName": "data_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serCollo", + "columnName": "ser_collo", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numCollo", + "columnName": "num_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "rifOrd", + "columnName": "rif_ord", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAnag", + "columnName": "cod_anag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codVdes", + "columnName": "cod_vdes", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codMdep", + "columnName": "cod_mdep", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codVlis", + "columnName": "cod_vlis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtip", + "columnName": "cod_dtip", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codTcol", + "columnName": "cod_tcol", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serDoc", + "columnName": "ser_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "annotazioni", + "columnName": "annotazioni", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "posizione", + "columnName": "posizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtipProvv", + "columnName": "cod_dtip_provv", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serDocProvv", + "columnName": "ser_doc_provv", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codJfas", + "columnName": "cod_jfas", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOrd", + "columnName": "data_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataDoc", + "columnName": "data_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataDocProvv", + "columnName": "data_doc_provv", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMgrp", + "columnName": "cod_mgrp", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataVers", + "columnName": "data_vers", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "segno", + "columnName": "segno", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numOrd", + "columnName": "num_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numDoc", + "columnName": "num_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numDocProvv", + "columnName": "num_doc_provv", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_mtb_colt_data_collo_ser_collo_num_collo_gestione", + "unique": true, + "columnNames": [ + "data_collo", + "ser_collo", + "num_collo", + "gestione" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_mtb_colt_data_collo_ser_collo_num_collo_gestione` ON `${TABLE_NAME}` (`data_collo`, `ser_collo`, `num_collo`, `gestione`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "mtb_colr", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `id_collo` INTEGER NOT NULL, `data_collo` INTEGER, `gestione` TEXT, `ser_collo` TEXT, `descrizione` TEXT, `num_collo` INTEGER, `riga` INTEGER, `riga_ord` INTEGER, `cod_mart` TEXT, `cod_barre` TEXT, `cod_col` TEXT, `cod_tagl` TEXT, `partita_mag` TEXT, `gestione_rif` TEXT, `ser_collo_rif` TEXT, `note` TEXT, `data_ord` INTEGER, `data_collo_rif` INTEGER, `qta_cnf` REAL, `qta_col` REAL, `num_ord` INTEGER, `num_etich` INTEGER, `num_collo_rif` INTEGER, `datetime_row` INTEGER, `cod_jcom` TEXT, `num_cnf` REAL, `causale` TEXT, `utente` TEXT, `cod_anag_doc` TEXT, `cod_dtip_doc` TEXT, `data_doc` INTEGER, `ser_doc` TEXT, `num_doc` INTEGER, `id_riga_doc` INTEGER, `unt_mis` TEXT, `data_scad` INTEGER, FOREIGN KEY(`id_collo`) REFERENCES `mtb_colt`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "idCollo", + "columnName": "id_collo", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "dataCollo", + "columnName": "data_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "gestione", + "columnName": "gestione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serCollo", + "columnName": "ser_collo", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numCollo", + "columnName": "num_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "riga", + "columnName": "riga", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "rigaOrd", + "columnName": "riga_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codBarre", + "columnName": "cod_barre", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codCol", + "columnName": "cod_col", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codTagl", + "columnName": "cod_tagl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "partitaMag", + "columnName": "partita_mag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "gestioneRif", + "columnName": "gestione_rif", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serColloRif", + "columnName": "ser_collo_rif", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "note", + "columnName": "note", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOrd", + "columnName": "data_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataColloRif", + "columnName": "data_collo_rif", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "qtaCnf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "qtaCol", + "columnName": "qta_col", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "numOrd", + "columnName": "num_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numEtich", + "columnName": "num_etich", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numColloRif", + "columnName": "num_collo_rif", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "datetimeRow", + "columnName": "datetime_row", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codJcom", + "columnName": "cod_jcom", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numCnf", + "columnName": "num_cnf", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "causale", + "columnName": "causale", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "utente", + "columnName": "utente", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAnagDoc", + "columnName": "cod_anag_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtipDoc", + "columnName": "cod_dtip_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataDoc", + "columnName": "data_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serDoc", + "columnName": "ser_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numDoc", + "columnName": "num_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "idRigaDoc", + "columnName": "id_riga_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataScad", + "columnName": "data_scad", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_mtb_colr_data_collo_ser_collo_num_collo_gestione_riga", + "unique": true, + "columnNames": [ + "data_collo", + "ser_collo", + "num_collo", + "gestione", + "riga" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_mtb_colr_data_collo_ser_collo_num_collo_gestione_riga` ON `${TABLE_NAME}` (`data_collo`, `ser_collo`, `num_collo`, `gestione`, `riga`)" + }, + { + "name": "index_mtb_colr_id_collo", + "unique": false, + "columnNames": [ + "id_collo" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_mtb_colr_id_collo` ON `${TABLE_NAME}` (`id_collo`)" + } + ], + "foreignKeys": [ + { + "table": "mtb_colt", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_collo" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "inventari", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `id_inventario` INTEGER, `cod_mdep` TEXT NOT NULL, `data_inventario` INTEGER, `data_reg` INTEGER, `data_ver` INTEGER, `filtro` TEXT, `flag_stato` TEXT, `flag_operazione` TEXT, `cod_anag` TEXT, `cod_dtip` TEXT, `inserito_da` TEXT, `registrato_da` TEXT, `verificato_da` TEXT, `data_ora_inizio` INTEGER, `data_ora_fine` INTEGER, `causale` TEXT, `zona` TEXT, `new` INTEGER, `remote_sync_date` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "idInventario", + "columnName": "id_inventario", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMdep", + "columnName": "cod_mdep", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "dataInventario", + "columnName": "data_inventario", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataReg", + "columnName": "data_reg", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataVer", + "columnName": "data_ver", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filtro", + "columnName": "filtro", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "flagStato", + "columnName": "flag_stato", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "flagOperazione", + "columnName": "flag_operazione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAnag", + "columnName": "cod_anag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtip", + "columnName": "cod_dtip", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "inseritoDa", + "columnName": "inserito_da", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "registratoDa", + "columnName": "registrato_da", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "verificatoDa", + "columnName": "verificato_da", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOraInizio", + "columnName": "data_ora_inizio", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataOraFine", + "columnName": "data_ora_fine", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "causale", + "columnName": "causale", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "zona", + "columnName": "zona", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isNew", + "columnName": "new", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteSyncDate", + "columnName": "remote_sync_date", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [ + { + "name": "index_inventari__id", + "unique": false, + "columnNames": [ + "_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_inventari__id` ON `${TABLE_NAME}` (`_id`)" + }, + { + "name": "index_inventari_id_inventario", + "unique": false, + "columnNames": [ + "id_inventario" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_inventari_id_inventario` ON `${TABLE_NAME}` (`id_inventario`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "inventario_rows", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `parent_id` INTEGER, `cod_mart` TEXT, `partita_mag` TEXT, `descrizione` TEXT, `qta` REAL NOT NULL DEFAULT 0, `num_cnf` REAL NOT NULL DEFAULT 0, `qta_cnf` REAL NOT NULL DEFAULT 0, `unt_mis` TEXT NOT NULL DEFAULT '0', `data_ora_inv` INTEGER, `scan_cod_barre` TEXT, `zona` TEXT, `remote_sync_date` INTEGER, FOREIGN KEY(`parent_id`) REFERENCES `inventari`(`_id`) ON UPDATE NO ACTION ON DELETE NO ACTION )", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "parentId", + "columnName": "parent_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "partitaMag", + "columnName": "partita_mag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qta", + "columnName": "qta", + "affinity": "REAL", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "numConf", + "columnName": "num_cnf", + "affinity": "REAL", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "qtaConf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'0'" + }, + { + "fieldPath": "dataOraInv", + "columnName": "data_ora_inv", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "scanCodBarre", + "columnName": "scan_cod_barre", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "zona", + "columnName": "zona", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteSyncDate", + "columnName": "remote_sync_date", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [ + { + "name": "index_inventario_rows__id", + "unique": false, + "columnNames": [ + "_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_inventario_rows__id` ON `${TABLE_NAME}` (`_id`)" + }, + { + "name": "index_inventario_rows_parent_id", + "unique": false, + "columnNames": [ + "parent_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_inventario_rows_parent_id` ON `${TABLE_NAME}` (`parent_id`)" + } + ], + "foreignKeys": [ + { + "table": "inventari", + "onDelete": "NO ACTION", + "onUpdate": "NO ACTION", + "columns": [ + "parent_id" + ], + "referencedColumns": [ + "_id" + ] + } + ] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0609508b3a8434bb8d3e3cc99e766d67')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java index 64a04479..7938f4e6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java @@ -40,7 +40,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; InventarioRoomDTO.class, InventarioRowRoomDTO.class }, - version = 15) + version = 16) @TypeConverters({ DateConverter.class, BigDecimalConverter.class, @@ -67,7 +67,8 @@ public abstract class AppDatabase extends RoomDatabase { .addMigrations(MIGRATION_11_12) .addMigrations(MIGRATION_12_13) .addMigrations(MIGRATION_13_14) - .addMigrations(MIGRATION_14_15); + .addMigrations(MIGRATION_14_15) + .addMigrations(MIGRATION_15_16); sInstance = builder.build(); } @@ -155,4 +156,9 @@ public abstract class AppDatabase extends RoomDatabase { database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_articoli_ordine_id_ordine_cod_mart ON articoli_ordine (id_ordine, cod_mart);"); } }; + static final Migration MIGRATION_15_16 = new Migration(15, 16) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + } + }; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java index ea74473e..9bc0ae9e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java @@ -51,6 +51,7 @@ public class Ordine { private boolean orderNewProducts = false; @ColumnInfo(name = "id_griglia") + @Nullable private Integer idGriglia; @ColumnInfo(name = "cod_alis") @@ -80,11 +81,11 @@ public class Ordine { this.annotazioni = annotazioni; } - public int getIdGriglia() { + public Integer getIdGriglia() { return idGriglia; } - public void setIdGriglia(int idGriglia) { + public void setIdGriglia(Integer idGriglia) { this.idGriglia = idGriglia; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java index ffa07c66..190c296a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java @@ -5,22 +5,14 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; -import android.view.View; -import android.widget.ArrayAdapter; import androidx.databinding.DataBindingUtil; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.core.model.MtbTCol; -import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding; public class InputQuantityToReturnDialog { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java index 971360d3..d5f75838 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java @@ -97,7 +97,7 @@ public class PVOrdineAcquistoEditViewModel { refreshListArticoli(null); } - public boolean checkOrderSessionValid() { + public boolean isOrderSessionInvalid() { Calendar today = Calendar.getInstance(); today.set(Calendar.MILLISECOND, 0); today.set(Calendar.SECOND, 0); @@ -196,6 +196,7 @@ public class PVOrdineAcquistoEditViewModel { var articolo = foundArt != null ? completeDataArticoli(foundArt) : convertToArticoloOrdine(art, mCurrentOrdine); Runnable saveAction = () -> { + articolo.setQtaOrd(articolo.getQtaOrd() + articolo.getQtaCnf()); mArticoliOrdineRepository.saveArticoloToOrdine(articolo, () -> this.refreshListArticoli(onSuccess), onFail); }; @@ -313,7 +314,7 @@ public class PVOrdineAcquistoEditViewModel { public void exportOrdine(Runnable onComplete) { this.sendOnLoadingStarted(); - if (!checkOrderSessionValid()) { + if (isOrderSessionInvalid()) { this.sendError(new ExpiredProductListException()); return; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index a47e941b..c0159b5d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -181,7 +181,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi } private void editOrdine(Ordine ordine) { - if (this.mPvOrdiniAcquistoGrigliaViewModel.checkProductListSessionInvalid()) { + if (this.mPvOrdiniAcquistoGrigliaViewModel.isProductListSessionInvalid()) { this.onError(new ExpiredProductListException()); return; } @@ -220,7 +220,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi } public void createNewOrder() { - if (this.mPvOrdiniAcquistoGrigliaViewModel.checkProductListSessionInvalid()) { + if (this.mPvOrdiniAcquistoGrigliaViewModel.isProductListSessionInvalid()) { this.onError(new ExpiredProductListException()); return; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java index 6c1d6842..fb730f04 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java @@ -59,7 +59,7 @@ public class PVOrdiniAcquistoGrigliaViewModel { } - public boolean checkProductListSessionInvalid() { + public boolean isProductListSessionInvalid() { Calendar today = Calendar.getInstance(); today.set(Calendar.MILLISECOND, 0); today.set(Calendar.SECOND, 0); diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 917731b3..5eefa165 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -447,5 +447,5 @@ Vuoi cotinuare comunque con il salvataggio?]]>\ Vuoi provare a cercarlo comunque nel sistema?]]> L\'ordine presenta un articolo non valido per la lista selezionata! - + \ No newline at end of file From 4ab7bf27d7b4dea203c5327b62e0f98fe099f73c Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 28 Mar 2023 12:19:42 +0200 Subject: [PATCH 03/13] Refactoring DialogSelectDocRows --- .../MainApplicationComponent.java | 7 +- .../NoResultFromCodMartException.java | 15 ++ .../integrywmsnative/core/model/MtbColt.java | 22 -- .../core/settings/SettingsManager.java | 8 + .../core/utility/UtilityBarcode.java | 4 + .../AccettazionePickingViewModel.java | 13 +- ...logChooseRowFromListaDocRowsListModel.java | 85 -------- .../edit_form/DocInterniEditFormActivity.java | 27 ++- .../DocInterniEditFormViewModel.java | 47 +++-- .../DialogSelectDocRowsComponent.java | 6 +- .../DialogSelectDocRowsItemListModel.java | 90 ++++++++ .../DialogSelectDocRowsModule.java | 7 +- .../DialogSelectDocRowsView.java | 194 ++++++++---------- .../DialogSelectDocRowsViewModel.java | 5 + .../views/InputQuantityToReturnDialog.java | 8 - ..._choose_row_from_lista_doc_rows_layout.xml | 141 ------------- .../res/layout/dialog_select_doc_rows.xml | 43 ++++ ...=> dialog_select_doc_rows__item_model.xml} | 96 +++++---- app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 20 files changed, 377 insertions(+), 443 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java delete mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java delete mode 100644 app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml create mode 100644 app/src/main/res/layout/dialog_select_doc_rows.xml rename app/src/main/res/layout/{dialog_choose_row_from_lista_doc_rows__item_model.xml => dialog_select_doc_rows__item_model.xml} (63%) diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index b93a14c6..66f54154 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -174,7 +174,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr BottomSheetMtbColrEditModalModule.class, DialogChooseArtsFromMtbAartListModule.class, MainSettingsModule.class, - DialogInfoSituazioneArticoloModule.class + DialogInfoSituazioneArticoloModule.class, + DialogSelectDocRowsModule.class }) public interface MainApplicationComponent { @@ -258,8 +259,6 @@ public interface MainApplicationComponent { DialogSelectDocInfoComponent.Factory dialogSelectDocInfoNewViewComponent(); - DialogSelectDocRowsComponent.Factory dialogSelectDocRowsComponent(); - DocInterniEditFormComponent.Factory docInterniEditFormComponent(); InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent(); @@ -294,6 +293,8 @@ public interface MainApplicationComponent { DialogInfoSituazioneArticoloComponent.Factory dialogInfoSituazioneArticoloComponent(); + DialogSelectDocRowsComponent.Factory dialogSelectDocRowsNewComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java new file mode 100644 index 00000000..581f3811 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public final class NoResultFromCodMartException extends Exception { + + public NoResultFromCodMartException() { + super(UtilityResources.getString(R.string.no_result_from_cod_mart)); + } + + public NoResultFromCodMartException(String codMart) { + super(UtilityResources.getString(R.string.no_result_from_cod_mart) + " (" + codMart + ")"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index ded07f62..7c06d798 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -68,28 +68,6 @@ public class MtbColt extends EntityBase { private Boolean disablePrint; private String ragSocCliente; - public void generaFiltroOrdine() throws Exception { - - if (this.gestione == null) { - throw new Exception("Impossibile creare il filtro dell'ordine se la gestione non è valorizzata"); - } - - if (this.dataOrd == null) { - throw new Exception("Impossibile creare il filtro dell'ordine se la data dell'ordine non è valorizzata"); - } - - if (this.numOrd == null) { - throw new Exception("Impossibile creare il filtro dell'ordine se il numero dell'ordine non è valorizzato"); - } - - - Date dateOrd = UtilityDate.recognizeDate(this.dataOrd); - String dateYMD = UtilityDate.formatDate(dateOrd, UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH); - - this.filtroOrdini = "" + this.gestione + "" + dateYMD + "" + this.numOrd + ""; - } - - private ObservableArrayList mtbColr = new ObservableArrayList<>(); public ObservableArrayList getMtbColr() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 4e7cfc1b..d2c4832b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -24,6 +24,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.utility.UtilityFirebase; +import it.integry.integrywmsnative.core.utility.UtilityLogger; @Singleton public class SettingsManager { @@ -108,6 +109,7 @@ public class SettingsManager { }; RunnableArgs tmpOnFailed = ex -> { + UtilityLogger.error(ex); perfTrace.putAttribute("failed", "true"); if (!(ex instanceof SocketTimeoutException)) onFailed.run(ex); else @@ -433,6 +435,12 @@ public class SettingsManager { } else if (clazz == Integer.class && value.getValue() != null) { return clazz.cast(Integer.parseInt(value.getValue())); } + } else { + if (clazz == Boolean.class) { + return clazz.cast(Boolean.FALSE); + } else if (clazz == Integer.class) { + return clazz.cast(0); + } } return defaultValue; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java index f5efc173..2d8437da 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -36,6 +36,10 @@ public class UtilityBarcode { return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN128; } + public static boolean isCode128(BarcodeScanDTO barcodeScanDTO) { + return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128; + } + public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) { return isEtichettaPosizione(barcodeScanDTO, true); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index 2528f93b..91ea1dc1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -389,7 +389,7 @@ public class AccettazionePickingViewModel { .distinct() .toList(); - if (codAnags != null && codAnags.size() == 1) { + if (codAnags.size() == 1) { mtbColt.setCodAnag(codAnags.get(0)); } @@ -399,7 +399,7 @@ public class AccettazionePickingViewModel { .distinct() .toList(); - if (rifOrds != null && rifOrds.size() == 1) { + if (rifOrds.size() == 1) { mtbColt.setRifOrd(rifOrds.get(0)); } @@ -409,16 +409,9 @@ public class AccettazionePickingViewModel { .distinct() .toList(); - if (numDataOrds != null && numDataOrds.size() == 1) { + if (numDataOrds.size() == 1) { mtbColt.setNumOrd(mOrders.get(0).getNumero()); mtbColt.setDataOrd(mOrders.get(0).getData()); - - try { - mtbColt.generaFiltroOrdine(); - } catch (Exception ex) { - this.sendError(ex); - return; - } } this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java deleted file mode 100644 index 3c48b2fa..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java +++ /dev/null @@ -1,85 +0,0 @@ -package it.integry.integrywmsnative.gest.contab_doc_interni.dto; - -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; -import it.integry.integrywmsnative.core.di.BindableBoolean; - -public class DialogChooseRowFromListaDocRowsListModel { - - private String codMart; - private String descrizione; - private String qtaOrdReadable; - private String barcode; - private boolean isNew; - private SqlMtbColr originalModel; - private BindableBoolean checked = new BindableBoolean(false); - - public DialogChooseRowFromListaDocRowsListModel() { - } - - public BindableBoolean getChecked() { - return checked; - } - - public DialogChooseRowFromListaDocRowsListModel setChecked(BindableBoolean checked) { - this.checked = checked; - return this; - } - - public void toggleCheck() { - this.checked.set(!this.checked.get()); - } - - public String getCodMart() { - return codMart; - } - - public DialogChooseRowFromListaDocRowsListModel setCodMart(String codMart) { - this.codMart = codMart; - return this; - } - - public String getDescrizione() { - return descrizione; - } - - public DialogChooseRowFromListaDocRowsListModel setDescrizione(String descrizione) { - this.descrizione = descrizione; - return this; - } - - public String getQtaOrdReadable() { - return qtaOrdReadable; - } - - public DialogChooseRowFromListaDocRowsListModel setQtaOrdReadable(String qtaOrdReadable) { - this.qtaOrdReadable = qtaOrdReadable; - return this; - } - - public String getBarcode() { - return barcode; - } - - public DialogChooseRowFromListaDocRowsListModel setBarcode(String barcode) { - this.barcode = barcode; - return this; - } - - public boolean isNew() { - return isNew; - } - - public DialogChooseRowFromListaDocRowsListModel setNew(boolean aNew) { - isNew = aNew; - return this; - } - - public SqlMtbColr getOriginalModel() { - return originalModel; - } - - public DialogChooseRowFromListaDocRowsListModel setOriginalModel(SqlMtbColr originalModel) { - this.originalModel = originalModel; - return this; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index 10cef1af..e58bd7b6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -41,6 +41,7 @@ import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipoDocDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; @@ -184,7 +185,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter "Ricerca articolo", null, "Cod articolo / Barcode", - barcodeProd -> this.viewModel.loadArticolo(barcodeProd, null), BarcodeManager::enable).show(); + barcodeProd -> this.viewModel.loadArticoloByCodMart(barcodeProd), BarcodeManager::enable).show(); } @@ -320,13 +321,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onMultipleRowsFound(List rows, DocumentoArtDTO articolo) { - DialogSelectDocRowsView.newInstance(rows, (row) -> { - this.onLoadingEnded(); - if (row != null) { - this.viewModel.dispatchRowEdit(row, articolo.isFlagTracciabilita(), articolo.isUntMisDigitale()); - } - } - ).show(this.getSupportFragmentManager(), "dialogSelectDocRows"); + List> dataset = + Stream.of(rows) + .map(x -> new DialogSelectDocRowsItemListModel<>() + .setCodMart(x.getCodMart()) + .setBarcode(x.getCodBarre()) + .setOriginalModel(x) + .setNew(x.getId() < 1) + .setDescrizione(x.getDescrizione()) + .setQtaOrd(BigDecimal.valueOf(x.getQtaCol())) + .setUntMisOrd(x.getUntMis())) + .toList(); + + DialogSelectDocRowsView.newInstance(dataset, data -> { + this.viewModel.dispatchRowEdit((SqlMtbColr) data.getOriginalModel(), articolo.isFlagTracciabilita(), articolo.isUntMisDigitale()); + }, () -> {}) + .show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew"); } private MtbColr sqlToEntity(SqlMtbColr sqlMtbColr) { @@ -358,7 +368,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } - public void showInfoArtDialog() { var listaMtbAart = Stream.of(this.viewModel.getProductsList()) .map(x -> new MtbAart() diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index ab16adcd..fea0f8dd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -4,7 +4,6 @@ import androidx.lifecycle.MutableLiveData; import com.annimon.stream.Stream; -import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; @@ -21,6 +20,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.exception.NoResultFromCodMartException; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; @@ -129,16 +129,28 @@ public class DocInterniEditFormViewModel { this.listener.onDocumentHoldRequest(); } - public void loadArticolo(String barcodeProd, Ean128Model ean128Model) { + public void loadArticoloByCodMart(String codMart) { + var matchedArt = Stream.of(productsList) + .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) + .findFirst() + .orElse(null); + + + if (matchedArt == null) { + this.sendError(new NoResultFromCodMartException(codMart)); + return; + } + + + loadArticolo(matchedArt, null); + } + + public void loadArticoloByBarcode(String barcodeProd, Ean128Model ean128Model) { DocumentoArtDTO matchedArt; String usedBarcode = null; - String leftBarcode = StringUtils.leftPad(barcodeProd, 13, '0'); - matchedArt = Stream.of(productsList) - .filter(x -> x.getCodMart().equalsIgnoreCase(barcodeProd) || - leftBarcode.equalsIgnoreCase(x.getCodMart()) || - x.getBarcode().contains(barcodeProd)) + .filter(x -> x.getBarcode().contains(barcodeProd)) .findFirst() .orElse(null); @@ -151,15 +163,17 @@ public class DocInterniEditFormViewModel { return; } - List rows = this.getRowsForArticolo(matchedArt, usedBarcode); + loadArticolo(matchedArt, usedBarcode); + } + + private void loadArticolo(DocumentoArtDTO documentoArtDTO, String usedBarcode) { + List rows = this.getRowsForArticolo(documentoArtDTO, usedBarcode); if (rows.size() > 1) { - this.listener.onMultipleRowsFound(rows, matchedArt); + this.listener.onMultipleRowsFound(rows, documentoArtDTO); } else { - this.dispatchRowEdit(rows.get(0), matchedArt.isFlagTracciabilita(), matchedArt.isUntMisDigitale()); + this.dispatchRowEdit(rows.get(0), documentoArtDTO.isFlagTracciabilita(), documentoArtDTO.isUntMisDigitale()); } - - } private List getRowsForArticolo(DocumentoArtDTO articolo, String barcode) { @@ -298,12 +312,15 @@ public class DocInterniEditFormViewModel { } public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { - if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { + if(UtilityBarcode.isCode128(barcodeScanDTO)) { + this.loadArticoloByCodMart(barcodeScanDTO.getStringValue()); + + } else if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { //Cerco tramite etichetta ean peso this.executeEtichettaEanPeso(barcodeScanDTO); } else { - this.loadArticolo(barcodeScanDTO.getStringValue(), null); + this.loadArticoloByBarcode(barcodeScanDTO.getStringValue(), null); } } @@ -311,7 +328,7 @@ public class DocInterniEditFormViewModel { private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO) { try { Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); - this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128()); + this.loadArticoloByBarcode(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128()); } catch (Exception ex) { this.sendError(ex); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java index 29bb8f1c..8e13304f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java @@ -10,7 +10,5 @@ public interface DialogSelectDocRowsComponent { DialogSelectDocRowsComponent create(); } - - void inject(DialogSelectDocRowsView dialogSelectDocInfoView); - -} + void inject(DialogSelectDocRowsView dialogSelectDocRowsView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java new file mode 100644 index 00000000..ee2005fa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java @@ -0,0 +1,90 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import java.math.BigDecimal; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class DialogSelectDocRowsItemListModel { + + private String codMart; + private String descrizione; + private BigDecimal qtaOrd; + private String untMisOrd; + private String barcode; + private boolean isNew; + private T originalModel; + private BindableBoolean checked = new BindableBoolean(false); + + + public String getCodMart() { + return codMart; + } + + public DialogSelectDocRowsItemListModel setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public DialogSelectDocRowsItemListModel setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public DialogSelectDocRowsItemListModel setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public String getUntMisOrd() { + return untMisOrd; + } + + public DialogSelectDocRowsItemListModel setUntMisOrd(String untMisOrd) { + this.untMisOrd = untMisOrd; + return this; + } + + public String getBarcode() { + return barcode; + } + + public DialogSelectDocRowsItemListModel setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public boolean isNew() { + return isNew; + } + + public DialogSelectDocRowsItemListModel setNew(boolean aNew) { + isNew = aNew; + return this; + } + + public T getOriginalModel() { + return originalModel; + } + + public DialogSelectDocRowsItemListModel setOriginalModel(T originalModel) { + this.originalModel = originalModel; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public DialogSelectDocRowsItemListModel setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java index 499da135..445a5cd9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java @@ -1,9 +1,14 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; import dagger.Module; +import dagger.Provides; @Module(subcomponents = DialogSelectDocRowsComponent.class) public class DialogSelectDocRowsModule { + @Provides + DialogSelectDocRowsViewModel providesDialogSelectDocRowsNewViewModel() { + return new DialogSelectDocRowsViewModel(); + } -} +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java index 4da76842..afe801ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java @@ -1,143 +1,131 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; +import android.app.Dialog; +import android.content.Context; import android.content.DialogInterface; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.MutableLiveData; import com.annimon.stream.Stream; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.ravikoradiya.liveadapter.LiveAdapter; +import com.ravikoradiya.liveadapter.Type; import java.util.List; +import javax.inject.Inject; + import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.databinding.DialogChooseRowFromListaDocRowsLayoutBinding; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DialogChooseRowFromListaDocRowsListModel; -import kotlin.Unit; +import it.integry.integrywmsnative.databinding.DialogSelectDocRowsBinding; +import it.integry.integrywmsnative.databinding.DialogSelectDocRowsItemModelBinding; +/** @noinspection rawtypes*/ public class DialogSelectDocRowsView extends BaseDialogFragment { - private final RunnableArgs onRowSelected; - private final List listArts; - private final MutableLiveData> listModels = new MutableLiveData<>(); - private DialogChooseRowFromListaDocRowsLayoutBinding binding; - public MutableLiveData selectedRow = new MutableLiveData<>(); - public static DialogSelectDocRowsView newInstance( - List listArts, - RunnableArgs onDismiss - ) { - return new DialogSelectDocRowsView(listArts, onDismiss); + @Inject + DialogSelectDocRowsViewModel mViewModel; + + private DialogSelectDocRowsBinding mBindings; + private Context mContext; + + private final List> listArts; + private final RunnableArgs onConfirm; + private final Runnable onAbort; + + //Pass here all external parameters + public static DialogSelectDocRowsView newInstance(List> listArts, + RunnableArgs onConfirm, + Runnable onAbort) { + return new DialogSelectDocRowsView(listArts, onConfirm, onAbort); + } + + private DialogSelectDocRowsView(List> listArts, + RunnableArgs onConfirm, + Runnable onAbort) { + super(); + + this.listArts = listArts; + this.onConfirm = onConfirm; + this.onAbort = onAbort; } - private DialogSelectDocRowsView(List listArts, RunnableArgs onDismiss) { - super(); - this.onRowSelected = onDismiss; - this.listArts = listArts; + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogSelectDocRowsBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + + MainApplication.appComponent + .dialogSelectDocRowsNewComponent() + .create() + .inject(this); + + setCancelable(false); + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setCancelable(isCancelable()) + .setPositiveButton(R.string.confirm, null) + .setNegativeButton(R.string.abort, null) + .create(); + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); + return alertDialog; + } + + @Override + public void onShow(DialogInterface dialogInterface) { + super.onShow(dialogInterface); + + this.listArts.get(0).getChecked().set(true); + this.initRecyclerView(); } @Override public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); - if (onRowSelected != null) onRowSelected.run(this.selectedRow.getValue()); + + final DialogSelectDocRowsItemListModel selectedItem = Stream.of(listArts) + .filter(x -> x.getChecked().get()) + .findFirstOrElse(null); + + if(selectedItem != null) + this.onConfirm.run(selectedItem); + else this.onAbort.run(); } - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_row_from_lista_doc_rows_layout, container, false); - binding.setLifecycleOwner(this); - MainApplication - .appComponent - .dialogSelectDocRowsComponent() - .create() - .inject(this); - binding.setView(this); + private void initRecyclerView() { + var itemType = new Type(R.layout.dialog_select_doc_rows__item_model, BR.row); +// itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); + itemType.areContentsTheSame(DialogSelectDocRowsItemListModel::equals); + itemType.onClick(x -> { + resetChecks(); + x.getBinding().getRow().getChecked().set(true); - getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - initView(); - this.refreshList(); - - - binding.positiveButton.setOnClickListener(view -> { - getDialog().dismiss(); + return null; }); - binding.negativeButton.setOnClickListener(view -> { - this.selectedRow.setValue(null); - getDialog().dismiss(); - }); - - - this.onLoadingEnded(); - return binding.getRoot(); + new LiveAdapter(listArts) + .map(DialogSelectDocRowsItemListModel.class, itemType) + .into(this.mBindings.itemList); } - - private void refreshList() { - var list = Stream.of(this.listArts).map(row -> { - DialogChooseRowFromListaDocRowsListModel model = new DialogChooseRowFromListaDocRowsListModel(); - model.setCodMart(row.getCodMart()); - model.setBarcode(row.getCodMart()); - model.setOriginalModel(row); - model.setNew(row.getId() < 1); - model.setDescrizione(row.getDescrizione()); - model.setQtaOrdReadable(row.getQtaCol() + "\n" + row.getUntMis()); - model.getChecked().addOnPropertyChangedCallback(() -> { - this.checkRow(row, model.getChecked().get()); - }); - return model; - }).toList(); - this.listModels.postValue(list); - - } - - private void checkRow(SqlMtbColr row, boolean checked) { - if (checked) { - this.selectedRow.setValue(row); - var models = this.listModels.getValue(); - if (models != null && !models.isEmpty()) { - Stream.of(models).filter(model -> model.getOriginalModel().getId() != row.getId()).forEach(model -> { - model.getChecked().set(false); - }); - } - } else { - var selectedRow = this.selectedRow.getValue(); - if (selectedRow != null && selectedRow.getId() == row.getId()) { - this.selectedRow.setValue(null); - } + + private void resetChecks() { + for (var item : listArts) { + item.getChecked().set(false); } } - private void initView() { - initArrayAdapters(); - } - - private void initArrayAdapters() { - - new LiveAdapter(listModels, getViewLifecycleOwner(), BR.row) - .map(DialogChooseRowFromListaDocRowsListModel.class, R.layout.dialog_choose_row_from_lista_doc_rows__item_model) - .onNoData(noData -> { - binding.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE); - return Unit.INSTANCE; - } - ).into(binding.listaDocRows); - - } - -} +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java new file mode 100644 index 00000000..ad67e9d3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +public class DialogSelectDocRowsViewModel { + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java index ffa07c66..190c296a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java @@ -5,22 +5,14 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; -import android.view.View; -import android.widget.ArrayAdapter; import androidx.databinding.DataBindingUtil; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.core.model.MtbTCol; -import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding; public class InputQuantityToReturnDialog { diff --git a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml deleted file mode 100644 index c738e70c..00000000 --- a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_doc_rows.xml b/app/src/main/res/layout/dialog_select_doc_rows.xml new file mode 100644 index 00000000..bfaad2c6 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_doc_rows.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml b/app/src/main/res/layout/dialog_select_doc_rows__item_model.xml similarity index 63% rename from app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml rename to app/src/main/res/layout/dialog_select_doc_rows__item_model.xml index 4b389296..9a797b51 100644 --- a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml +++ b/app/src/main/res/layout/dialog_select_doc_rows__item_model.xml @@ -1,55 +1,54 @@ - + - - - + type="it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel" /> + app:backgroundTintResID="@{row.checked.get() ? R.color.bg_checked_layout : android.R.color.transparent}"> - + android:layout_marginStart="4dp" + android:orientation="vertical"> - - + + + - + android:layout_centerVertical="true" + android:layout_marginStart="8dp" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" + android:gravity="center_horizontal" + android:orientation="vertical" + android:padding="6dp"> + + tools:text="280.45" /> - + + + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 917731b3..d5f742f7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -213,6 +213,7 @@ Il barcode scansionato non ha fornito alcun risultato + Il codice articolo non ha fornito alcun risultato Il barcode scansionato ha fornito multipli risultati Nessun tipo documento selezionato diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41b33558..885a5285 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -217,6 +217,7 @@ The scanned label has already been used The scanned barcode did not produce any results + The item code did not produce any results Before continuing open new LU The scanned barcode produced multiple results From 5c3f8d8717dd0bb714cc3b6bd7a9dfdafc8591c8 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Tue, 28 Mar 2023 13:23:02 +0200 Subject: [PATCH 04/13] [CARELLI - Ordini Acquisto] risolto problema barcode disabilitato dopo selezione articolo --- .../PVOrdineAcquistoEditActivity.java | 2 +- .../view/dialogs/DialogAskActionView.java | 24 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index d2c37f17..32f17940 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -165,7 +165,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi () -> { this.deleteArticolo(articoloOrdine); BarcodeManager.enable(); - }).show(getSupportFragmentManager(), "tag"); + }, BarcodeManager::enable).show(getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java index 05535a7d..50dc91da 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java @@ -1,6 +1,7 @@ package it.integry.integrywmsnative.view.dialogs; import android.app.Dialog; +import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; @@ -19,14 +20,19 @@ public class DialogAskActionView extends BaseDialogFragment { private final Runnable mOnEditSelected; private final Runnable mOnDeleteSelected; + private boolean runOnDismissAction = true; + private final Runnable mOnDismiss; - - public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete) { - return new DialogAskActionView(title, subtitle, onEdit, onDelete); + public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete, Runnable onDismiss) { + return new DialogAskActionView(title, subtitle, onEdit, onDelete, onDismiss); } - private DialogAskActionView(String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected) { + public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete) { + return newInstance(title, subtitle, onEdit, onDelete, null); + } + + private DialogAskActionView(String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected, Runnable onDismiss) { super(); mTitle = title; @@ -34,6 +40,7 @@ public class DialogAskActionView extends BaseDialogFragment { mOnEditSelected = onEditSelected; mOnDeleteSelected = onDeleteSelected; + mOnDismiss = onDismiss; } @NonNull @@ -53,14 +60,23 @@ public class DialogAskActionView extends BaseDialogFragment { } public void onEdit() { + runOnDismissAction = false; dismiss(); mOnEditSelected.run(); } public void onDelete() { + runOnDismissAction = false; dismiss(); mOnDeleteSelected.run(); } + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + if (runOnDismissAction && mOnDismiss != null) { + mOnDismiss.run(); + } + super.onDismiss(dialog); + } } From 68007ebc8ed49bb05c2d150c732d2aa7eab550a6 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 28 Mar 2023 16:14:36 +0200 Subject: [PATCH 05/13] Utilitzzati i live data nella lista dei documenti caricati da sqlite --- .../core/data_store/db/dao/MtbColtDao.java | 3 +- .../db/repository/MtbColtRepository.java | 4 +- .../datasource/SqlMtbColtDataSource.java | 8 +-- .../rest/consumers/DocumentRESTConsumer.java | 2 +- .../DocInterniFragment.java | 11 +--- .../DocInterniViewModel.java | 56 ++++++++++--------- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java index ab0daf24..e8e71e1b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.data_store.db.dao; +import androidx.lifecycle.LiveData; import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; @@ -33,7 +34,7 @@ public interface MtbColtDao { " AND ( mtb_colt.data_doc = :dataDoc OR (mtb_colt.data_doc is null and :dataDoc is null)) " + " AND ( mtb_colt.num_doc = :numDoc OR (mtb_colt.num_doc is null and :numDoc is null)) " + " and cod_dtip is null group by mtb_colt.id") - List getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc); + LiveData> getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc); @Query("SELECT ifnull(MAX(num_collo),0) +1 as num_collo from mtb_colt") Integer getNextNumCollo(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java index abf4d080..a4ad2b05 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java @@ -1,5 +1,7 @@ package it.integry.integrywmsnative.core.data_store.db.repository; +import androidx.lifecycle.LiveData; + import java.util.Date; import java.util.List; @@ -17,7 +19,7 @@ public interface MtbColtRepository { void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs onError); - void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs> onSuccess, RunnableArgs onError); + LiveData> getDocuments(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc); void getNextNumCollo(RunnableArgs onSuccess, RunnableArgs onError); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java index b2eaac80..24f7cc43 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java @@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_store.db.repository.datasource; import android.os.Handler; +import androidx.lifecycle.LiveData; + import java.util.Date; import java.util.List; import java.util.concurrent.ExecutorService; @@ -50,10 +52,8 @@ public class SqlMtbColtDataSource extends BaseDataSource implements MtbColtRepos } @Override - public void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs> onSuccess, RunnableArgs onError) { - execute(() -> mMtbColtDao.getLocalDocumentsByCodDtip(codDtip, codAnag, codVdes, dataDoc, numDoc), - onSuccess, - onError); + public LiveData> getDocuments(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc) { + return mMtbColtDao.getLocalDocumentsByCodDtip(codDtip, codAnag, codVdes, dataDoc, numDoc); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/DocumentRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/DocumentRESTConsumer.java index 12dee055..92740653 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/DocumentRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/DocumentRESTConsumer.java @@ -53,7 +53,7 @@ public class DocumentRESTConsumer extends _BaseRESTConsumer { - public void loadDocumentoAvailableArts(String codDtip, String codMgrp, String codAnagForn, RunnableArgs onComplete, RunnableArgs onFailed) { + public void loadDocumentAvailableArts(String codDtip, String codMgrp, String codAnagForn, RunnableArgs onComplete, RunnableArgs onFailed) { var inventarioRESTConsumerService = RESTBuilder.getService(DocumentiRESTConsumerService.class); inventarioRESTConsumerService.retrieveArts(codDtip, codMgrp, codAnagForn) .enqueue(new Callback<>() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java index 9984d422..b225c9ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java @@ -85,8 +85,6 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, mBinding.setView(this); mBinding.setViewModel(mViewModel); - mViewModel.mtbGrup.observe(getViewLifecycleOwner(), mtbGrup -> mViewModel.fetchProducts()); - mViewModel.dtbTipi.observe(getViewLifecycleOwner(), dtbTipi -> mViewModel.fetchDocuments()); this.initRecyclerView(); return mBinding.getRoot(); @@ -100,7 +98,8 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, if (!this.mViewModel.hasDocDetails()) { mViewModel.init(); } else { - this.mViewModel.fetchDocuments(); + this.onLoadingStarted(); + this.mViewModel.fetchDocuments(this::onLoadingEnded); } } @@ -146,7 +145,6 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, } else { mBinding.docContainer.setVisibility(View.GONE); } - } @Override @@ -167,12 +165,9 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, .show(requireActivity().getSupportFragmentManager(), "tag"); } - public void showInfoArtDialog() { - - } - private void initRecyclerView() { this.mViewModel.getDocsList().observe(getViewLifecycleOwner(), this::refreshList); + DocInterniListAdapter docInterniListAdapter = new DocInterniListAdapter(this.requireActivity(), this.mDocInterniMutableData); docInterniListAdapter.setEmptyView(this.mBinding.docInterniEmptyView); this.mBinding.docInterniMainList.setAdapter(docInterniListAdapter); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java index 579890e1..f686a216 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java @@ -1,8 +1,8 @@ package it.integry.integrywmsnative.gest.contab_doc_interni; +import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -35,7 +35,7 @@ public class DocInterniViewModel { private boolean docsFetched = true; private int nextNumCollo = 0; private List availableArts; - private final MutableLiveData> mDocsList = new MutableLiveData<>(); + private MutableLiveData> mDocsList = new MutableLiveData<>(); public final MutableLiveData dtbTipi = new MutableLiveData<>(); public final MutableLiveData mtbGrup = new MutableLiveData<>(); @@ -52,8 +52,6 @@ public class DocInterniViewModel { this.docInterniRESTConsumer = docInterniRESTConsumer; this.documentRepository = documentRepository; this.documentRESTConsumer = documentRESTConsumer; - - this.mDocsList.setValue(new ArrayList<>()); } @@ -83,12 +81,11 @@ public class DocInterniViewModel { return this; } - public MutableLiveData> getDocsList() { + public LiveData> getDocsList() { return mDocsList; } public void setSelectedDocDetails(DialogSelectDocInfoResponseDTO selection) { - this.fornitore.postValue(selection.getFornitore()); this.dtbTipi.postValue(selection.getTipoDoc()); @@ -96,13 +93,15 @@ public class DocInterniViewModel { this.dataDoc.postValue(selection.getDataDoc()); this.numDoc.postValue(selection.getNumDoc() != null ? selection.getNumDoc().toString() : null); this.note.postValue(selection.getNote()); + + this.sendOnLoadingStarted(); + fetchProducts(() -> { + fetchDocuments(this::sendOnLoadingEnded); + }); } - public void fetchProducts() { - this.productsFetched = false; - this.sendOnLoadingStarted(); - - documentRESTConsumer.loadDocumentoAvailableArts( + public void fetchProducts(Runnable onComplete) { + documentRESTConsumer.loadDocumentAvailableArts( this.getCodDtip(), this.getCodMgrp(), this.getCodAnagForn(), @@ -111,30 +110,33 @@ public class DocInterniViewModel { this.availableArts = data.getArts(); this.artsSize.set(this.availableArts.size()); - if (this.docsFetched) - this.sendOnLoadingEnded(); - + onComplete.run(); }, this::sendError); } - public void fetchDocuments() { - this.docsFetched = false; - this.sendOnLoadingStarted(); - String codAnag = null, codVdes = null; + public void fetchDocuments(Runnable onComplete) { + String codAnag = null; + String codVdes = null; + FornitoreDTO fornitore = this.fornitore.getValue(); if (fornitore != null) { codAnag = fornitore.getCodAnag(); codVdes = fornitore.getCodVdes(); } - documentRepository.getLocalDocumentsByCodDtip(this.getCodDtip(), codAnag, codVdes, dataDoc.getValue(), numDoc.getValue(), list -> { - documentRepository.getNextNumCollo(nextNumCollo -> { - this.mDocsList.postValue(list); - this.setNextNumCollo(nextNumCollo); - this.docsFetched = true; - if (this.productsFetched) { - this.sendOnLoadingEnded(); - } - }, this::sendError); + + + var docsList = documentRepository.getDocuments(this.getCodDtip(), + codAnag, codVdes, dataDoc.getValue(), numDoc.getValue()); + + docsList.observeForever(data -> { + this.mDocsList.postValue(data); + }); + + documentRepository.getNextNumCollo(nextNumCollo -> { + this.setNextNumCollo(nextNumCollo); + this.docsFetched = true; + + onComplete.run(); }, this::sendError); } From 79c4bdad4800fe88f84fb9bf83eb829d8629c038 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 28 Mar 2023 16:24:03 +0200 Subject: [PATCH 06/13] Aggiunta causale nella lista degli inventari --- .idea/deploymentTargetDropDown.xml | 17 ++++++++++++++++ ...ent_elenco_inventario_list_single_item.xml | 20 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 .idea/deploymentTargetDropDown.xml diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 00000000..a57d2db4 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml b/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml index 166fc407..32906207 100644 --- a/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml +++ b/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml @@ -72,8 +72,8 @@ + + + @@ -90,7 +106,7 @@ style="@android:style/TextAppearance.Small" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_below="@id/badge1" + android:layout_below="@id/causale" android:layout_marginTop="4dp" android:layout_marginEnd="4dp" android:layout_toStartOf="@id/zona" From 28501c55093e51593b73f7cc5ee0620784b7bfaa Mon Sep 17 00:00:00 2001 From: ValerioC Date: Tue, 28 Mar 2023 19:17:08 +0200 Subject: [PATCH 07/13] [CARELLI - Ordini Acquisto] Gestita selezione articolo se il barcode letto restituisce molteplici articoli --- .idea/deploymentTargetDropDown.xml | 17 --- .../MainApplicationComponent.java | 10 +- .../PVOrdiniAcquistoRESTConsumer.java | 5 - .../PVOrdineAcquistoEditActivity.java | 36 ++++- .../PVOrdineAcquistoEditViewModel.java | 99 ++++++++---- .../DialogEditArticoloComponent.java | 2 +- .../DialogEditArticoloModule.java | 2 +- .../DialogEditArticoloView.java | 2 +- .../DialogEditArticoloViewModel.java | 2 +- .../DialogSelectArtToOrderComponent.java | 14 ++ .../DialogSelectArtToOrderItemListModel.java | 101 +++++++++++++ .../DialogSelectArtToOrderModule.java | 14 ++ .../DialogSelectArtToOrderView.java | 130 ++++++++++++++++ .../DialogSelectArtToOrderViewModel.java | 5 + .../res/layout/dialog_pv_edit_articolo.xml | 2 +- .../res/layout/dialog_select_art_to_order.xml | 44 ++++++ ...dialog_select_art_to_order__item_model.xml | 143 ++++++++++++++++++ app/src/main/res/values-it/strings.xml | 5 +- app/src/main/res/values/strings.xml | 1 + 19 files changed, 568 insertions(+), 66 deletions(-) delete mode 100644 .idea/deploymentTargetDropDown.xml rename app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/{ => edit_articolo}/DialogEditArticoloComponent.java (93%) rename app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/{ => edit_articolo}/DialogEditArticoloModule.java (95%) rename app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/{ => edit_articolo}/DialogEditArticoloView.java (99%) rename app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/{ => edit_articolo}/DialogEditArticoloViewModel.java (99%) create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderComponent.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderItemListModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderModule.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderView.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderViewModel.java create mode 100644 app/src/main/res/layout/dialog_select_art_to_order.xml create mode 100644 app/src/main/res/layout/dialog_select_art_to_order__item_model.xml diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index a57d2db4..00000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 66f54154..0f3f0e8f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -67,8 +67,10 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamento import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloComponent; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloModule; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloComponent; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloModule; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderComponent; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderModule; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoComponent; @@ -175,7 +177,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DialogChooseArtsFromMtbAartListModule.class, MainSettingsModule.class, DialogInfoSituazioneArticoloModule.class, - DialogSelectDocRowsModule.class + DialogSelectArtToOrderModule.class }) public interface MainApplicationComponent { @@ -295,6 +297,8 @@ public interface MainApplicationComponent { DialogSelectDocRowsComponent.Factory dialogSelectDocRowsNewComponent(); + DialogSelectArtToOrderComponent.Factory dialogSelectArtToOrderNewComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java index 347fbda3..16459e4d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java @@ -12,7 +12,6 @@ import javax.inject.Singleton; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.view_model.OrdiniAcquistoGrigliaDTO; -import it.integry.integrywmsnative.core.exception.InvalidProductOrderedException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; @@ -91,10 +90,6 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { int i = 0; for (ArticoloOrdine art : articoli) { i++; - if (art.isInvalid()) { - onFailed.run(new InvalidProductOrderedException(art.getCodMart())); - return; - } artRows.add(convertArtToDTO(art, i)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index 32f17940..172f84f3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -13,9 +13,11 @@ import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; +import com.annimon.stream.Stream; import com.ravikoradiya.liveadapter.LiveAdapter; import com.ravikoradiya.liveadapter.Type; +import java.math.BigDecimal; import java.util.List; import javax.inject.Inject; @@ -36,7 +38,9 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding; import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloView; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderItemListModel; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderView; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.DialogAskActionView; @@ -246,4 +250,34 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia(); } + @Override + public void confirmExportInvalidProducts(Runnable onConfirm) { + DialogSimpleMessageView.makeInfoDialog(getText(R.string.warning).toString(), + Html.fromHtml(getResources().getString(R.string.confirm_export_invalid_product)), + null, + onConfirm + , + this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExportInvalidProducts"); + } + + @Override + public void chooseArtFromList(List listArticoli, RunnableArgs onArtChosen) { + List> dataset = + Stream.of(listArticoli) + .map(x -> new DialogSelectArtToOrderItemListModel<>() + .setCodMart(x.getCodMart()) + .setBarcode(x.getSelectedBarcode()) + .setOriginalModel(x) + .setNew(mViewModel.isArtInOrder(x)) + .setDescrizione(x.getDescrizione()) + .setQtaOrd(BigDecimal.valueOf(x.getQtaOrd())) + .setCodAlis(x.getCodAlis()) + .setUntMisOrd(x.getUntMis())) + .toList(); + + DialogSelectArtToOrderView.newInstance(dataset, + data -> onArtChosen.run((ArticoloOrdinabileDTO) data.getOriginalModel()), + this::onLoadingEnded) + .show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew"); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java index d5f75838..5fc16190 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java @@ -161,8 +161,8 @@ public class PVOrdineAcquistoEditViewModel { try { this.sendOnLoadingStarted(); - ArticoloOrdinabileDTO articoloDTO = getArticoloFromBarcode(barcode); - if (articoloDTO == null) { + List listArticoli = matchArticoliForBarcode(barcode); + if (listArticoli == null || listArticoli.isEmpty()) { if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) { this.mListener.confirmCheckForUnlistedProduct(barcode); return; @@ -170,11 +170,20 @@ public class PVOrdineAcquistoEditViewModel { throw new NoResultFromBarcodeException(barcode); } } - this.addArticoloToOrdine( - articoloDTO, - this::sendOnLoadingEnded, - this::sendError - ); + if (listArticoli.size() == 1) { + this.addArticoloToOrdine( + listArticoli.get(0), + this::sendOnLoadingEnded, + this::sendError + ); + } else { + this.mListener.chooseArtFromList(listArticoli, (art) -> { + this.addArticoloToOrdine( + art, + this::sendOnLoadingEnded, + this::sendError); + }); + } } catch (Exception e) { this.sendError(e); BarcodeManager.enable(); @@ -248,22 +257,20 @@ public class PVOrdineAcquistoEditViewModel { return articolo; } - public ArticoloOrdinabileDTO getArticoloFromBarcode(String barcode) throws NoArtsInGridException { + public List matchArticoliForBarcode(String barcode) throws NoArtsInGridException, MultipleResultFromBarcodeException, NoResultFromBarcodeException { if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) { throw new NoArtsInGridException(); } - ArticoloOrdinabileDTO art = Stream.of(mArticoliGriglia).filter(articolo -> + List articoli = Stream.of(mArticoliGriglia).filter(articolo -> articolo.getCodMart().equalsIgnoreCase(barcode) || articolo.getBarcode().contains(barcode) || articolo.getBarcode().contains(StringUtils.leftPad(barcode, 13, "0")) - ) + ).map((art) -> art.setSelectedBarcode(barcode)) // .sortBy(x -> x.getSortByBarcodeCondition(barcode)) - .findFirst().orElse(null); - if (art != null) { - art.setSelectedBarcode(barcode); - } - return art; + .toList(); + + return articoli; } @@ -318,19 +325,30 @@ public class PVOrdineAcquistoEditViewModel { this.sendError(new ExpiredProductListException()); return; } - if (mArticoli.getValue() == null) { + if (mArticoli.getValue() == null || mArticoli.getValue().isEmpty()) { this.sendError(new EmptyOrderException()); return; } String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> { - mOrdineRepository.updateOrder(ordine, ord -> { - this.sendOnLoadingEnded(); - onComplete.run(); + Runnable saveOrdine = () -> { + pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> { + + mOrdineRepository.updateOrder(ordine, ord -> { + this.sendOnLoadingEnded(); + onComplete.run(); + }, this::sendError); + }, this::sendError); + }; + + if (Stream.of(mArticoli.getValue()).anyMatch(ArticoloOrdine::isInvalid)) { + + this.mListener.confirmExportInvalidProducts(saveOrdine); + return; + } + saveOrdine.run(); - }, this::sendError); } private void sendOnItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess) { @@ -353,12 +371,26 @@ public class PVOrdineAcquistoEditViewModel { this.sendOnLoadingStarted(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> { + + RunnableArgs addArtToOrder = (articolo) -> { + ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null); + if (existingArt != null) { + List barcodes = existingArt.getBarcode(); + barcodes.addAll(articolo.getBarcode()); + barcodes = Stream.of(barcodes).distinct().toList(); + existingArt.setBarcode(barcodes); + } else { + mArticoliGriglia.add(articolo); + } + this.processBarcode(barcode); + }; + if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) { this.sendError(new ArtNotFoundInGridException()); return; } if (grigliaDTO.getArticoli().size() > 1) { - this.sendError(new MultipleResultFromBarcodeException()); + this.mListener.chooseArtFromList(grigliaDTO.getArticoli(), addArtToOrder); return; } ArticoloOrdinabileDTO newArt = Stream.of(grigliaDTO.getArticoli()).findFirstOrElse(null); @@ -367,22 +399,19 @@ public class PVOrdineAcquistoEditViewModel { return; } - ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(newArt.getCodMart())).findFirstOrElse(null); - if (existingArt != null) { - List barcodes = existingArt.getBarcode(); - barcodes.addAll(newArt.getBarcode()); - barcodes = Stream.of(barcodes).distinct().toList(); - existingArt.setBarcode(barcodes); - } else { - mArticoliGriglia.add(newArt); - } - - this.processBarcode(barcode); + addArtToOrder.run(newArt); }, this::sendError); } + public boolean isArtInOrder(ArticoloOrdinabileDTO articolo) { + if (mArticoli.getValue() == null || mArticoli.getValue().isEmpty()) { + return false; + } + return Stream.of(mArticoli.getValue()).noneMatch(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())); + } + public interface Listener extends ILoadingListener { void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess); @@ -393,6 +422,10 @@ public class PVOrdineAcquistoEditViewModel { void onError(Exception ex); void confirmCheckForUnlistedProduct(String barcode); + + void confirmExportInvalidProducts(Runnable onConfirm); + + void chooseArtFromList(List listArticoli, RunnableArgs onArtChosen); } public PVOrdineAcquistoEditViewModel setListener(Listener listener) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloComponent.java similarity index 93% rename from app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloComponent.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloComponent.java index 66251c97..140a4491 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloComponent.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog; +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo; import dagger.Subcomponent; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloModule.java similarity index 95% rename from app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloModule.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloModule.java index 200bc6e3..944c6608 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloModule.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog; +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo; import dagger.Module; import dagger.Provides; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloView.java similarity index 99% rename from app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloView.java index d38fdb3a..84df33c9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloView.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog; +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo; import android.content.DialogInterface; import android.graphics.Color; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloViewModel.java similarity index 99% rename from app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloViewModel.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloViewModel.java index ad04117d..09e26fe1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/edit_articolo/DialogEditArticoloViewModel.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog; +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo; import java.math.BigDecimal; import java.math.RoundingMode; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderComponent.java new file mode 100644 index 00000000..e4cf8227 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogSelectArtToOrderComponent { + + @Subcomponent.Factory + interface Factory { + DialogSelectArtToOrderComponent create(); + } + + void inject(DialogSelectArtToOrderView DialogSelectArtView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderItemListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderItemListModel.java new file mode 100644 index 00000000..0ab6e628 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderItemListModel.java @@ -0,0 +1,101 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList; + +import java.math.BigDecimal; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class DialogSelectArtToOrderItemListModel { + + private String codMart; + private String descrizione; + private BigDecimal qtaOrd; + private String untMisOrd; + private String barcode; + + private String codAlis; + private boolean isNew; + private T originalModel; + private BindableBoolean checked = new BindableBoolean(false); + + + public String getCodMart() { + return codMart; + } + + public DialogSelectArtToOrderItemListModel setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public DialogSelectArtToOrderItemListModel setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public DialogSelectArtToOrderItemListModel setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public String getUntMisOrd() { + return untMisOrd; + } + + public DialogSelectArtToOrderItemListModel setUntMisOrd(String untMisOrd) { + this.untMisOrd = untMisOrd; + return this; + } + + public String getBarcode() { + return barcode; + } + + public DialogSelectArtToOrderItemListModel setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public boolean isNew() { + return isNew; + } + + public DialogSelectArtToOrderItemListModel setNew(boolean aNew) { + isNew = aNew; + return this; + } + + public T getOriginalModel() { + return originalModel; + } + + public DialogSelectArtToOrderItemListModel setOriginalModel(T originalModel) { + this.originalModel = originalModel; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public DialogSelectArtToOrderItemListModel setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public String getCodAlis() { + return codAlis; + } + + public DialogSelectArtToOrderItemListModel setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderModule.java new file mode 100644 index 00000000..63354e2f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogSelectArtToOrderComponent.class) +public class DialogSelectArtToOrderModule { + + @Provides + DialogSelectArtToOrderViewModel providesDialogSelectArtNewViewModel() { + return new DialogSelectArtToOrderViewModel(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderView.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderView.java new file mode 100644 index 00000000..44aae64a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderView.java @@ -0,0 +1,130 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.annimon.stream.Stream; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.ravikoradiya.liveadapter.LiveAdapter; +import com.ravikoradiya.liveadapter.Type; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.DialogSelectArtToOrderBinding; +import it.integry.integrywmsnative.databinding.DialogSelectArtToOrderItemModelBinding; + +/** + * @noinspection rawtypes + */ +public class DialogSelectArtToOrderView extends BaseDialogFragment { + + + @Inject + DialogSelectArtToOrderViewModel mViewModel; + + private DialogSelectArtToOrderBinding mBindings; + private Context mContext; + + private final List> listArts; + private final RunnableArgs onConfirm; + private final Runnable onAbort; + + //Pass here all external parameters + public static DialogSelectArtToOrderView newInstance(List> listArts, + RunnableArgs onConfirm, + Runnable onAbort) { + return new DialogSelectArtToOrderView(listArts, onConfirm, onAbort); + } + + private DialogSelectArtToOrderView(List> listArts, + RunnableArgs onConfirm, + Runnable onAbort) { + super(); + + this.listArts = listArts; + this.onConfirm = onConfirm; + this.onAbort = onAbort; + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogSelectArtToOrderBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + + MainApplication.appComponent + .dialogSelectArtToOrderNewComponent() + .create() + .inject(this); + + setCancelable(false); + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setCancelable(isCancelable()) + .setPositiveButton(R.string.confirm, (dialog, which) -> { + final DialogSelectArtToOrderItemListModel selectedItem = Stream.of(listArts) + .filter(x -> x.getChecked().get()) + .findFirstOrElse(null); + + if (selectedItem != null) + this.onConfirm.run(selectedItem); + }) + .setNegativeButton(R.string.abort, (dialog, which) -> { + if (this.onAbort != null) this.onAbort.run(); + }) + .create(); + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); + return alertDialog; + } + + @Override + public void onShow(DialogInterface dialogInterface) { + super.onShow(dialogInterface); + + this.listArts.get(0).getChecked().set(true); + this.initRecyclerView(); + } + + + private void initRecyclerView() { + var itemType = new Type(R.layout.dialog_select_art_to_order__item_model, BR.row); +// itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); + itemType.areContentsTheSame(DialogSelectArtToOrderItemListModel::equals); + itemType.onClick(x -> { + resetChecks(); + x.getBinding().getRow().getChecked().set(true); + + return null; + }); + + new LiveAdapter(listArts) + .map(DialogSelectArtToOrderItemListModel.class, itemType) + .into(this.mBindings.itemList); + } + + private void resetChecks() { + for (var item : listArts) { + item.getChecked().set(false); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderViewModel.java new file mode 100644 index 00000000..4964d71f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/selectArtFromList/DialogSelectArtToOrderViewModel.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList; + +public class DialogSelectArtToOrderViewModel { + +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_pv_edit_articolo.xml b/app/src/main/res/layout/dialog_pv_edit_articolo.xml index 8b5326da..a0cdec6c 100644 --- a/app/src/main/res/layout/dialog_pv_edit_articolo.xml +++ b/app/src/main/res/layout/dialog_pv_edit_articolo.xml @@ -16,7 +16,7 @@ + type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloView" /> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_art_to_order__item_model.xml b/app/src/main/res/layout/dialog_select_art_to_order__item_model.xml new file mode 100644 index 00000000..f40b1f05 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_art_to_order__item_model.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 802aaace..ec5ef2bd 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -214,7 +214,7 @@ Il barcode scansionato non ha fornito alcun risultato Il codice articolo non ha fornito alcun risultato - Il barcode scansionato ha fornito multipli risultati + Il barcode scansionato ha fornito molteplici risultati Nessun tipo documento selezionato Filtro articoli applicato @@ -447,6 +447,7 @@ Quantità massima superata Vuoi cotinuare comunque con il salvataggio?]]>\ Vuoi provare a cercarlo comunque nel sistema?]]> - L\'ordine presenta un articolo non valido per la lista selezionata! + L\'ordine presenta uno o più articoli non validi per la lista selezionata! + Sei sicuro di voler continuare?]]> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 885a5285..9072d54c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -455,5 +455,6 @@ Do you wish to continue?]]> Do you want to search for it regardless?]]> One or more ordered products are not available in the selected list! + Do you wish to continue?]]> From 16cb685bb33aa1195bba6db088667bc924baecf0 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 28 Mar 2023 19:20:44 +0200 Subject: [PATCH 08/13] =?UTF-8?q?Ordinate=20le=20righe=20documento=20in=20?= =?UTF-8?q?descending=20in=20editazione=20di=20un=20documento=20interno.?= =?UTF-8?q?=20Implementato=20dialog=20custom=20per=20gli=20articoli=20disp?= =?UTF-8?q?onibili=20all'inventario=20/=20documenti=20interni=20con=20la?= =?UTF-8?q?=20possibilit=C3=A0=20di=20specificare=20se=20l'articolo=20?= =?UTF-8?q?=C3=A8=20stato=20gi=C3=A0=20aggiunto.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/deploymentTargetDropDown.xml | 17 ---- .../core/data_store/db/dao/MtbColrDao.java | 2 +- .../edit_form/DocInterniEditFormActivity.java | 26 ++++-- .../inventario/ElencoInventariViewModel.java | 5 +- .../picking/PickingInventarioActivity.java | 17 +++- .../DialogAvailableItemListModel.java | 44 +++++++++ .../DialogAvailableItemsView.java | 65 +++++++++++++ .../DialogChooseArtFromListaArtsAdapter.java | 2 +- .../DialogChooseArtFromListaArtsView.java | 10 +- ...ialogChooseArtFromListaMtbColrAdapter.java | 2 +- .../DialogChooseArtFromListaMtbColrView.java | 10 +- .../ic_verified_account__green_800.xml | 12 +++ ...vailable_intventario_items__item_model.xml | 93 +++++++++++++++++++ .../dialog_choose_art_from_lista_art.xml | 4 +- ..._choose_art_from_lista_art__item_model.xml | 12 +-- 15 files changed, 268 insertions(+), 53 deletions(-) delete mode 100644 .idea/deploymentTargetDropDown.xml create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemListModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemsView.java create mode 100644 app/src/main/res/drawable/ic_verified_account__green_800.xml create mode 100644 app/src/main/res/layout/dialog_available_intventario_items__item_model.xml diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index a57d2db4..00000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java index f5d16abf..dcc17409 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java @@ -24,6 +24,6 @@ public interface MtbColrDao { @Delete void delete(SqlMtbColr mtbColr); - @Query("SELECT * from mtb_colr where id_collo = :idDocument") + @Query("SELECT * FROM mtb_colr WHERE id_collo = :idDocument ORDER BY id DESC") List getDocumentRows(long idDocument); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index e58bd7b6..a1ab5ea4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -47,8 +47,9 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.Document import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalView; import it.integry.integrywmsnative.view.dialogs.DialogCommon; +import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel; +import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemsView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; -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; @@ -231,7 +232,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita, boolean isUntMisDig) { - this.onLoadingStarted(); MtbAart mtbAart = new MtbAart(); mtbAart.setBarCode(row.getCodBarre()); mtbAart.setDiacod(row.getCodBarre()); @@ -280,7 +280,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter this.onLoadingStarted(); this.viewModel.saveRow(row, resultDTO); }) - .setOnAbort(this::onLoadingEnded) + .setOnAbort(() -> {}) .show(getSupportFragmentManager(), "tag"); } @@ -370,16 +370,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter public void showInfoArtDialog() { var listaMtbAart = Stream.of(this.viewModel.getProductsList()) - .map(x -> new MtbAart() + .map(x -> new DialogAvailableItemListModel() .setCodMart(x.getCodMart()) - .setUntMis(x.getUntMis()) - .setDescrizione(x.getDescrizione()) - .setDescrizioneEstesa(x.getDescrizione()) - .setQtaCnf(x.getQtaCnf())) + .setDescrizioneEstesa(x.getDescrizione())) .toList(); - new DialogChooseArtFromListaArtsView(false, listaMtbAart, null) - .show(getSupportFragmentManager(), "tag"); + for (var documentRow : viewModel.getDocumentRows()) { + var codMart = documentRow.getCodMart(); + + Stream.of(listaMtbAart) + .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) + .forEach(x -> x.setAggiunto(true)); + } + + + new DialogAvailableItemsView(listaMtbAart) + .show(getSupportFragmentManager(), "DialogAvailableInventarioItemsView"); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java index 9d0463d1..26587640 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java @@ -2,6 +2,8 @@ package it.integry.integrywmsnative.gest.inventario; import androidx.lifecycle.LiveData; +import com.annimon.stream.Stream; + import java.util.List; import java.util.Objects; @@ -65,8 +67,7 @@ public class ElencoInventariViewModel { this.sendCreateInventarioRequest(inventoryId, zone); } else { - var matchedInventory = getInventarioList().getValue() - .stream() + var matchedInventory = Stream.of(getInventarioList().getValue()) .filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone) && !x.isSyncronized()) .findFirst() diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java index 21aa5c88..a399dabb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java @@ -40,7 +40,8 @@ import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_ import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.view.dialogs.DialogConsts; -import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView; +import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel; +import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemsView; 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; @@ -238,9 +239,19 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn public void showAvailableArts() { var listaMtbAart = Stream.of(this.mViewModel.getAvailableArts()) .map(InventarioArtDTO::toMtbAart) + .map(DialogAvailableItemListModel::fromMtbAart) .toList(); - new DialogChooseArtFromListaArtsView(false, listaMtbAart, null) - .show(getSupportFragmentManager(), "tag"); + for (var inventoryItem : mViewModel.currentInventarioRows.getValue()) { + var codMart = inventoryItem.getCodMart(); + + Stream.of(listaMtbAart) + .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) + .forEach(x -> x.setAggiunto(true)); + } + + + new DialogAvailableItemsView(listaMtbAart) + .show(getSupportFragmentManager(), "DialogAvailableInventarioItemsView"); } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemListModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemListModel.java new file mode 100644 index 00000000..f8b6220b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemListModel.java @@ -0,0 +1,44 @@ +package it.integry.integrywmsnative.view.dialogs.available_items; + +import it.integry.integrywmsnative.core.model.MtbAart; + +public class DialogAvailableItemListModel { + + private String codMart; + private String descrizioneEstesa; + + private boolean aggiunto; + + public boolean isAggiunto() { + return aggiunto; + } + + public DialogAvailableItemListModel setAggiunto(boolean aggiunto) { + this.aggiunto = aggiunto; + return this; + } + + public String getCodMart() { + return codMart; + } + + public DialogAvailableItemListModel setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public DialogAvailableItemListModel setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public static DialogAvailableItemListModel fromMtbAart(MtbAart mtbAart) { + return new DialogAvailableItemListModel() + .setCodMart(mtbAart.getCodMart()) + .setDescrizioneEstesa(mtbAart.getDescrizioneEstesa()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemsView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemsView.java new file mode 100644 index 00000000..5777b43a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/available_items/DialogAvailableItemsView.java @@ -0,0 +1,65 @@ +package it.integry.integrywmsnative.view.dialogs.available_items; + +import android.app.Dialog; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.List; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; + +public class DialogAvailableItemsView extends BaseDialogFragment { + + private final List mListaArts; + + + public DialogAvailableItemsView(List listaArts) { + super(); + this.mListaArts = listaArts; + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + var binding = DialogChooseArtFromListaArtBinding.inflate(LayoutInflater.from(requireContext())); + + binding.titleText.setText(R.string.articoli_disponibili); + + initRecyclerView(binding, mListaArts); + + var alertDialog = new MaterialAlertDialogBuilder(requireContext()) + .setView(binding.getRoot()) + .setCancelable(false) + .create(); + + alertDialog.setCanceledOnTouchOutside(false); + alertDialog.setOnShowListener(this); + return alertDialog; + } + + private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { + binding.itemsList.setHasFixedSize(true); + + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider)); + binding.itemsList.addItemDecoration(itemDecorator); + + + new LiveAdapter(dataset, BR.item) + .map(DialogAvailableItemListModel.class, R.layout.dialog_available_intventario_items__item_model) + .into(binding.itemsList); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java index 6fa91617..c522e3eb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java @@ -31,7 +31,7 @@ public class DialogChooseArtFromListaArtsAdapter extends RecyclerView.Adapter dataset) { - binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); - binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); - binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(requireContext())); + binding.itemsList.setNestedScrollingEnabled(false); + binding.itemsList.setHasFixedSize(true); + binding.itemsList.setLayoutManager(new LinearLayoutManager(requireContext())); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider)); - binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); + binding.itemsList.addItemDecoration(itemDecorator); IRecyclerItemClicked onItemClickListener = (item, position) -> { if (mOnItemChoosed != null) { @@ -77,7 +77,7 @@ public class DialogChooseArtFromListaArtsView extends BaseDialogFragment { DialogChooseArtFromListaArtsAdapter mCurrentAdapter = new DialogChooseArtFromListaArtsAdapter( requireContext(), dataset, this.mEnableSelection ? onItemClickListener : null); - binding.dialogChooseArtFromListaArtMainList.setAdapter(mCurrentAdapter); + binding.itemsList.setAdapter(mCurrentAdapter); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrAdapter.java index 1253e88e..23f04d4d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrAdapter.java @@ -32,7 +32,7 @@ public class DialogChooseArtFromListaMtbColrAdapter extends RecyclerView.Adapter } public void bind(MtbAart mtbAart) { - mViewDataBinding.setMtbAart(mtbAart); + mViewDataBinding.setItem(mtbAart); mViewDataBinding.executePendingBindings(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java index fdfef0ce..e37c993a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java @@ -55,18 +55,18 @@ public class DialogChooseArtFromListaMtbColrView { } private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { - binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); + binding.itemsList.setNestedScrollingEnabled(false); - binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); + binding.itemsList.setHasFixedSize(true); - binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + binding.itemsList.setLayoutManager(new LinearLayoutManager(currentContext)); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(currentContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); - binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); + binding.itemsList.addItemDecoration(itemDecorator); currentAdapter = new DialogChooseArtFromListaMtbColrAdapter(currentContext, dataset, onItemClicked); - binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter); + binding.itemsList.setAdapter(currentAdapter); } private IRecyclerItemClicked onItemClicked = (item, position) -> { diff --git a/app/src/main/res/drawable/ic_verified_account__green_800.xml b/app/src/main/res/drawable/ic_verified_account__green_800.xml new file mode 100644 index 00000000..9f4555a9 --- /dev/null +++ b/app/src/main/res/drawable/ic_verified_account__green_800.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/dialog_available_intventario_items__item_model.xml b/app/src/main/res/layout/dialog_available_intventario_items__item_model.xml new file mode 100644 index 00000000..9bbd4696 --- /dev/null +++ b/app/src/main/res/layout/dialog_available_intventario_items__item_model.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml index 53f552c3..e865c3d2 100644 --- a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml @@ -35,9 +35,11 @@ diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml index 159d8ebf..691d124b 100644 --- a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml @@ -6,13 +6,11 @@ - - @@ -37,7 +35,7 @@ @@ -60,7 +58,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" - android:text="@{mtbAart.descrizioneEstesa}" + android:text="@{item.descrizioneEstesa}" android:textColor="@android:color/black" android:textSize="16sp" tools:text="Descrizione lunga articolo" /> From ab6eeb91a6d1ed8662ddad75d39352fd452a1948 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Tue, 28 Mar 2023 19:29:52 +0200 Subject: [PATCH 09/13] [Documenti interni] gestito annullamento selezione righe da modificare --- .../DialogSelectDocRowsView.java | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java index afe801ea..2024e6e3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java @@ -26,7 +26,9 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.databinding.DialogSelectDocRowsBinding; import it.integry.integrywmsnative.databinding.DialogSelectDocRowsItemModelBinding; -/** @noinspection rawtypes*/ +/** + * @noinspection rawtypes + */ public class DialogSelectDocRowsView extends BaseDialogFragment { @@ -76,8 +78,16 @@ public class DialogSelectDocRowsView extends BaseDialogFragment { var alertDialog = new MaterialAlertDialogBuilder(this.mContext) .setView(mBindings.getRoot()) .setCancelable(isCancelable()) - .setPositiveButton(R.string.confirm, null) - .setNegativeButton(R.string.abort, null) + .setPositiveButton(R.string.confirm, (dialog, which) -> { + final DialogSelectDocRowsItemListModel selectedItem = Stream.of(listArts) + .filter(x -> x.getChecked().get()) + .findFirstOrElse(null); + if (selectedItem != null) + this.onConfirm.run(selectedItem); + }) + .setNegativeButton(R.string.abort, (dialog, which) -> { + if (this.onAbort != null) this.onAbort.run(); + }) .create(); alertDialog.setCanceledOnTouchOutside(isCancelable()); @@ -93,19 +103,6 @@ public class DialogSelectDocRowsView extends BaseDialogFragment { this.initRecyclerView(); } - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - super.onDismiss(dialog); - - final DialogSelectDocRowsItemListModel selectedItem = Stream.of(listArts) - .filter(x -> x.getChecked().get()) - .findFirstOrElse(null); - - if(selectedItem != null) - this.onConfirm.run(selectedItem); - else this.onAbort.run(); - } - private void initRecyclerView() { var itemType = new Type(R.layout.dialog_select_doc_rows__item_model, BR.row); // itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); @@ -121,7 +118,7 @@ public class DialogSelectDocRowsView extends BaseDialogFragment { .map(DialogSelectDocRowsItemListModel.class, itemType) .into(this.mBindings.itemList); } - + private void resetChecks() { for (var item : listArts) { item.getChecked().set(false); From 6f2be2b459ab735d3ab7b757aea08fdd12064e8c Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 29 Mar 2023 10:19:56 +0200 Subject: [PATCH 10/13] Rimossi mutable live data sulle variabili interne della gestione Documenti Interni --- .../DocInterniViewModel.java | 63 +++++++++---------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java index f686a216..a5e44b2f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java @@ -37,12 +37,12 @@ public class DocInterniViewModel { private List availableArts; private MutableLiveData> mDocsList = new MutableLiveData<>(); - public final MutableLiveData dtbTipi = new MutableLiveData<>(); - public final MutableLiveData mtbGrup = new MutableLiveData<>(); - public final MutableLiveData fornitore = new MutableLiveData<>(); - public final MutableLiveData dataDoc = new MutableLiveData<>(); - public final MutableLiveData numDoc = new MutableLiveData<>(); - public final MutableLiveData note = new MutableLiveData<>(); + public TipoDocDTO dtbTipi; + public GruppoArticoloDTO mtbGrup; + public FornitoreDTO fornitore; + public Date dataDoc; + public String numDoc; + public String note; public final BindableInteger artsSize = new BindableInteger(0); @Inject @@ -86,13 +86,13 @@ public class DocInterniViewModel { } public void setSelectedDocDetails(DialogSelectDocInfoResponseDTO selection) { - this.fornitore.postValue(selection.getFornitore()); - this.dtbTipi.postValue(selection.getTipoDoc()); + this.fornitore = selection.getFornitore(); + this.dtbTipi = selection.getTipoDoc(); - this.mtbGrup.postValue(selection.getGruppoArt()); - this.dataDoc.postValue(selection.getDataDoc()); - this.numDoc.postValue(selection.getNumDoc() != null ? selection.getNumDoc().toString() : null); - this.note.postValue(selection.getNote()); + this.mtbGrup = selection.getGruppoArt(); + this.dataDoc = selection.getDataDoc(); + this.numDoc = selection.getNumDoc() != null ? selection.getNumDoc().toString() : null; + this.note = selection.getNote(); this.sendOnLoadingStarted(); fetchProducts(() -> { @@ -118,7 +118,7 @@ public class DocInterniViewModel { String codAnag = null; String codVdes = null; - FornitoreDTO fornitore = this.fornitore.getValue(); + FornitoreDTO fornitore = this.fornitore; if (fornitore != null) { codAnag = fornitore.getCodAnag(); codVdes = fornitore.getCodVdes(); @@ -126,7 +126,7 @@ public class DocInterniViewModel { var docsList = documentRepository.getDocuments(this.getCodDtip(), - codAnag, codVdes, dataDoc.getValue(), numDoc.getValue()); + codAnag, codVdes, dataDoc, numDoc); docsList.observeForever(data -> { this.mDocsList.postValue(data); @@ -145,31 +145,28 @@ public class DocInterniViewModel { } private String getCodDtip() { - if (this.dtbTipi.getValue() == null) { + if (this.dtbTipi == null) { return null; } - return this.dtbTipi.getValue().getCodDtip(); + return this.dtbTipi.getCodDtip(); } public TipoDocDTO getTipoDoc() { - if (this.dtbTipi.getValue() == null) { - return null; - } - return this.dtbTipi.getValue(); + return this.dtbTipi; } private String getCodMgrp() { - if (this.mtbGrup.getValue() == null) { + if (this.mtbGrup == null) { return null; } - return this.mtbGrup.getValue().getCodMgrp(); + return this.mtbGrup.getCodMgrp(); } private String getCodAnagForn() { - if (this.fornitore.getValue() == null) { + if (this.fornitore == null) { return null; } - return this.fornitore.getValue().getCodAnag(); + return this.fornitore.getCodAnag(); } public void editDocument(SqlMtbColt document) { @@ -178,7 +175,7 @@ public class DocInterniViewModel { public void newDocument() { SqlMtbColt document = new SqlMtbColt(); - if (this.dtbTipi.getValue() == null) { + if (this.dtbTipi == null) { this.sendError(new NoDocTypeSelectedException()); return; } @@ -186,18 +183,18 @@ public class DocInterniViewModel { document.setCodMgrp(this.getCodMgrp()); document.setDataCollo(new Date()); document.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); - document.setAnnotazioni(this.note.getValue()); + document.setAnnotazioni(this.note); document.setSegno(-1); document.setSerCollo("/"); document.setNumCollo(this.nextNumCollo); document.setGestione("L"); - document.setDataDoc(this.dataDoc.getValue()); - if (this.numDoc.getValue() != null) { - document.setNumDoc(Integer.parseInt(this.numDoc.getValue())); + document.setDataDoc(this.dataDoc); + if (this.numDoc != null) { + document.setNumDoc(Integer.parseInt(this.numDoc)); } - if (this.fornitore.getValue() != null) { - document.setCodAnag(this.fornitore.getValue().getCodAnag()); - document.setCodVdes(this.fornitore.getValue().getCodVdes()); + if (this.fornitore != null) { + document.setCodAnag(this.fornitore.getCodAnag()); + document.setCodVdes(this.fornitore.getCodVdes()); } documentRepository.insert(document, id -> { document.setId(id); @@ -206,7 +203,7 @@ public class DocInterniViewModel { } public boolean hasDocDetails() { - return this.dtbTipi.getValue() != null; + return this.dtbTipi != null; } public interface Listener extends ILoadingListener { From 8de54a504b4cd07e4eed183037df85939b8a5e1e Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 29 Mar 2023 10:49:39 +0200 Subject: [PATCH 11/13] Corrette logiche di ricerca cod_mart / barcode nei documenti interni --- .../edit_form/DocInterniEditFormActivity.java | 2 +- .../edit_form/DocInterniEditFormViewModel.java | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index a1ab5ea4..94400d3d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -186,7 +186,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter "Ricerca articolo", null, "Cod articolo / Barcode", - barcodeProd -> this.viewModel.loadArticoloByCodMart(barcodeProd), BarcodeManager::enable).show(); + barcodeProd -> this.viewModel.loadArticoloByCodMartOrBarcode(barcodeProd), BarcodeManager::enable).show(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index fea0f8dd..c955f441 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -129,9 +129,10 @@ public class DocInterniEditFormViewModel { this.listener.onDocumentHoldRequest(); } - public void loadArticoloByCodMart(String codMart) { + public void loadArticoloByCodMartOrBarcode(String codMart) { var matchedArt = Stream.of(productsList) - .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) + .filter(x -> x.getCodMart().equalsIgnoreCase(codMart) || + x.getBarcode().contains(codMart)) .findFirst() .orElse(null); @@ -312,10 +313,7 @@ public class DocInterniEditFormViewModel { } public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { - if(UtilityBarcode.isCode128(barcodeScanDTO)) { - this.loadArticoloByCodMart(barcodeScanDTO.getStringValue()); - - } else if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { + if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { //Cerco tramite etichetta ean peso this.executeEtichettaEanPeso(barcodeScanDTO); From f41994469963fc9d6be1442b752fb9038adef3bb Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 29 Mar 2023 11:14:41 +0200 Subject: [PATCH 12/13] Refactoring UI pannello di informazioni documento interno caricato --- .../core/di/BindableFloat.java | 7 +- .../edit_form/DocInterniEditFormActivity.java | 5 +- .../DocInterniEditFormViewModel.java | 1 + .../res/drawable/ic_doc_interni_outline.xml | 9 + .../activity_contab_doc_interni_edit.xml | 251 ++++++++++-------- 5 files changed, 157 insertions(+), 116 deletions(-) create mode 100644 app/src/main/res/drawable/ic_doc_interni_outline.xml diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java index e8ad206a..b6223f41 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java @@ -1,10 +1,9 @@ package it.integry.integrywmsnative.core.di; -import java.math.BigDecimal; -import java.math.RoundingMode; - import androidx.databinding.BaseObservable; +import java.math.BigDecimal; + import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.utility.UtilityNumber; @@ -20,7 +19,7 @@ public class BindableFloat extends BaseObservable { if(numberOfDigits > CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS) numberOfDigits = CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS; - return new BigDecimal(get()); + return BigDecimal.valueOf(get()); } public Float get(boolean defaultIfNull) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index 94400d3d..46d2d6be 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.view.View; import android.widget.Toast; import androidx.annotation.Nullable; @@ -130,7 +129,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter if (document.getCodAnag() != null) { this.codAnag.set(document.getCodAnag() + (document.getCodVdes() != null ? " - " + document.getCodVdes() : "")); } else { - this.binding.supplierLayout.setVisibility(View.GONE); + this.codAnag.set(null); } this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv())); @@ -138,7 +137,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter if (document.getNumDoc() != null && document.getDataDoc() != null) { this.documentRifHeader.set(String.format(this.getString(R.string.doc_testata), document.getNumDoc().toString(), UtilityDate.formatDate(document.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))); } else { - this.binding.docRifLayout.setVisibility(View.GONE); + this.documentRifHeader.set(null); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index c955f441..45f1de74 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -48,6 +48,7 @@ public class DocInterniEditFormViewModel { private TipoDocDTO tipoDoc; private boolean isCheckPartitaMag = false; private JSONObject checkFornitoreRules = null; + public MutableLiveData document = new MutableLiveData<>(); public MutableLiveData> docRows = new MutableLiveData<>(); diff --git a/app/src/main/res/drawable/ic_doc_interni_outline.xml b/app/src/main/res/drawable/ic_doc_interni_outline.xml new file mode 100644 index 00000000..62a0a09d --- /dev/null +++ b/app/src/main/res/drawable/ic_doc_interni_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml index 18b4e323..ec3b13a2 100644 --- a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml +++ b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml @@ -71,136 +71,167 @@ - + android:layout_margin="12dp" + app:cardCornerRadius="16dp" + app:cardElevation="4dp"> + android:background="@color/colorPrimary" + android:orientation="horizontal" + android:padding="16dp"> - - - - - - - - - - - - - - - - - - - + + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginTop="2dp" + android:orientation="horizontal"> - + + + + + + + + android:layout_marginTop="2dp" + android:orientation="horizontal"> + + + + + + + + - - - - - + + android:paddingEnd="2dp" + tools:itemCount="5" + tools:listitem="@layout/activity_contab_doc_interno_row__list_single_item" /> Date: Wed, 29 Mar 2023 11:15:13 +0200 Subject: [PATCH 13/13] -> v1.32.21 (361) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 989b3895..1ebe4e82 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 360 - def appVersionName = '1.32.20' + def appVersionCode = 361 + def appVersionName = '1.32.21' signingConfigs { release {