From 65532a318587e6b936df9c85a5e667be16208c19 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 19 Jan 2021 19:23:31 +0100 Subject: [PATCH] =?UTF-8?q?In=20picking=20libero=20=C3=A8=20stata=20aggiun?= =?UTF-8?q?ta=20la=20possibilit=C3=A0=20di=20scansionare=20un=20barcode=20?= =?UTF-8?q?che=20indichi=20un=20cliente=20o=20una=20commessa.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integrywmsnative/core/model/MtbColt.java | 10 ++ .../picking_libero/PickingLiberoFragment.java | 9 +- .../PickingLiberoViewModel.java | 24 +-- .../dialogs/ask_cliente/DialogAskCliente.java | 15 +- .../dto/DialogAskClienteClienteDTO.java | 12 +- .../DialogAskCliente_Page1ViewModel.java | 167 +++++++++++++++--- ...skCliente_Page1_Cliente_ArrayAdapter.java} | 8 +- ...skCliente_Page1_Commessa_ArrayAdapter.java | 110 ++++++++++++ .../DialogAskCliente_Page2ViewModel.java | 18 +- .../res/layout/dialog_ask_cliente__page1.xml | 25 ++- .../res/layout/dialog_ask_cliente__page2.xml | 2 +- app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 13 files changed, 338 insertions(+), 64 deletions(-) rename app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/{DialogAskCliente_Page1_ArrayAdapter.java => DialogAskCliente_Page1_Cliente_ArrayAdapter.java} (91%) create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_Commessa_ArrayAdapter.java diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index 62a45af4..c2ccf5be 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -54,6 +54,7 @@ public class MtbColt extends EntityBase { private BigDecimal lunghezzaCm; private BigDecimal larghezzaCm; private BigDecimal altezzaCm; + private String codJcom; private List mtbCols; @@ -500,6 +501,15 @@ public class MtbColt extends EntityBase { return this; } + public String getCodJcom() { + return codJcom; + } + + public MtbColt setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + public void generaFiltroOrdineFromDTO(List filtroOrdineDtos) { String xmlPrefix = "{\"whereCond\": \""; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java index 0fd5c744..ae9aa5dc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java @@ -309,10 +309,10 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, } @Override - public void onLUClienteRequired(RunnableArgs onComplete, Runnable onAbort) { - DialogAskCliente.makeBase(getActivity(), (status, result) -> { + public void onLUClienteRequired(RunnableArgss onComplete, Runnable onAbort) { + DialogAskCliente.makeBase(getActivity(), (status, result, codJcom) -> { if (status == DialogConsts.Results.YES) { - onComplete.run(result); + onComplete.run(result, codJcom); } else { onAbort.run(); } @@ -401,7 +401,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, @Override public void onPreDestroy(Runnable onComplete) { - if(thereIsAnOpenedUL.get()) mViewModel.closeLU(onComplete); BarcodeManager.removeCallback(barcodeScannerIstanceID); + if(thereIsAnOpenedUL.get()) mViewModel.closeLU(onComplete); + else onComplete.run(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java index a00103cc..b4eb4c77 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java @@ -6,9 +6,7 @@ import com.annimon.stream.Stream; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Calendar; import java.util.Date; -import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; @@ -181,15 +179,15 @@ public class PickingLiberoViewModel { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { if (this.mFlagAskCliente) { - this.sendLUClienteRequired(vtbDest -> { - createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, onComplete); + this.sendLUClienteRequired((vtbDest, codJcom) -> { + createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, codJcom, onComplete); }, onComplete); } else { - createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, onComplete); + createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, null, onComplete); } } - private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, Runnable onComplete) { + private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, String codJcom, Runnable onComplete) { MtbColt mtbColt = new MtbColt(); mtbColt.initDefaultFields(); mtbColt.setGestione(mDefaultGestione) @@ -211,6 +209,10 @@ public class PickingLiberoViewModel { mtbColt.setCodVdes(vtbDest.getCodVdes()); } + if(!UtilityString.isNullOrEmpty(codJcom)) { + mtbColt.setCodJcom(codJcom); + } + mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> { mtbColt .setNumCollo(value.getNumCollo()) @@ -233,9 +235,9 @@ public class PickingLiberoViewModel { BigDecimal qtaColDaPrelevare = null; BigDecimal qtaCnfDaPrelevare = null; - BigDecimal initialNumCnf = null; - BigDecimal initialQtaCnf = null; - BigDecimal initialQtaTot = null; + BigDecimal initialNumCnf; + BigDecimal initialQtaCnf; + BigDecimal initialQtaTot; String partitaMag = null; Date dataScad = null; @@ -758,7 +760,7 @@ public class PickingLiberoViewModel { if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete); } - private void sendLUClienteRequired(RunnableArgs onComplete, Runnable onAbort) { + private void sendLUClienteRequired(RunnableArgss onComplete, Runnable onAbort) { if (this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort); } @@ -816,7 +818,7 @@ public class PickingLiberoViewModel { void onError(Exception ex); - void onLUClienteRequired(RunnableArgs onComplete, Runnable onAbort); + void onLUClienteRequired(RunnableArgss onComplete, Runnable onAbort); void onArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskCliente.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskCliente.java index 1f73f013..35fd8140 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskCliente.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskCliente.java @@ -15,7 +15,7 @@ import java.util.List; import java.util.Map; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.expansion.RunnableArgsss; import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.databinding.DialogAskClienteBinding; @@ -32,11 +32,11 @@ public class DialogAskCliente { private DialogAskClienteBinding mBinding; - public static Dialog makeBase(final Context context, RunnableArgss onComplete) { + public static Dialog makeBase(final Context context, RunnableArgsss onComplete) { return new DialogAskCliente(context, onComplete).mDialog; } - public DialogAskCliente(Context context, RunnableArgss onComplete) { + public DialogAskCliente(Context context, RunnableArgsss onComplete) { mContext = context; @@ -72,25 +72,24 @@ public class DialogAskCliente { viewModel1 .setOnConfirmClickListener(() -> { - - viewModel2.setCodAnag(viewModel1.getCurrentCliente().getCodAnag()); + viewModel2.setCodAnag(viewModel1.getCurrentCliente()); mBinding.viewpager.setCurrentItem(mBinding.viewpager.getCurrentItem() + 1, true); }); viewModel1.setOnAbortClickListener(() -> { mDialog.dismiss(); - onComplete.run(DialogConsts.Results.ABORT, null); + onComplete.run(DialogConsts.Results.ABORT, null, null); }); viewModel2.setOnConfirmClickListener(() -> { - onComplete.run(DialogConsts.Results.YES, viewModel2.getCurrentDestinatario().toVtbDestModel()); + onComplete.run(DialogConsts.Results.YES, viewModel2.getCurrentDestinatario().toVtbDestModel(), viewModel1.getCurrentCommessa()); mDialog.dismiss(); }); viewModel2.setOnAbortClickListener(() -> { mDialog.dismiss(); - onComplete.run(DialogConsts.Results.ABORT, null); + onComplete.run(DialogConsts.Results.ABORT, null, null); }); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteClienteDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteClienteDTO.java index 4bbbe8d2..ce2c0242 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteClienteDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteClienteDTO.java @@ -1,10 +1,12 @@ package it.integry.integrywmsnative.view.dialogs.ask_cliente.dto; +import java.util.ArrayList; + public class DialogAskClienteClienteDTO { private String codAnag; - private String ragSoc; + private ArrayList codJcoms = new ArrayList<>(); public String getCodAnag() { return codAnag; @@ -24,6 +26,14 @@ public class DialogAskClienteClienteDTO { return this; } + public ArrayList getCodJcoms() { + return codJcoms; + } + + public DialogAskClienteClienteDTO setCodJcoms(ArrayList codJcoms) { + this.codJcoms = codJcoms; + return this; + } @Override public String toString() { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java index 62624f50..2966a253 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java @@ -2,18 +2,32 @@ package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; import android.content.Context; import android.widget.AutoCompleteTextView; +import android.widget.Toast; +import androidx.databinding.ObservableArrayList; +import androidx.databinding.ObservableList; import androidx.databinding.ViewDataBinding; +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; import com.google.gson.reflect.TypeToken; +import com.tfb.fbtoast.FBToast; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityHashMap; import it.integry.integrywmsnative.databinding.DialogAskClientePage1Binding; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; @@ -22,7 +36,10 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod private Context mContext; private DialogAskClientePage1Binding mBinding; - private List availableClienti; + private int mBarcodeScannerInstanceID; + + private ArrayList availableClienti; + private ObservableArrayList codJcoms = new ObservableArrayList<>(); public DialogAskCliente_Page1ViewModel() { @@ -41,18 +58,43 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod @Override public void onShow() { - String sql = "SELECT gtb_anag.cod_anag, rag_soc " + + String sql = "SELECT gtb_anag.cod_anag, rag_soc, jtb_comt.cod_jcom " + "FROM gtb_anag " + + "LEFT OUTER JOIN jtb_comt ON gtb_anag.cod_anag = jtb_comt.cod_anag " + "INNER JOIN vtb_clie ON gtb_anag.cod_anag = vtb_clie.cod_anag " + "WHERE vtb_clie.flag_stato = 'A' " + "ORDER BY rag_soc"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + Type typeOfObjectsList = new TypeToken>>() { + }.getType(); + SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>>() { @Override - public void onSuccess(ArrayList value) { - availableClienti = value; - initializeAdapter(value); + public void onSuccess(ArrayList> value) { + + availableClienti = new ArrayList<>(); + + Stream.of(value) + .groupBy(x -> x.get("codAnag").toString() + " " + x.get("ragSoc").toString()) + .forEach(x -> { + DialogAskClienteClienteDTO dialogAskClienteClienteDTO = new DialogAskClienteClienteDTO(); + dialogAskClienteClienteDTO.setCodAnag(UtilityHashMap.getValueIfExists(x.getValue().get(0), "codAnag")); + dialogAskClienteClienteDTO.setRagSoc(UtilityHashMap.getValueIfExists(x.getValue().get(0), "ragSoc")); + + for (HashMap group : x.getValue()) { + if (group.containsKey("codJcom")) { + dialogAskClienteClienteDTO.getCodJcoms().add(UtilityHashMap.getValueIfExists(group, "codJcom")); + } + } + + availableClienti.add(dialogAskClienteClienteDTO); + }); + + initializeAdapter(availableClienti); + + mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessful) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false))); + BarcodeManager.enable(); } @Override @@ -66,9 +108,10 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod @Override public void setOnConfirmClickListener(Runnable onConfirm) { this.mBinding.buttonYes.setOnClickListener(v -> { - if(validateCliente()) { + if (validateCliente()) { this.resetClienteError(); - if(onConfirm != null) onConfirm.run(); + BarcodeManager.removeCallback(mBarcodeScannerInstanceID); + if (onConfirm != null) onConfirm.run(); } else { this.setClienteError(mContext.getResources().getText(R.string.not_valid_customer_error).toString()); } @@ -76,22 +119,90 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod }); } + + private final RunnableArgs onScanSuccessful = data -> { + BarcodeManager.disable(); + + String barcode = data.getStringValue(); + + DialogAskClienteClienteDTO resultCodAnag = searchBarcodeInCodAnag(barcode); + + if (resultCodAnag != null) { + mBinding.dropdownCliente.setText(resultCodAnag.toString()); + refreshCodJcoms(resultCodAnag); + } else { + DialogAskClienteClienteDTO resultCodJcom = searchBarcodeInCodJcom(barcode); + + if(resultCodJcom != null) { + mBinding.dropdownCliente.setText(resultCodJcom.toString()); + refreshCodJcoms(resultCodJcom); + mBinding.dropdownCommessa.setText(barcode); + } else { + FBToast.errorToast(mContext, "Nessun risultato trovato", Toast.LENGTH_LONG); + mBinding.dropdownCliente.setText(""); + mBinding.dropdownCommessa.setText(""); + } + } + + BarcodeManager.enable(); + }; + + + private DialogAskClienteClienteDTO searchBarcodeInCodAnag(String barcode) { + List resultCodAnag = Stream.of(availableClienti) + .filter(x -> barcode.equalsIgnoreCase(x.getCodAnag())) + .toList(); + if (resultCodAnag.size() > 0) { + return resultCodAnag.get(0); + } else return null; + } + + private DialogAskClienteClienteDTO searchBarcodeInCodJcom(String barcode) { + List resultCodJcom = Stream.of(availableClienti) + .filter(x -> x.getCodJcoms().contains(barcode)) + .toList(); + if (resultCodJcom.size() > 0) { + return resultCodJcom.get(0); + } else return null; + } + @Override public void setOnAbortClickListener(Runnable onAbort) { this.mBinding.buttonNo.setOnClickListener(v -> { - if(onAbort != null) onAbort.run(); + if (onAbort != null) onAbort.run(); }); } private void initializeAdapter(ArrayList items) { + DialogAskCliente_Page1_Cliente_ArrayAdapter adapter = new DialogAskCliente_Page1_Cliente_ArrayAdapter(mContext, items); - DialogAskCliente_Page1_ArrayAdapter adapter = new DialogAskCliente_Page1_ArrayAdapter(mContext, items); + AutoCompleteTextView editTextDropdownCliente = mBinding.dropdownCliente; + editTextDropdownCliente.setThreshold(0); + editTextDropdownCliente.setAdapter(adapter); + editTextDropdownCliente.setOnItemClickListener((parent, view, position, id) -> { + refreshCodJcoms(items.get(position)); + }); - AutoCompleteTextView editTextFilledExposedDropdown = mBinding.filledExposedDropdown; - editTextFilledExposedDropdown.setThreshold(0); - editTextFilledExposedDropdown.setAdapter(adapter); + DialogAskCliente_Page1_Commessa_ArrayAdapter commessaAdapter = new DialogAskCliente_Page1_Commessa_ArrayAdapter(mContext); + + AutoCompleteTextView editTextDropdownCommessa = mBinding.dropdownCommessa; + editTextDropdownCommessa.setThreshold(0); + editTextDropdownCommessa.setAdapter(commessaAdapter); + + codJcoms.addOnListChangedCallback(new OnListGeneralChangedCallback() { + @Override + public void onChanged(ObservableList sender) { + commessaAdapter.clear(); + commessaAdapter.addAll(codJcoms); + } + }); + } + + private void refreshCodJcoms(DialogAskClienteClienteDTO item) { + codJcoms.clear(); + codJcoms.addAll(item.getCodJcoms()); } @@ -99,22 +210,34 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod return getCurrentCliente() != null; } - public DialogAskClienteClienteDTO getCurrentCliente() { - for (DialogAskClienteClienteDTO cliente : availableClienti) { - if(cliente.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString())) { - return cliente; - } - } + public String getCurrentCliente() { + Optional result = Stream.of(availableClienti) + .filter(x -> x.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString())) + .findFirst(); - return null; + if(result.isPresent()) return result.get().getCodAnag(); + else return null; + } + + public String getCurrentCommessa() { + String codAnag = getCurrentCliente(); + Optional> result = Stream.of(availableClienti) + .filter(x -> x.getCodAnag().equalsIgnoreCase(codAnag)) + .map(DialogAskClienteClienteDTO::getCodJcoms) + .findFirst(); + + if(result.isPresent() && Stream.of(result.get()).anyMatch(x -> x.equalsIgnoreCase(mBinding.inputCommessa.getEditText().getText().toString()))) { + return mBinding.inputCommessa.getEditText().getText().toString(); + } else return null; } - private void setClienteError(String message){ + private void setClienteError(String message) { mBinding.inputCliente.setErrorEnabled(true); mBinding.inputCliente.setError(message); mBinding.inputCliente.setErrorIconDrawable(null); } + private void resetClienteError() { mBinding.inputCliente.setError(null); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_ArrayAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_Cliente_ArrayAdapter.java similarity index 91% rename from app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_ArrayAdapter.java rename to app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_Cliente_ArrayAdapter.java index f591466d..9d900cf5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_ArrayAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_Cliente_ArrayAdapter.java @@ -1,7 +1,6 @@ package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; import android.content.Context; -import android.graphics.Movie; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,7 +8,6 @@ import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.Filterable; -import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatTextView; @@ -20,7 +18,7 @@ import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; -public class DialogAskCliente_Page1_ArrayAdapter extends ArrayAdapter implements Filterable { +public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter implements Filterable { private Context mContext; private List mDataset; @@ -28,7 +26,7 @@ public class DialogAskCliente_Page1_ArrayAdapter extends ArrayAdapter list) { + public DialogAskCliente_Page1_Cliente_ArrayAdapter(@NonNull Context context, @NonNull ArrayList list) { super(context, 0 , list); mContext = context; mDataset = list; @@ -43,13 +41,13 @@ public class DialogAskCliente_Page1_ArrayAdapter extends ArrayAdapter implements Filterable { + + private Context mContext; + private List mDataset = new ArrayList<>(); + private List mDatasetAllItems; + + private DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter listFilter = new DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter(); + + public DialogAskCliente_Page1_Commessa_ArrayAdapter(@NonNull Context context) { + super(context, 0); + mContext = context; + + + } + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + View listItem = convertView; + if(listItem == null) { + listItem = LayoutInflater.from(mContext).inflate(R.layout.dialog_ask_cliente__dropdown_item, parent, false); + } + + if(position < getCount()) { + AppCompatTextView textView = listItem.findViewById(R.id.text); + textView.setText(getItem(position)); + return listItem; + } + return convertView; + } + + + @NonNull + @Override + public Filter getFilter() { + return listFilter; + } + + public class ListFilter extends Filter { + private Object lock = new Object(); + + @Override + protected FilterResults performFiltering(CharSequence prefix) { + FilterResults results = new FilterResults(); + if (mDatasetAllItems == null) { + synchronized (lock) { + mDatasetAllItems = new ArrayList<>(mDataset); + } + } + + if (prefix == null || prefix.length() == 0) { + synchronized (lock) { + results.values = mDatasetAllItems; + results.count = mDatasetAllItems.size(); + } + } else { + final String searchStrLowerCase = prefix.toString().toLowerCase(); + + ArrayList matchValues = new ArrayList<>(); + + for (String dataItem : mDatasetAllItems) { + if (dataItem.toLowerCase().startsWith(searchStrLowerCase)) { + matchValues.add(dataItem); + } + } + + results.values = matchValues; + results.count = matchValues.size(); + } + + return results; + } + + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + if (results.values != null) { + mDataset.clear(); + mDataset.addAll((ArrayList) results.values); + } else { + mDataset.clear(); + } + if (results.count > 0) { + notifyDataSetChanged(); + } else { + notifyDataSetInvalidated(); + } + } + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java index 191b9f98..7c86bf78 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java @@ -44,12 +44,12 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod @Override public void onShow() { - String sql = "SELECT cod_anag, cod_vdes, destinatario, indirizzo, cap, citta, prov, nazione " + "FROM vtb_dest " + "WHERE cod_anag = " + UtilityDB.valueToString(mCodAnag); - Type typeOfObjectsList = new TypeToken>() {}.getType(); + Type typeOfObjectsList = new TypeToken>() { + }.getType(); SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { @Override public void onSuccess(ArrayList value) { @@ -67,9 +67,9 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod @Override public void setOnConfirmClickListener(Runnable onConfirm) { this.mBinding.buttonYes.setOnClickListener(v -> { - if(validateDestinatario()) { + if (validateDestinatario()) { this.resetClienteError(); - if(onConfirm != null) onConfirm.run(); + if (onConfirm != null) onConfirm.run(); } else { this.setClienteError(mContext.getResources().getText(R.string.not_valid_recipient_error).toString()); } @@ -80,7 +80,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod @Override public void setOnAbortClickListener(Runnable onAbort) { this.mBinding.buttonNo.setOnClickListener(v -> { - if(onAbort != null) onAbort.run(); + if (onAbort != null) onAbort.run(); }); } @@ -88,12 +88,13 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod this.mCodAnag = codAnag; } + private void initializeAdapter(ArrayList items) { DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items); - AutoCompleteTextView editTextFilledExposedDropdown = mBinding.filledExposedDropdown; + AutoCompleteTextView editTextFilledExposedDropdown = mBinding.dropdownDestinatario; editTextFilledExposedDropdown.setThreshold(0); editTextFilledExposedDropdown.setAdapter(adapter); } @@ -105,7 +106,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod public DialogAskClienteDestinatarioDTO getCurrentDestinatario() { for (DialogAskClienteDestinatarioDTO destinatarioDTO : availableDestinatari) { - if(destinatarioDTO.toString().equalsIgnoreCase(mBinding.inputDestinatario.getEditText().getText().toString())) { + if (destinatarioDTO.toString().equalsIgnoreCase(mBinding.inputDestinatario.getEditText().getText().toString())) { return destinatarioDTO; } } @@ -114,11 +115,12 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod } - private void setClienteError(String message){ + private void setClienteError(String message) { mBinding.inputDestinatario.setErrorEnabled(true); mBinding.inputDestinatario.setError(message); mBinding.inputDestinatario.setErrorIconDrawable(null); } + private void resetClienteError() { mBinding.inputDestinatario.setError(null); } diff --git a/app/src/main/res/layout/dialog_ask_cliente__page1.xml b/app/src/main/res/layout/dialog_ask_cliente__page1.xml index ab8ba6cc..169cf0d5 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page1.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page1.xml @@ -34,9 +34,10 @@ android:layout_marginTop="16dp" android:layout_marginBottom="8dp" /> - + android:layout_height="wrap_content" + android:orientation="vertical"> - + + + + + + + diff --git a/app/src/main/res/layout/dialog_ask_cliente__page2.xml b/app/src/main/res/layout/dialog_ask_cliente__page2.xml index 27cbab39..e16c4c6a 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page2.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page2.xml @@ -46,7 +46,7 @@ android:hint="@string/recipient"> Numero ordine Commessa Cliente + Commessa Destinatario Data consegna Data documento diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5138b4a2..48f7e3a7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -203,6 +203,7 @@ Orders number Orders job Customer + Job Recipient Ship date Document date