Modificato filtro in Resi

This commit is contained in:
Giuseppe Scorrano 2020-01-09 12:08:18 +01:00
parent be5130a80e
commit 5d151efc56
9 changed files with 691 additions and 194 deletions

View File

@ -0,0 +1,398 @@
package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal;
import java.util.Date;
public class GtbAnag {
private String codAnag;
private String ragSoc;
private String indirizzo;
private String cap;
private String citta;
private String prov;
private String nazione;
private String telefono;
private String fax;
private String partIva;
private String codFisc;
private String note;
private String personaRif;
private String allegato;
private String eMail;
private String eMailPec;
private String flagPersonaFg;
private String sesso;
private String codCentroAzi;
private String codRuop;
private Date dataNascita;
private String luogoNascita;
private String provNascita;
private String nome;
private String ragSoc2;
private Integer classeMerito;
private Date dataIns;
private String numCell;
private String cciaa;
private String tipoAzienda;
private String cuuPa;
private String cognome;
private String diacod;
private BigDecimal lat;
private BigDecimal lng;
private String flagInformativa;
private String flagConsenso;
private String precode;
private Boolean insDestinatario;
public String getCodAnag() {
return codAnag;
}
public GtbAnag setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getRagSoc() {
return ragSoc;
}
public GtbAnag setRagSoc(String ragSoc) {
this.ragSoc = ragSoc;
return this;
}
public String getIndirizzo() {
return indirizzo;
}
public GtbAnag setIndirizzo(String indirizzo) {
this.indirizzo = indirizzo;
return this;
}
public String getCap() {
return cap;
}
public GtbAnag setCap(String cap) {
this.cap = cap;
return this;
}
public String getCitta() {
return citta;
}
public GtbAnag setCitta(String citta) {
this.citta = citta;
return this;
}
public String getProv() {
return prov;
}
public GtbAnag setProv(String prov) {
this.prov = prov;
return this;
}
public String getNazione() {
return nazione;
}
public GtbAnag setNazione(String nazione) {
this.nazione = nazione;
return this;
}
public String getTelefono() {
return telefono;
}
public GtbAnag setTelefono(String telefono) {
this.telefono = telefono;
return this;
}
public String getFax() {
return fax;
}
public GtbAnag setFax(String fax) {
this.fax = fax;
return this;
}
public String getPartIva() {
return partIva;
}
public GtbAnag setPartIva(String partIva) {
this.partIva = partIva;
return this;
}
public String getCodFisc() {
return codFisc;
}
public GtbAnag setCodFisc(String codFisc) {
this.codFisc = codFisc;
return this;
}
public String getNote() {
return note;
}
public GtbAnag setNote(String note) {
this.note = note;
return this;
}
public String getPersonaRif() {
return personaRif;
}
public GtbAnag setPersonaRif(String personaRif) {
this.personaRif = personaRif;
return this;
}
public String getAllegato() {
return allegato;
}
public GtbAnag setAllegato(String allegato) {
this.allegato = allegato;
return this;
}
public String geteMail() {
return eMail;
}
public GtbAnag seteMail(String eMail) {
this.eMail = eMail;
return this;
}
public String geteMailPec() {
return eMailPec;
}
public GtbAnag seteMailPec(String eMailPec) {
this.eMailPec = eMailPec;
return this;
}
public String getFlagPersonaFg() {
return flagPersonaFg;
}
public GtbAnag setFlagPersonaFg(String flagPersonaFg) {
this.flagPersonaFg = flagPersonaFg;
return this;
}
public String getSesso() {
return sesso;
}
public GtbAnag setSesso(String sesso) {
this.sesso = sesso;
return this;
}
public String getCodCentroAzi() {
return codCentroAzi;
}
public GtbAnag setCodCentroAzi(String codCentroAzi) {
this.codCentroAzi = codCentroAzi;
return this;
}
public String getCodRuop() {
return codRuop;
}
public GtbAnag setCodRuop(String codRuop) {
this.codRuop = codRuop;
return this;
}
public Date getDataNascita() {
return dataNascita;
}
public GtbAnag setDataNascita(Date dataNascita) {
this.dataNascita = dataNascita;
return this;
}
public String getLuogoNascita() {
return luogoNascita;
}
public GtbAnag setLuogoNascita(String luogoNascita) {
this.luogoNascita = luogoNascita;
return this;
}
public String getProvNascita() {
return provNascita;
}
public GtbAnag setProvNascita(String provNascita) {
this.provNascita = provNascita;
return this;
}
public String getNome() {
return nome;
}
public GtbAnag setNome(String nome) {
this.nome = nome;
return this;
}
public String getRagSoc2() {
return ragSoc2;
}
public GtbAnag setRagSoc2(String ragSoc2) {
this.ragSoc2 = ragSoc2;
return this;
}
public Integer getClasseMerito() {
return classeMerito;
}
public GtbAnag setClasseMerito(Integer classeMerito) {
this.classeMerito = classeMerito;
return this;
}
public Date getDataIns() {
return dataIns;
}
public GtbAnag setDataIns(Date dataIns) {
this.dataIns = dataIns;
return this;
}
public String getNumCell() {
return numCell;
}
public GtbAnag setNumCell(String numCell) {
this.numCell = numCell;
return this;
}
public String getCciaa() {
return cciaa;
}
public GtbAnag setCciaa(String cciaa) {
this.cciaa = cciaa;
return this;
}
public String getTipoAzienda() {
return tipoAzienda;
}
public GtbAnag setTipoAzienda(String tipoAzienda) {
this.tipoAzienda = tipoAzienda;
return this;
}
public String getCuuPa() {
return cuuPa;
}
public GtbAnag setCuuPa(String cuuPa) {
this.cuuPa = cuuPa;
return this;
}
public String getCognome() {
return cognome;
}
public GtbAnag setCognome(String cognome) {
this.cognome = cognome;
return this;
}
public String getDiacod() {
return diacod;
}
public GtbAnag setDiacod(String diacod) {
this.diacod = diacod;
return this;
}
public BigDecimal getLat() {
return lat;
}
public GtbAnag setLat(BigDecimal lat) {
this.lat = lat;
return this;
}
public BigDecimal getLng() {
return lng;
}
public GtbAnag setLng(BigDecimal lng) {
this.lng = lng;
return this;
}
public String getFlagInformativa() {
return flagInformativa;
}
public GtbAnag setFlagInformativa(String flagInformativa) {
this.flagInformativa = flagInformativa;
return this;
}
public String getFlagConsenso() {
return flagConsenso;
}
public GtbAnag setFlagConsenso(String flagConsenso) {
this.flagConsenso = flagConsenso;
return this;
}
public String getPrecode() {
return precode;
}
public GtbAnag setPrecode(String precode) {
this.precode = precode;
return this;
}
public Boolean getInsDestinatario() {
return insDestinatario;
}
public GtbAnag setInsDestinatario(Boolean insDestinatario) {
this.insDestinatario = insDestinatario;
return this;
}
}

