From 11903d1a348672d372ffd2ddbec1d33dc90fe123 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 11 Mar 2021 15:45:42 +0100 Subject: [PATCH] Refactoring ultimi arrivi fornitori --- .../MainApplicationComponent.java | 4 + .../UltimeConsegneClienteViewModel.java | 12 -- .../UltimeConsegneMainListAdapter.java | 3 - .../UltimiArriviFornitoreComponent.java | 15 ++ .../UltimiArriviFornitoreFragment.java | 189 ++++++++++++++++-- .../UltimiArriviFornitoreModule.java | 30 +++ .../UltimiArriviFornitoreListAdapter.java | 54 +---- .../core/UltimiArriviFornitoreViewModel.java | 185 +++++++---------- .../UltimiArriviFornitoreRESTConsumer.java | 59 +++--- .../fragment_ultimi_arrivi_fornitore.xml | 16 +- 10 files changed, 335 insertions(+), 232 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index b1bc32eb..a502c910 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -29,6 +29,8 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbiso import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent; @@ -47,6 +49,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule; SpedizioneModule.class, AccettazionePickingModule.class, UltimeConsegneClienteModule.class, + UltimiArriviFornitoreModule.class, PickingResiModule.class, OrdiniUscitaElencoModule.class, DialogInputQuantityV2Module.class, @@ -64,6 +67,7 @@ public interface MainApplicationComponent { SpedizioneComponent.Factory spedizioneComponent(); AccettazionePickingComponent.Factory accettazionePickingComponent(); UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent(); + UltimiArriviFornitoreComponent.Factory ultimiArriviFornitoreComponent(); PickingResiComponent.Factory pickingResiComponent(); OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent(); DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component(); 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 95b8e331..7bb95f7d 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 @@ -174,20 +174,8 @@ public class UltimeConsegneClienteViewModel { if (this.mListener != null) mListener.onError(ex); } -// private void sendOnOrderFiltered(List filteredOrders) { -// if (this.mListener != null) mListener.onOrderFiltered(filteredOrders); -// } -// -// private void sendOnOrdersDispatched(List orders, List sitArts, List alreadyRegisteredMtbColts) { -// if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts); -// } - public interface Listener extends ILoadingListener { void onError(Exception ex); - -// void onOrderFiltered(List filteredOrders); -// -// void onOrdersDispatched(List orders, List sitArts, List alreadyRegisteredMtbColts); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java index 86095e3f..f3f68b3e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java @@ -9,7 +9,6 @@ import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.RecyclerView; -import java.util.ArrayList; import java.util.Calendar; import it.integry.integrywmsnative.R; @@ -25,8 +24,6 @@ import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneCliente public class UltimeConsegneMainListAdapter extends ExtendedSectionedRecyclerView { private Context mContext; - private ArrayList mSectionTitleItems; - private RunnableArgs mOnSelectionChanged; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java new file mode 100644 index 00000000..e0211f75 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore; + +import dagger.Subcomponent; + +@Subcomponent +public interface UltimiArriviFornitoreComponent { + + @Subcomponent.Factory + interface Factory{ + UltimiArriviFornitoreComponent create(); + } + + void inject(UltimiArriviFornitoreFragment ultimiArriviFornitoreFragment); + +} 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 a5716dd9..88ee83cd 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 @@ -7,41 +7,64 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.model.GtbAnag; +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.gest.picking_resi.PickingResiActivity; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; import it.integry.integrywmsnative.ui.ElevatedToolbar; /** * A simple {@link Fragment} subclass. */ -public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment { +public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, IFilterableFragment, UltimiArriviFornitoreViewModel.Listener { private final List mOnPreDestroyList = new ArrayList<>(); private ElevatedToolbar mToolbar; - private UltimiArriviFornitoreViewModel mViewModel; + private int barcodeScannerIstanceID = -1; + + private final ObservableArrayList mDocumentiMutableData = new ObservableArrayList<>(); + + @Inject + UltimiArriviFornitoreViewModel mViewModel; + + private FragmentUltimiArriviFornitoreBinding mBindings; + private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; public UltimiArriviFornitoreFragment() { // Required empty public constructor } public static UltimiArriviFornitoreFragment newInstance() { - UltimiArriviFornitoreFragment fragment = new UltimiArriviFornitoreFragment(); - Bundle args = new Bundle(); - - fragment.setArguments(args); - return fragment; + return new UltimiArriviFornitoreFragment(); } @@ -49,21 +72,137 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - FragmentUltimiArriviFornitoreBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false); + mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false); - mViewModel = new UltimiArriviFornitoreViewModel(getActivity(), mBinding); + MainApplication.appComponent + .ultimiArriviFornitoreComponent() + .create() + .inject(this); - mBinding.setViewmodel(mViewModel); + mViewModel.setListener(this); - mToolbar.setRecyclerView(mBinding.recyclerView); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + mBindings.setViewmodel(mViewModel); + + this.initRecyclerView(); // Inflate the layout for this fragment - return mBinding.getRoot(); + return mBindings.getRoot(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + mViewModel.init(codMdep); + + this.mBindings.mainFab.hide(); + this.mBindings.mainFab.setOnClickListener(v -> { + dispatchConsegne(); + }); + + this.mViewModel.getDocuments().observe(this, this::refreshList); + + openFilterDialog(); + } + + + public void openFilterDialog() { + this.mViewModel.loadCodAnagFornitori(gtbAnags -> { + DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> { + mAppliedFilterViewModel = filter; + refreshItems(); + }).show(); + }); + } + + + private void initRecyclerView() { + UltimiArriviFornitoreListAdapter mAdapter = + new UltimiArriviFornitoreListAdapter(getActivity(), mDocumentiMutableData); + mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); + mAdapter.setEmptyView(mBindings.emptyView); + + mBindings.recyclerView.setHasFixedSize(true); + mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + mBindings.recyclerView.setAdapter(mAdapter); +// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView); + + + if (mToolbar != null) + mToolbar.setRecyclerView(mBindings.recyclerView); + + } + + private void refreshList(List documentList) { + this.mDocumentiMutableData.clear(); + this.mDocumentiMutableData.addAll(sort(documentList)); + } + + private void refreshItems() { + this.openProgress(); + + 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(); + } + + this.mViewModel.loadArriviFornitori(currentCodAnagFilter, + null, + -1, + 365); + } + + private List sort(List dataset) { + List items = Stream.of(dataset) + .sortBy(DocumentoResoDTO::getRagSoc) + .toList(); + return items; + + } + + private void onSingleSelectionChanged(DocumentoResoDTO dto) { + List selectedOrders = getSelectedItems(); + + if(dto.isSelected()) { + Stream.of(selectedOrders) + .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) + .forEach(x -> x.setSelected(false)); + } + + if(selectedOrders != null && selectedOrders.size() > 0) { + mBindings.mainFab.show(); + } + else { + mBindings.mainFab.hide(); + } + } + + + private List getSelectedItems() { + return Stream.of(this.mDocumentiMutableData) + .filter(DocumentoResoDTO::isSelected) + .toList(); + } + + private void dispatchConsegne() { + List selectedConsegne = getSelectedItems(); + + PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); + } + + @Override public void onDestroy() { - for(Runnable onPreDestroy : mOnPreDestroyList) { + for (Runnable onPreDestroy : mOnPreDestroyList) { onPreDestroy.run(); } super.onDestroy(); @@ -80,12 +219,9 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr } - - - @Override public void onFilterClick() { - mViewModel.openFilterDialog(); + openFilterDialog(); } @@ -93,4 +229,23 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); } + + @Override + public void onLoadingStarted() { + BarcodeManager.disable(); + this.openProgress(); + } + + @Override + public void onLoadingEnded() { + this.closeProgress(); + BarcodeManager.enable(); + } + + @Override + public void onError(Exception ex) { + this.closeProgress(); + UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); + BarcodeManager.enable(); + } } 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 new file mode 100644 index 00000000..fcb4e8fa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java @@ -0,0 +1,30 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; + +@Module(subcomponents = UltimiArriviFornitoreComponent.class) +public class UltimiArriviFornitoreModule { + + @Singleton + @Provides + UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + return new UltimiArriviFornitoreRESTConsumer(systemRESTConsumer); + } + + @Provides + UltimiArriviFornitoreViewModel providesUltimiArriviFornitoreViewModel( + UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + return new UltimiArriviFornitoreViewModel(ultimiArriviFornitoreRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java index a34152fe..8249b12e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java @@ -6,38 +6,29 @@ import android.view.View; import android.view.ViewGroup; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.RecyclerView; -import com.annimon.stream.Stream; -import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; - -import java.util.ArrayList; import java.util.Calendar; import java.util.List; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; 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; -import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; -public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { +public class UltimiArriviFornitoreListAdapter extends ExtendedSectionedRecyclerView { private Context mContext; - private List mDataset; - private ArrayList mSectionTitleItems; - private RunnableArgs mOnSelectionChanged; - @Override - public String getSectionTitle(int position) { - return mSectionTitleItems.get(position); - } - static class SubheaderHolder extends RecyclerView.ViewHolder { @@ -64,13 +55,9 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt - public UltimiArriviFornitoreListAdapter(Context context, ArrayList dataset) { - super(); + public UltimiArriviFornitoreListAdapter(Context context, ObservableArrayList mutableDataSet) { + super(mutableDataSet); this.mContext = context; - this.mDataset = new ArrayList<>(); - this.mSectionTitleItems = new ArrayList<>(); - - mDataset.addAll(sort(dataset)); } @@ -152,7 +139,7 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt public void updateItems(List updatedDataset) { mDataset.clear(); - mDataset.addAll(sort(updatedDataset)); + mDataset.addAll(updatedDataset); notifyDataSetChanged(); notifyDataChanged(); } @@ -163,28 +150,5 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt } - private List sort(List dataset) { - List items = Stream.of(dataset) - .sortBy(DocumentoResoDTO::getRagSoc) - .toList(); - - - Stream.of(items) - .map(DocumentoResoDTO::getRagSoc) - .distinct() - .forEach(x -> { - this.mSectionTitleItems.add(String.valueOf(x.charAt(0))); - - long count = Stream.of(dataset) - .filter(y -> y.getRagSoc().equalsIgnoreCase(x)) - .count(); - - - for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0))); - }); - return items; - - } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java index ad4787de..3217e6ff 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java @@ -1,154 +1,105 @@ package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core; -import android.app.Dialog; -import android.content.Context; -import android.view.View; +import androidx.lifecycle.MutableLiveData; -import androidx.recyclerview.widget.LinearLayoutManager; - -import com.annimon.stream.Optional; -import com.annimon.stream.Stream; - -import java.util.ArrayList; import java.util.List; -import it.integry.integrywmsnative.R; +import javax.inject.Inject; + +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.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; 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.core.utility.UtilityProgress; -import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; -import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; public class UltimiArriviFornitoreViewModel { - private Context mContext; - private FragmentUltimiArriviFornitoreBinding mBinding; + private final MutableLiveData> mGtbAnagClienti = new MutableLiveData<>(); + private final MutableLiveData> mDocuments = new MutableLiveData<>(); - private List mItems; - private List mRenderedItems = new ArrayList<>(); + private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; - private List mAvailableGtbAnags = null; + private Listener mListener; - private UltimiArriviFornitoreListAdapter mAdapter; + private String mCodMdep; - private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; + @Inject + public UltimiArriviFornitoreViewModel( + UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + this.mUltimiArriviFornitoreRESTConsumer = ultimiArriviFornitoreRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + } - public UltimiArriviFornitoreViewModel(Context context, FragmentUltimiArriviFornitoreBinding binding) { - this.mContext = context; - this.mBinding = binding; - this.mBinding.mainFab.hide(); - this.mBinding.mainFab.setOnClickListener(v -> { - dispatchConsegne(); - }); + public void init(String codMdep) { + this.mCodMdep = codMdep; + } - openFilterDialog(); + + public void loadCodAnagFornitori(RunnableArgs> onComplete) { + this.sendOnLoadingStarted(); + + this.mUltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> { + mGtbAnagClienti.postValue(gtbAnags); + this.sendOnLoadingEnded(); + + onComplete.run(gtbAnags); + }, this::sendError); + } + + public void loadArriviFornitori(String codAnag, String codMart, int limitDocsForCli, int limitDays) { + this.sendOnLoadingStarted(); + + this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, codMart, limitDocsForCli, limitDays, documentList -> { + this.mDocuments.postValue(documentList); + this.sendOnLoadingEnded(); + }, this::sendError); } - private void initDataAdapter(ArrayList dataset) { - mAdapter = new UltimiArriviFornitoreListAdapter(mContext, dataset); - mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); - mBinding.recyclerView.setHasFixedSize(true); - mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); - mBinding.recyclerView.setAdapter(mAdapter); - mBinding.fastscroll.setRecyclerView(mBinding.recyclerView); + + + + + + + + public MutableLiveData> getGtbAnagClienti() { + return mGtbAnagClienti; } - - public void openFilterDialog() { - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - - UltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> { - mAvailableGtbAnags = gtbAnags; - progressDialog.dismiss(); - - DialogUltimiArriviFornitoreFiltroAvanzato.make(mContext, mAvailableGtbAnags, mAppliedFilterViewModel, (filter) -> { - mAppliedFilterViewModel = filter; - refreshItems(); - }).show(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); + public MutableLiveData> getDocuments() { + return mDocuments; } - - private void dispatchConsegne() { - List selectedConsegne = getSelectedItems(); - - PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); + public UltimiArriviFornitoreViewModel setListener(UltimiArriviFornitoreViewModel.Listener listener) { + this.mListener = listener; + return this; } - private List getSelectedItems() { - return Stream.of(this.mItems) - .filter(DocumentoResoDTO::isSelected) - .toList(); + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); } - - private void refreshItems(){ - - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - - String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; - String currentCodAnagFilter = null; - - Optional singleGtbAnag = Stream.of(mAvailableGtbAnags) - .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) - .findSingle(); - - if(singleGtbAnag.isPresent()) { - currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); - } - - - UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori( - SettingsManager.i().getUserSession().getDepo().getCodMdep(), - currentCodAnagFilter, - null, - null, - 365, - consegne -> { - this.mItems = consegne; - - this.initDataAdapter(consegne); - - mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE); - - mRenderedItems.clear(); - if(this.mItems != null) mRenderedItems.addAll(this.mItems); - mAdapter.updateItems(mRenderedItems); - - progressDialog.dismiss(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); - - + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); } + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } - private void onSingleSelectionChanged(DocumentoResoDTO dto) { - List selectedOrders = getSelectedItems(); - - if(dto.isSelected()) { - Stream.of(selectedOrders) - .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) - .forEach(x -> x.setSelected(false)); - } - - if(selectedOrders != null && selectedOrders.size() > 0) { - mBinding.mainFab.show(); - } - else { - mBinding.mainFab.hide(); - } + public interface Listener extends ILoadingListener { + void onError(Exception ex); } } 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 89bbaeeb..8a2d3663 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 @@ -6,42 +6,43 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import it.integry.integrywmsnative.core.model.GtbAnag; -import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; -import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.utility.UtilityDB; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import javax.inject.Singleton; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.utility.UtilityDB; + +@Singleton public class UltimiArriviFornitoreRESTConsumer { - public static void getAvailableCodAnagFornitori(RunnableArgs> onComplete, RunnableArgs onFailed) { + private final SystemRESTConsumer systemRESTConsumer; + + public UltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + 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'"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + this.systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } - public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { - - + public void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, int limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { String sql = "SELECT consegne.*, " + " rag_soc " + "FROM WMS_GetUltimeConsegneFornitori(" + - UtilityDB.valueToString(limitConsegnePerCli) + ", " + + UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " + UtilityDB.valueToString(codAnag) + ", " + UtilityDB.valueToString(codMart) + ", " + UtilityDB.valueToString(codMdep) + ", " + @@ -52,16 +53,10 @@ public class UltimiArriviFornitoreRESTConsumer { Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + this.systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } 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 a5f6d06a..b5d13b56 100644 --- a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml +++ b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml @@ -4,6 +4,10 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> + + @@ -29,12 +33,12 @@ android:scrollbars="none" android:paddingEnd="4dp"/> - + + + + + +