Finish v1.19.3(244)
This commit is contained in:
commit
37e3024220
@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services'
|
||||
|
||||
android {
|
||||
|
||||
def appVersionCode = 243
|
||||
def appVersionName = '1.19.2'
|
||||
def appVersionCode = 244
|
||||
def appVersionName = '1.19.3'
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
|
||||
@ -15,6 +15,7 @@ import it.integry.integrywmsnative.core.menu.MenuService;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
|
||||
@ -85,6 +86,12 @@ public class MainApplicationModule {
|
||||
return new ArticoloRESTConsumer(systemRESTConsumer);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
CommessaRESTConsumer provideCommessaRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
||||
return new CommessaRESTConsumer(systemRESTConsumer);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
DepositoRESTConsumer provideDepositoRESTConsumer(EntityRESTConsumer entityRESTConsumer, SystemRESTConsumer systemRESTConsumer) {
|
||||
|
||||
@ -106,6 +106,9 @@ public class DtbOrdt extends EntityBase {
|
||||
private String noteConferma;
|
||||
private String codJflav;
|
||||
|
||||
public DtbOrdt() {
|
||||
this.type = "dtb_ordt";
|
||||
}
|
||||
|
||||
public String getDataOrd() {
|
||||
return dataOrd;
|
||||
|
||||
@ -0,0 +1,49 @@
|
||||
package it.integry.integrywmsnative.core.model;
|
||||
|
||||
public class JtbComt extends EntityBase {
|
||||
|
||||
private String codJcom;
|
||||
private String codJfas;
|
||||
private String codJflav;
|
||||
private String descrizione;
|
||||
|
||||
public JtbComt() {
|
||||
this.type = "jtb_comt";
|
||||
}
|
||||
|
||||
public String getCodJcom() {
|
||||
return codJcom;
|
||||
}
|
||||
|
||||
public JtbComt setCodJcom(String codJcom) {
|
||||
this.codJcom = codJcom;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodJfas() {
|
||||
return codJfas;
|
||||
}
|
||||
|
||||
public JtbComt setCodJfas(String codJfas) {
|
||||
this.codJfas = codJfas;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodJflav() {
|
||||
return codJflav;
|
||||
}
|
||||
|
||||
public JtbComt setCodJflav(String codJflav) {
|
||||
this.codJflav = codJflav;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDescrizione() {
|
||||
return descrizione;
|
||||
}
|
||||
|
||||
public JtbComt setDescrizione(String descrizione) {
|
||||
this.descrizione = descrizione;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
package it.integry.integrywmsnative.core.rest.consumers;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.JtbComt;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityQuery;
|
||||
|
||||
@Singleton
|
||||
public class CommessaRESTConsumer extends _BaseRESTConsumer {
|
||||
|
||||
private final SystemRESTConsumer systemRESTConsumer;
|
||||
|
||||
public CommessaRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
||||
this.systemRESTConsumer = systemRESTConsumer;
|
||||
}
|
||||
|
||||
|
||||
public void getJtbComts(List<String> itemsToFind, RunnableArgs<List<JtbComt>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||
var whereCondMap = Stream.of(itemsToFind)
|
||||
.map(x -> {
|
||||
HashMap<String, Object> vars = new HashMap<>();
|
||||
vars.put("cod_jcom", x);
|
||||
return vars;
|
||||
})
|
||||
.toList();
|
||||
|
||||
var whereCond = " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondMap);
|
||||
|
||||
Type typeOfObjectsList = new TypeToken<ArrayList<JtbComt>>() {}.getType();
|
||||
this.systemRESTConsumer.processSql("SELECT * FROM jtb_comt " + whereCond, typeOfObjectsList, onComplete, onFailed);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -53,6 +53,7 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable
|
||||
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
|
||||
private ElevatedToolbar mToolbar;
|
||||
|
||||
private String mTextFilter;
|
||||
private FragmentMainAccettazioneBinding mBinding;
|
||||
|
||||
private final ObservableArrayList<MainListAccettazioneListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
|
||||
@ -119,7 +120,9 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable
|
||||
|
||||
|
||||
private void initRecyclerView() {
|
||||
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
|
||||
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), x->{
|
||||
this.refreshList(getFilteredList(mTextFilter));
|
||||
});
|
||||
|
||||
|
||||
MainListAccettazioneAdapter adapter = new MainListAccettazioneAdapter(getActivity(), mOrdiniInevasiMutableData)
|
||||
@ -225,20 +228,25 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearcable
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
List<OrdineAccettazioneInevasoDTO> originalList = this.mViewModel.getOrderList().getValue();
|
||||
if(originalList == null || originalList.isEmpty()) return false;
|
||||
mTextFilter = newText;
|
||||
List<OrdineAccettazioneInevasoDTO> filteredOrders = getFilteredList(newText);
|
||||
|
||||
refreshList(filteredOrders);
|
||||
return true;
|
||||
}
|
||||
|
||||
private List<OrdineAccettazioneInevasoDTO> getFilteredList(String newText) {
|
||||
List<OrdineAccettazioneInevasoDTO> filteredOrders = new ArrayList<>();
|
||||
List<OrdineAccettazioneInevasoDTO> originalList = this.mViewModel.getOrderList().getValue();
|
||||
|
||||
if(originalList == null || originalList.isEmpty()) return false;
|
||||
|
||||
if(originalList == null || originalList.isEmpty() || newText == null) return originalList;
|
||||
for(int i = 0; i < originalList.size(); i++){
|
||||
|
||||
if(originalList.get(i).getRagSocOrd().toLowerCase().contains(newText.toLowerCase())){
|
||||
filteredOrders.add(originalList.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
refreshList(filteredOrders);
|
||||
return true;
|
||||
return filteredOrders;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -84,6 +84,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
||||
@Inject
|
||||
OrdiniUscitaElencoViewModel mViewModel;
|
||||
|
||||
private final VenditaFiltroOrdiniViewModel mAppliedFilterViewModel = new VenditaFiltroOrdiniViewModel();
|
||||
|
||||
private FragmentMainOrdiniUscitaBinding mBindings = null;
|
||||
|
||||
private final ObservableArrayList<OrdiniUscitaElencoListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
|
||||
@ -188,7 +190,9 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
||||
this.onLoadingStarted();
|
||||
this.initMtbGrupsCache(this::onLoadingEnded);
|
||||
|
||||
this.refreshList(null);
|
||||
mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
|
||||
this.refreshList(v);
|
||||
});
|
||||
|
||||
OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter =
|
||||
@ -696,7 +700,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
||||
if (filteredList != null) {
|
||||
tmpList = filteredList;
|
||||
} else if (mAppliedFilterViewModel != null) {
|
||||
mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
mAppliedFilterViewModel.applyAllTests();
|
||||
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||
} else {
|
||||
@ -825,22 +828,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
||||
}
|
||||
|
||||
|
||||
private final VenditaFiltroOrdiniViewModel mAppliedFilterViewModel = new VenditaFiltroOrdiniViewModel();
|
||||
|
||||
// @Override
|
||||
// public void onFilterClick() {
|
||||
// DialogVenditaFiltroAvanzatoView.make(
|
||||
// getActivity(),
|
||||
// this.mViewModel.getOrderList().getValue(),
|
||||
// mAppliedFilterViewModel,
|
||||
//
|
||||
// filter -> {
|
||||
//
|
||||
// mAppliedFilterViewModel = filter;
|
||||
// refreshList(null);
|
||||
//
|
||||
// }).show();
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void addOnPreDestroy(Runnable onPreDestroy) {
|
||||
|
||||
@ -73,10 +73,18 @@ public class FilterAgenteLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllAgenti())
|
||||
.filter(x -> !hiddenAgenti.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedAgenti.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableAgenti.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedAgenti.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedAgenti.add(x);
|
||||
else preSelectedAgenti.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableAgenti.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -72,10 +72,18 @@ public class FilterAutomezzoLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllAutomezzi())
|
||||
.filter(x -> !hiddenAutomezzi.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedAutomezzi.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableAutomezzi.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedAutomezzi.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedAutomezzi.add(x);
|
||||
else preSelectedAutomezzi.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableAutomezzi.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -72,10 +72,18 @@ public class FilterClienteLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllClienti())
|
||||
.filter(x -> !hiddenClienti.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedClienti.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableClienti.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedClienti.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedClienti.add(x);
|
||||
else preSelectedClienti.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableClienti.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -88,10 +88,18 @@ public class FilterDepositoLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllCodMdeps())
|
||||
.filter(x -> !hiddenDepos.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedCodMdeps.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableCodMdeps.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedCodMdeps.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedCodMdeps.add(x);
|
||||
else preSelectedCodMdeps.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableCodMdeps.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -76,10 +76,18 @@ public class FilterGruppoMercLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllGroupMerc())
|
||||
.filter(x -> !hiddenGroupMerc.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedGroupMerc.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableGroupMerc.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedGroupMerc.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedGroupMerc.add(x);
|
||||
else preSelectedGroupMerc.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedGroupMerc.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableGroupMerc.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -73,10 +73,18 @@ public class FilterNumeroOrdineLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllNumOrds())
|
||||
.filter(x -> !hiddenNumOrds.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedNumOrds.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableNumOrds.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedNumOrds.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if(selectedBoolean.get()) preSelectedNumOrds.add(x);
|
||||
else preSelectedNumOrds.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableNumOrds.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -73,10 +73,18 @@ public class FilterPaeseLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllPaesi())
|
||||
.filter(x -> !hiddenPaesi.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedPaesi.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availablePaesi.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedPaesi.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedPaesi.add(x);
|
||||
else preSelectedPaesi.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availablePaesi.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -73,10 +73,18 @@ public class FilterTermConsLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllTermCons())
|
||||
.filter(x -> !hiddenSelectedTermCons.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedTermCons.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableTermCons.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedTermCons.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedTermCons.add(x);
|
||||
else preSelectedTermCons.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableTermCons.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -74,10 +74,18 @@ public class FilterVettoreLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllVettori())
|
||||
.filter(x -> !hiddenSelectedVettori.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedVettori.contains(x)))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedVettori.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedVettori.add(x);
|
||||
else preSelectedVettori.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableVettori.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -73,10 +73,18 @@ public class FilterViaggioLayoutView extends FilterLayoutView {
|
||||
|
||||
listModel.setValue(Stream.of(getAllIDViaggio())
|
||||
.filter(x -> !hiddenIDViaggio.contains(x))
|
||||
.map(x -> new ListModel()
|
||||
.setSelected(new BindableBoolean(preSelectedIDViaggio.contains(x)))
|
||||
.setEnabled(new BindableBoolean(availableIDViaggio.contains(x)))
|
||||
.setOriginalModel(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedIDViaggio.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedIDViaggio.add(x);
|
||||
else preSelectedIDViaggio.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableIDViaggio.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ public class OrdiniUscitaElencoRESTConsumer extends _BaseRESTConsumer {
|
||||
@Override
|
||||
public void onResponse(Call<ServiceRESTResponse<List<DtbOrdt>>> call, Response<ServiceRESTResponse<List<DtbOrdt>>> response) {
|
||||
analyzeAnswer(response, "getOrdiniFromCommessaCollo", (m) -> {
|
||||
onComplete.run(response.body().getEntity());
|
||||
onComplete.run(response.body().getDto());
|
||||
}, onFailed);
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
|
||||
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
|
||||
|
||||
public class ProdOrdineProduzioneElencoBindings {
|
||||
|
||||
public static final int NUM_ORD_FILTER_ID = 0;
|
||||
public static final int COMMESSA_FILTER_ID = 1;
|
||||
|
||||
public static final HashMap<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {{
|
||||
|
||||
put(NUM_ORD_FILTER_ID, new FilterChipDTO()
|
||||
.setID(NUM_ORD_FILTER_ID)
|
||||
.setFilterChipText("Numero ordine")
|
||||
.setFilterLayoutView(new FilterNumeroOrdineLayoutView()));
|
||||
|
||||
put(COMMESSA_FILTER_ID, new FilterChipDTO()
|
||||
.setID(COMMESSA_FILTER_ID)
|
||||
.setFilterChipText("Commessa")
|
||||
.setFilterLayoutView(new FilterCommessaLayoutView()));
|
||||
|
||||
}};
|
||||
|
||||
}
|
||||
@ -19,6 +19,7 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@ -27,9 +28,11 @@ import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.data_cache.DataCache;
|
||||
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||
import it.integry.integrywmsnative.core.expansion.BaseFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||
import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback;
|
||||
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||
import it.integry.integrywmsnative.core.model.JtbComt;
|
||||
import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer;
|
||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
@ -37,31 +40,38 @@ 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.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.OrdineProduzioneFilterViewModel;
|
||||
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.ui.filter_chips.FilterChipDTO;
|
||||
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
|
||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
*/
|
||||
public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment {
|
||||
public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment {
|
||||
|
||||
public BindableBoolean fabVisible = new BindableBoolean(false);
|
||||
|
||||
@Inject
|
||||
ProdOrdineProduzioneElencoViewModel mViewModel;
|
||||
|
||||
private FragmentProdOrdineProduzioneElencoBinding mBinding;
|
||||
@Inject
|
||||
CommessaRESTConsumer mCommessaRESTConsumer;
|
||||
|
||||
private FragmentProdOrdineProduzioneElencoBinding mBindings;
|
||||
|
||||
private final ObservableArrayList<MainListProdOrdineProduzioneElencoListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
|
||||
|
||||
private AppCompatTextView mAppBarTitle;
|
||||
|
||||
private DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||
|
||||
// private DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
||||
private OrdineProduzioneFilterViewModel mFilterViewModel = new OrdineProduzioneFilterViewModel();
|
||||
private List<JtbComt> jtbComtCache;
|
||||
|
||||
public ProdOrdineProduzioneElencoFragment() {
|
||||
// Required empty public constructor
|
||||
@ -84,7 +94,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false);
|
||||
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false);
|
||||
|
||||
MainApplication.appComponent
|
||||
.prodOrdineProduzioneElencoComponent()
|
||||
@ -93,12 +103,13 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
|
||||
mViewModel.setListener(this);
|
||||
|
||||
mBinding.setLifecycleOwner(this);
|
||||
mBinding.setView(this);
|
||||
mBindings.setLifecycleOwner(this);
|
||||
mBindings.setView(this);
|
||||
|
||||
this.initRecyclerView();
|
||||
this.initFilters();
|
||||
|
||||
return mBinding.getRoot();
|
||||
return mBindings.getRoot();
|
||||
}
|
||||
|
||||
|
||||
@ -119,9 +130,16 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
|
||||
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), v -> {
|
||||
this.onLoadingStarted();
|
||||
this.initJtbComtCache(this::onLoadingEnded);
|
||||
|
||||
mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
mFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
|
||||
this.refreshList(v);
|
||||
});
|
||||
|
||||
mBindings.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
|
||||
OrdineProduzioneListAdapter adapter = new OrdineProduzioneListAdapter(getActivity(), mOrdiniInevasiMutableData)
|
||||
.setOnGroupItemClicked(x -> {
|
||||
@ -146,23 +164,129 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
.anyMatch(y -> y.getSelectedObservable().get()));
|
||||
});
|
||||
|
||||
adapter.setEmptyView(mBinding.ordiniProduzioneEmptyView);
|
||||
adapter.setEmptyView(mBindings.ordiniProduzioneEmptyView);
|
||||
|
||||
mBinding.ordineProduzioneMainList.setAdapter(adapter);
|
||||
mBindings.ordineProduzioneMainList.setAdapter(adapter);
|
||||
|
||||
// mToolbar.setRecyclerView(mBindings.ordineProduzioneMainList);
|
||||
}
|
||||
|
||||
private void initFilters() {
|
||||
var onPredicateChanged = new OnGeneralChangedCallback() {
|
||||
@Override
|
||||
public void run() {
|
||||
refreshList(null);
|
||||
}
|
||||
};
|
||||
|
||||
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged);
|
||||
mFilterViewModel.getCurrentCommPredicate().addOnPropertyChangedCallback(onPredicateChanged);
|
||||
|
||||
|
||||
for (var filterChipDTO : ProdOrdineProduzioneElencoBindings.AVAILABLE_FILTERS.entrySet()) {
|
||||
|
||||
FilterChipView filterChipView = new FilterChipView(
|
||||
requireActivity(),
|
||||
filterChipDTO.getValue().getFilterChipText(),
|
||||
v -> initBottomSheetDialogFilter(filterChipDTO.getValue()));
|
||||
|
||||
switch (filterChipDTO.getKey()) {
|
||||
case ProdOrdineProduzioneElencoBindings.COMMESSA_FILTER_ID:
|
||||
mFilterViewModel.getCurrentCommPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mFilterViewModel.getCurrentCommPredicate().get() == null) {
|
||||
filterChipView.disableCloseIcon();
|
||||
|
||||
mBindings.filterChipsGroup.removeView(filterChipView);
|
||||
mBindings.filterChipsGroup.addView(filterChipView);
|
||||
mBindings.filterChips.smoothScrollTo(0, 0);
|
||||
} else {
|
||||
filterChipView.enableCloseIcon();
|
||||
|
||||
mBindings.filterChipsGroup.removeView(filterChipView);
|
||||
mBindings.filterChipsGroup.addView(filterChipView, 0);
|
||||
mBindings.filterChips.smoothScrollTo(0, 0);
|
||||
}
|
||||
}
|
||||
});
|
||||
filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentCommPredicate().set(null));
|
||||
break;
|
||||
case ProdOrdineProduzioneElencoBindings.NUM_ORD_FILTER_ID:
|
||||
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mFilterViewModel.getCurrentNumOrdsPredicate().get() == null) {
|
||||
filterChipView.disableCloseIcon();
|
||||
|
||||
mBindings.filterChipsGroup.removeView(filterChipView);
|
||||
mBindings.filterChipsGroup.addView(filterChipView);
|
||||
mBindings.filterChips.smoothScrollTo(0, 0);
|
||||
} else {
|
||||
filterChipView.enableCloseIcon();
|
||||
|
||||
mBindings.filterChipsGroup.removeView(filterChipView);
|
||||
mBindings.filterChipsGroup.addView(filterChipView, 0);
|
||||
mBindings.filterChips.smoothScrollTo(0, 0);
|
||||
}
|
||||
}
|
||||
});
|
||||
filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentNumOrdsPredicate().set(null));
|
||||
break;
|
||||
}
|
||||
this.mBindings.filterChipsGroup.addView(filterChipView);
|
||||
}
|
||||
}
|
||||
|
||||
private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) {
|
||||
filterChipDTO
|
||||
.getFilterLayoutView()
|
||||
.setFilterName(filterChipDTO.getFilterChipText())
|
||||
.setContext(requireActivity());
|
||||
|
||||
var filterLayoutView = filterChipDTO
|
||||
.getFilterLayoutView();
|
||||
|
||||
switch (filterChipDTO.getID()) {
|
||||
case ProdOrdineProduzioneElencoBindings.COMMESSA_FILTER_ID:
|
||||
((FilterCommessaLayoutView) filterLayoutView)
|
||||
.setAllCommesse(mFilterViewModel.getAllCommesse(jtbComtCache))
|
||||
.setAvailableCommesse(mFilterViewModel.getAvailableCommesse(jtbComtCache))
|
||||
.setOnFilterApplied(mFilterViewModel::setCommessaFilter)
|
||||
.setPreSelectedCommesse(Stream.of(Objects.requireNonNull(mViewModel.getOrderList().getValue()))
|
||||
.filter(mFilterViewModel.getCurrentCommPredicate().get() == null ?
|
||||
x -> false :
|
||||
mFilterViewModel.getCurrentCommPredicate().get())
|
||||
.map(x -> Stream.of(jtbComtCache).filter(y -> x.getCodJcom().equalsIgnoreCase(y.getCodJcom())).findFirst().get())
|
||||
.toList());
|
||||
break;
|
||||
case ProdOrdineProduzioneElencoBindings.NUM_ORD_FILTER_ID:
|
||||
((FilterNumeroOrdineLayoutView) filterLayoutView)
|
||||
.setAllNumOrds(mFilterViewModel.getAllNumOrds())
|
||||
.setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds())
|
||||
.setOnFilterApplied(mFilterViewModel::setNumOrdFilter)
|
||||
.setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrderList().getValue()))
|
||||
.filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ?
|
||||
x -> false :
|
||||
mFilterViewModel.getCurrentNumOrdsPredicate().get())
|
||||
.map(OrdineAccettazioneInevasoDTO::getNumero)
|
||||
.toList());
|
||||
break;
|
||||
}
|
||||
|
||||
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
|
||||
|
||||
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
|
||||
}
|
||||
|
||||
private void refreshList(List<OrdineAccettazioneInevasoDTO> filteredList) {
|
||||
|
||||
List<OrdineAccettazioneInevasoDTO> tmpList = null;
|
||||
|
||||
if(filteredList != null) {
|
||||
if (filteredList != null) {
|
||||
tmpList = filteredList;
|
||||
} else if (mAppliedFilterViewModel != null) {
|
||||
mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
mAppliedFilterViewModel.applyAllTests();
|
||||
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||
} else if (mFilterViewModel != null) {
|
||||
mFilterViewModel.applyAllTests();
|
||||
tmpList = mFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||
} else {
|
||||
tmpList = mViewModel.getOrderList().getValue();
|
||||
}
|
||||
@ -210,20 +334,20 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
this.mViewModel.loadPicking(selectedOrders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFilterClick() {
|
||||
DialogOrdineProduzioneFiltroAvanzatoView.make(
|
||||
getActivity(),
|
||||
this.mViewModel.getOrderList().getValue(),
|
||||
mAppliedFilterViewModel,
|
||||
|
||||
filter -> {
|
||||
|
||||
mAppliedFilterViewModel = filter;
|
||||
refreshList(null);
|
||||
|
||||
}).show();
|
||||
}
|
||||
// @Override
|
||||
// public void onFilterClick() {
|
||||
// DialogOrdineProduzioneFiltroAvanzatoView.make(
|
||||
// getActivity(),
|
||||
// this.mViewModel.getOrderList().getValue(),
|
||||
// mAppliedFilterViewModel,
|
||||
//
|
||||
// filter -> {
|
||||
//
|
||||
// mAppliedFilterViewModel = filter;
|
||||
// refreshList(null);
|
||||
//
|
||||
// }).show();
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
@ -256,4 +380,18 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
|
||||
|
||||
}).show(getActivity().getSupportFragmentManager(), "tag");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void initJtbComtCache(Runnable onComplete) {
|
||||
var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue()))
|
||||
.flatMap(x -> Stream.of(x.getCodJcom()))
|
||||
.toList();
|
||||
|
||||
this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> {
|
||||
this.jtbComtCache = jtbComtCache;
|
||||
onComplete.run();
|
||||
}, this::onError);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,175 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.ComparatorCompat;
|
||||
import com.annimon.stream.Stream;
|
||||
import com.ravikoradiya.liveadapter.LiveAdapter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
|
||||
import it.integry.integrywmsnative.BR;
|
||||
import it.integry.integrywmsnative.R;
|
||||
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||
import it.integry.integrywmsnative.core.model.JtbComt;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityBoolean;
|
||||
import it.integry.integrywmsnative.databinding.LayoutFilterCommessaBinding;
|
||||
import it.integry.integrywmsnative.ui.filter_chips.FilterLayoutView;
|
||||
|
||||
public class FilterCommessaLayoutView extends FilterLayoutView {
|
||||
|
||||
protected LayoutFilterCommessaBinding mBindings;
|
||||
|
||||
private List<JtbComt> allCommesse;
|
||||
private List<JtbComt> availableCommesse;
|
||||
private List<JtbComt> preSelectedCommesse = new ArrayList<>();
|
||||
private List<JtbComt> hiddenCommesse = new ArrayList<>();
|
||||
private final MutableLiveData<List<ListModel>> listModel = new MutableLiveData<>();
|
||||
|
||||
private RunnableArgs<List<JtbComt>> onFilterApplied;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
mBindings = DataBindingUtil.inflate(inflater, R.layout.layout_filter_commessa, container, false);
|
||||
this.mBindings.setView(this);
|
||||
|
||||
refreshList();
|
||||
|
||||
this.setSearchView(this.mBindings.searchView, newFilter -> {
|
||||
hiddenCommesse = Stream.of(allCommesse)
|
||||
.filter(x -> !x.getCodJcom().toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) &&
|
||||
!x.getDescrizione().toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)))
|
||||
.toList();
|
||||
|
||||
refreshList();
|
||||
});
|
||||
|
||||
|
||||
new LiveAdapter(listModel, getViewLifecycleOwner(), BR.item)
|
||||
.map(ListModel.class, R.layout.layout_filter_commessa__list_item)
|
||||
.into(this.mBindings.recyclerview);
|
||||
|
||||
return mBindings.getRoot();
|
||||
}
|
||||
|
||||
private void refreshList() {
|
||||
ComparatorCompat<ListModel> c =
|
||||
ComparatorCompat
|
||||
.chain(new ComparatorCompat<ListModel>((x, y) -> UtilityBoolean.toInt(x.getSelected().get()) - UtilityBoolean.toInt(y.getSelected().get())))
|
||||
.thenComparing(new ComparatorCompat<>((x, y) -> UtilityBoolean.toInt(x.getEnabled().get()) - UtilityBoolean.toInt(y.getEnabled().get())))
|
||||
.thenComparing(new ComparatorCompat<>((x, y) -> y.getOriginalModel().getCodJcom().compareTo(x.getOriginalModel().getCodJcom())))
|
||||
.reversed();
|
||||
|
||||
listModel.setValue(Stream.of(getAllCommesse())
|
||||
.filter(x -> !hiddenCommesse.contains(x))
|
||||
.map(x -> {
|
||||
var selectedBoolean = new BindableBoolean(preSelectedCommesse.contains(x));
|
||||
selectedBoolean.addOnPropertyChangedCallback(() -> {
|
||||
if (selectedBoolean.get()) preSelectedCommesse.add(x);
|
||||
else preSelectedCommesse.remove(x);
|
||||
});
|
||||
|
||||
return new ListModel()
|
||||
.setSelected(selectedBoolean)
|
||||
.setEnabled(new BindableBoolean(availableCommesse.contains(x)))
|
||||
.setOriginalModel(x);
|
||||
})
|
||||
.sorted(c)
|
||||
.toList());
|
||||
}
|
||||
|
||||
|
||||
public void onConfirm() {
|
||||
if (onFilterApplied == null) return;
|
||||
|
||||
this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue()))
|
||||
.filter(x -> x.selected.get())
|
||||
.map(x -> x.originalModel)
|
||||
.toList());
|
||||
|
||||
dismiss();
|
||||
}
|
||||
|
||||
public List<JtbComt> getAllCommesse() {
|
||||
return allCommesse;
|
||||
}
|
||||
|
||||
public FilterCommessaLayoutView setAllCommesse(List<JtbComt> allCommesse) {
|
||||
this.allCommesse = allCommesse;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<JtbComt> getAvailableCommesse() {
|
||||
return availableCommesse;
|
||||
}
|
||||
|
||||
public FilterCommessaLayoutView setAvailableCommesse(List<JtbComt> availableCommesse) {
|
||||
this.availableCommesse = availableCommesse;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<JtbComt> getPreSelectedCommesse() {
|
||||
return preSelectedCommesse;
|
||||
}
|
||||
|
||||
public FilterCommessaLayoutView setPreSelectedCommesse(List<JtbComt> preSelectedCommesse) {
|
||||
this.preSelectedCommesse = preSelectedCommesse;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RunnableArgs<List<JtbComt>> getOnFilterApplied() {
|
||||
return onFilterApplied;
|
||||
}
|
||||
|
||||
public FilterCommessaLayoutView setOnFilterApplied(RunnableArgs<List<JtbComt>> onFilterApplied) {
|
||||
this.onFilterApplied = onFilterApplied;
|
||||
return this;
|
||||
}
|
||||
|
||||
public static class ListModel {
|
||||
private BindableBoolean selected = new BindableBoolean();
|
||||
private BindableBoolean enabled = new BindableBoolean();
|
||||
private JtbComt originalModel;
|
||||
|
||||
public BindableBoolean getSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
public ListModel setSelected(BindableBoolean selected) {
|
||||
this.selected = selected;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BindableBoolean getEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public ListModel setEnabled(BindableBoolean enabled) {
|
||||
this.enabled = enabled;
|
||||
return this;
|
||||
}
|
||||
|
||||
public JtbComt getOriginalModel() {
|
||||
return originalModel;
|
||||
}
|
||||
|
||||
public ListModel setOriginalModel(JtbComt originalModel) {
|
||||
this.originalModel = originalModel;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,136 @@
|
||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters;
|
||||
|
||||
import androidx.databinding.ObservableField;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.annimon.stream.function.Predicate;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import it.integry.integrywmsnative.core.model.JtbComt;
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||
|
||||
public class OrdineProduzioneFilterViewModel {
|
||||
private final ObservableField<Predicate<OrdineAccettazioneInevasoDTO>> currentNumOrdsPredicate = new ObservableField<>();
|
||||
private final ObservableField<Predicate<OrdineAccettazioneInevasoDTO>> currentCommPredicate = new ObservableField<>();
|
||||
|
||||
|
||||
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(List<Integer> numOrds) {
|
||||
if (numOrds == null || numOrds.isEmpty()) currentNumOrdsPredicate.set(null);
|
||||
else {
|
||||
currentNumOrdsPredicate.set(o -> numOrds.contains(o.getNumero()));
|
||||
}
|
||||
}
|
||||
|
||||
public void setCommessaFilter(List<JtbComt> jtbComtList) {
|
||||
if (jtbComtList == null || jtbComtList.isEmpty()) currentCommPredicate.set(null);
|
||||
else {
|
||||
List<String> codMdeps = Stream.of(jtbComtList).map(JtbComt::getCodJcom).toList();
|
||||
currentCommPredicate.set(o -> codMdeps.contains(o.getCodJcom()));
|
||||
}
|
||||
}
|
||||
|
||||
public void applyAllTests() {
|
||||
List<OrdineAccettazioneInevasoDTO> returnList = null;
|
||||
|
||||
if (currentNumOrdsPredicate.get() == null &&
|
||||
currentCommPredicate.get() == null
|
||||
) {
|
||||
returnList = this.initialOrderList;
|
||||
} else {
|
||||
Stream<OrdineAccettazioneInevasoDTO> tmpStream = Stream.of(this.initialOrderList)
|
||||
.filter(x ->
|
||||
(currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) &&
|
||||
(currentCommPredicate.get() == null || (currentCommPredicate.get().test(x))));
|
||||
|
||||
returnList = tmpStream.toList();
|
||||
}
|
||||
|
||||
this.currentFilteredOrderList.setValue(returnList);
|
||||
}
|
||||
|
||||
public ObservableField<Predicate<OrdineAccettazioneInevasoDTO>> getCurrentNumOrdsPredicate() {
|
||||
return currentNumOrdsPredicate;
|
||||
}
|
||||
|
||||
public ObservableField<Predicate<OrdineAccettazioneInevasoDTO>> getCurrentCommPredicate() {
|
||||
return currentCommPredicate;
|
||||
}
|
||||
|
||||
|
||||
public List<JtbComt> getAllCommesse(List<JtbComt> commesseFullList) {
|
||||
List<String> codJcom = Stream.of(initialOrderList)
|
||||
.map(OrdineAccettazioneInevasoDTO::getCodJcom)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
return Stream.of(Objects.requireNonNull(commesseFullList))
|
||||
.filter(x -> codJcom.contains(x.getCodJcom()))
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.sortBy(JtbComt::getCodJcom)
|
||||
.toList();
|
||||
}
|
||||
|
||||
public List<JtbComt> getAvailableCommesse(List<JtbComt> commesseFullList) {
|
||||
|
||||
if (currentNumOrdsPredicate.get() == null) {
|
||||
return getAllCommesse(commesseFullList);
|
||||
} else {
|
||||
List<String> availableCodMdeps = Stream.of(this.initialOrderList)
|
||||
.filter(x ->
|
||||
(currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x)))
|
||||
)
|
||||
.map(OrdineAccettazioneInevasoDTO::getCodJcom)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
return Stream.of(Objects.requireNonNull(commesseFullList))
|
||||
.filter(x -> availableCodMdeps.contains(x.getCodJcom()))
|
||||
.distinct()
|
||||
.withoutNulls()
|
||||
.sortBy(JtbComt::getCodJcom)
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
public List<Integer> getAllNumOrds() {
|
||||
return Stream
|
||||
.of(Objects.requireNonNull(initialOrderList))
|
||||
.filter(x -> x.getNumero() != null)
|
||||
.sortBy(x -> -x.getNumero())
|
||||
.map(x -> x.getNumero() != null ? x.getNumero() : null)
|
||||
.distinct()
|
||||
.toList();
|
||||
}
|
||||
|
||||
public List<Integer> getAvailableNumOrds() {
|
||||
|
||||
if (currentCommPredicate.get() == null
|
||||
) {
|
||||
return getAllNumOrds();
|
||||
} else {
|
||||
return Stream.of(this.initialOrderList)
|
||||
.filter(x ->
|
||||
(currentCommPredicate.get() == null || (currentCommPredicate.get().test(x)))
|
||||
)
|
||||
.map(OrdineAccettazioneInevasoDTO::getNumero)
|
||||
.distinct()
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -37,60 +37,12 @@
|
||||
|
||||
<com.google.android.material.chip.ChipGroup
|
||||
android:id="@+id/filter_chips_group"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
app:chipSpacing="8dp"
|
||||
app:singleSelection="true">
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipBackgroundColor="@color/colorPrimary"-->
|
||||
<!-- android:textColor="@android:color/white"-->
|
||||
<!-- app:closeIconEnabled="true"-->
|
||||
<!-- app:closeIconTint="@android:color/white"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Deposito" />-->
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Numero" />-->
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Viaggio" />-->
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Cliente" />-->
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Vettore" />-->
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Automezzo" />-->
|
||||
|
||||
<!-- <com.google.android.material.chip.Chip-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- app:chipCornerRadius="4dp"-->
|
||||
<!-- android:text="Paese" />-->
|
||||
|
||||
</com.google.android.material.chip.ChipGroup>
|
||||
app:singleSelection="true" />
|
||||
</HorizontalScrollView>
|
||||
|
||||
|
||||
|
||||
@ -19,11 +19,29 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<HorizontalScrollView
|
||||
android:id="@+id/filter_chips"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scrollbars="none"
|
||||
android:background="@color/gray_050">
|
||||
|
||||
<com.google.android.material.chip.ChipGroup
|
||||
android:id="@+id/filter_chips_group"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
app:chipSpacing="8dp"
|
||||
app:singleSelection="true" />
|
||||
</HorizontalScrollView>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/ordine_produzione_main_list"
|
||||
android:scrollbars="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/filter_chips"/>
|
||||
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
||||
114
app/src/main/res/layout/layout_filter_commessa.xml
Normal file
114
app/src/main/res/layout/layout_filter_commessa.xml
Normal file
@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<data>
|
||||
|
||||
<variable
|
||||
name="dto"
|
||||
type="it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO" />
|
||||
|
||||
<variable
|
||||
name="view"
|
||||
type="it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView" />
|
||||
</data>
|
||||
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_toStartOf="@id/search_view"
|
||||
android:orientation="vertical"
|
||||
app:reverse_visibility="@{view.enabledSearch}">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/bottom_sheet_actions_title"
|
||||
style="@style/AppTheme.NewMaterial.Text.Medium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="0dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:text="@{view.filterName}"
|
||||
android:textColor="#444"
|
||||
android:textStyle="bold"
|
||||
tools:text="Nome filtro" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/AppTheme.NewMaterial.Text.Small"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:paddingStart="0dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:text="Seleziona la commessa che vuoi filtrare"
|
||||
android:textColor="#444" />
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
<androidx.appcompat.widget.SearchView
|
||||
android:id="@+id/search_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:backgroundTint="@android:color/white" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/title_layout">
|
||||
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="vertical"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHeight_max="270dp"
|
||||
app:layout_constraintHeight_min="200dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/save_btn"
|
||||
style="@style/Button.PrimaryFull"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text="@string/confirm"
|
||||
app:singleClick="@{() -> view.onConfirm()}" />
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
</layout>
|
||||
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<data>
|
||||
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
|
||||
<import type="android.view.View" />
|
||||
|
||||
<variable
|
||||
name="item"
|
||||
type="it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView.ListModel" />
|
||||
</data>
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:padding="8dp"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="@{item.enabled}"
|
||||
android:onClick="@{() -> item.selected.toggle()}">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatCheckBox
|
||||
android:id="@+id/checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@android:color/transparent"
|
||||
android:enabled="@{item.enabled}"
|
||||
app:checked="@{item.selected}"
|
||||
android:clickable="false"/>
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:enabled="@{item.enabled}"
|
||||
android:clickable="false">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/AppTheme.NewMaterial.Text.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="@{item.enabled}"
|
||||
android:text="@{item.originalModel.codJcom}"
|
||||
tools:text="01"
|
||||
android:clickable="false" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/AppTheme.NewMaterial.Text.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=" - "
|
||||
android:enabled="@{item.enabled}"
|
||||
android:visibility="@{UtilityString.isNullOrEmpty(item.originalModel.descrizione) ? View.GONE : View.VISIBLE}"
|
||||
tools:text=" - "
|
||||
android:clickable="false" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/AppTheme.NewMaterial.Text.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="@{item.enabled}"
|
||||
android:text="@{item.originalModel.descrizione}"
|
||||
android:visibility="@{UtilityString.isNullOrEmpty(item.originalModel.descrizione) ? View.GONE : View.VISIBLE}"
|
||||
tools:text="Descrizione deposito"
|
||||
android:clickable="false" />
|
||||
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
</layout>
|
||||
Loading…
x
Reference in New Issue
Block a user