View File

@ -21,7 +21,9 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
@ -32,30 +34,30 @@ public class DialogUltimeConsegneFiltroAvanzato {
private AlertDialog mAlert;
private Context mContext;
private DialogUltimeConsegneFiltroAvanzatoViewModel mBaseViewModel;
private RunnableArgss<List<DocumentoResoDTO>, DialogUltimeConsegneFiltroAvanzatoViewModel> mOnDismiss;
private RunnableArgs<DialogUltimeConsegneFiltroAvanzatoViewModel> mOnDismiss;
private ArrayAdapter<String> arrayAdapterRagSoc;
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mFilteredItems;
private List<GtbAnag> mItems;
private List<GtbAnag> mFilteredItems;
private Predicate<DocumentoResoDTO> currentRagSocPredicate = null;
private Predicate<DocumentoResoDTO> currentDataDocPredicate = null;
private Predicate<GtbAnag> currentRagSocPredicate = null;
private Predicate<GtbAnag> currentDataDocPredicate = null;
public static AlertDialog make(final Context context,
final List<DocumentoResoDTO> items,
final List<GtbAnag> items,
DialogUltimeConsegneFiltroAvanzatoViewModel baseViewModel,
RunnableArgss<List<DocumentoResoDTO>, DialogUltimeConsegneFiltroAvanzatoViewModel> onDismiss) {
RunnableArgs<DialogUltimeConsegneFiltroAvanzatoViewModel> onDismiss) {
return new DialogUltimeConsegneFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert;
}
public DialogUltimeConsegneFiltroAvanzato(final Context context,
final List<DocumentoResoDTO> items,
final List<GtbAnag> items,
DialogUltimeConsegneFiltroAvanzatoViewModel baseViewModel,
RunnableArgss<List<DocumentoResoDTO>, DialogUltimeConsegneFiltroAvanzatoViewModel> onDismiss) {
RunnableArgs<DialogUltimeConsegneFiltroAvanzatoViewModel> onDismiss) {
mContext = context;
mItems = items;
mBaseViewModel = baseViewModel;
@ -89,7 +91,7 @@ public class DialogUltimeConsegneFiltroAvanzato {
mAlert.setOnDismissListener(dialogInterface -> {
if(mOnDismiss != null) mOnDismiss.run(mFilteredItems, viewModel);
if(mOnDismiss != null) mOnDismiss.run(viewModel);
});
refreshList();
@ -144,26 +146,13 @@ public class DialogUltimeConsegneFiltroAvanzato {
refreshList();
});
BindableString.resetListeners(viewModel.dataDoc);
BindableString.registerListener(viewModel.dataDoc, value -> {
if (UtilityString.isNullOrEmpty(value)) currentDataDocPredicate = null;
else {
currentDataDocPredicate = o -> o.getDataDocD().equals(viewModel.dataDocDate);
}
refreshList();
arrayAdapterRagSoc.clear();
arrayAdapterRagSoc.addAll(getAvailableRagSocs(true));
});
}
private List<String> getAvailableRagSocs(boolean skipRecalc) {
if(currentDataDocPredicate == null){
mFilteredItems = mItems;
} else if(!skipRecalc){
Stream<DocumentoResoDTO> tmpStream = Stream.of(mItems)
Stream<GtbAnag> tmpStream = Stream.of(mItems)
.filter(x ->
(currentDataDocPredicate == null || (currentDataDocPredicate.test(x)))
);
@ -171,7 +160,7 @@ public class DialogUltimeConsegneFiltroAvanzato {
mFilteredItems = tmpStream.toList();
}
return Stream.of(mFilteredItems).map(DocumentoResoDTO::getRagSoc).distinct().withoutNulls().toList();
return Stream.of(mFilteredItems).map(x -> x.getCodAnag() + " - " + x.getRagSoc()).distinct().withoutNulls().toList();
}
@ -180,7 +169,7 @@ public class DialogUltimeConsegneFiltroAvanzato {
if(currentRagSocPredicate == null && currentDataDocPredicate == null){
mFilteredItems = mItems;
} else {
Stream<DocumentoResoDTO> tmpStream = Stream.of(mItems)
Stream<GtbAnag> tmpStream = Stream.of(mItems)
.filter(x ->
(currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) &&
(currentDataDocPredicate== null || (currentDataDocPredicate.test(x)))

View File

@ -8,6 +8,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
@ -22,7 +23,27 @@ import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
public class UltimeConsegneClienteRESTConsumer {
public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, int limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public static void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
"FROM gtb_anag " +
"INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " +
"WHERE flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
@Override
public void onSuccess(ArrayList<GtbAnag> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
});
}
public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT consegne.*, " +
" rag_soc," +

View File

@ -7,12 +7,14 @@ import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
@ -31,52 +33,36 @@ public class UltimeConsegneClienteViewModel {
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private List<GtbAnag> mAvailableGtbAnags = null;
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimeConsegneClienteViewModel(Context context, FragmentMainUltimeConsegneClienteBinding binding) {
this.mContext = context;
this.mBinding = binding;
this.initList();
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
openFilterDialog();
}
public void openFilterDialog() {
DialogUltimeConsegneFiltroAvanzato.make(mContext, mItems, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
mAppliedFilterViewModel = filter;
if(filteredOrderList != null){
refreshItems(filteredOrderList);
}
}).show();
}
private void initList() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(
SettingsManager.i().userSession.depo.getCodMdep(),
null,
null,
100,
365,
consegne -> {
this.mItems = consegne;
UltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
mAvailableGtbAnags = gtbAnags;
progressDialog.dismiss();
this.initDataAdapter(consegne);
refreshItems(consegne);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
DialogUltimeConsegneFiltroAvanzato.make(mContext, gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
@ -90,12 +76,43 @@ public class UltimeConsegneClienteViewModel {
}
private void refreshItems(List<DocumentoResoDTO> items){
mBinding.emptyView.setVisibility((items != null && items.size() > 0) ? View.GONE : View.VISIBLE);
private void refreshItems(){
mRenderedItems.clear();
if(items != null) mRenderedItems.addAll(items);
mAdapter.updateItems(mRenderedItems);
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if(singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(
SettingsManager.i().userSession.depo.getCodMdep(),
currentCodAnagFilter,
null,
null,
365,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(this.mItems != null) mRenderedItems.addAll(this.mItems);
mAdapter.updateItems(mRenderedItems);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {

View File

@ -14,6 +14,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
@ -21,6 +22,7 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
@ -30,6 +32,7 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
@ -42,14 +45,7 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
private Runnable mOnPreDestroy;
private ElevatedToolbar mToolbar;
private FragmentUltimiArriviFornitoreBinding mBinding;
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private UltimiArriviFornitoreListAdapter mAdapter;
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
private UltimiArriviFornitoreViewModel mViewModel;
public UltimiArriviFornitoreFragment() {
// Required empty public constructor
@ -68,14 +64,14 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false);
FragmentUltimiArriviFornitoreBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false);
mBinding.setViewmodel(this);
mViewModel = new UltimiArriviFornitoreViewModel(getActivity(), mBinding);
mBinding.setViewmodel(mViewModel);
mToolbar.setRecyclerView(mBinding.recyclerView);
this.initView();
// Inflate the layout for this fragment
return mBinding.getRoot();
}
@ -104,98 +100,11 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
private void initView() {
this.initList();
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
}
private void initList() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(getActivity());
UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(
SettingsManager.i().userSession.depo.getCodMdep(),
null,
null,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
refreshItems(consegne);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(getActivity(), ex, progressDialog);
});
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
mAdapter = new UltimiArriviFornitoreListAdapter(getActivity(), dataset);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mBinding.recyclerView.setHasFixedSize(true);
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mBinding.recyclerView.setAdapter(mAdapter);
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.mainFab.show();
}
else {
mBinding.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mItems)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(getActivity(), getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
}
@Override
public void onFilterClick() {
DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), mItems, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
mAppliedFilterViewModel = filter;
if(filteredOrderList != null){
refreshItems(filteredOrderList);
}
}).show();
mViewModel.openFilterDialog();
}
private void refreshItems(List<DocumentoResoDTO> items){
mBinding.emptyView.setVisibility((items != null && items.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(items != null) mRenderedItems.addAll(items);
mAdapter.updateItems(mRenderedItems);
}
}

View File

@ -0,0 +1,154 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
public class UltimiArriviFornitoreViewModel {
private Context mContext;
private FragmentUltimiArriviFornitoreBinding mBinding;
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private List<GtbAnag> mAvailableGtbAnags = null;
private UltimiArriviFornitoreListAdapter mAdapter;
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimiArriviFornitoreViewModel(Context context, FragmentUltimiArriviFornitoreBinding binding) {
this.mContext = context;
this.mBinding = binding;
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
openFilterDialog();
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
mAdapter = new UltimiArriviFornitoreListAdapter(mContext, dataset);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mBinding.recyclerView.setHasFixedSize(true);
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mBinding.recyclerView.setAdapter(mAdapter);
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
}
public void openFilterDialog() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
UltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> {
mAvailableGtbAnags = gtbAnags;
progressDialog.dismiss();
DialogUltimiArriviFornitoreFiltroAvanzato.make(mContext, mAvailableGtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mItems)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void refreshItems(){
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if(singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(
SettingsManager.i().userSession.depo.getCodMdep(),
currentCodAnagFilter,
null,
null,
365,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(this.mItems != null) mRenderedItems.addAll(this.mItems);
mAdapter.updateItems(mRenderedItems);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.mainFab.show();
}
else {
mBinding.mainFab.hide();
}
}
}

View File

@ -21,7 +21,9 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
@ -34,29 +36,29 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato {
private AlertDialog mAlert;
private Context mContext;
private DialogUltimiArriviFiltroAvanzatoViewModel mBaseViewModel;
private RunnableArgss<List<DocumentoResoDTO>, DialogUltimiArriviFiltroAvanzatoViewModel> mOnDismiss;
private RunnableArgs<DialogUltimiArriviFiltroAvanzatoViewModel> mOnDismiss;
private ArrayAdapter<String> arrayAdapterRagSoc;
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mFilteredItems;
private List<GtbAnag> mItems;
private List<GtbAnag> mFilteredItems;
private Predicate<DocumentoResoDTO> currentRagSocPredicate = null;
private Predicate<DocumentoResoDTO> currentDataDocPredicate = null;
private Predicate<GtbAnag> currentRagSocPredicate = null;
private Predicate<GtbAnag> currentDataDocPredicate = null;
public static AlertDialog make(final Context context,
final List<DocumentoResoDTO> items,
final List<GtbAnag> items,
DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel,
RunnableArgss<List<DocumentoResoDTO>, DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
RunnableArgs<DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
return new DialogUltimiArriviFornitoreFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert;
}
public DialogUltimiArriviFornitoreFiltroAvanzato(final Context context,
final List<DocumentoResoDTO> items,
final List<GtbAnag> items,
DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel,
RunnableArgss<List<DocumentoResoDTO>, DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
RunnableArgs<DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
mContext = context;
mItems = items;
mBaseViewModel = baseViewModel;
@ -90,7 +92,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato {
mAlert.setOnDismissListener(dialogInterface -> {
if(mOnDismiss != null) mOnDismiss.run(mFilteredItems, viewModel);
if(mOnDismiss != null) mOnDismiss.run(viewModel);
});
refreshList();
@ -145,26 +147,13 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato {
refreshList();
});
BindableString.resetListeners(viewModel.dataDoc);
BindableString.registerListener(viewModel.dataDoc, value -> {
if (UtilityString.isNullOrEmpty(value)) currentDataDocPredicate = null;
else {
currentDataDocPredicate = o -> o.getDataDocD().equals(viewModel.dataDocDate);
}
refreshList();
arrayAdapterRagSoc.clear();
arrayAdapterRagSoc.addAll(getAvailableRagSocs(true));
});
}
private List<String> getAvailableRagSocs(boolean skipRecalc) {
if(currentDataDocPredicate == null){
mFilteredItems = mItems;
} else if(!skipRecalc){
Stream<DocumentoResoDTO> tmpStream = Stream.of(mItems)
Stream<GtbAnag> tmpStream = Stream.of(mItems)
.filter(x ->
(currentDataDocPredicate == null || (currentDataDocPredicate.test(x)))
);
@ -172,7 +161,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato {
mFilteredItems = tmpStream.toList();
}
return Stream.of(mFilteredItems).map(DocumentoResoDTO::getRagSoc).distinct().withoutNulls().toList();
return Stream.of(mFilteredItems).map(x -> x.getCodAnag() + " - " + x.getRagSoc()).distinct().withoutNulls().toList();
}
@ -181,7 +170,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzato {
if(currentRagSocPredicate == null && currentDataDocPredicate == null){
mFilteredItems = mItems;
} else {
Stream<DocumentoResoDTO> tmpStream = Stream.of(mItems)
Stream<GtbAnag> tmpStream = Stream.of(mItems)
.filter(x ->
(currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) &&
(currentDataDocPredicate== null || (currentDataDocPredicate.test(x)))

View File

@ -4,7 +4,9 @@ import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -13,19 +15,37 @@ import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
public class UltimiArriviFornitoreRESTConsumer {
public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public static void getAvailableCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
"FROM gtb_anag " +
"INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " +
"WHERE flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
@Override
public void onSuccess(ArrayList<GtbAnag> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
});
}
public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
int numberOfConsegnePerForn = 100;
int numberOfDayToAnalyze = 365;
String sql = "SELECT consegne.*, " +
" rag_soc " +
"FROM WMS_GetUltimeConsegneFornitori(" +
UtilityDB.valueToString(numberOfConsegnePerForn) + ", " +
UtilityDB.valueToString(limitConsegnePerCli) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(numberOfDayToAnalyze) + ") consegne " +
UtilityDB.valueToString(limitDays) + ") consegne " +
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
"ORDER BY rag_soc, " +
" counter_consegna ";

View File

@ -6,7 +6,7 @@
<data>
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreFragment" />
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel" />
</data>