Refactoring ultime consegne cliente
This commit is contained in:
parent
aa8a54547c
commit
ff448b36b9
@ -27,6 +27,8 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
|
|||||||
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
|
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
|
||||||
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
|
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
|
||||||
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
|
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.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
|
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.input_quantity_v2.DialogInputQuantityV2Module;
|
||||||
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
|
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
|
||||||
@ -44,6 +46,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
|
|||||||
RettificaGiacenzeModule.class,
|
RettificaGiacenzeModule.class,
|
||||||
SpedizioneModule.class,
|
SpedizioneModule.class,
|
||||||
AccettazionePickingModule.class,
|
AccettazionePickingModule.class,
|
||||||
|
UltimeConsegneClienteModule.class,
|
||||||
PickingResiModule.class,
|
PickingResiModule.class,
|
||||||
OrdiniUscitaElencoModule.class,
|
OrdiniUscitaElencoModule.class,
|
||||||
DialogInputQuantityV2Module.class,
|
DialogInputQuantityV2Module.class,
|
||||||
@ -60,6 +63,7 @@ public interface MainApplicationComponent {
|
|||||||
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
|
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
|
||||||
SpedizioneComponent.Factory spedizioneComponent();
|
SpedizioneComponent.Factory spedizioneComponent();
|
||||||
AccettazionePickingComponent.Factory accettazionePickingComponent();
|
AccettazionePickingComponent.Factory accettazionePickingComponent();
|
||||||
|
UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent();
|
||||||
PickingResiComponent.Factory pickingResiComponent();
|
PickingResiComponent.Factory pickingResiComponent();
|
||||||
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
|
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
|
||||||
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
|
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
|
||||||
|
|||||||
@ -0,0 +1,56 @@
|
|||||||
|
package it.integry.integrywmsnative.core.expansion.view;
|
||||||
|
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.databinding.ObservableArrayList;
|
||||||
|
import androidx.databinding.ObservableList;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
|
||||||
|
|
||||||
|
public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.ViewHolder, VH extends RecyclerView.ViewHolder>
|
||||||
|
extends SectionedRecyclerViewAdapter<SH, VH> {
|
||||||
|
|
||||||
|
protected ArrayList<T> mDataset = new ArrayList<>();
|
||||||
|
private View mEmptyView;
|
||||||
|
|
||||||
|
public ExtendedSectionedRecyclerView(ObservableArrayList<T> myDataset) {
|
||||||
|
mDataset.addAll(myDataset);
|
||||||
|
|
||||||
|
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(ObservableList sender) {
|
||||||
|
mDataset.clear();
|
||||||
|
mDataset.addAll(sender);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
notifyDataChanged();
|
||||||
|
checkIfEmpty();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
checkIfEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExtendedSectionedRecyclerView<T, SH, VH> setEmptyView(View emptyView) {
|
||||||
|
this.mEmptyView = emptyView;
|
||||||
|
this.checkIfEmpty();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemSize() {
|
||||||
|
return this.mDataset.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkIfEmpty() {
|
||||||
|
if (mEmptyView != null) {
|
||||||
|
final boolean emptyViewVisible = getItemSize() == 0;
|
||||||
|
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -4,6 +4,9 @@ import android.app.Dialog;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.google.firebase.crashlytics.FirebaseCrashlytics;
|
import com.google.firebase.crashlytics.FirebaseCrashlytics;
|
||||||
import com.orhanobut.logger.Logger;
|
import com.orhanobut.logger.Logger;
|
||||||
|
|
||||||
@ -43,9 +46,17 @@ public class UtilityExceptions {
|
|||||||
if(ex.getCause() != null) errorMessage += "<br />" + ex.getCause().getMessage();
|
if(ex.getCause() != null) errorMessage += "<br />" + ex.getCause().getMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(UtilityContext.getMainActivity() != null) {
|
FragmentManager fm = null;
|
||||||
|
|
||||||
|
if(context != null && context instanceof FragmentActivity) {
|
||||||
|
fm = ((FragmentActivity) context).getSupportFragmentManager();
|
||||||
|
} else if(UtilityContext.getMainActivity() != null) {
|
||||||
|
fm = UtilityContext.getMainActivity().getSupportFragmentManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fm != null) {
|
||||||
DialogSimpleMessageView.makeErrorDialog(new SpannableString(errorMessage), null, null)
|
DialogSimpleMessageView.makeErrorDialog(new SpannableString(errorMessage), null, null)
|
||||||
.show(UtilityContext.getMainActivity().getSupportFragmentManager(), "tag");
|
.show(fm, "tag");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!BuildConfig.DEBUG) {
|
if(!BuildConfig.DEBUG) {
|
||||||
|
|||||||
@ -68,11 +68,11 @@ public class UtilityString {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Spanned formatHtmlString(String format, String... params){
|
public static Spanned formatHtmlString(String format, String... params){
|
||||||
return Html.fromHtml(String.format(format,params));
|
return Html.fromHtml(String.format(format, (Object[]) params));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Spanned formatHtmlStringFromResId(@StringRes int stringId, String... params){
|
public static Spanned formatHtmlStringFromResId(@StringRes int stringId, String... params){
|
||||||
return Html.fromHtml(String.format(UtilityResources.getString(stringId),params));
|
return Html.fromHtml(String.format(UtilityResources.getString(stringId), (Object[]) params));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -7,8 +7,6 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.widget.AppCompatTextView;
|
import androidx.appcompat.widget.AppCompatTextView;
|
||||||
import androidx.core.content.res.ResourcesCompat;
|
import androidx.core.content.res.ResourcesCompat;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
@ -132,8 +130,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onStart() {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onStart();
|
||||||
|
|
||||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||||
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
|
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import it.integry.integrywmsnative.core.exception.InvalidLUMultiGestioneExceptio
|
|||||||
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
|
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
|
||||||
import it.integry.integrywmsnative.core.exception.NoOrderFoundException;
|
import it.integry.integrywmsnative.core.exception.NoOrderFoundException;
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||||
|
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
|
||||||
import it.integry.integrywmsnative.core.model.DtbOrdt;
|
import it.integry.integrywmsnative.core.model.DtbOrdt;
|
||||||
import it.integry.integrywmsnative.core.model.MtbColt;
|
import it.integry.integrywmsnative.core.model.MtbColt;
|
||||||
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
|
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
|
||||||
@ -282,10 +283,7 @@ public class OrdiniUscitaElencoViewModel {
|
|||||||
if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts);
|
if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Listener {
|
public interface Listener extends ILoadingListener {
|
||||||
void onLoadingStarted();
|
|
||||||
|
|
||||||
void onLoadingEnded();
|
|
||||||
|
|
||||||
void onError(Exception ex);
|
void onError(Exception ex);
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,14 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
|
||||||
|
|
||||||
|
import dagger.Subcomponent;
|
||||||
|
|
||||||
|
@Subcomponent
|
||||||
|
public interface UltimeConsegneClienteComponent {
|
||||||
|
|
||||||
|
@Subcomponent.Factory
|
||||||
|
interface Factory{
|
||||||
|
UltimeConsegneClienteComponent create();
|
||||||
|
}
|
||||||
|
|
||||||
|
void inject(UltimeConsegneClienteFragment ultimeConsegneClienteFragment);
|
||||||
|
}
|
||||||
@ -7,38 +7,62 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.AppCompatTextView;
|
import androidx.appcompat.widget.AppCompatTextView;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.databinding.ObservableArrayList;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
|
import com.annimon.stream.Optional;
|
||||||
|
import com.annimon.stream.Stream;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||||
|
import it.integry.integrywmsnative.MainApplication;
|
||||||
import it.integry.integrywmsnative.R;
|
import it.integry.integrywmsnative.R;
|
||||||
|
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
|
||||||
|
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.BaseFragment;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
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.FragmentMainUltimeConsegneClienteBinding;
|
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding;
|
||||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel.UltimeConsegneClienteViewModel;
|
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
||||||
|
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
|
||||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||||
|
|
||||||
public class UltimeConsegneClienteFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
|
public class UltimeConsegneClienteFragment extends BaseFragment implements UltimeConsegneClienteViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment {
|
||||||
|
|
||||||
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
|
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
|
||||||
private ElevatedToolbar mToolbar;
|
private ElevatedToolbar mToolbar;
|
||||||
|
|
||||||
private UltimeConsegneClienteViewModel mViewModel;
|
private int barcodeScannerIstanceID = -1;
|
||||||
|
|
||||||
|
private final ObservableArrayList<DocumentoResoDTO> mDocumentiMutableData = new ObservableArrayList<>();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
UltimeConsegneClienteViewModel mViewModel;
|
||||||
|
|
||||||
|
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||||
|
|
||||||
|
private FragmentMainUltimeConsegneClienteBinding mBindings;
|
||||||
|
|
||||||
public UltimeConsegneClienteFragment() {
|
public UltimeConsegneClienteFragment() {
|
||||||
// Required empty public constructor
|
// Required empty public constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UltimeConsegneClienteFragment newInstance() {
|
public static UltimeConsegneClienteFragment newInstance() {
|
||||||
UltimeConsegneClienteFragment fragment = new UltimeConsegneClienteFragment();
|
return new UltimeConsegneClienteFragment();
|
||||||
Bundle args = new Bundle();
|
|
||||||
|
|
||||||
fragment.setArguments(args);
|
|
||||||
return fragment;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -46,21 +70,158 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr
|
|||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
FragmentMainUltimeConsegneClienteBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false);
|
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false);
|
||||||
|
|
||||||
mViewModel = new UltimeConsegneClienteViewModel(getActivity(), mBinding);
|
MainApplication.appComponent
|
||||||
|
.ultimeConsegneClienteComponent()
|
||||||
|
.create()
|
||||||
|
.inject(this);
|
||||||
|
|
||||||
mBinding.setViewmodel(mViewModel);
|
mViewModel.setListener(this);
|
||||||
|
|
||||||
mToolbar.setRecyclerView(mBinding.recyclerView);
|
mBindings.setLifecycleOwner(this);
|
||||||
|
mBindings.setView(this);
|
||||||
|
mBindings.setViewmodel(mViewModel);
|
||||||
|
|
||||||
|
|
||||||
|
this.initRecyclerView();
|
||||||
|
// this.initBarcodeReader();
|
||||||
|
|
||||||
// Inflate the layout for this fragment
|
// 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.loadCodAnagClienti(gtbAnags -> {
|
||||||
|
DialogUltimeConsegneFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
|
||||||
|
mAppliedFilterViewModel = filter;
|
||||||
|
refreshItems();
|
||||||
|
}).show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initRecyclerView() {
|
||||||
|
UltimeConsegneMainListAdapter mAdapter =
|
||||||
|
new UltimeConsegneMainListAdapter(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 initBarcodeReader() {
|
||||||
|
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
|
||||||
|
.setOnScanSuccessfull(onScanSuccessful)
|
||||||
|
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
|
||||||
|
|
||||||
|
BarcodeManager.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||||
|
BarcodeManager.disable();
|
||||||
|
|
||||||
|
this.mViewModel.processBarcodeDTO(data, () -> {
|
||||||
|
BarcodeManager.enable();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
private void refreshList(List<DocumentoResoDTO> 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<GtbAnag> singleGtbAnag = Stream.of(this.mViewModel.getGtbAnagClienti().getValue())
|
||||||
|
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
|
||||||
|
.findSingle();
|
||||||
|
|
||||||
|
if (singleGtbAnag.isPresent()) {
|
||||||
|
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.mViewModel.loadConsegneClienti(currentCodAnagFilter,
|
||||||
|
null,
|
||||||
|
-1,
|
||||||
|
548
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
||||||
|
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
|
||||||
|
.sortBy(DocumentoResoDTO::getRagSoc)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return sortedDataset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
|
||||||
|
List<DocumentoResoDTO> 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<DocumentoResoDTO> getSelectedItems() {
|
||||||
|
return Stream.of(this.mDocumentiMutableData)
|
||||||
|
.filter(DocumentoResoDTO::isSelected)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void dispatchConsegne() {
|
||||||
|
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
|
||||||
|
|
||||||
|
PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
for(Runnable onPreDestroy : mOnPreDestroyList) {
|
for (Runnable onPreDestroy : mOnPreDestroyList) {
|
||||||
onPreDestroy.run();
|
onPreDestroy.run();
|
||||||
}
|
}
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
@ -78,11 +239,30 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFilterClick() {
|
public void onFilterClick() {
|
||||||
mViewModel.openFilterDialog();
|
openFilterDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addOnPreDestroy(Runnable onPreDestroy) {
|
public void addOnPreDestroy(Runnable onPreDestroy) {
|
||||||
this.mOnPreDestroyList.add(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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
|
||||||
|
|
||||||
|
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.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
|
||||||
|
|
||||||
|
@Module(subcomponents = UltimeConsegneClienteComponent.class)
|
||||||
|
public class UltimeConsegneClienteModule {
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
@Provides
|
||||||
|
UltimeConsegneClienteRESTConsumer providesUltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
||||||
|
return new UltimeConsegneClienteRESTConsumer(systemRESTConsumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
UltimeConsegneClienteViewModel providesUltimeConsegneClienteViewModel(
|
||||||
|
UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer,
|
||||||
|
BarcodeRESTConsumer barcodeRESTConsumer,
|
||||||
|
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
|
||||||
|
return new UltimeConsegneClienteViewModel(ultimeConsegneClienteRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,193 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
|
||||||
|
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||||
|
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.rest.consumers.BarcodeRESTConsumer;
|
||||||
|
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||||
|
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||||
|
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
|
||||||
|
|
||||||
|
public class UltimeConsegneClienteViewModel {
|
||||||
|
|
||||||
|
|
||||||
|
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
|
||||||
|
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
|
||||||
|
|
||||||
|
private final UltimeConsegneClienteRESTConsumer mUltimeConsegneClienteRESTConsumer;
|
||||||
|
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
|
||||||
|
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
|
||||||
|
|
||||||
|
private Listener mListener;
|
||||||
|
|
||||||
|
private String mCodMdep;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public UltimeConsegneClienteViewModel(
|
||||||
|
UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer,
|
||||||
|
BarcodeRESTConsumer barcodeRESTConsumer,
|
||||||
|
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
|
||||||
|
this.mUltimeConsegneClienteRESTConsumer = ultimeConsegneClienteRESTConsumer;
|
||||||
|
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
|
||||||
|
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void init(String codMdep) {
|
||||||
|
this.mCodMdep = codMdep;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete) {
|
||||||
|
this.sendOnLoadingStarted();
|
||||||
|
|
||||||
|
this.mUltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
|
||||||
|
mGtbAnagClienti.postValue(gtbAnags);
|
||||||
|
this.sendOnLoadingEnded();
|
||||||
|
|
||||||
|
onComplete.run(gtbAnags);
|
||||||
|
}, this::sendError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void loadConsegneClienti(String codAnag, String codMart, int limitDocsForCli, int limitDays) {
|
||||||
|
this.sendOnLoadingStarted();
|
||||||
|
|
||||||
|
this.mUltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(mCodMdep, codAnag, codMart, limitDocsForCli, limitDays, documentList -> {
|
||||||
|
this.mDocuments.postValue(documentList);
|
||||||
|
this.sendOnLoadingEnded();
|
||||||
|
}, this::sendError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
|
||||||
|
|
||||||
|
this.sendOnLoadingStarted();
|
||||||
|
|
||||||
|
RunnableArgs<List<OrdiniUscitaElencoDTO>> onBarcodeScanComplete = orderList -> {
|
||||||
|
onComplete.run();
|
||||||
|
this.sendOnLoadingEnded();
|
||||||
|
};
|
||||||
|
|
||||||
|
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
|
||||||
|
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
|
||||||
|
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
|
||||||
|
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
|
||||||
|
} else {
|
||||||
|
onComplete.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void executeEtichettaLU(String SSCC, RunnableArgs<List<OrdiniUscitaElencoDTO>> onComplete) {
|
||||||
|
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
|
||||||
|
|
||||||
|
if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
|
||||||
|
|
||||||
|
// if(mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
|
||||||
|
// //GET BY COMMESSA COLLO
|
||||||
|
// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> {
|
||||||
|
//
|
||||||
|
// if(orderList != null && orderList.size() > 0) {
|
||||||
|
// List<Integer> numOrds = Stream.of(orderList)
|
||||||
|
// .map(DtbOrdt::getNumOrd)
|
||||||
|
// .toList();
|
||||||
|
//
|
||||||
|
// List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
|
||||||
|
// .filter(x -> numOrds.contains(x.getNumOrd())).toList();
|
||||||
|
//
|
||||||
|
// onComplete.run(filteredOrders);
|
||||||
|
// } else {
|
||||||
|
// this.sendError(new NoOrderFoundException());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }, this::sendError);
|
||||||
|
//
|
||||||
|
// } else {
|
||||||
|
// this.sendError(new InvalidLUGestioneException(GestioneEnum.VENDITA));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
} else {
|
||||||
|
this.sendError(new NoLUFoundException());
|
||||||
|
}
|
||||||
|
|
||||||
|
}, this::sendError);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgs<List<OrdiniUscitaElencoDTO>> onComplete) {
|
||||||
|
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
|
||||||
|
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(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());
|
||||||
|
}
|
||||||
|
}, this::sendError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
|
||||||
|
return mGtbAnagClienti;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<List<DocumentoResoDTO>> getDocuments() {
|
||||||
|
return mDocuments;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UltimeConsegneClienteViewModel setListener(Listener listener) {
|
||||||
|
this.mListener = listener;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendOnLoadingStarted() {
|
||||||
|
if (this.mListener != null) mListener.onLoadingStarted();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendOnLoadingEnded() {
|
||||||
|
if (this.mListener != null) mListener.onLoadingEnded();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendError(Exception ex) {
|
||||||
|
if (this.mListener != null) mListener.onError(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// private void sendOnOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders) {
|
||||||
|
// if (this.mListener != null) mListener.onOrderFiltered(filteredOrders);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// private void sendOnOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<MtbColt> alreadyRegisteredMtbColts) {
|
||||||
|
// if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts);
|
||||||
|
// }
|
||||||
|
|
||||||
|
public interface Listener extends ILoadingListener {
|
||||||
|
void onError(Exception ex);
|
||||||
|
|
||||||
|
// void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders);
|
||||||
|
//
|
||||||
|
// void onOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<MtbColt> alreadyRegisteredMtbColts);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,44 +1,34 @@
|
|||||||
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel;
|
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.core.content.res.ResourcesCompat;
|
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
import androidx.databinding.ObservableArrayList;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import it.integry.integrywmsnative.R;
|
import it.integry.integrywmsnative.R;
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
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.UtilityDate;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||||
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListHeaderBinding;
|
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListHeaderBinding;
|
||||||
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListSingleItemBinding;
|
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListSingleItemBinding;
|
||||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
|
||||||
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
|
|
||||||
|
|
||||||
public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<UltimeConsegneMainListAdapter.SubheaderHolder, UltimeConsegneMainListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
|
public class UltimeConsegneMainListAdapter extends ExtendedSectionedRecyclerView<DocumentoResoDTO, UltimeConsegneMainListAdapter.SubheaderHolder, UltimeConsegneMainListAdapter.SingleItemViewHolder> {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private List<DocumentoResoDTO> mDataset;
|
|
||||||
private ArrayList<String> mSectionTitleItems;
|
private ArrayList<String> mSectionTitleItems;
|
||||||
|
|
||||||
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
|
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getSectionTitle(int position) {
|
|
||||||
return mSectionTitleItems.get(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
||||||
@ -65,12 +55,9 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public UltimeConsegneMainListAdapter(Context context, ArrayList<DocumentoResoDTO> dataset) {
|
public UltimeConsegneMainListAdapter(Context context, ObservableArrayList<DocumentoResoDTO> mutableDataSet) {
|
||||||
super();
|
super(mutableDataSet);
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
this.mDataset = new ArrayList<>();
|
|
||||||
|
|
||||||
updateItems(sort(dataset));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -146,45 +133,6 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemSize() {
|
|
||||||
return this.mDataset.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
|
|
||||||
mDataset.clear();
|
|
||||||
mDataset.addAll(sort(updatedDataset));
|
|
||||||
notifyDataSetChanged();
|
|
||||||
notifyDataChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
|
||||||
this.mSectionTitleItems = new ArrayList<>();
|
|
||||||
|
|
||||||
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
|
|
||||||
.sortBy(DocumentoResoDTO::getRagSoc)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
|
|
||||||
Stream.of(sortedDataset)
|
|
||||||
.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 sortedDataset;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOnSelectionChanged(RunnableArgs<DocumentoResoDTO> mSelectionChanged) {
|
public void setOnSelectionChanged(RunnableArgs<DocumentoResoDTO> mSelectionChanged) {
|
||||||
this.mOnSelectionChanged = mSelectionChanged;
|
this.mOnSelectionChanged = mSelectionChanged;
|
||||||
@ -8,6 +8,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import it.integry.integrywmsnative.core.model.GtbAnag;
|
import it.integry.integrywmsnative.core.model.GtbAnag;
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
|
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
|
||||||
@ -20,35 +22,37 @@ import it.integry.integrywmsnative.core.utility.UtilityQuery;
|
|||||||
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
|
||||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
public class UltimeConsegneClienteRESTConsumer {
|
public class UltimeConsegneClienteRESTConsumer {
|
||||||
|
|
||||||
public static void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
|
private final SystemRESTConsumer systemRESTConsumer;
|
||||||
|
|
||||||
|
public UltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
||||||
|
this.systemRESTConsumer = systemRESTConsumer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
|
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
|
||||||
"FROM gtb_anag " +
|
"FROM gtb_anag " +
|
||||||
"INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " +
|
"INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " +
|
||||||
"WHERE flag_stato = 'A'";
|
"WHERE flag_stato = 'A'";
|
||||||
|
|
||||||
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
|
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {
|
||||||
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
|
}.getType();
|
||||||
@Override
|
systemRESTConsumer.<ArrayList<GtbAnag>>processSql(sql, typeOfObjectsList, value -> {
|
||||||
public void onSuccess(ArrayList<GtbAnag> value) {
|
if (onComplete != null) onComplete.run(value);
|
||||||
if(onComplete != null) onComplete.run(value);
|
}, ex -> {
|
||||||
}
|
if (onFailed != null) onFailed.run(ex);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailed(Exception ex) {
|
|
||||||
if(onFailed != null) onFailed.run(ex);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
public void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
|
|
||||||
String sql = "SELECT consegne.*, " +
|
String sql = "SELECT consegne.*, " +
|
||||||
" rag_soc," +
|
" rag_soc," +
|
||||||
" dtb_doct.gestione " +
|
" dtb_doct.gestione " +
|
||||||
"FROM WMS_GetUltimeConsegneClienti(" +
|
"FROM WMS_GetUltimeConsegneClienti(" +
|
||||||
UtilityDB.valueToString(limitConsegnePerCli) + ", " +
|
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
|
||||||
UtilityDB.valueToString(codAnag) + ", " +
|
UtilityDB.valueToString(codAnag) + ", " +
|
||||||
UtilityDB.valueToString(codMart) + ", " +
|
UtilityDB.valueToString(codMart) + ", " +
|
||||||
UtilityDB.valueToString(codMdep) + ", " +
|
UtilityDB.valueToString(codMdep) + ", " +
|
||||||
@ -59,26 +63,20 @@ public class UltimeConsegneClienteRESTConsumer {
|
|||||||
" counter_consegna ";
|
" counter_consegna ";
|
||||||
|
|
||||||
|
|
||||||
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {}.getType();
|
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
|
||||||
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DocumentoResoDTO>>() {
|
}.getType();
|
||||||
@Override
|
systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
|
||||||
public void onSuccess(ArrayList<DocumentoResoDTO> value) {
|
if (onComplete != null) onComplete.run(value);
|
||||||
if(onComplete != null) onComplete.run(value);
|
}, ex -> {
|
||||||
}
|
if (onFailed != null) onFailed.run(ex);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailed(Exception ex) {
|
|
||||||
if(onFailed != null) onFailed.run(ex);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void loadDocRowFromConsegna(List<DocumentoResoDTO> consegne, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
|
public static void loadDocRowFromConsegna(List<DocumentoResoDTO> consegne, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
List<HashMap<String, Object>> filterCond = new ArrayList<>();
|
List<HashMap<String, Object>> filterCond = new ArrayList<>();
|
||||||
|
|
||||||
for(int i = 0; i < consegne.size(); i++) {
|
for (int i = 0; i < consegne.size(); i++) {
|
||||||
HashMap<String, Object> filter = new HashMap<>();
|
HashMap<String, Object> filter = new HashMap<>();
|
||||||
|
|
||||||
filter.put("dtb_docr.data_doc", consegne.get(i).getDataDocD());
|
filter.put("dtb_docr.data_doc", consegne.get(i).getDataDocD());
|
||||||
@ -177,12 +175,13 @@ public class UltimeConsegneClienteRESTConsumer {
|
|||||||
"ORDER BY cod_mart";
|
"ORDER BY cod_mart";
|
||||||
|
|
||||||
|
|
||||||
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {}.getType();
|
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {
|
||||||
|
}.getType();
|
||||||
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
|
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
|
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
|
||||||
|
|
||||||
if(values != null && values.size() > 0){
|
if (values != null && values.size() > 0) {
|
||||||
List<String> codMarts = Stream.of(values)
|
List<String> codMarts = Stream.of(values)
|
||||||
.map(DtbDocr::getCodMart)
|
.map(DtbDocr::getCodMart)
|
||||||
.withoutNulls()
|
.withoutNulls()
|
||||||
@ -191,7 +190,7 @@ public class UltimeConsegneClienteRESTConsumer {
|
|||||||
|
|
||||||
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
|
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
|
||||||
|
|
||||||
if(arts != null && arts.size() > 0) {
|
if (arts != null && arts.size() > 0) {
|
||||||
for (DtbDocr value : values) {
|
for (DtbDocr value : values) {
|
||||||
|
|
||||||
MtbAart foundMtbAart = null;
|
MtbAart foundMtbAart = null;
|
||||||
@ -199,7 +198,7 @@ public class UltimeConsegneClienteRESTConsumer {
|
|||||||
List<MtbAart> mtbAartStream = Stream.of(arts)
|
List<MtbAart> mtbAartStream = Stream.of(arts)
|
||||||
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
|
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
|
||||||
|
|
||||||
if(mtbAartStream != null && mtbAartStream.size() > 0){
|
if (mtbAartStream != null && mtbAartStream.size() > 0) {
|
||||||
foundMtbAart = mtbAartStream.get(0);
|
foundMtbAart = mtbAartStream.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,19 +206,19 @@ public class UltimeConsegneClienteRESTConsumer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(onComplete != null) onComplete.run(values);
|
if (onComplete != null) onComplete.run(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, onFailed);
|
}, onFailed);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if(onComplete != null) onComplete.run(values);
|
if (onComplete != null) onComplete.run(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailed(Exception ex) {
|
public void onFailed(Exception ex) {
|
||||||
if(onFailed != null) onFailed.run(ex);
|
if (onFailed != null) onFailed.run(ex);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,146 +0,0 @@
|
|||||||
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel;
|
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.View;
|
|
||||||
|
|
||||||
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 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.core.utility.UtilityProgress;
|
|
||||||
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding;
|
|
||||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
|
||||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
|
|
||||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
|
|
||||||
|
|
||||||
public class UltimeConsegneClienteViewModel {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private FragmentMainUltimeConsegneClienteBinding mBinding;
|
|
||||||
|
|
||||||
private UltimeConsegneMainListAdapter mAdapter;
|
|
||||||
private List<DocumentoResoDTO> mItems;
|
|
||||||
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
|
|
||||||
|
|
||||||
private List<GtbAnag> mAvailableGtbAnags = null;
|
|
||||||
|
|
||||||
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
|
||||||
|
|
||||||
public UltimeConsegneClienteViewModel(Context context, FragmentMainUltimeConsegneClienteBinding binding) {
|
|
||||||
this.mContext = context;
|
|
||||||
this.mBinding = binding;
|
|
||||||
|
|
||||||
this.mBinding.mainFab.hide();
|
|
||||||
this.mBinding.mainFab.setOnClickListener(v -> {
|
|
||||||
dispatchConsegne();
|
|
||||||
});
|
|
||||||
|
|
||||||
openFilterDialog();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void openFilterDialog() {
|
|
||||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
|
||||||
|
|
||||||
UltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
|
|
||||||
mAvailableGtbAnags = gtbAnags;
|
|
||||||
progressDialog.dismiss();
|
|
||||||
|
|
||||||
DialogUltimeConsegneFiltroAvanzato.make(mContext, gtbAnags, mAppliedFilterViewModel, (filter) -> {
|
|
||||||
mAppliedFilterViewModel = filter;
|
|
||||||
refreshItems();
|
|
||||||
}).show();
|
|
||||||
}, ex -> {
|
|
||||||
UtilityExceptions.defaultException(mContext, ex, progressDialog);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
|
|
||||||
mAdapter = new UltimeConsegneMainListAdapter(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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refreshItems(){
|
|
||||||
|
|
||||||
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
|
|
||||||
|
|
||||||
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
|
|
||||||
String currentCodAnagFilter = null;
|
|
||||||
|
|
||||||
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
|
|
||||||
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
|
|
||||||
.findSingle();
|
|
||||||
|
|
||||||
if(singleGtbAnag.isPresent()) {
|
|
||||||
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
|
|
||||||
}
|
|
||||||
|
|
||||||
UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(
|
|
||||||
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
|
|
||||||
currentCodAnagFilter,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
548,
|
|
||||||
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 onSingleSelectionChanged(DocumentoResoDTO dto) {
|
|
||||||
List<DocumentoResoDTO> 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<DocumentoResoDTO> getSelectedItems() {
|
|
||||||
return Stream.of(this.mItems)
|
|
||||||
.filter(DocumentoResoDTO::isSelected)
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void dispatchConsegne() {
|
|
||||||
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
|
|
||||||
|
|
||||||
PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -6,7 +6,11 @@
|
|||||||
<data>
|
<data>
|
||||||
<variable
|
<variable
|
||||||
name="viewmodel"
|
name="viewmodel"
|
||||||
type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel.UltimeConsegneClienteViewModel" />
|
type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteViewModel" />
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="view"
|
||||||
|
type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment" />
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
|
|
||||||
@ -29,12 +33,12 @@
|
|||||||
android:scrollbars="none"
|
android:scrollbars="none"
|
||||||
android:paddingEnd="4dp"/>
|
android:paddingEnd="4dp"/>
|
||||||
|
|
||||||
<it.integry.integrywmsnative.ui.fastscroll.FastScroller
|
<!-- <it.integry.integrywmsnative.ui.fastscroll.FastScroller-->
|
||||||
android:id="@+id/fastscroll"
|
<!-- android:id="@+id/fastscroll"-->
|
||||||
android:orientation="vertical"
|
<!-- android:orientation="vertical"-->
|
||||||
android:layout_width="wrap_content"
|
<!-- android:layout_width="wrap_content"-->
|
||||||
android:layout_height="match_parent"
|
<!-- android:layout_height="match_parent"-->
|
||||||
android:layout_alignParentEnd="true"/>
|
<!-- android:layout_alignParentEnd="true"/>-->
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/empty_view"
|
android:id="@+id/empty_view"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user