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() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
|
|
||||||
|
this.fabVisible.set(false);
|
||||||
|
|
||||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||||
mViewModel.init(codMdep);
|
mViewModel.init(codMdep);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,11 +64,7 @@ public class DialogVenditaFiltroAvanzatoView {
|
|||||||
private ArrayAdapter<String> arrayAdapterAutomezzo;
|
private ArrayAdapter<String> arrayAdapterAutomezzo;
|
||||||
private ArrayAdapter<String> arrayAdapterPaese;
|
private ArrayAdapter<String> arrayAdapterPaese;
|
||||||
|
|
||||||
private DialogVenditaFiltroAvanzatoViewModel viewModel;
|
private final DialogVenditaFiltroAvanzatoViewModel viewModel;
|
||||||
|
|
||||||
public static AlertDialog make(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
|
|
||||||
return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AlertDialog make(final Context context,
|
public static AlertDialog make(final Context context,
|
||||||
final List<OrdiniUscitaElencoDTO> ordersList,
|
final List<OrdiniUscitaElencoDTO> ordersList,
|
||||||
@ -93,8 +89,8 @@ public class DialogVenditaFiltroAvanzatoView {
|
|||||||
|
|
||||||
binding.setView(this);
|
binding.setView(this);
|
||||||
binding.setViewmodel(viewModel);
|
binding.setViewmodel(viewModel);
|
||||||
initViewModelNew(viewModel);
|
initViewModel(viewModel);
|
||||||
initView(binding, viewModel);
|
initView(binding);
|
||||||
|
|
||||||
currentAlert = alertDialog.create();
|
currentAlert = alertDialog.create();
|
||||||
currentAlert.setCanceledOnTouchOutside(false);
|
currentAlert.setCanceledOnTouchOutside(false);
|
||||||
@ -102,8 +98,6 @@ public class DialogVenditaFiltroAvanzatoView {
|
|||||||
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
binding.positiveBtn.setOnClickListener(view -> {
|
binding.positiveBtn.setOnClickListener(view -> {
|
||||||
currentAlert.dismiss();
|
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);
|
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
|
||||||
|
|
||||||
// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> {
|
// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> {
|
||||||
@ -192,7 +186,7 @@ public class DialogVenditaFiltroAvanzatoView {
|
|||||||
refreshAll();
|
refreshAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel) {
|
private void initViewModel(DialogVenditaFiltroAvanzatoViewModel viewModel) {
|
||||||
viewModel.applyAllTests();
|
viewModel.applyAllTests();
|
||||||
|
|
||||||
BindableString.registerListener(idViaggio, value -> {
|
BindableString.registerListener(idViaggio, value -> {
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public class DialogVenditaFiltroAvanzatoViewModel {
|
|||||||
|
|
||||||
|
|
||||||
private List<OrdiniUscitaElencoDTO> initialOrderList;
|
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) {
|
public void init(List<OrdiniUscitaElencoDTO> initialList) {
|
||||||
this.initialOrderList = 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.OrdineAccettazioneInevasoDTO;
|
||||||
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
||||||
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
|
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.MainListProdOrdineProduzioneElencoClienteListModel;
|
||||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel;
|
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.ui.OrdineProduzioneListAdapter;
|
||||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
|
|
||||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
||||||
|
|
||||||
@ -64,7 +65,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
|||||||
|
|
||||||
private AppCompatTextView mAppBarTitle;
|
private AppCompatTextView mAppBarTitle;
|
||||||
|
|
||||||
private DialogOrdineProduzioneFiltroAvanzato.DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
private DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||||
|
|
||||||
|
|
||||||
public ProdOrdineProduzioneElencoFragment() {
|
public ProdOrdineProduzioneElencoFragment() {
|
||||||
@ -110,6 +111,8 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
|||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
|
|
||||||
|
this.fabVisible.set(false);
|
||||||
|
|
||||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||||
mViewModel.init(codMdep);
|
mViewModel.init(codMdep);
|
||||||
}
|
}
|
||||||
@ -176,9 +179,9 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
|||||||
if(filteredList != null) {
|
if(filteredList != null) {
|
||||||
tmpList = filteredList;
|
tmpList = filteredList;
|
||||||
} else if (mAppliedFilterViewModel != null) {
|
} else if (mAppliedFilterViewModel != null) {
|
||||||
// mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||||
// mAppliedFilterViewModel.applyAllTests();
|
mAppliedFilterViewModel.applyAllTests();
|
||||||
// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||||
} else {
|
} else {
|
||||||
tmpList = mViewModel.getOrderList().getValue();
|
tmpList = mViewModel.getOrderList().getValue();
|
||||||
}
|
}
|
||||||
@ -228,14 +231,17 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFilterClick() {
|
public void onFilterClick() {
|
||||||
// DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
|
DialogOrdineProduzioneFiltroAvanzatoView.make(
|
||||||
// mAppliedFilterViewModel = filter;
|
getActivity(),
|
||||||
//
|
this.mViewModel.getOrderList().getValue(),
|
||||||
// if (filteredOrderList != null) {
|
mAppliedFilterViewModel,
|
||||||
// refreshList(filteredOrderList);
|
|
||||||
// }
|
filter -> {
|
||||||
//
|
|
||||||
// }).show();
|
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>
|
<data>
|
||||||
<variable
|
<variable
|
||||||
name="viewmodel"
|
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>
|
</data>
|
||||||
|
|
||||||
@ -55,7 +58,7 @@
|
|||||||
android:inputType="number|text"
|
android:inputType="number|text"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
app:binding="@{viewmodel.numOrds}"/>
|
app:binding="@{view.numOrds}"/>
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
@ -76,7 +79,7 @@
|
|||||||
android:inputType="text"
|
android:inputType="text"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
app:binding="@{viewmodel.codJcoms}"/>
|
app:binding="@{view.codJcoms}"/>
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user