diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index c5332696..f13a4ce3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -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); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java index 0c34d915..12faa6c2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java @@ -64,11 +64,7 @@ public class DialogVenditaFiltroAvanzatoView { private ArrayAdapter arrayAdapterAutomezzo; private ArrayAdapter arrayAdapterPaese; - private DialogVenditaFiltroAvanzatoViewModel viewModel; - - public static AlertDialog make(final Context context, final List ordersList, RunnableArgs onDismiss) { - return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert; - } + private final DialogVenditaFiltroAvanzatoViewModel viewModel; public static AlertDialog make(final Context context, final List 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 -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java index 3efba5fb..b1e7a3bb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java @@ -26,7 +26,7 @@ public class DialogVenditaFiltroAvanzatoViewModel { private List initialOrderList; - private MutableLiveData> currentFilteredOrderList = new MutableLiveData<>(); + private final MutableLiveData> currentFilteredOrderList = new MutableLiveData<>(); public void init(List initialList) { this.initialOrderList = initialList; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java index c9226096..c8ec74d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -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(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzato.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzato.java deleted file mode 100644 index 58d97159..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzato.java +++ /dev/null @@ -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, DialogOrdineProduzioneFiltroAvanzatoViewModel> currentOnFilterDone; - - private List currentOrderList; - private List currentFilteredOrderList; - - - private ArrayAdapter arrayAdapterNumOrds; - private ArrayAdapter arrayAdapterCodJcoms; - - private Predicate currentNumOrdsPredicate = null; - private Predicate currentCodJcomsPredicate = null; - - - - public static AlertDialog make(final Context context, - final List ordersList, - DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogOrdineProduzioneFiltroAvanzatoViewModel> onDismiss) { - return new DialogOrdineProduzioneFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert; - } - - - private DialogOrdineProduzioneFiltroAvanzato(final Context context, final List ordersList, DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel, RunnableArgss, 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 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 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 getAvailableNumOrds(boolean skipRecalc) { - if(currentCodJcomsPredicate == null){ - currentFilteredOrderList = currentOrderList; - } else - if(!skipRecalc){ - Stream 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 getAvailableCodJcoms(boolean skipRecalc) { - if(currentNumOrdsPredicate == null){ - currentFilteredOrderList = currentOrderList; - } else - if(!skipRecalc){ - Stream 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 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(); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzatoView.java new file mode 100644 index 00000000..092e2982 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzatoView.java @@ -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 currentOnFilterDone; + + public BindableString numOrds = new BindableString(); + public BindableString codJcoms = new BindableString(); + + private ArrayAdapter arrayAdapterNumOrds; + private ArrayAdapter arrayAdapterCodJcoms; + + private DialogOrdineProduzioneFiltroAvanzatoViewModel mViewModel; + + + + public static AlertDialog make(final Context context, + final List ordersList, + DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel, + RunnableArgs onDismiss) { + return new DialogOrdineProduzioneFiltroAvanzatoView(context, ordersList, baseViewModel, onDismiss).currentAlert; + } + + + private DialogOrdineProduzioneFiltroAvanzatoView(final Context context, final List ordersList, DialogOrdineProduzioneFiltroAvanzatoViewModel baseViewModel, RunnableArgs 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 arrayAdapter, List inputList) { + arrayAdapter.clear(); + arrayAdapter.addAll(inputList); + arrayAdapter.notifyDataSetChanged(); + } + + + private List getAvailableNumOrds(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(mViewModel.getMutableFilteredOrderList().getValue())) + .map(x -> x.getNumero().toString()) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + + private List 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); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzatoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzatoViewModel.java new file mode 100644 index 00000000..900fc91d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/dialog/DialogOrdineProduzioneFiltroAvanzatoViewModel.java @@ -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 currentNumOrdsPredicate = null; + private Predicate currentCodJcomsPredicate = null; + + private List initialOrderList; + private final MutableLiveData> currentFilteredOrderList = new MutableLiveData<>(); + + public void init(List initialList) { + this.initialOrderList = initialList; + this.currentFilteredOrderList.setValue(this.initialOrderList); + } + + public MutableLiveData> getMutableFilteredOrderList() { + return this.currentFilteredOrderList; + } + + public void setNumOrdFilter(String numOrds) { + if(UtilityString.isNullOrEmpty(numOrds)) currentNumOrdsPredicate = null; + else { + String[] numOrdsSplitted = numOrds.split("[,\\ ]"); + + try{ + List 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 returnList = null; + + if (currentNumOrdsPredicate == null && + currentCodJcomsPredicate == null + ) { + returnList = this.initialOrderList; + } else { + Stream tmpStream = Stream.of(this.initialOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentCodJcomsPredicate == null || (currentCodJcomsPredicate.test(x))) + ); + + returnList = tmpStream.toList(); + } + + this.currentFilteredOrderList.setValue(returnList); + } + +} diff --git a/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml index a2357605..258c6c82 100644 --- a/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml @@ -7,7 +7,10 @@ + type="it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzatoViewModel" /> + @@ -55,7 +58,7 @@ android:inputType="number|text" android:singleLine="true" android:ellipsize="end" - app:binding="@{viewmodel.numOrds}"/> + app:binding="@{view.numOrds}"/> @@ -76,7 +79,7 @@ android:inputType="text" android:singleLine="true" android:ellipsize="end" - app:binding="@{viewmodel.codJcoms}"/> + app:binding="@{view.codJcoms}"/>