Refactoring dialog filtro accettazione ordini produzione
This commit is contained in:
parent
18b4b08e1b
commit
9033548455
@ -106,6 +106,8 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
this.fabVisible.set(false);
|
||||
|
||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||
mViewModel.init(codMdep);
|
||||
}
|
||||
|
||||
@ -64,11 +64,7 @@ public class DialogVenditaFiltroAvanzatoView {
|
||||
private ArrayAdapter<String> arrayAdapterAutomezzo;
|
||||
private ArrayAdapter<String> arrayAdapterPaese;
|
||||
|
||||
private DialogVenditaFiltroAvanzatoViewModel viewModel;
|
||||
|
||||
public static AlertDialog make(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
|
||||
return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert;
|
||||
}
|
||||
private final DialogVenditaFiltroAvanzatoViewModel viewModel;
|
||||
|
||||
public static AlertDialog make(final Context context,
|
||||
final List<OrdiniUscitaElencoDTO> ordersList,
|
||||
@ -93,8 +89,8 @@ public class DialogVenditaFiltroAvanzatoView {
|
||||
|
||||
binding.setView(this);
|
||||
binding.setViewmodel(viewModel);
|
||||
initViewModelNew(viewModel);
|
||||
initView(binding, viewModel);
|
||||
initViewModel(viewModel);
|
||||
initView(binding);
|
||||
|
||||
currentAlert = alertDialog.create();
|
||||
currentAlert.setCanceledOnTouchOutside(false);
|
||||
@ -102,8 +98,6 @@ public class DialogVenditaFiltroAvanzatoView {
|
||||
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
|
||||
|
||||
|
||||
binding.positiveBtn.setOnClickListener(view -> {
|
||||
currentAlert.dismiss();
|
||||
});
|
||||
@ -119,7 +113,7 @@ public class DialogVenditaFiltroAvanzatoView {
|
||||
|
||||
}
|
||||
|
||||
private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) {
|
||||
private void initView(DialogVenditaFiltroAvanzatoBinding bindings) {
|
||||
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
|
||||
|
||||
// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
@ -192,7 +186,7 @@ public class DialogVenditaFiltroAvanzatoView {
|
||||
refreshAll();
|
||||
}
|
||||
|
||||
private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel) {
|
||||
private void initViewModel(DialogVenditaFiltroAvanzatoViewModel viewModel) {
|
||||
viewModel.applyAllTests();
|
||||
|
||||
BindableString.registerListener(idViaggio, value -> {
|
||||
|
||||
@ -26,7 +26,7 @@ public class DialogVenditaFiltroAvanzatoViewModel {
|
||||
|
||||
|
||||
private List<OrdiniUscitaElencoDTO> initialOrderList;
|
||||
private MutableLiveData<List<OrdiniUscitaElencoDTO>> currentFilteredOrderList = new MutableLiveData<>();
|
||||
private final MutableLiveData<List<OrdiniUscitaElencoDTO>> currentFilteredOrderList = new MutableLiveData<>();
|
||||
|
||||
public void init(List<OrdiniUscitaElencoDTO> initialList) {
|
||||
this.initialOrderList = initialList;
|
||||
|
||||
@ -38,10 +38,11 @@ import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElenc
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
||||
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoView;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoViewModel;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.OrdineProduzioneListAdapter;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
|
||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
||||
|
||||
@ -64,7 +65,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
|
||||
private AppCompatTextView mAppBarTitle;
|
||||
|
||||
private DialogOrdineProduzioneFiltroAvanzato.DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||
private DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||
|
||||
|
||||
public ProdOrdineProduzioneElencoFragment() {
|
||||
@ -110,6 +111,8 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
this.fabVisible.set(false);
|
||||
|
||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||
mViewModel.init(codMdep);
|
||||
}
|
||||
@ -176,9 +179,9 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
if(filteredList != null) {
|
||||
tmpList = filteredList;
|
||||
} else if (mAppliedFilterViewModel != null) {
|
||||
// mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
// mAppliedFilterViewModel.applyAllTests();
|
||||
// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||
mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
mAppliedFilterViewModel.applyAllTests();
|
||||
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||
} else {
|
||||
tmpList = mViewModel.getOrderList().getValue();
|
||||
}
|
||||
@ -228,14 +231,17 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
|
||||
@Override
|
||||
public void onFilterClick() {
|
||||
// DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
|
||||
// mAppliedFilterViewModel = filter;
|
||||
//
|
||||
// if (filteredOrderList != null) {
|
||||
// refreshList(filteredOrderList);
|
||||
// }
|
||||
//
|
||||
// }).show();
|
||||
DialogOrdineProduzioneFiltroAvanzatoView.make(
|
||||
getActivity(),
|
||||
this.mViewModel.getOrderList().getValue(),
|
||||
mAppliedFilterViewModel,
|
||||
|
||||
filter -> {
|
||||
|
||||
mAppliedFilterViewModel = filter;
|
||||
refreshList(null);
|
||||
|
||||
}).show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,225 +0,0 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
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 android.widget.MultiAutoCompleteTextView;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.annimon.stream.function.Predicate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.di.BindableString;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.databinding.DialogOrdineProduzioneFiltroAvanzatoBinding;
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||
|
||||
public class DialogOrdineProduzioneFiltroAvanzato {
|
||||
|
||||
|
||||
private AlertDialog currentAlert;
|
||||
private Context currentContext;
|
||||
|
||||
private RunnableArgss<List<OrdineAccettazioneInevasoDTO>, DialogOrdineProduzioneFiltroAvanzatoViewModel> currentOnFilterDone;
|
||||
|
||||
private List<OrdineAccettazioneInevasoDTO> currentOrderList;
|
||||
private List<OrdineAccettazioneInevasoDTO> currentFilteredOrderList;
|
||||
|
||||
|
||||
private ArrayAdapter<String> arrayAdapterNumOrds;
|
||||
private ArrayAdapter<String> arrayAdapterCodJcoms;
|
||||
|
||||
private Predicate<OrdineAccettazioneInevasoDTO> currentNumOrdsPredicate = null;
|
||||
private Predicate<OrdineAccettazioneInevasoDTO> currentCodJcomsPredicate = null;
|
||||
|
||||
|
||||
|
||||
public static AlertDialog make(final Context context,
|
||||
final List<OrdineAccettazioneInevasoDTO> ordersList,
|
||||
DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel,
|
||||
RunnableArgss<List<OrdineAccettazioneInevasoDTO>, DialogOrdineProduzioneFiltroAvanzatoViewModel> onDismiss) {
|
||||
return new DialogOrdineProduzioneFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert;
|
||||
}
|
||||
|
||||
|
||||
private DialogOrdineProduzioneFiltroAvanzato(final Context context, final List<OrdineAccettazioneInevasoDTO> ordersList, DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel, RunnableArgss<List<OrdineAccettazioneInevasoDTO>, DialogOrdineProduzioneFiltroAvanzatoViewModel> onDismiss) {
|
||||
currentContext = context;
|
||||
currentOrderList = ordersList;
|
||||
currentOnFilterDone = onDismiss;
|
||||
|
||||
DialogOrdineProduzioneFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogOrdineProduzioneFiltroAvanzatoViewModel();
|
||||
|
||||
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
|
||||
DialogOrdineProduzioneFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_ordine_produzione_filtro_avanzato, null, false);
|
||||
|
||||
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context)
|
||||
.setView(binding.getRoot());
|
||||
|
||||
binding.setViewmodel(viewModel);
|
||||
initViewModelNew(viewModel, binding);
|
||||
initView(binding, viewModel);
|
||||
|
||||
currentAlert = alertDialog.create();
|
||||
currentAlert.setCanceledOnTouchOutside(false);
|
||||
|
||||
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
|
||||
binding.positiveBtn.setOnClickListener(view -> {
|
||||
currentAlert.dismiss();
|
||||
});
|
||||
|
||||
binding.neutralBtn.setOnClickListener(view -> {
|
||||
resetAll(viewModel);
|
||||
});
|
||||
|
||||
|
||||
currentAlert.setOnDismissListener(dialogInterface -> {
|
||||
if(currentOnFilterDone != null) currentOnFilterDone.run(currentFilteredOrderList, viewModel);
|
||||
});
|
||||
|
||||
refreshList();
|
||||
|
||||
}
|
||||
|
||||
private void resetAll(DialogOrdineProduzioneFiltroAvanzatoViewModel viewModel) {
|
||||
viewModel.numOrds.set(null);
|
||||
viewModel.codJcoms.set(null);
|
||||
}
|
||||
|
||||
private void initView(DialogOrdineProduzioneFiltroAvanzatoBinding bindings, DialogOrdineProduzioneFiltroAvanzatoViewModel viewModel) {
|
||||
|
||||
arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
|
||||
arrayAdapterNumOrds.addAll(getAvailableNumOrds(false));
|
||||
bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds);
|
||||
bindings.filledExposedDropdownNumOrds.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
|
||||
|
||||
arrayAdapterCodJcoms = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
|
||||
arrayAdapterCodJcoms.addAll(getAvailableCodJcoms(false));
|
||||
bindings.filledExposedDropdownCodJcoms.setAdapter(arrayAdapterCodJcoms);
|
||||
bindings.filledExposedDropdownCodJcoms.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
|
||||
|
||||
|
||||
viewModel.numOrds.refresh();
|
||||
viewModel.codJcoms.refresh();
|
||||
}
|
||||
|
||||
|
||||
private void initViewModelNew(DialogOrdineProduzioneFiltroAvanzatoViewModel viewModel, DialogOrdineProduzioneFiltroAvanzatoBinding bindings) {
|
||||
|
||||
|
||||
BindableString.registerListener(viewModel.numOrds, value -> {
|
||||
if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null;
|
||||
else {
|
||||
String[] numOrdsSplitted = value.split("[,\\ ]");
|
||||
|
||||
try{
|
||||
List<Integer> numOrdsInteger = Stream.of(numOrdsSplitted)
|
||||
.filter(x -> !UtilityString.isNullOrEmpty(x))
|
||||
.map(Integer::parseInt).toList();
|
||||
|
||||
currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumero());
|
||||
} catch (NumberFormatException ex) {
|
||||
currentNumOrdsPredicate = null;
|
||||
}
|
||||
}
|
||||
|
||||
refreshList();
|
||||
|
||||
arrayAdapterCodJcoms.clear();
|
||||
arrayAdapterCodJcoms.addAll(getAvailableCodJcoms(true));
|
||||
});
|
||||
|
||||
|
||||
BindableString.registerListener(viewModel.codJcoms, value -> {
|
||||
if(UtilityString.isNullOrEmpty(value)) currentCodJcomsPredicate = null;
|
||||
else {
|
||||
String[] codJcomsSplitted = value.split("[,\\ ]");
|
||||
|
||||
try{
|
||||
List<String> codJcoms = Stream.of(codJcomsSplitted)
|
||||
.filter(x -> !UtilityString.isNullOrEmpty(x)).toList();
|
||||
|
||||
currentCodJcomsPredicate = o -> codJcoms.contains(o.getCodJcom());
|
||||
} catch (NumberFormatException ex) {
|
||||
currentCodJcomsPredicate = null;
|
||||
}
|
||||
}
|
||||
|
||||
refreshList();
|
||||
|
||||
arrayAdapterNumOrds.clear();
|
||||
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private List<String> getAvailableNumOrds(boolean skipRecalc) {
|
||||
if(currentCodJcomsPredicate == null){
|
||||
currentFilteredOrderList = currentOrderList;
|
||||
} else
|
||||
if(!skipRecalc){
|
||||
Stream<OrdineAccettazioneInevasoDTO> tmpStream = Stream.of(currentOrderList)
|
||||
.filter(x ->
|
||||
(currentCodJcomsPredicate == null || (currentCodJcomsPredicate.test(x)))
|
||||
);
|
||||
|
||||
currentFilteredOrderList = tmpStream.toList();
|
||||
}
|
||||
|
||||
return Stream.of(currentFilteredOrderList).map(x -> x.getNumero().toString()).distinct().withoutNulls().toList();
|
||||
}
|
||||
|
||||
|
||||
private List<String> getAvailableCodJcoms(boolean skipRecalc) {
|
||||
if(currentNumOrdsPredicate == null){
|
||||
currentFilteredOrderList = currentOrderList;
|
||||
} else
|
||||
if(!skipRecalc){
|
||||
Stream<OrdineAccettazioneInevasoDTO> tmpStream = Stream.of(currentOrderList)
|
||||
.filter(x ->
|
||||
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x)))
|
||||
);
|
||||
|
||||
currentFilteredOrderList = tmpStream.toList();
|
||||
}
|
||||
|
||||
return Stream.of(currentFilteredOrderList).map(OrdineAccettazioneInevasoDTO::getCodJcom).distinct().withoutNulls().toList();
|
||||
}
|
||||
|
||||
|
||||
private void refreshList() {
|
||||
|
||||
if (currentNumOrdsPredicate == null && currentCodJcomsPredicate == null) {
|
||||
currentFilteredOrderList = currentOrderList;
|
||||
} else {
|
||||
Stream<OrdineAccettazioneInevasoDTO> tmpStream = Stream.of(currentOrderList)
|
||||
.filter(x ->
|
||||
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
|
||||
(currentCodJcomsPredicate == null || (currentCodJcomsPredicate.test(x)))
|
||||
);
|
||||
|
||||
currentFilteredOrderList = tmpStream.toList();
|
||||
}
|
||||
}
|
||||
|
||||
public class DialogOrdineProduzioneFiltroAvanzatoViewModel {
|
||||
|
||||
public BindableString numOrds = new BindableString();
|
||||
public BindableString codJcoms = new BindableString();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,164 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog;
|
||||
|
||||
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 android.widget.MultiAutoCompleteTextView;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.di.BindableString;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.databinding.DialogOrdineProduzioneFiltroAvanzatoBinding;
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||
|
||||
public class DialogOrdineProduzioneFiltroAvanzatoView {
|
||||
|
||||
|
||||
private AlertDialog currentAlert;
|
||||
private Context currentContext;
|
||||
|
||||
private RunnableArgs<DialogOrdineProduzioneFiltroAvanzatoViewModel> currentOnFilterDone;
|
||||
|
||||
public BindableString numOrds = new BindableString();
|
||||
public BindableString codJcoms = new BindableString();
|
||||
|
||||
private ArrayAdapter<String> arrayAdapterNumOrds;
|
||||
private ArrayAdapter<String> arrayAdapterCodJcoms;
|
||||
|
||||
private DialogOrdineProduzioneFiltroAvanzatoViewModel mViewModel;
|
||||
|
||||
|
||||
|
||||
public static AlertDialog make(final Context context,
|
||||
final List<OrdineAccettazioneInevasoDTO> ordersList,
|
||||
DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel,
|
||||
RunnableArgs<DialogOrdineProduzioneFiltroAvanzatoViewModel> onDismiss) {
|
||||
return new DialogOrdineProduzioneFiltroAvanzatoView(context, ordersList, baseViewModel, onDismiss).currentAlert;
|
||||
}
|
||||
|
||||
|
||||
private DialogOrdineProduzioneFiltroAvanzatoView(final Context context, final List<OrdineAccettazioneInevasoDTO> ordersList, DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel, RunnableArgs<DialogOrdineProduzioneFiltroAvanzatoViewModel> onDismiss) {
|
||||
currentContext = context;
|
||||
currentOnFilterDone = onDismiss;
|
||||
|
||||
mViewModel = baseViewModel != null ? baseViewModel : new DialogOrdineProduzioneFiltroAvanzatoViewModel();
|
||||
mViewModel.init(ordersList);
|
||||
|
||||
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
|
||||
DialogOrdineProduzioneFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_ordine_produzione_filtro_avanzato, null, false);
|
||||
|
||||
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context)
|
||||
.setView(binding.getRoot());
|
||||
|
||||
binding.setView(this);
|
||||
binding.setViewmodel(mViewModel);
|
||||
initViewModel(mViewModel);
|
||||
initView(binding);
|
||||
|
||||
currentAlert = alertDialog.create();
|
||||
currentAlert.setCanceledOnTouchOutside(false);
|
||||
|
||||
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
|
||||
binding.positiveBtn.setOnClickListener(view -> {
|
||||
currentAlert.dismiss();
|
||||
});
|
||||
|
||||
binding.neutralBtn.setOnClickListener(view -> {
|
||||
resetAll();
|
||||
});
|
||||
|
||||
|
||||
currentAlert.setOnDismissListener(dialogInterface -> {
|
||||
if(currentOnFilterDone != null) currentOnFilterDone.run(mViewModel);
|
||||
});
|
||||
}
|
||||
|
||||
private void initView(DialogOrdineProduzioneFiltroAvanzatoBinding bindings) {
|
||||
|
||||
arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
|
||||
arrayAdapterNumOrds.addAll(getAvailableNumOrds(false));
|
||||
bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds);
|
||||
bindings.filledExposedDropdownNumOrds.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
|
||||
|
||||
arrayAdapterCodJcoms = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
|
||||
arrayAdapterCodJcoms.addAll(getAvailableCodJcoms(false));
|
||||
bindings.filledExposedDropdownCodJcoms.setAdapter(arrayAdapterCodJcoms);
|
||||
bindings.filledExposedDropdownCodJcoms.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
|
||||
|
||||
|
||||
refreshAll();
|
||||
}
|
||||
|
||||
|
||||
private void initViewModel(DialogOrdineProduzioneFiltroAvanzatoViewModel viewModel) {
|
||||
viewModel.applyAllTests();
|
||||
|
||||
BindableString.registerListener(numOrds, value -> {
|
||||
viewModel.setNumOrdFilter(value);
|
||||
viewModel.applyAllTests();
|
||||
|
||||
refreshArrayAdapter(arrayAdapterCodJcoms, getAvailableCodJcoms(true));
|
||||
});
|
||||
|
||||
BindableString.registerListener(codJcoms, value -> {
|
||||
viewModel.setCodJcomFilter(value);
|
||||
viewModel.applyAllTests();
|
||||
|
||||
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void refreshArrayAdapter(ArrayAdapter<String> arrayAdapter, List<String> inputList) {
|
||||
arrayAdapter.clear();
|
||||
arrayAdapter.addAll(inputList);
|
||||
arrayAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
private List<String> getAvailableNumOrds(boolean skipRecalc) {
|
||||
return Stream.of(Objects.requireNonNull(mViewModel.getMutableFilteredOrderList().getValue()))
|
||||
.map(x -> x.getNumero().toString())
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.sorted()
|
||||
.toList();
|
||||
}
|
||||
|
||||
|
||||
private List<String> getAvailableCodJcoms(boolean skipRecalc) {
|
||||
return Stream.of(Objects.requireNonNull(mViewModel.getMutableFilteredOrderList().getValue()))
|
||||
.map(OrdineAccettazioneInevasoDTO::getCodJcom)
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.sorted()
|
||||
.toList();
|
||||
}
|
||||
|
||||
|
||||
public void refreshAll() {
|
||||
numOrds.refresh();
|
||||
codJcoms.refresh();
|
||||
}
|
||||
|
||||
|
||||
public void resetAll() {
|
||||
numOrds.set(null);
|
||||
codJcoms.set(null);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog;
|
||||
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.annimon.stream.function.Predicate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||
|
||||
public class DialogOrdineProduzioneFiltroAvanzatoViewModel {
|
||||
|
||||
|
||||
private Predicate<OrdineAccettazioneInevasoDTO> currentNumOrdsPredicate = null;
|
||||
private Predicate<OrdineAccettazioneInevasoDTO> currentCodJcomsPredicate = null;
|
||||
|
||||
private List<OrdineAccettazioneInevasoDTO> initialOrderList;
|
||||
private final MutableLiveData<List<OrdineAccettazioneInevasoDTO>> currentFilteredOrderList = new MutableLiveData<>();
|
||||
|
||||
public void init(List<OrdineAccettazioneInevasoDTO> initialList) {
|
||||
this.initialOrderList = initialList;
|
||||
this.currentFilteredOrderList.setValue(this.initialOrderList);
|
||||
}
|
||||
|
||||
public MutableLiveData<List<OrdineAccettazioneInevasoDTO>> getMutableFilteredOrderList() {
|
||||
return this.currentFilteredOrderList;
|
||||
}
|
||||
|
||||
public void setNumOrdFilter(String numOrds) {
|
||||
if(UtilityString.isNullOrEmpty(numOrds)) currentNumOrdsPredicate = null;
|
||||
else {
|
||||
String[] numOrdsSplitted = numOrds.split("[,\\ ]");
|
||||
|
||||
try{
|
||||
List<Integer> numOrdsInteger = Stream.of(numOrdsSplitted)
|
||||
.filter(x -> !UtilityString.isNullOrEmpty(x))
|
||||
.map(Integer::parseInt).toList();
|
||||
|
||||
currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumero());
|
||||
} catch (NumberFormatException ex) {
|
||||
currentNumOrdsPredicate = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setCodJcomFilter(String codJcom) {
|
||||
if(UtilityString.isNullOrEmpty(codJcom)) currentCodJcomsPredicate = null;
|
||||
else {
|
||||
currentCodJcomsPredicate = o -> o.getCodJcom().toLowerCase().equalsIgnoreCase(codJcom);
|
||||
}
|
||||
}
|
||||
|
||||
public void applyAllTests() {
|
||||
|
||||
List<OrdineAccettazioneInevasoDTO> returnList = null;
|
||||
|
||||
if (currentNumOrdsPredicate == null &&
|
||||
currentCodJcomsPredicate == null
|
||||
) {
|
||||
returnList = this.initialOrderList;
|
||||
} else {
|
||||
Stream<OrdineAccettazioneInevasoDTO> tmpStream = Stream.of(this.initialOrderList)
|
||||
.filter(x ->
|
||||
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
|
||||
(currentCodJcomsPredicate == null || (currentCodJcomsPredicate.test(x)))
|
||||
);
|
||||
|
||||
returnList = tmpStream.toList();
|
||||
}
|
||||
|
||||
this.currentFilteredOrderList.setValue(returnList);
|
||||
}
|
||||
|
||||
}
|
||||
@ -7,7 +7,10 @@
|
||||
<data>
|
||||
<variable
|
||||
name="viewmodel"
|
||||
type="it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato.DialogOrdineProduzioneFiltroAvanzatoViewModel" />
|
||||
type="it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoViewModel" />
|
||||
<variable
|
||||
name="view"
|
||||
type="it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoView" />
|
||||
|
||||
</data>
|
||||
|
||||
@ -55,7 +58,7 @@
|
||||
android:inputType="number|text"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
app:binding="@{viewmodel.numOrds}"/>
|
||||
app:binding="@{view.numOrds}"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@ -76,7 +79,7 @@
|
||||
android:inputType="text"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
app:binding="@{viewmodel.codJcoms}"/>
|
||||
app:binding="@{view.codJcoms}"/>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user