Completato FIltroVenditaAvanzato

This commit is contained in:
Gius95 2018-12-06 11:51:42 +01:00
parent 93cd8227c1
commit fc732b4397
7 changed files with 102 additions and 37 deletions

View File

@ -26,6 +26,9 @@ public class BindableString extends BaseObservable {
return value == null || value.isEmpty();
}
public void refresh() {
notifyChange();
}
@ -38,4 +41,10 @@ public class BindableString extends BaseObservable {
}
});
}
public static void resetListeners(BindableString bindableString){
String oldValue = bindableString.get();
bindableString = new BindableString();
bindableString.set(oldValue);
}
}

View File

@ -0,0 +1,6 @@
package it.integry.integrywmsnative.core.expansion;
public interface RunnableArgss<S, T> {
void run(S data1, T data2);
}

View File

@ -36,6 +36,7 @@ import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
@ -55,6 +56,8 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
private List<OrdineVenditaInevasoDTO> mOriginalOrderList;
private List<OrdineVenditaGroupedInevasoDTO> groupedOrdiniInevasi;
private DialogVenditaFiltroAvanzatoViewModel mAppliedFilterViewModel;
public MainVenditaFragment() {
}
@ -334,7 +337,9 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
@Override
public void onFilterClick() {
DialogVenditaFiltroAvanzato.make(getActivity(), mOriginalOrderList, filteredOrderList -> {
DialogVenditaFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
mAppliedFilterViewModel = filter;
if(filteredOrderList != null){

View File

@ -7,7 +7,9 @@ import android.content.DialogInterface;
import android.databinding.DataBindingUtil;
import android.support.design.widget.BottomSheetBehavior;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
@ -18,7 +20,7 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding;
@ -31,7 +33,7 @@ public class DialogVenditaFiltroAvanzato {
private AlertDialog currentAlert;
private Context currentContext;
private RunnableArgs<List<OrdineVenditaInevasoDTO>> currentOnFilterDone;
private RunnableArgss<List<OrdineVenditaInevasoDTO>, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone;
private List<OrdineVenditaInevasoDTO> currentOrderList;
private List<OrdineVenditaInevasoDTO> currentFilteredOrderList;
@ -42,16 +44,22 @@ public class DialogVenditaFiltroAvanzato {
private Predicate<OrdineVenditaInevasoDTO> currentTermConsPredicate = null;
private Predicate<OrdineVenditaInevasoDTO> currentAutomezzoPredicate = null;
public static AlertDialog make(final Context context, final List<OrdineVenditaInevasoDTO> ordersList, RunnableArgs<List<OrdineVenditaInevasoDTO>> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, onDismiss).currentAlert;
private boolean firstInit = true;
public static AlertDialog make(final Context context, final List<OrdineVenditaInevasoDTO> ordersList, RunnableArgss<List<OrdineVenditaInevasoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, null, onDismiss).currentAlert;
}
private DialogVenditaFiltroAvanzato(final Context context, final List<OrdineVenditaInevasoDTO> ordersList, RunnableArgs<List<OrdineVenditaInevasoDTO>> onDismiss) {
public static AlertDialog make(final Context context, final List<OrdineVenditaInevasoDTO> ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss<List<OrdineVenditaInevasoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert;
}
private DialogVenditaFiltroAvanzato(final Context context, final List<OrdineVenditaInevasoDTO> ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss<List<OrdineVenditaInevasoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
currentContext = context;
currentOrderList = ordersList;
currentOnFilterDone = onDismiss;
DialogVenditaFiltroAvanzatoViewModel viewModel = new DialogVenditaFiltroAvanzatoViewModel();
DialogVenditaFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogVenditaFiltroAvanzatoViewModel();
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
@ -61,26 +69,36 @@ public class DialogVenditaFiltroAvanzato {
.setView(contentView.getRoot())
.setPositiveButton(context.getText(R.string.confirm), null)
.setNegativeButton(context.getText(R.string.abort), null)
.setNeutralButton(context.getText(R.string.reset), (dialogInterface, i) -> {
resetAll(viewModel);
});
.setNeutralButton(context.getText(R.string.reset), null);
contentView.setViewmodel(viewModel);
initViewModel(viewModel);
initViewModel(viewModel, contentView);
initView(contentView, viewModel);
currentAlert = alertDialog.create();
currentAlert.setCanceledOnTouchOutside(false);
currentAlert.setOnShowListener(dialogInterface -> {
Button button = ((AlertDialog) dialogInterface).getButton(AlertDialog.BUTTON_NEUTRAL);
button.setOnClickListener(view -> {
// TODO Do something
resetAll(viewModel);
});
});
currentAlert.setOnDismissListener(dialogInterface -> {
if(currentOnFilterDone != null) currentOnFilterDone.run(currentFilteredOrderList);
if(currentOnFilterDone != null) currentOnFilterDone.run(currentFilteredOrderList, viewModel);
});
refreshList();
}
private void resetAll(DialogVenditaFiltroAvanzatoViewModel viewModel) {
viewModel.numOrds.set(null);
viewModel.numOrds.set(null);
viewModel.cliente.set(null);
viewModel.dataConsegna.set(null);
@ -143,67 +161,96 @@ public class DialogVenditaFiltroAvanzato {
}
private void initViewModel(DialogVenditaFiltroAvanzatoViewModel viewModel) {
private void initViewModel(DialogVenditaFiltroAvanzatoViewModel viewModel, DialogVenditaFiltroAvanzatoBinding bindings) {
firstInit = true;
BindableString.resetListeners(viewModel.numOrds);
BindableString.registerListener(viewModel.numOrds, value -> {
if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null;
else {
String numOrdTrimmed = value.replaceAll(" ", "");
String[] numOrdsSplitted = numOrdTrimmed.split(",");
//String numOrdTrimmed = value.replaceAll(" ", "");
String[] numOrdsSplitted = value.split("[,\\ ]");
List<Integer> numOrdsInteger = Stream.of(numOrdsSplitted)
.withoutNulls()
.map(Integer::parseInt).toList();
currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd());
try{
List<Integer> numOrdsInteger = Stream.of(numOrdsSplitted)
.filter(x -> !UtilityString.isNullOrEmpty(x))
.map(Integer::parseInt).toList();
currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd());
bindings.inputNumOrds.setErrorEnabled(false);
bindings.inputNumOrds.setError("");
} catch (NumberFormatException ex) {
currentNumOrdsPredicate = null;
bindings.inputNumOrds.setErrorEnabled(true);
bindings.inputNumOrds.setError(currentContext.getResources().getString(R.string.error));
}
}
refreshList();
if(!firstInit) refreshList();
});
viewModel.numOrds.refresh();
BindableString.resetListeners(viewModel.cliente);
BindableString.registerListener(viewModel.cliente, value -> {
if(UtilityString.isNullOrEmpty(value)) currentClientePredicate = null;
else {
currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(value);
}
refreshList();
if(!firstInit) refreshList();
});
viewModel.cliente.refresh();
BindableString.resetListeners(viewModel.dataConsegna);
BindableString.registerListener(viewModel.dataConsegna, value -> {
if(UtilityString.isNullOrEmpty(value)) currentDataConsPredicate = null;
else {
currentDataConsPredicate = o -> o.getDataConsD().equals(viewModel.dataConsegnaDate);
}
refreshList();
if(!firstInit) refreshList();
});
viewModel.dataConsegna.refresh();
BindableString.resetListeners(viewModel.terminiConsegna);
BindableString.registerListener(viewModel.terminiConsegna, value -> {
if(UtilityString.isNullOrEmpty(value)) currentTermConsPredicate = null;
else {
currentTermConsPredicate = o -> o.getTermCons() != null && o.getTermCons().toLowerCase().contains(value);
currentTermConsPredicate = o -> o.getTermCons() != null && o.getTermCons().equalsIgnoreCase(value);
}
refreshList();
if(!firstInit) refreshList();
});
viewModel.terminiConsegna.refresh();
BindableString.resetListeners(viewModel.automezzo);
BindableString.registerListener(viewModel.automezzo, value -> {
if(UtilityString.isNullOrEmpty(value)) currentAutomezzoPredicate = null;
else {
currentAutomezzoPredicate = o -> o.getCodAuto().toLowerCase().contains(value);
}
refreshList();
if(!firstInit) refreshList();
});
viewModel.automezzo.refresh();
if(firstInit) refreshList();
firstInit = false;
}
@ -233,9 +280,9 @@ public class DialogVenditaFiltroAvanzato {
Stream<OrdineVenditaInevasoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x)))
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
@ -258,12 +305,6 @@ public class DialogVenditaFiltroAvanzato {
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x)))
);
//if(currentNumOrdsPredicate != null) tmpStream = tmpStream.filter(currentNumOrdsPredicate);
//if(currentClientePredicate != null) tmpStream = tmpStream.filter(currentClientePredicate);
//if(currentDataConsPredicate != null) tmpStream = tmpStream.filter(currentDataConsPredicate);
//if(currentTermConsPredicate != null) tmpStream = tmpStream.filter(currentTermConsPredicate);
//if(currentClientePredicate != null) tmpStream = tmpStream.filter(currentClientePredicate);
currentFilteredOrderList = tmpStream.toList();
}

View File

@ -0,0 +1,4 @@
package it.integry.integrywmsnative.gest.versamento_merce;
public class VersamentoMerceFragment {
}

View File

@ -40,7 +40,7 @@
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:inputType="number|text"
android:hint="@string/num_ords"
app:binding="@{viewmodel.numOrds}"/>