Corretti nuovi filtri

This commit is contained in:
Giuseppe Scorrano 2021-11-11 19:56:43 +01:00
parent 9beea9f2e9
commit bd28db7422
23 changed files with 951 additions and 143 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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) {

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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()));
}};
}

View File

@ -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);
}
}

View File

@ -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;
}
}
}

View File

@ -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();
}
}
}

View File

@ -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>

View File

@ -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

View 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>

View File

@ -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>