diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 27f57562..442840f4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -109,6 +109,8 @@ import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUlt import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoModule; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoComponent; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoModule; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule; import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditComponent; @@ -254,7 +256,8 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva DialogExtraInfoModule.class, DialogAskDepositoModule.class, DialogChooseArtFromListaArtsModule.class, - DialogUltimeConsegneFiltroAvanzatoModule.class + DialogUltimeConsegneFiltroAvanzatoModule.class, + DialogUltimiArriviFornitoreFiltroAvanzatoModule.class }) public interface MainApplicationComponent { @@ -425,7 +428,9 @@ public interface MainApplicationComponent { DialogChooseArtFromListaArtsComponent.Factory dialogChooseArtFromListaArtsComponent(); - DialogUltimeConsegneFiltroAvanzatoComponent.Factory dialogDialogUltimeConsegneFiltroAvanzatoComponent(); + DialogUltimeConsegneFiltroAvanzatoComponent.Factory dialogUltimeConsegneFiltroAvanzatoComponent(); + + DialogUltimiArriviFornitoreFiltroAvanzatoComponent.Factory dialogUltimiArriviFornitoreFiltroAvanzatoComponent(); void inject(MainApplication mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/DocumentoResoDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/DocumentoResoDTO.java index 9cf0b31f..4520bb53 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/DocumentoResoDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/DocumentoResoDTO.java @@ -60,7 +60,11 @@ public class DocumentoResoDTO { @SerializedName("codMdep") private String codMdep; - public BindableBoolean selected = new BindableBoolean(false);; + @SerializedName("dataReg") + private LocalDate dataReg; + + public BindableBoolean selected = new BindableBoolean(false); + ; public DocumentoResoDTO() { } @@ -70,7 +74,6 @@ public class DocumentoResoDTO { } - public String getCodAnag() { return codAnag; } @@ -189,6 +192,7 @@ public class DocumentoResoDTO { this.numOrd = numOrd; return this; } + public LocalDateTime getDataInizTrasp() { return dataInizTrasp; } @@ -229,6 +233,13 @@ public class DocumentoResoDTO { return this; } + public LocalDate getDataReg() { + return dataReg; + } + + public void setDataReg(LocalDate dataReg) { + this.dataReg = dataReg; + } public boolean equalsKey(DocumentoResoDTO that) { return getNumDoc() == that.getNumDoc() && @@ -264,18 +275,30 @@ public class DocumentoResoDTO { Objects.equals(getNumOrd(), that.getNumOrd()) && Objects.equals(getDataInizTrasp(), that.getDataInizTrasp()) && Objects.equals(getGestione(), that.getGestione()) && - Objects.equals(getCodMdep(), that.getCodMdep()); + Objects.equals(getCodMdep(), that.getCodMdep()) && + Objects.equals(getDataReg(), that.getDataReg()) && + Objects.equals(getSelected(), that.getSelected()); } @Override public int hashCode() { - return Objects.hash(getCodAnag(), getCounterConsegna(), - getCodDtip(), getDataDoc(), - getSerDoc(), getNumDoc(), - getDestinatario(), getIndirizzo(), - getRagSoc(), getCompilatoDa(), - getRifOrd(), getDataOrd(), - getNumOrd(), getDataInizTrasp(), - getGestione(), getCodMdep()); + return Objects.hash(getCodAnag(), + getCounterConsegna(), + getCodDtip(), + getDataDoc(), + getSerDoc(), + getNumDoc(), + getDestinatario(), + getIndirizzo(), + getRagSoc(), + getCompilatoDa(), + getRifOrd(), + getDataOrd(), + getNumOrd(), + getDataInizTrasp(), + getGestione(), + getCodMdep(), + getDataReg(), + getSelected()); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java index de8c6d64..5ed4d224 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -128,7 +128,7 @@ public class PickingResiViewModel { .withoutNulls() .toList(); - if (foundGestioni.size() > 1) { + if (foundGestioni.size() != 1) { throw new Exception("Sono stati caricati documenti con diverse gestioni"); } @@ -140,7 +140,7 @@ public class PickingResiViewModel { .distinct() .toList(); - if (foundCodAnags.size() > 1) { + if (foundCodAnags.size() != 1) { throw new Exception("Sono stati caricati documenti con diversi codici anagrafici"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java index bfec009a..aff2ab89 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java @@ -14,7 +14,6 @@ import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.lifecycle.MutableLiveData; -import com.annimon.stream.Stream; import com.ravikoradiya.liveadapter.LiveAdapter; import com.ravikoradiya.liveadapter.Type; @@ -113,13 +112,12 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim public void openFilterDialog() { - this.onLoadingStarted(); executorService.execute(() -> { try { - List gtbAnags = this.mViewModel.loadCodAnagClienti(); + List gtbAnags = this.mViewModel.loadAnagClienti(); this.onLoadingEnded(); handler.post(() -> { @@ -144,8 +142,6 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim private void initRecyclerView() { - - var mutableListWithSeparators = new MutableLiveData>(); mViewModel.getDocuments().observe(getViewLifecycleOwner(), documentList -> { executorService.execute(() -> { @@ -259,11 +255,9 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim } private List sort(List dataset) { - List sortedDataset = Stream.of(dataset) - .sortBy(DocumentoResoDTO::getRagSoc) + return dataset.stream() + .sorted((x1, x2) -> x1.getRagSoc().compareToIgnoreCase(x2.getRagSoc())) .toList(); - - return sortedDataset; } @@ -312,6 +306,8 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim @Override public void onDestroy() { + BarcodeManager.removeCallback(mBarcodeScannerInstanceID); + for (Runnable onPreDestroy : mOnPreDestroyList) { onPreDestroy.run(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java index f18018f1..56b6d91f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java @@ -49,8 +49,8 @@ public class UltimeConsegneClienteViewModel { this.mCodMdep = codMdep; } - public List loadCodAnagClienti() throws Exception { - var gtbAnags = this.mUltimeConsegneClienteRESTConsumer.makeSynchronousRetrieveAvailableCodAnagClientiRequest(); + public List loadAnagClienti() throws Exception { + var gtbAnags = this.mUltimeConsegneClienteRESTConsumer.makeSynchronousRetrieveAvailableAnagClientiRequest(); mGtbAnagClienti.postValue(gtbAnags); return gtbAnags; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java index 16ac82ba..2eb67eeb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java @@ -48,7 +48,7 @@ public class DialogUltimeConsegneFiltroAvanzatoView extends BaseDialogFragment { this.onConfirm = onConfirm; MainApplication.appComponent - .dialogDialogUltimeConsegneFiltroAvanzatoComponent() + .dialogUltimeConsegneFiltroAvanzatoComponent() .create() .inject(this); mViewModel.init(items); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java index 2635bf46..00000231 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java @@ -22,7 +22,7 @@ public class UltimeConsegneClienteRESTConsumer extends _BaseRESTConsumer { this.systemRESTConsumer = systemRESTConsumer; } - public List makeSynchronousRetrieveAvailableCodAnagClientiRequest() throws Exception { + public List makeSynchronousRetrieveAvailableAnagClientiRequest() throws Exception { var response = restBuilder.getService(UltimeConsegneClienteRESTConsumerService.class) .retrieveClienti() diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java index 5d41fc93..8e397f6f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java @@ -12,13 +12,14 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; -import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.lifecycle.MutableLiveData; -import com.annimon.stream.Optional; -import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; +import com.ravikoradiya.liveadapter.Type; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -40,11 +41,13 @@ import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; +import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding; +import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding; import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.ui.UltimiArriviFornitoreListAdapter; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoView; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList; +import kotlin.Unit; /** * A simple {@link BaseFragment} subclass. @@ -62,7 +65,6 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl UltimiArriviFornitoreViewModel mViewModel; private FragmentUltimiArriviFornitoreBinding mBindings; - private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; public UltimiArriviFornitoreFragment() { // Required empty public constructor @@ -106,7 +108,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl this.mBindings.mainFab.hide(); this.mBindings.mainFab.setOnClickListener(v -> { - dispatchConsegne(); + dispatchArrivi(); }); this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList); @@ -116,31 +118,107 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl public void openFilterDialog() { - this.mViewModel.loadCodAnagFornitori(gtbAnags -> { - handler.post(() -> { - DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> { - mAppliedFilterViewModel = filter; - filterItems(null); - }).show(); - }); + this.onLoadingStarted(); + + + executorService.execute(() -> { + + try { + var gtbAnags = this.mViewModel.loadAnagFornitori(); + this.onLoadingEnded(); + + handler.post(() -> { + DialogUltimeConsegneFiltroAvanzatoView.newInstance(gtbAnags, filterResult -> { + if (filterResult == null || filterResult.isAborted()) + popMe(); + + else + executorService.execute(() -> { + refreshArrivi(filterResult.getGtbAnag()); + resetSelected(); + }); + }) + .show(requireActivity().getSupportFragmentManager(), "dialog-filtro-ultimi-arrivi"); + }); + } catch (Exception e) { + this.onError(e); + } + }); + + + } + + private void resetSelected() { + handler.post(() -> { + for (DocumentoResoDTO document : mDocumentiMutableData) { + document.setSelected(false); + } + mBindings.mainFab.hide(); }); } private void initRecyclerView() { - UltimiArriviFornitoreListAdapter mAdapter = - new UltimiArriviFornitoreListAdapter(getActivity(), mDocumentiMutableData); - mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); - mAdapter.setEmptyView(mBindings.emptyView); + var mutableListWithSeparators = new MutableLiveData>(); + mViewModel.getDocuments().observe(getViewLifecycleOwner(), documentList -> { + executorService.execute(() -> { + String lastSeparator = null; + + // Prealloca la lista per evitare ridimensionamenti costosi + int estimatedSize = documentList.size() + (documentList.isEmpty() ? 0 : documentList.size() / 3); + List listWithSeparators = new ArrayList<>(estimatedSize); + + for (DocumentoResoDTO document : documentList) { + String currentRagSoc = document.getRagSoc(); + if (lastSeparator == null || !lastSeparator.equals(currentRagSoc)) { + // Aggiungi un separatore quando cambia la ragione sociale + listWithSeparators.add(currentRagSoc); + lastSeparator = currentRagSoc; + } + listWithSeparators.add(document); + } + + List finalList = listWithSeparators; + handler.post(() -> { + mutableListWithSeparators.setValue(finalList); +// refreshFabStatus(); + }); + }); + }); + + + var separatorType = new Type( + R.layout.fragment_ultimi_arrivi_fornitore__list_header, + it.integry.integrywmsnative.BR.item); + + var orderElementItemType = new Type( + R.layout.fragment_ultimi_arrivi_fornitore__list_single_item, + it.integry.integrywmsnative.BR.item) + .areItemSame((item1, item2) -> item1.hashCodeKey() == item2.hashCodeKey() && item1.equalsKey(item2)) + .areContentsTheSame((item1, item2) -> item1.hashCode() == item2.hashCode() && item1.equals(item2)) + .onClick(holder -> { + this.onSingleSelectionChanged(holder.getBinding().getItem()); + return null; + }); + + LiveAdapter liveAdapter = new LiveAdapter(mutableListWithSeparators, this) + .map(String.class, separatorType) + .map(DocumentoResoDTO.class, orderElementItemType) + .onNoData(x -> { + this.mBindings.emptyView.setVisibility(x ? View.VISIBLE : View.GONE); + return Unit.INSTANCE; + }); mBindings.recyclerView.setHasFixedSize(true); - mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - mBindings.recyclerView.setAdapter(mAdapter); -// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView); + mBindings.recyclerView.setItemViewCacheSize(40); + mBindings.recyclerView.setDrawingCacheEnabled(true); + mBindings.recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); + + liveAdapter.into(mBindings.recyclerView); + if (mToolbar != null) mToolbar.setRecyclerView(mBindings.recyclerView); - } private void initBarcodeReader() { @@ -154,9 +232,18 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl private final RunnableArgs onScanSuccessful = data -> { BarcodeManager.disable(mBarcodeScannerInstanceID); + executorService.execute(() -> { - this.mViewModel.processBarcodeDTO(data, () -> { + this.onLoadingStarted(); + + try { + this.mViewModel.processBarcodeDTO(data); + this.onLoadingEnded(); + } catch (Exception e) { + this.onError(e); + } BarcodeManager.enable(mBarcodeScannerInstanceID); + }); }; @@ -165,39 +252,33 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl this.mDocumentiMutableData.addAll(sort(documentList)); } - private void filterItems(List filteredMtbAarts) { + private void refreshArrivi(GtbAnag gtbAnagToFilter) { this.onLoadingStarted(); - String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; - String currentCodAnagFilter = null; - - Optional singleGtbAnag = Stream.of(mViewModel.getGtbAnagClienti().getValue()) - .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) - .findSingle(); - - if (singleGtbAnag.isPresent()) { - currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); + try { + this.mViewModel.loadArriviFornitori(gtbAnagToFilter != null ? gtbAnagToFilter.getCodAnag() : null, + null, + null, + 365 + ); + this.onLoadingEnded(); + } catch (Exception e) { + this.onError(e); } - - this.mViewModel.loadArriviFornitori(currentCodAnagFilter, - filteredMtbAarts, - -1, - 365); } private List sort(List dataset) { - List items = Stream.of(dataset) - .sortBy(DocumentoResoDTO::getRagSoc) + return dataset.stream() + .sorted((x1, x2) -> x1.getRagSoc().compareToIgnoreCase(x2.getRagSoc())) .toList(); - return items; - } private void onSingleSelectionChanged(DocumentoResoDTO dto) { + dto.getSelected().toggle(); List selectedOrders = getSelectedItems(); if (dto.isSelected()) { - Stream.of(selectedOrders) + selectedOrders.stream() .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) .forEach(x -> x.setSelected(false)); } @@ -211,15 +292,15 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl private List getSelectedItems() { - return Stream.of(this.mDocumentiMutableData) + return this.mDocumentiMutableData.stream() .filter(DocumentoResoDTO::isSelected) - .toList(); + .collect(Collectors.toList()); } - private void dispatchConsegne() { + private void dispatchArrivi() { List selectedConsegne = getSelectedItems(); - PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); + PickingResiActivity.startActivity(getActivity(), requireActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); } @@ -263,12 +344,13 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl List mtbAarts = new ArrayList<>(); if (items != null && !items.isEmpty()) { - mtbAarts = Stream.of(items) + mtbAarts = items.stream() .map(MtbColr::getMtbAart) .toList(); } - filterItems(mtbAarts); + throw new UnsupportedOperationException("Not implemented yet"); +// filterItems(mtbAarts); }, null) .show(requireActivity().getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java index 8286388d..1679db08 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java @@ -4,6 +4,7 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; +import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; @@ -14,8 +15,8 @@ public class UltimiArriviFornitoreModule { @Singleton @Provides - UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) { - return new UltimiArriviFornitoreRESTConsumer(systemRESTConsumer); + UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { + return new UltimiArriviFornitoreRESTConsumer(restBuilder, systemRESTConsumer); } @Provides diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreViewModel.java index 7bce508a..2f233d59 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreViewModel.java @@ -9,7 +9,6 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.exception.InvalidLUException; import it.integry.integrywmsnative.core.exception.NoLUFoundException; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.model.MtbAart; @@ -24,6 +23,7 @@ import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriv public class UltimiArriviFornitoreViewModel { private final MutableLiveData> mGtbAnagClienti = new MutableLiveData<>(); + private List originalDocumentList; private final MutableLiveData> mDocuments = new MutableLiveData<>(); private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer; @@ -50,51 +50,34 @@ public class UltimiArriviFornitoreViewModel { } - public void loadCodAnagFornitori(RunnableArgs> onComplete) { - this.sendOnLoadingStarted(); + public List loadAnagFornitori() throws Exception { + var gtbAnags = this.mUltimiArriviFornitoreRESTConsumer.makeSynchronousRetrieveAvailableAnagClientiRequest(); + mGtbAnagClienti.postValue(gtbAnags); - this.mUltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> { - mGtbAnagClienti.postValue(gtbAnags); - this.sendOnLoadingEnded(); - - onComplete.run(gtbAnags); - }, this::sendError); + return gtbAnags; } - public void loadArriviFornitori(String codAnag, List mtbAarts, int limitDocsForCli, int limitDays) { - this.sendOnLoadingStarted(); - - this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays, documentList -> { - this.mDocuments.postValue(documentList); - this.sendOnLoadingEnded(); - }, this::sendError); + public void loadArriviFornitori(String codAnag, List mtbAarts, Integer limitDocsForCli, int limitDays) throws Exception { + var documentList = this.mUltimiArriviFornitoreRESTConsumer.makeSynchronousRetrieveUltimiArriviFornitoriRequest(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays); + originalDocumentList = documentList; + this.mDocuments.postValue(documentList); } - public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { - - this.sendOnLoadingStarted(); - - Runnable onBarcodeScanComplete = () -> { - onComplete.run(); - this.sendOnLoadingEnded(); - }; - + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) throws Exception { if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { - this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete); + this.executeEtichettaLU(barcodeScanDTO.getStringValue()); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { - this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete); - } else { - onComplete.run(); + this.executeEtichettaEan128(barcodeScanDTO); } } - private void executeEtichettaLU(String SSCC, Runnable onComplete) { + private void executeEtichettaLU(String SSCC) { this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { - if(mtbColt != null && mtbColt.getMtbColr() != null && !mtbColt.getMtbColr().isEmpty()) { - if(mtbColt.getSegno() > 0) { + if (mtbColt != null && mtbColt.getMtbColr() != null && !mtbColt.getMtbColr().isEmpty()) { + if (mtbColt.getSegno() > 0) { this.sendOnMtbColtScanned(mtbColt); @@ -124,35 +107,35 @@ public class UltimiArriviFornitoreViewModel { }, this::sendError); } - private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { - this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { - String barcodeProd = null; + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) throws Exception { + var ean128Model = this.mBarcodeRESTConsumer.decodeEan128Synchronized(barcodeScanDTO); - if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; - if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; - if (!UtilityString.isNullOrEmpty(ean128Model.Content)) - barcodeProd = ean128Model.Content; + String barcodeProd = null; + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; + if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; + if (!UtilityString.isNullOrEmpty(ean128Model.Content)) + barcodeProd = ean128Model.Content; - if (!UtilityString.isNullOrEmpty(barcodeProd)) { + if (!UtilityString.isNullOrEmpty(barcodeProd)) { - if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { - this.executeEtichettaLU(ean128Model.Sscc, onComplete); - } else { - this.sendError(new NoLUFoundException()); - } - } else { - //EAN 128 non completo o comunque mancano i riferimenti al prodotto - this.sendError(new NoLUFoundException()); + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + this.executeEtichettaLU(ean128Model.Sscc); } - }, this::sendError); + + throw new NoLUFoundException(); + } + + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + throw new NoLUFoundException(); + + } - - - - - + public void resetAllFilters() { + mDocuments.postValue(originalDocumentList); + } public MutableLiveData> getGtbAnagClienti() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java deleted file mode 100644 index 6d7b94b1..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzato.java +++ /dev/null @@ -1,190 +0,0 @@ -package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog; - -import android.app.DatePickerDialog; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.LayoutInflater; -import android.view.WindowManager; -import android.widget.ArrayAdapter; - -import androidx.appcompat.app.AlertDialog; - -import com.annimon.stream.Stream; -import com.annimon.stream.function.Predicate; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.di.BindableString; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.GtbAnag; -import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.databinding.DialogUltimiArriviFornitoreFiltroAvanzatoBinding; - -public class DialogUltimiArriviFornitoreFiltroAvanzato { - - private AlertDialog mAlert; - private Context mContext; - private DialogUltimiArriviFiltroAvanzatoViewModel mBaseViewModel; - private RunnableArgs mOnDismiss; - - - - private ArrayAdapter arrayAdapterRagSoc; - - private List mItems; - private List mFilteredItems; - - private Predicate currentRagSocPredicate = null; - private Predicate currentDataDocPredicate = null; - - public static AlertDialog make(final Context context, - final List items, - DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel, - RunnableArgs onDismiss) { - return new DialogUltimiArriviFornitoreFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert; - } - - public DialogUltimiArriviFornitoreFiltroAvanzato(final Context context, - final List items, - DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel, - RunnableArgs onDismiss) { - mContext = context; - mItems = items; - mBaseViewModel = baseViewModel; - mOnDismiss = onDismiss; - - DialogUltimiArriviFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogUltimiArriviFiltroAvanzatoViewModel(); - - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - DialogUltimiArriviFornitoreFiltroAvanzatoBinding binding = DialogUltimiArriviFornitoreFiltroAvanzatoBinding.inflate(inflater,null, false); - - final AlertDialog.Builder dialog = new AlertDialog.Builder(context) - .setView(binding.getRoot()); - - binding.setViewmodel(viewModel); - initViewModelNew(viewModel); - initView(binding, viewModel); - - mAlert = dialog.create(); - mAlert.setCanceledOnTouchOutside(false); - - mAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - mAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - binding.positiveBtn.setOnClickListener(view -> { - mAlert.dismiss(); - }); - - binding.neutralBtn.setOnClickListener(view -> { - resetAll(viewModel); - }); - - - mAlert.setOnDismissListener(dialogInterface -> { - if(mOnDismiss != null) mOnDismiss.run(viewModel); - }); - - refreshList(); - - } - - private void resetAll(DialogUltimiArriviFiltroAvanzatoViewModel viewModel) { - viewModel.ragSoc.set(null); - viewModel.dataDoc.set(null); - } - - private void initView(DialogUltimiArriviFornitoreFiltroAvanzatoBinding bindings, DialogUltimiArriviFiltroAvanzatoViewModel viewModel) { - - arrayAdapterRagSoc = new ArrayAdapter(mContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterRagSoc.addAll(getAvailableRagSocs(false)); - bindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc); - - bindings.filledExposedDropdownDataDoc.setOnClickListener(view -> { - Calendar c = UtilityDate.getCalendarInstance(); - - if(viewModel.dataDocDate != null) { - c.setTime(viewModel.dataDocDate); - } - - int mYear = c.get(Calendar.YEAR); - int mMonth = c.get(Calendar.MONTH); - int mDay = c.get(Calendar.DAY_OF_MONTH); - - DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, - (view2, year, month, day) -> { - - viewModel.dataDocDate = new GregorianCalendar(year, month, day).getTime(); - viewModel.dataDoc.set(UtilityDate.formatDate(viewModel.dataDocDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); - - }, mYear, mMonth, mDay); - datePickerDialog.show(); - }); - - - viewModel.ragSoc.refresh(); - viewModel.dataDoc.refresh(); - } - - private void initViewModelNew(DialogUltimiArriviFiltroAvanzatoViewModel viewModel) { - - BindableString.resetListeners(viewModel.ragSoc); - BindableString.registerListener(viewModel.ragSoc, value -> { - if (UtilityString.isNullOrEmpty(value)) currentRagSocPredicate = null; - else { - currentRagSocPredicate = o -> o.getRagSoc().equalsIgnoreCase(viewModel.ragSoc.get()); - } - - refreshList(); - }); - } - - private List getAvailableRagSocs(boolean skipRecalc) { - if(currentDataDocPredicate == null){ - mFilteredItems = mItems; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(mItems) - .filter(x -> - (currentDataDocPredicate == null || (currentDataDocPredicate.test(x))) - ); - - mFilteredItems = tmpStream.toList(); - } - - return Stream.of(mFilteredItems).map(x -> x.getCodAnag() + " - " + x.getRagSoc()).distinct().withoutNulls().toList(); - } - - - private void refreshList() { - - if(currentRagSocPredicate == null && currentDataDocPredicate == null){ - mFilteredItems = mItems; - } else { - Stream tmpStream = Stream.of(mItems) - .filter(x -> - (currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) && - (currentDataDocPredicate== null || (currentDataDocPredicate.test(x))) - ); - - mFilteredItems = tmpStream.toList(); - } - - - } - - - - public class DialogUltimiArriviFiltroAvanzatoViewModel { - - public BindableString ragSoc = new BindableString(); - public BindableString dataDoc = new BindableString(); - - public Date dataDocDate; - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoComponent.java new file mode 100644 index 00000000..6f16b9b3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogUltimiArriviFornitoreFiltroAvanzatoComponent { + + @Subcomponent.Factory + interface Factory { + DialogUltimiArriviFornitoreFiltroAvanzatoComponent create(); + } + + void inject(DialogUltimiArriviFornitoreFiltroAvanzatoView dialogUltimiArriviFornitoreFiltroAvanzatoView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoModule.java new file mode 100644 index 00000000..af94d891 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogUltimiArriviFornitoreFiltroAvanzatoComponent.class) +public class DialogUltimiArriviFornitoreFiltroAvanzatoModule { + + @Provides + DialogUltimiArriviFornitoreFiltroAvanzatoViewModel providesDialogDialogUltimiArriviFornitoreFiltroAvanzatoViewModel() { + return new DialogUltimiArriviFornitoreFiltroAvanzatoViewModel(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java new file mode 100644 index 00000000..cd0cdba1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java @@ -0,0 +1,185 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.Date; +import java.util.List; + +import javax.inject.Inject; + +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.core.model.GtbAnag; +import it.integry.integrywmsnative.databinding.DialogUltimiArriviFornitoreFiltroAvanzatoBinding; +import it.integry.integrywmsnative.ui.adapter.SimpleAutoCompleteDropdownAdapter; + +public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends BaseDialogFragment { + + @Inject + DialogUltimiArriviFornitoreFiltroAvanzatoViewModel mViewModel; + + private DialogUltimiArriviFornitoreFiltroAvanzatoBinding mBindings; + private Context mContext; + private SimpleAutoCompleteDropdownAdapter arrayAdapterRagSoc; + + private final RunnableArgs onConfirm; + + + public static DialogUltimiArriviFornitoreFiltroAvanzatoView newInstance(final List items, RunnableArgs onConfirm) { + return new DialogUltimiArriviFornitoreFiltroAvanzatoView(items, onConfirm); + } + + private DialogUltimiArriviFornitoreFiltroAvanzatoView(final List items, RunnableArgs onConfirm) { + super(); + + this.onConfirm = onConfirm; + + MainApplication.appComponent + .dialogUltimiArriviFornitoreFiltroAvanzatoComponent() + .create() + .inject(this); + + mViewModel.init(items); + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogUltimiArriviFornitoreFiltroAvanzatoBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + mBindings.setViewmodel(mViewModel); + + + setCancelable(false); + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setCancelable(isCancelable()) + .setPositiveButton(R.string.ok, (dialog, which) -> onOk()) + .setNegativeButton(R.string.abort, (dialog, which) -> { + if (onConfirm != null) onConfirm.run(Result.aborted()); + }) + .setNeutralButton(R.string.reset, (dialog, which) -> {}) + .create(); + + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); // Rimosso se non specificamente necessario per altro + alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + this.initDropDowns(); + + return alertDialog; + } + + @Override + public void onShow(DialogInterface dialogInterface) { + super.onShow(dialogInterface); + + var alertDialog = ((AlertDialog) dialogInterface); + + var neutralButton = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); + neutralButton.setOnClickListener(view -> { + reset(); + }); + } + + + @Override + public void dismiss() { + if (getDialog() != null) getDialog().dismiss(); + super.dismiss(); + } + + private void initDropDowns() { + // Usa il LiveData delle stringhe formattate dal ViewModel + arrayAdapterRagSoc = new SimpleAutoCompleteDropdownAdapter<>( + mContext, + R.layout.dialog_vendita_filtro_avanzato__single_item, // Assicurati che questo layout sia un semplice TextView + mViewModel.getAvailableRagSocsStrings(), // LiveData> + this // LifecycleOwner + ); + mBindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc); + + // Gestisci la selezione di un item + mBindings.filledExposedDropdownRagSoc.setOnItemClickListener((parent, view, position, id) -> { + String selectedFormattedString = arrayAdapterRagSoc.getItem(position); + if (selectedFormattedString != null) { + GtbAnag selectedAnag = mViewModel.findGtbAnagByFormattedString(selectedFormattedString); + mViewModel.setRagSoc(selectedAnag); // Aggiorna il GtbAnag nel ViewModel + } + }); + } + + public void reset() { + if (mViewModel != null) { + mViewModel.resetFilters(); + } + // I campi testo dovrebbero aggiornarsi automaticamente grazie al data binding + // e agli observer sui LiveData (ragSocTextBindable e dataDocBindable). + } + + public void onOk() { + if (onConfirm != null) + onConfirm.run(Result.completed(mViewModel.getRagSocBindable().getValue(), mViewModel.getDataDocBindable().getValue())); +// dismiss(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mBindings = null; // Per evitare memory leaks + } + + + + public static class Result { + private final GtbAnag gtbAnag; + private final Date dataDoc; + private final boolean isAborted; + + private Result(GtbAnag gtbAnag, Date dataDoc, boolean isAborted) { + this.gtbAnag = gtbAnag; + this.dataDoc = dataDoc; + this.isAborted = isAborted; + } + + public static Result completed(GtbAnag gtbAnag, Date dataDoc) { + return new Result(gtbAnag, dataDoc, false); + } + + public static Result aborted() { + return new Result(null, null, true); + } + + public boolean isAborted() { + return isAborted; + } + + public GtbAnag getGtbAnag() { + return gtbAnag; + } + + public Date getDataDoc() { + return dataDoc; + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoViewModel.java new file mode 100644 index 00000000..836d4605 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoViewModel.java @@ -0,0 +1,219 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import it.integry.integrywmsnative.core.model.GtbAnag; + +public class DialogUltimiArriviFornitoreFiltroAvanzatoViewModel { + + + private final MutableLiveData ragSoc = new MutableLiveData<>(); + private final MutableLiveData dataDoc = new MutableLiveData<>(); + + private List availableItems; // Lista completa di GtbAnag originali + private final MutableLiveData> filteredItems = new MutableLiveData<>(); + + // LiveData per il testo dell'AutoCompleteTextView della Ragione Sociale + private final MutableLiveData ragSocText = new MutableLiveData<>(); + // LiveData per popolare l'adapter dell'AutoCompleteTextView + private final MutableLiveData> availableRagSocsStrings = new MutableLiveData<>(); + + private final MutableLiveData> currentRagSocPredicate = new MutableLiveData<>(); + private final MutableLiveData> currentDataDocPredicate = new MutableLiveData<>(); + + public void init(List availableItems) { + this.availableItems = availableItems; + // Imposta il valore iniziale di filteredItems e availableRagSocsStrings + // assicurandosi che i predicati siano null all'inizio se non diversamente specificato. + if (this.currentRagSocPredicate.getValue() == null && this.currentDataDocPredicate.getValue() == null) { + this.filteredItems.setValue(availableItems); + } else { + // Se ci sono predicati pre-impostati, applicali. + // Questa logica è più per completezza, normalmente all'init i filtri sono resettati. + refreshList(); + } + // Calcola availableRagSocsStrings dopo aver impostato availableItems e potenzialmente i predicati. + this.availableRagSocsStrings.setValue(calcAvailableRagSocsStrings()); + this.initBindable(); + } + + + + private void initBindable() { + // Quando il GtbAnag selezionato (ragSoc) cambia + this.ragSoc.observeForever(selectedAnag -> { + String textToShow = ""; + Predicate newPredicate = null; + + if (selectedAnag != null) { + textToShow = formatGtbAnagToString(selectedAnag); + newPredicate = o -> o.getCodAnag().equals(selectedAnag.getCodAnag()); + } + + if (!Objects.equals(ragSocText.getValue(), textToShow)) { + ragSocText.postValue(textToShow); + } + if (!Objects.equals(currentRagSocPredicate.getValue(), newPredicate)) { + currentRagSocPredicate.postValue(newPredicate); + } else if (newPredicate == null && currentRagSocPredicate.getValue() != null) { + currentRagSocPredicate.postValue(null); + } + }); + + // Quando il testo nell'AutoCompleteTextView (ragSocText) cambia + this.ragSocText.observeForever(text -> { + GtbAnag currentAnagSelection = ragSoc.getValue(); + if (text == null || text.isEmpty()) { + if (currentAnagSelection != null) { + this.ragSoc.postValue(null); + } + } else { + if (currentAnagSelection != null) { + if (!text.equals(formatGtbAnagToString(currentAnagSelection))) { + this.ragSoc.postValue(null); + } + } + } + }); + + // Quando la data del documento (dataDoc) cambia + this.dataDoc.observeForever(date -> { + Predicate newDatePredicate = null; + if (date != null) { + // TODO: Implementare la logica effettiva per creare un predicato GtbAnag basato sulla data. + // Poiché GtbAnag è un'anagrafica, questo filtro potrebbe non applicarsi direttamente + // ad essa, ma a una lista di transazioni/documenti che usano GtbAnag. + // Se 'dataDoc' NON deve filtrare la lista di GtbAnag, allora 'currentDataDocPredicate' + // dovrebbe essere gestito diversamente o non essere legato a questo 'dataDoc'. + // Per ora, l'effetto principale del reset di 'dataDoc' (impostandolo a null) + // sarà quello di impostare 'currentDataDocPredicate' a null. + // Esempio concettuale se GtbAnag avesse un campo data: + // newDatePredicate = gtbAnag -> UtilityDate.isSameDay(gtbAnag.getDataDocumento(), date); + } + + // Aggiorna currentDataDocPredicate solo se il suo stato logico cambia + boolean predicateEffectivelyChanged = !Objects.equals(currentDataDocPredicate.getValue(), newDatePredicate) || + (newDatePredicate == null && currentDataDocPredicate.getValue() != null) || + (newDatePredicate != null && currentDataDocPredicate.getValue() == null); + + if (predicateEffectivelyChanged) { + currentDataDocPredicate.postValue(newDatePredicate); + } + }); + + this.currentRagSocPredicate.observeForever(ragSocPredicate -> refreshList()); + this.currentDataDocPredicate.observeForever(dataDocPredicate -> refreshList()); + + // Calcola availableRagSocsStrings inizialmente dopo che gli observer sono impostati + // e availableItems è disponibile. + if (this.availableItems != null) { + refreshList(); // Questo chiamerà anche calcAvailableRagSocsStrings + } + } + + private void refreshList() { + Stream tmpStream; + if (availableItems == null) { + filteredItems.postValue(List.of()); + availableRagSocsStrings.postValue(List.of()); + return; + } + + Predicate ragSocPred = currentRagSocPredicate.getValue(); + Predicate dataDocPred = currentDataDocPredicate.getValue(); + + if (ragSocPred == null && dataDocPred == null) { + tmpStream = availableItems.stream(); + } else { + tmpStream = availableItems.stream() + .filter(x -> (ragSocPred == null || ragSocPred.test(x)) && + (dataDocPred == null || dataDocPred.test(x))); + } + filteredItems.postValue(tmpStream.collect(Collectors.toList())); + availableRagSocsStrings.postValue(calcAvailableRagSocsStrings()); + } + + private List calcAvailableRagSocsStrings() { + if (availableItems == null) return List.of(); + + Predicate dataFilterPredicate = currentDataDocPredicate.getValue(); + + return availableItems.stream() + .filter(Objects::nonNull) + // Filtra la lista per l'adapter dell'AutoCompleteTextView solo per data, + // il filtro testuale lo fa l'adapter stesso. + .filter(x -> (dataFilterPredicate == null || dataFilterPredicate.test(x))) + .map(this::formatGtbAnagToString) + .distinct() + .sorted() // Opzionale: ordina alfabeticamente + .collect(Collectors.toList()); + } + + private String formatGtbAnagToString(GtbAnag anag) { + if (anag == null) return ""; + return anag.getCodAnag() + " - " + anag.getRagSoc(); + } + + public GtbAnag findGtbAnagByFormattedString(String formattedString) { + if (formattedString == null || availableItems == null) { + return null; + } + for (GtbAnag anag : availableItems) { + if (anag != null && formattedString.equals(formatGtbAnagToString(anag))) { + return anag; + } + } + return null; + } + + public LiveData> getAvailableRagSocsStrings() { + return availableRagSocsStrings; + } + + public MutableLiveData getRagSocTextBindable() { + return ragSocText; + } + + public MutableLiveData getRagSocBindable() { + return ragSoc; + } + + public MutableLiveData getDataDocBindable() { + return dataDoc; + } + + public DialogUltimiArriviFornitoreFiltroAvanzatoViewModel setRagSoc(GtbAnag ragSocItem) { + if (!Objects.equals(this.ragSoc.getValue(), ragSocItem)) { + this.ragSoc.postValue(ragSocItem); + } + return this; + } + + public DialogUltimiArriviFornitoreFiltroAvanzatoViewModel setDataDoc(Date dataDocItem) { + // L'observer su this.dataDoc gestirà l'aggiornamento di currentDataDocPredicate. + if (!Objects.equals(this.dataDoc.getValue(), dataDocItem)) { + this.dataDoc.postValue(dataDocItem); + } + return this; + } + + /** + * Resetta tutti i filtri ai loro stati predefiniti. + */ + public void resetFilters() { + // Impostando i LiveData a null, gli observer associati (in initBindable) + // si occuperanno di resettare i testi e i predicati. + setRagSoc(null); + setDataDoc(null); // Questo chiamerà l'observer di dataDoc che resetterà currentDataDocPredicate + + // refreshList() sarà chiamato automaticamente dagli observer dei predicati. + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java index f89297a6..768b70db 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java @@ -1,76 +1,61 @@ package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest; import com.annimon.stream.Stream; -import com.google.gson.reflect.TypeToken; -import org.apache.commons.lang3.StringUtils; - -import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.List; import javax.inject.Singleton; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; -import it.integry.integrywmsnative.core.utility.UtilityDB; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto.RetrieveUltimiArriviFornitoriRequestDTO; @Singleton -public class UltimiArriviFornitoreRESTConsumer { +public class UltimiArriviFornitoreRESTConsumer extends _BaseRESTConsumer { + private final RESTBuilder restBuilder; private final SystemRESTConsumer systemRESTConsumer; - public UltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + public UltimiArriviFornitoreRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { + this.restBuilder = restBuilder; this.systemRESTConsumer = systemRESTConsumer; } - public void getAvailableCodAnagFornitori(RunnableArgs> onComplete, RunnableArgs onFailed) { - String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " + - "FROM gtb_anag " + - "INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " + - "WHERE flag_stato = 'A'"; + public List makeSynchronousRetrieveAvailableAnagClientiRequest() throws Exception { - Type typeOfObjectsList = new TypeToken>() { - }.getType(); - this.systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { - if (onComplete != null) onComplete.run(value); - }, ex -> { - if (onFailed != null) onFailed.run(ex); - }); + var response = restBuilder.getService(UltimiArriviFornitoreRESTConsumerService.class) + .retrieveFornitori() + .execute(); + + var data = analyzeAnswerList(response, "retrieve-fornitori"); + return data; } - public void getUltimeConsegneFornitori(String codMdep, String codAnag, List mtbAarts, int limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { - String codMarts = null; + public List makeSynchronousRetrieveUltimiArriviFornitoriRequest(String codMdep, String codAnag, List mtbAarts, Integer limitConsegnePerCli, int limitDays) throws Exception { + List codMarts = null; if (mtbAarts != null && !mtbAarts.isEmpty()) { - codMarts = StringUtils.join(Stream.of(mtbAarts) + codMarts = Stream.of(mtbAarts) .map(MtbAart::getCodMart) - .toList(), "|"); + .toList(); } - String sql = "SELECT consegne.*, " + - " rag_soc " + - "FROM WMS_GetUltimeConsegneFornitori(" + - UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " + - UtilityDB.valueToString(codAnag) + ", " + - UtilityDB.valueToString(codMarts) + ", " + - UtilityDB.valueToString(codMdep) + ", " + - UtilityDB.valueToString(limitDays) + ") consegne " + - "LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " + - "ORDER BY rag_soc, " + - " counter_consegna "; + RetrieveUltimiArriviFornitoriRequestDTO requestBody = new RetrieveUltimiArriviFornitoriRequestDTO() + .setCodAnag(codAnag) + .setCodMarts(codMarts) + .setLimitConsegnePerCli(limitConsegnePerCli) + .setLimitDays(limitDays); + var response = restBuilder.getService(UltimiArriviFornitoreRESTConsumerService.class) + .retrieveUltimiArrivi(codMdep, requestBody) + .execute(); - Type typeOfObjectsList = new TypeToken>() { - }.getType(); - this.systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { - if (onComplete != null) onComplete.run(value); - }, ex -> { - if (onFailed != null) onFailed.run(ex); - }); + var data = analyzeAnswer(response, "retrieve-ultimi-arrivi-fornitori"); + return data.getDocuments() == null ? List.of() : data.getDocuments(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumerService.java new file mode 100644 index 00000000..7bf39876 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumerService.java @@ -0,0 +1,24 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest; + +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto.RetrieveUltimiArriviFornitoriRequestDTO; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto.RetrieveUltimiArriviFornitoriResponseDTO; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface UltimiArriviFornitoreRESTConsumerService { + + @GET("wms/resi-fornitore/retrieve-fornitori") + Call> retrieveFornitori(); + + + + @POST("wms/resi-fornitore/retrieve-ultimi-arrivi") + Call> retrieveUltimiArrivi(@Query("codMdep") String codMdep, + @Body RetrieveUltimiArriviFornitoriRequestDTO requestBody); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/dto/RetrieveUltimiArriviFornitoriRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/dto/RetrieveUltimiArriviFornitoriRequestDTO.java new file mode 100644 index 00000000..86a54d5f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/dto/RetrieveUltimiArriviFornitoriRequestDTO.java @@ -0,0 +1,56 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class RetrieveUltimiArriviFornitoriRequestDTO { + + @SerializedName("codAnag") + private String codAnag; + + @SerializedName("codMarts") + private List codMarts; + + @SerializedName("limitConsegnePerCli") + private Integer limitConsegnePerCli; + + @SerializedName("limitDays") + private Integer limitDays; + + public String getCodAnag() { + return codAnag; + } + + public RetrieveUltimiArriviFornitoriRequestDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public List getCodMarts() { + return codMarts; + } + + public RetrieveUltimiArriviFornitoriRequestDTO setCodMarts(List codMarts) { + this.codMarts = codMarts; + return this; + } + + public Integer getLimitConsegnePerCli() { + return limitConsegnePerCli; + } + + public RetrieveUltimiArriviFornitoriRequestDTO setLimitConsegnePerCli(Integer limitConsegnePerCli) { + this.limitConsegnePerCli = limitConsegnePerCli; + return this; + } + + public Integer getLimitDays() { + return limitDays; + } + + public RetrieveUltimiArriviFornitoriRequestDTO setLimitDays(Integer limitDays) { + this.limitDays = limitDays; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/dto/RetrieveUltimiArriviFornitoriResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/dto/RetrieveUltimiArriviFornitoriResponseDTO.java new file mode 100644 index 00000000..f7f3c357 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/dto/RetrieveUltimiArriviFornitoriResponseDTO.java @@ -0,0 +1,23 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; + +public class RetrieveUltimiArriviFornitoriResponseDTO { + + @SerializedName("documents") + private List documents; + + + public List getDocuments() { + return documents; + } + + public RetrieveUltimiArriviFornitoriResponseDTO setDocuments(List documents) { + this.documents = documents; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/ui/UltimiArriviFornitoreListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/ui/UltimiArriviFornitoreListAdapter.java deleted file mode 100644 index c1c1daef..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/ui/UltimiArriviFornitoreListAdapter.java +++ /dev/null @@ -1,149 +0,0 @@ -package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.ui; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.databinding.DataBindingUtil; -import androidx.databinding.ObservableArrayList; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; -import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding; -import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding; - -public class UltimiArriviFornitoreListAdapter extends ExtendedSectionedRecyclerView { - - private Context mContext; - private RunnableArgs mOnSelectionChanged; - - - static class SubheaderHolder extends RecyclerView.ViewHolder { - - FragmentUltimiArriviFornitoreListHeaderBinding mBinding; - - SubheaderHolder(FragmentUltimiArriviFornitoreListHeaderBinding binding) { - super(binding.getRoot()); - this.mBinding = binding; - } - - } - - static class SingleItemViewHolder extends RecyclerView.ViewHolder { - - FragmentUltimiArriviFornitoreListSingleItemBinding mBinding; - - SingleItemViewHolder(FragmentUltimiArriviFornitoreListSingleItemBinding binding) { - super(binding.getRoot()); - this.mBinding = binding; - } - } - - - - - - public UltimiArriviFornitoreListAdapter(Context context, ObservableArrayList mutableDataSet) { - super(mutableDataSet); - this.mContext = context; - } - - - @Override - public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { - FragmentUltimiArriviFornitoreListSingleItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_ultimi_arrivi_fornitore__list_single_item, parent, false); - return new SingleItemViewHolder(binding); - } - - @Override - public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { - FragmentUltimiArriviFornitoreListHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_ultimi_arrivi_fornitore__list_header, parent, false); - return new SubheaderHolder(binding); - } - - @Override - public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) { - final DocumentoResoDTO consegna = this.originalItems.get(position); - - holder.mBinding.setConsegna(consegna); - - holder.mBinding.descriptionMain.setText(UtilityString.isNullOrEmpty(consegna.getRifOrd()) ? "" : consegna.getRifOrd()); - - String numDoc = "" + consegna.getNumDoc(); - holder.mBinding.badge1.setText(numDoc); - - try { - String dataDocString = ""; - - if(consegna.getDataDoc().getYear() == UtilityDate.getNow().getYear()) { - dataDocString = UtilityDate.formatDate(consegna.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN); - } else { - dataDocString = UtilityDate.formatDate(consegna.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN); - } - - holder.mBinding.date.setText(dataDocString); - - - holder.mBinding.compilatoDa.setText(consegna.getCompilatoDa()); - holder.mBinding.compilatoDa.setVisibility(UtilityString.isNullOrEmpty(consegna.getCompilatoDa()) ? View.GONE : View.VISIBLE); - } catch (Exception ex) { - UtilityExceptions.defaultException(mContext, ex); - } - - - holder.mBinding.getRoot().setOnClickListener(v -> { - consegna.setSelected(!consegna.isSelected()); - - if(this.mOnSelectionChanged != null) mOnSelectionChanged.run(consegna); - }); - - } - - @Override - public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) { - subheaderHolder.mBinding.title.setText(this.originalItems.get(nextItemPosition).getRagSoc()); - } - - @Override - public boolean onPlaceSubheaderBetweenItems(int position) { - - if(!this.originalItems.get(position).getCodAnag().equalsIgnoreCase(this.originalItems.get(position+1).getCodAnag())) { - return true; - } - - return false; - } - - @Override - public int getItemSize() { - return this.originalItems.size(); - } - - - - public void updateItems(List updatedDataset) { - originalItems.clear(); - originalItems.addAll(updatedDataset); - notifyDataSetChanged(); - notifyDataChanged(); - } - - - public void setOnSelectionChanged(RunnableArgs mSelectionChanged) { - this.mOnSelectionChanged = mSelectionChanged; - } - - - -} diff --git a/app/src/main/res/layout/dialog_base.xml b/app/src/main/res/layout/dialog_base.xml index c7a6743f..54f276d2 100644 --- a/app/src/main/res/layout/dialog_base.xml +++ b/app/src/main/res/layout/dialog_base.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - app:cardCornerRadius="12dp" + app:cardCornerRadius="16dp" app:cardElevation="0dp"> - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml index 958ae6fd..a8553708 100644 --- a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml @@ -1,136 +1,91 @@ - - - - + + + + type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoViewModel" /> - + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingHorizontal="16dp" + android:paddingVertical="16dp"> - + android:layout_marginBottom="16dp" + android:gravity="center_horizontal" + android:text="@string/dialog_vendita_filtro_avanzato" /> + - - - + android:singleLine="true" + android:text="@={viewmodel.ragSocTextBindable}" /> - + - + - + android:focusable="false" + android:inputType="textNoSuggestions" + android:singleLine="true" + android:textAppearance="?attr/textAppearanceSubtitle1" + android:minHeight="?attr/listPreferredItemHeightSmall" + app:binding="@{viewmodel.dataDocBindable}" + app:parentView="@{view}" /> + - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml index 33ed841c..10e1b2a3 100644 --- a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml +++ b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml @@ -31,15 +31,8 @@ android:layout_height="match_parent" android:id="@+id/recyclerView" android:scrollbars="none" - android:paddingEnd="4dp"/> - - - - - - - - + android:paddingEnd="4dp" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/> + + + - + app:cardBackgroundColor="@color/gray_200" + app:cardCornerRadius="4dp" + app:cardElevation="0dp"> - - - - + android:ellipsize="end" + android:layout_margin="8dp" + android:singleLine="true" + android:textAllCaps="true" + android:textColor="@android:color/black" + android:textStyle="bold" + android:text="@{item}" + tools:text="Title here" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore__list_single_item.xml b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore__list_single_item.xml index b302b979..0e294d41 100644 --- a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore__list_single_item.xml +++ b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore__list_single_item.xml @@ -1,81 +1,138 @@ - + + - + app:backgroundTintResID="@{item.selected.get() ? R.color.bg_checked_layout : android.R.color.transparent}" > + + + + + + + + + + + + + + + + - - - - - - - - - - + + \ 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 83116803..4bad27fa 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -367,7 +367,7 @@ Destinatario non valido Spedito il - Consegnato il %s + Consegnato il Personalizzazioni Frudis %s non è attivo. Continuare?]]> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed664790..30778704 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -371,7 +371,7 @@ Invalid recipient Shipped - Delivered on %s + Delivered Frudis customizations %s is inactive. To continue?]]>