diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 4e3f1957..d168708f 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -147,8 +147,8 @@ diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 99d57087..4c9a812b 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index 20fd5c64..dcb09b85 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 55 - def appVersionName = '1.2.2' + def appVersionCode = 56 + def appVersionName = '1.3.0' signingConfigs { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e32bacf7..c16498b9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,14 @@ android:name=".MainActivity" android:screenOrientation="portrait" android:theme="@style/Light" - android:windowSoftInputMode="adjustPan"> + android:windowSoftInputMode="adjustPan"> + + + + + + + mBarcodeCallbacksStacktrace = new ArrayList<>(); @@ -27,11 +29,11 @@ public class BarcodeManager { private static Class[] registeredBarcodeReaderInterfaces = new Class[]{ PointMobileBarcodeReader.class, ZebraBarcodeReader.class, - // HoneyWellBarcodeReader.class + HoneyWellBarcodeReader.class }; - public static void init(Context context) { + public static void init(AppCompatActivity context) { BarcodeManager.context = context; initBarcodeReader(); @@ -60,22 +62,26 @@ public class BarcodeManager { if(mCurrentBarcodeInterface != null) { try { - mCurrentBarcodeInterface.init(); + mCurrentBarcodeInterface.init(() -> { + + mCurrentBarcodeInterface.register(data -> { + BarcodeCallbackDTO callback = getValidCallback(); + if(callback != null && mEnabled) { + callback.getOnScanSuccessfull().run(data); + } + }, ex -> { + BarcodeCallbackDTO callback = getValidCallback(); + if(callback != null && mEnabled) { + callback.getOnScanFailed().run(ex); + } + }); + + }); } catch (BarcodeAdapterNotFoundException ex) { UtilityExceptions.defaultException(context, ex); } - mCurrentBarcodeInterface.register(data -> { - BarcodeCallbackDTO callback = getValidCallback(); - if(callback != null && mEnabled) { - callback.getOnScanSuccessfull().run(data); - } - }, ex -> { - BarcodeCallbackDTO callback = getValidCallback(); - if(callback != null && mEnabled) { - callback.getOnScanFailed().run(ex); - } - }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java index 79df7b92..45141b68 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java @@ -31,14 +31,12 @@ public class AppContext { public void init() { + this.initUtilities(); + this.initSettings(); this.initCrashlytics(); - this.initBarcode(); - - this.initUtilities(); - this.initLogger(); this.initRecoverColli(); @@ -65,10 +63,6 @@ public class AppContext { } } - private void initBarcode() { - BarcodeManager.init(mContext); - } - private void initUtilities() { UtilityResources.init(mContext); UtilityToast.init(mContext); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java b/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java index eed2350a..47eb4330 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java @@ -6,7 +6,9 @@ import android.text.SpannableString; import java.lang.reflect.Method; import androidx.appcompat.app.AppCompatActivity; + import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.class_router.ClassRouter; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; @@ -22,6 +24,9 @@ public class MainContext { public void init(Runnable onContextInitialized) { + + BarcodeManager.init(mContext); + this.initDBData(() -> { onContextInitialized.run(); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/VtbDest.java b/app/src/main/java/it/integry/integrywmsnative/core/model/VtbDest.java new file mode 100644 index 00000000..45efd882 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/VtbDest.java @@ -0,0 +1,141 @@ +package it.integry.integrywmsnative.core.model; + +import android.os.Parcel; +import android.os.Parcelable; + +public class VtbDest extends EntityBase implements Parcelable { + + + public VtbDest() { + type = "vtb_dest"; + } + + private String codAnag; + + private String codVdes; + + private String destinatario; + + private String indirizzo; + + private String cap; + + private String citta; + + private String prov; + + private String nazione; + + + protected VtbDest(Parcel in) { + codAnag = in.readString(); + codVdes = in.readString(); + destinatario = in.readString(); + indirizzo = in.readString(); + cap = in.readString(); + citta = in.readString(); + prov = in.readString(); + nazione = in.readString(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(codAnag); + dest.writeString(codVdes); + dest.writeString(destinatario); + dest.writeString(indirizzo); + dest.writeString(cap); + dest.writeString(citta); + dest.writeString(prov); + dest.writeString(nazione); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public VtbDest createFromParcel(Parcel in) { + return new VtbDest(in); + } + + @Override + public VtbDest[] newArray(int size) { + return new VtbDest[size]; + } + }; + + public String getCodAnag() { + return codAnag; + } + + public VtbDest setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public VtbDest setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getDestinatario() { + return destinatario; + } + + public VtbDest setDestinatario(String destinatario) { + this.destinatario = destinatario; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public VtbDest setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public String getCap() { + return cap; + } + + public VtbDest setCap(String cap) { + this.cap = cap; + return this; + } + + public String getCitta() { + return citta; + } + + public VtbDest setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProv() { + return prov; + } + + public VtbDest setProv(String prov) { + this.prov = prov; + return this; + } + + public String getNazione() { + return nazione; + } + + public VtbDest setNazione(String nazione) { + this.nazione = nazione; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 34c64775..a8167f64 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -21,6 +21,7 @@ public class DBSettingsModel { private String defaultCodAnag; private String defaultCausaleRettificaGiacenze; private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione; + private boolean flagAskClienteInPickingLibero; public List getAvailableProfiles() { return availableProfiles; @@ -99,4 +100,13 @@ public class DBSettingsModel { this.defaultCriterioDistribuzione = DistribuzioneColloDTO.CriterioDistribuzione.fromString(defaultCriterioDistribuzione); return this; } + + public boolean isFlagAskClienteInPickingLibero() { + return flagAskClienteInPickingLibero; + } + + public DBSettingsModel setFlagAskClienteInPickingLibero(boolean flagAskClienteInPickingLibero) { + this.flagAskClienteInPickingLibero = flagAskClienteInPickingLibero; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 04fdaffa..fb0b331b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -189,7 +189,14 @@ public class SettingsManager { GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_CRITERIO_DISTRIBUZIONE", valueDefaultCriterioDistribuzione -> { dbSettingsModelIstance.setDefaultCriterioDistribuzione(valueDefaultCriterioDistribuzione.value); - if(onComplete != null) onComplete.run(); + GestSetupRESTConsumer.getBooleanValue("PICKING", "PICKING_LIBERO", "FLAG_ASK_CLIENTE", valueAskClientePickingLibero -> { + dbSettingsModelIstance.setFlagAskClienteInPickingLibero(valueAskClientePickingLibero); + + if(onComplete != null) onComplete.run(); + + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); }, ex -> { if(onFailed != null) onFailed.run(ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDialog.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDialog.java new file mode 100644 index 00000000..7c7bc2e4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDialog.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.core.utility; + +import android.app.Dialog; +import android.content.Context; +import android.widget.LinearLayout; + +public class UtilityDialog { + + public static void setTo90PercentSize(Context context, Dialog dialog) { + int width = (int)(context.getResources().getDisplayMetrics().widthPixels*0.90); + //int height = (int)(context.getResources().getDisplayMetrics().heightPixels*0.90); + + dialog.getWindow().setLayout(width, LinearLayout.LayoutParams.WRAP_CONTENT); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java index eabd9478..fde33e5c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java @@ -1,5 +1,8 @@ package it.integry.integrywmsnative.core.utility; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Created by GiuseppeS on 07/03/2018. */ @@ -14,4 +17,13 @@ public class UtilityString { return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim(); } + public static String capitalizeWords(String capString){ + StringBuffer capBuffer = new StringBuffer(); + Matcher capMatcher = Pattern.compile("([a-z])([a-z]*)", Pattern.CASE_INSENSITIVE).matcher(capString); + while (capMatcher.find()){ + capMatcher.appendReplacement(capBuffer, capMatcher.group(1).toUpperCase() + capMatcher.group(2).toLowerCase()); + } + + return capMatcher.appendTail(capBuffer).toString(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index e2d91441..82434428 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -130,8 +130,13 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag helper.loadOrdini(new ILoadOrdiniCallback() { @Override public void onLoadSuccess(List ordini) { - Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show(); - groupOrdiniAndMakeRecycler(ordini); + if(ordini != null) { + Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show(); + groupOrdiniAndMakeRecycler(ordini); + } + + mBinding.ordiniAccettazioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.VISIBLE : View.GONE); + progress.dismiss(); } 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 a95a9027..ecafcc2c 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 @@ -16,6 +16,7 @@ import it.integry.integrywmsnative.BuildConfig; 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.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.FragmentPickingLiberoBinding; @@ -68,7 +69,9 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment { mHelper = new PickingLiberoHelper(getActivity()); mViewModel = new PickingLiberoViewModel(); - mViewModel.init(getActivity(), mBindings, mHelper, mAppCompatActionBar); + mViewModel.init(getActivity(), mBindings, mHelper, mAppCompatActionBar, () -> { + ((IPoppableActivity) getActivity()).pop(); + }); mBindings.setViewmodel(mViewModel); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java index 3df7a429..2817c6dd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java @@ -35,7 +35,9 @@ import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityNumber; @@ -44,6 +46,8 @@ import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentPickingLiberoBinding; import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoHelper; import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoListAdapter; +import it.integry.integrywmsnative.view.dialogs.DialogConsts; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskCliente; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; @@ -68,7 +72,7 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { private PickingLiberoListAdapter mAdapter; - public void init(Activity context, FragmentPickingLiberoBinding binding, PickingLiberoHelper helper, AppCompatTextView titleText) { + public void init(Activity context, FragmentPickingLiberoBinding binding, PickingLiberoHelper helper, AppCompatTextView titleText, Runnable onComplete) { mContext = context; mBinding = binding; mHelper = helper; @@ -460,6 +464,22 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { private void createNewLU(Integer customNumCollo, String customSerCollo, ProgressDialog progressDialog, Runnable onComplete, Runnable onFailed) { + if(SettingsManager.iDB().isFlagAskClienteInPickingLibero()){ + + DialogAskCliente.makeBase(mContext, (status, result) -> { + if(status == DialogConsts.Results.YES) { + createNewLUInternal(customNumCollo, customSerCollo, result, progressDialog, onComplete, onFailed); + } + }).show(); + } else { + createNewLUInternal(customNumCollo, customSerCollo, null, progressDialog, onComplete, onFailed); + } + + + } + + private void createNewLUInternal(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, ProgressDialog progressDialog, Runnable onComplete, Runnable onFailed) { + boolean shouldCloseProgress = progressDialog == null; final ProgressDialog progressDialogFinal = progressDialog == null ? UtilityProgress.createDefaultProgressDialog(mContext) : progressDialog; @@ -476,6 +496,11 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { mtbColt.setSerCollo(customSerCollo); } + if(vtbDest != null) { + mtbColt.setCodAnag(vtbDest.getCodAnag()); + mtbColt.setCodVdes(vtbDest.getCodVdes()); + } + ColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> { savedMtbColt.setMtbColr(new ObservableArrayList<>()); setULToCurrentContext(savedMtbColt); @@ -484,15 +509,6 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { FBToast.successToast(mContext, mContext.getResources().getString(R.string.data_saved) ,FBToast.LENGTH_SHORT); - -// new StatusBarAlert.Builder(mContext) -// .autoHide(true) -// .withDuration(2500) -// .showProgress(false) -// .withText(R.string.data_saved) -// .withAlertColor(R.color.mainGreen) -// .build(); - if(onComplete != null) onComplete.run(); }, ex -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java index 003da239..2d9469b3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java @@ -121,7 +121,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS ButterKnife.bind(this, mBinding.getRoot()); // if(mWaterfallToolbar != null) mWaterfallToolbar.setRecyclerView(mBinding.venditaMainList); - mToolbar.setRecyclerView(mBinding.venditaMainList); + if(mToolbar != null) mToolbar.setRecyclerView(mBinding.venditaMainList); return mBinding.getRoot(); } @@ -156,9 +156,14 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS mHelper.loadOrdini(new VenditaHelper.ILoadOrdiniCallback() { @Override public void onLoadSuccess(List ordini) { - UtilityToast.showToast("Caricati " + ordini.size() + " ordini"); - mOriginalOrderList = ordini; - mViewModel.setListOrder(ordini); + if(ordini != null) { + UtilityToast.showToast("Caricati " + ordini.size() + " ordini"); + mOriginalOrderList = ordini; + mViewModel.setListOrder(ordini); + } + + + mBinding.ordiniVenditaEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.VISIBLE : View.GONE); groupOrdini(ordini); initRecyclerView(); 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 new file mode 100644 index 00000000..9378c821 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskCliente.java @@ -0,0 +1,107 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.LinearLayout; + +import androidx.databinding.DataBindingUtil; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.VtbDest; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.databinding.DialogAskClienteBinding; +import it.integry.integrywmsnative.view.dialogs.DialogConsts; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel; + +public class DialogAskCliente { + + private Context mContext; + + private Dialog mDialog; + + private DialogAskClienteBinding mBinding; + + + public static Dialog makeBase(final Context context, RunnableArgss onComplete) { + return new DialogAskCliente(context, onComplete).mDialog; + } + + public DialogAskCliente(Context context, RunnableArgss onComplete) { + mContext = context; + + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_cliente, null, false); + + List> views = new ArrayList<>(); + views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page1, DialogAskCliente_Page1ViewModel.class)); + views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page2, DialogAskCliente_Page2ViewModel.class)); + + + + DialogAskClienteAdapter adapter = new DialogAskClienteAdapter(mContext, views); + mBinding.viewpager.setAdapter(adapter); + mBinding.viewpager.beginFakeDrag(); + mBinding.viewpager.addOnPageChangeListener(adapter); + + + + mDialog = new Dialog(mContext); + mDialog.setContentView(mBinding.getRoot()); + mDialog.setCanceledOnTouchOutside(false); +// mDialog.setCancelable(false); + UtilityDialog.setTo90PercentSize(mContext, mDialog); + mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + + mDialog.setOnShowListener(dialog -> { + + DialogAskCliente_Page1ViewModel viewModel1 = (DialogAskCliente_Page1ViewModel) adapter.getViewModel(R.layout.dialog_ask_cliente__page1); + DialogAskCliente_Page2ViewModel viewModel2 = (DialogAskCliente_Page2ViewModel) adapter.getViewModel(R.layout.dialog_ask_cliente__page2); + + viewModel1 + .setOnConfirmClickListener(() -> { + + viewModel2.setCodAnag(viewModel1.getCurrentCliente().getCodAnag()); + + mBinding.viewpager.setCurrentItem(mBinding.viewpager.getCurrentItem() + 1, true); + }); + + viewModel1.setOnAbortClickListener(() -> { + mDialog.dismiss(); + onComplete.run(DialogConsts.Results.ABORT, null); + }); + + viewModel2.setOnConfirmClickListener(() -> { + onComplete.run(DialogConsts.Results.YES, viewModel2.getCurrentDestinatario().toVtbDestModel()); + mDialog.dismiss(); + }); + + viewModel2.setOnAbortClickListener(() -> { + mDialog.dismiss(); + onComplete.run(DialogConsts.Results.ABORT, null); + }); + + }); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java new file mode 100644 index 00000000..184f454b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java @@ -0,0 +1,120 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ViewDataBinding; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.ui.DeactivatableViewPager; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.IDialogAskClienteViewModel; + +public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener { + + private Context mContext; + + private List> mDatasetLayout; + private List> mDatasetViews; + + private DeactivatableViewPager viewPager; + + public DialogAskClienteAdapter(Context context, List> datasetLayouts) { + this.mContext = context; + this.mDatasetLayout = datasetLayouts; + this.mDatasetViews = new ArrayList<>(); + } + + + @Override + public View instantiateItem(ViewGroup container, int position) { + viewPager = (DeactivatableViewPager) container; + + Integer viewId = mDatasetLayout.get(position).getKey(); + + + LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + ViewDataBinding mBinding = DataBindingUtil.inflate(inflater, viewId, null, false); + + Class viewModelClass = mDatasetLayout.get(position).getValue(); + IDialogAskClienteViewModel viewModel = null; + + try { + viewModel = (IDialogAskClienteViewModel) viewModelClass.newInstance(); + viewModel.setBinding(mBinding); + viewModel.setContext(mContext); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } + + mBinding.setVariable(BR.viewmodel, viewModel); + + container.addView(mBinding.getRoot()); + this.mDatasetViews.add(new AbstractMap.SimpleEntry<>(mBinding, viewModel)); + + return mBinding.getRoot(); + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((LinearLayout)object); + } + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { + return view == o; + } + + + @Override + public int getCount() { + return mDatasetLayout.size(); + } + + public IDialogAskClienteViewModel getViewModel(@NonNull int layoutID) { + for(int i = 0; i < mDatasetLayout.size(); i++) { + if(mDatasetLayout.get(i).getKey() == layoutID) { + return this.mDatasetViews.get(i).getValue(); + } + } + return null; + } + + private int lastPage = -1; + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if(position != lastPage) { + viewPager.measureCurrentView(mDatasetViews.get(position).getKey().getRoot()); + mDatasetViews.get(position).getValue().onShow(); + lastPage = position; + } + } + + @Override + public void onPageSelected(int position) { + // mDatasetViews.get(position).getValue().onShow(); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } +} 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 new file mode 100644 index 00000000..4bbbe8d2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteClienteDTO.java @@ -0,0 +1,32 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente.dto; + +public class DialogAskClienteClienteDTO { + + private String codAnag; + + private String ragSoc; + + public String getCodAnag() { + return codAnag; + } + + public DialogAskClienteClienteDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getRagSoc() { + return ragSoc; + } + + public DialogAskClienteClienteDTO setRagSoc(String ragSoc) { + this.ragSoc = ragSoc; + return this; + } + + + @Override + public String toString() { + return getRagSoc(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteDestinatarioDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteDestinatarioDTO.java new file mode 100644 index 00000000..7ada1130 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/dto/DialogAskClienteDestinatarioDTO.java @@ -0,0 +1,111 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente.dto; + +import it.integry.integrywmsnative.core.model.VtbDest; + +public class DialogAskClienteDestinatarioDTO { + + private String codAnag; + + private String codVdes; + + private String destinatario; + + private String indirizzo; + + private String cap; + + private String citta; + + private String prov; + + private String nazione; + + public String getCodAnag() { + return codAnag; + } + + public DialogAskClienteDestinatarioDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public DialogAskClienteDestinatarioDTO setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getDestinatario() { + return destinatario; + } + + public DialogAskClienteDestinatarioDTO setDestinatario(String destinatario) { + this.destinatario = destinatario; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public DialogAskClienteDestinatarioDTO setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public String getCap() { + return cap; + } + + public DialogAskClienteDestinatarioDTO setCap(String cap) { + this.cap = cap; + return this; + } + + public String getCitta() { + return citta; + } + + public DialogAskClienteDestinatarioDTO setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProv() { + return prov; + } + + public DialogAskClienteDestinatarioDTO setProv(String prov) { + this.prov = prov; + return this; + } + + public String getNazione() { + return nazione; + } + + public DialogAskClienteDestinatarioDTO setNazione(String nazione) { + this.nazione = nazione; + return this; + } + + @Override + public String toString() { + return String.format("%s (%s)", getDestinatario(), getCodVdes()); + } + + public VtbDest toVtbDestModel() { + return new VtbDest() + .setCap(getCap()) + .setCitta(getCitta()) + .setCodAnag(getCodAnag()) + .setCodVdes(getCodVdes()) + .setDestinatario(getDestinatario()) + .setProv(getProv()) + .setIndirizzo(getIndirizzo()) + .setNazione(getNazione()); + } +} 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 new file mode 100644 index 00000000..304e7b77 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java @@ -0,0 +1,120 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; + +import android.content.Context; +import android.widget.AutoCompleteTextView; + +import androidx.databinding.ViewDataBinding; + +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.databinding.DialogAskClientePage1Binding; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; + +public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewModel { + + private Context mContext; + private DialogAskClientePage1Binding mBinding; + + private List availableClienti; + + public DialogAskCliente_Page1ViewModel() { + + } + + @Override + public void setContext(Context context) { + this.mContext = context; + } + + @Override + public void setBinding(ViewDataBinding binding) { + this.mBinding = (DialogAskClientePage1Binding) binding; + } + + @Override + public void onShow() { + + String sql = "SELECT gtb_anag.cod_anag, rag_soc " + + "FROM gtb_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.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + availableClienti = value; + initializeAdapter(value); + } + + @Override + public void onFailed(Exception ex) { + + } + }); + + } + + @Override + public void setOnConfirmClickListener(Runnable onConfirm) { + this.mBinding.buttonYes.setOnClickListener(v -> { + if(validateCliente()) { + this.resetClienteError(); + if(onConfirm != null) onConfirm.run(); + } else { + this.setClienteError(mContext.getResources().getText(R.string.not_valid_customer_error).toString()); + } + + }); + } + + @Override + public void setOnAbortClickListener(Runnable onAbort) { + this.mBinding.buttonNo.setOnClickListener(v -> { + if(onAbort != null) onAbort.run(); + }); + } + + + private void initializeAdapter(ArrayList items) { + + DialogAskCliente_Page1_ArrayAdapter adapter = new DialogAskCliente_Page1_ArrayAdapter(mContext, items); + + + AutoCompleteTextView editTextFilledExposedDropdown = mBinding.filledExposedDropdown; + editTextFilledExposedDropdown.setThreshold(0); + editTextFilledExposedDropdown.setAdapter(adapter); + } + + + private boolean validateCliente() { + return getCurrentCliente() != null; + } + + public DialogAskClienteClienteDTO getCurrentCliente() { + for (DialogAskClienteClienteDTO cliente : availableClienti) { + if(cliente.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString())) { + return cliente; + } + } + + return null; + } + + + private void setClienteError(String message){ + mBinding.inputCliente.setErrorEnabled(true); + mBinding.inputCliente.setError(message); + } + 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_ArrayAdapter.java new file mode 100644 index 00000000..f591466d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1_ArrayAdapter.java @@ -0,0 +1,115 @@ +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; +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; + +import java.util.ArrayList; +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 { + + private Context mContext; + private List mDataset; + private List mDatasetAllItems; + + private ListFilter listFilter = new ListFilter(); + + public DialogAskCliente_Page1_ArrayAdapter(@NonNull Context context, @NonNull ArrayList list) { + super(context, 0 , list); + mContext = context; + mDataset = list; + } + + @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 < mDataset.size()) { + + AppCompatTextView textView = listItem.findViewById(R.id.text); + + textView.setText(mDataset.get(position).getRagSoc()); + + return listItem; + } + return null; + } + + + @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 (DialogAskClienteClienteDTO dataItem : mDatasetAllItems) { + if (dataItem.getRagSoc().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 new file mode 100644 index 00000000..de88b82c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java @@ -0,0 +1,125 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; + +import android.content.Context; +import android.widget.AutoCompleteTextView; + +import androidx.databinding.ViewDataBinding; + +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityDB; +import it.integry.integrywmsnative.databinding.DialogAskClientePage2Binding; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO; + +public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewModel { + + + private DialogAskClientePage2Binding mBinding; + private Context mContext; + + private List availableDestinatari; + + private String mCodAnag; + + public DialogAskCliente_Page2ViewModel() { + + } + + @Override + public void setBinding(ViewDataBinding binding) { + this.mBinding = (DialogAskClientePage2Binding) binding; + } + + @Override + public void setContext(Context context) { + this.mContext = context; + } + + @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(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + availableDestinatari = value; + initializeAdapter(value); + } + + @Override + public void onFailed(Exception ex) { + + } + }); + } + + @Override + public void setOnConfirmClickListener(Runnable onConfirm) { + this.mBinding.buttonYes.setOnClickListener(v -> { + if(validateDestinatario()) { + this.resetClienteError(); + if(onConfirm != null) onConfirm.run(); + } else { + this.setClienteError(mContext.getResources().getText(R.string.not_valid_recipient_error).toString()); + } + + }); + } + + @Override + public void setOnAbortClickListener(Runnable onAbort) { + this.mBinding.buttonNo.setOnClickListener(v -> { + if(onAbort != null) onAbort.run(); + }); + } + + public void setCodAnag(String codAnag) { + this.mCodAnag = codAnag; + } + + private void initializeAdapter(ArrayList items) { + + DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items); + + + AutoCompleteTextView editTextFilledExposedDropdown = mBinding.filledExposedDropdown; + editTextFilledExposedDropdown.setThreshold(0); + editTextFilledExposedDropdown.setAdapter(adapter); + } + + + private boolean validateDestinatario() { + return getCurrentDestinatario() != null; + } + + public DialogAskClienteDestinatarioDTO getCurrentDestinatario() { + for (DialogAskClienteDestinatarioDTO destinatarioDTO : availableDestinatari) { + if(destinatarioDTO.toString().equalsIgnoreCase(mBinding.inputDestinatario.getEditText().getText().toString())) { + return destinatarioDTO; + } + } + + return null; + } + + + private void setClienteError(String message){ + mBinding.inputDestinatario.setErrorEnabled(true); + mBinding.inputDestinatario.setError(message); + } + private void resetClienteError() { + mBinding.inputDestinatario.setError(null); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2_ArrayAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2_ArrayAdapter.java new file mode 100644 index 00000000..fc52aaf2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2_ArrayAdapter.java @@ -0,0 +1,127 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Filter; +import android.widget.Filterable; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO; + +public class DialogAskCliente_Page2_ArrayAdapter extends ArrayAdapter implements Filterable { + + private Context mContext; + private List mDataset; + private List mDatasetAllItems; + + private ListFilter listFilter = new ListFilter(); + + public DialogAskCliente_Page2_ArrayAdapter(@NonNull Context context, @NonNull ArrayList list) { + super(context, 0 , list); + mContext = context; + mDataset = list; + } + + @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_destinatario, parent, false); + } + + if(position < mDataset.size()) { + + AppCompatTextView destinatario = listItem.findViewById(R.id.destinatario); + destinatario.setText(UtilityString.capitalizeWords(mDataset.get(position).toString())); + + AppCompatTextView subtitle = listItem.findViewById(R.id.subtitle); + + StringBuilder subtitleStr = new StringBuilder(); + if(!UtilityString.isNullOrEmpty(mDataset.get(position).getCitta())) { + subtitleStr.append(UtilityString.capitalizeWords(mDataset.get(position).getCitta()) + " - "); + } + + if(!UtilityString.isNullOrEmpty(mDataset.get(position).getIndirizzo())) { + subtitleStr.append(UtilityString.capitalizeWords(mDataset.get(position).getIndirizzo())); + } + + subtitle.setText(subtitleStr); + + + return listItem; + } + return null; + } + + + @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 (DialogAskClienteDestinatarioDTO dataItem : mDatasetAllItems) { + if (dataItem.toString().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/IDialogAskClienteViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/IDialogAskClienteViewModel.java new file mode 100644 index 00000000..57271d6d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/IDialogAskClienteViewModel.java @@ -0,0 +1,18 @@ +package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; + +import android.content.Context; + +import androidx.databinding.ViewDataBinding; + +public interface IDialogAskClienteViewModel { + + void setContext(Context context); + + void setBinding(ViewDataBinding binding); + + void onShow(); + + void setOnConfirmClickListener(Runnable onConfirm); + + void setOnAbortClickListener(Runnable onAbort); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java index 245fd0d8..3148c251 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java @@ -55,7 +55,7 @@ public class DialogAskPositionOfLU { return new DialogAskPositionOfLU(context, mtbColtToUpdate, onComplete, onFailed).mDialog; } - public DialogAskPositionOfLU(Context context, MtbColt mtbColtToUpdate, RunnableArgss onComplete, RunnableArgs onFailed) { + private DialogAskPositionOfLU(Context context, MtbColt mtbColtToUpdate, RunnableArgss onComplete, RunnableArgs onFailed) { mContext = context; mtbColt = mtbColtToUpdate; diff --git a/app/src/main/res/drawable/ic_barcode_96.png b/app/src/main/res/drawable/ic_barcode_96.png deleted file mode 100644 index 05971ffb..00000000 Binary files a/app/src/main/res/drawable/ic_barcode_96.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_black_barcode.xml b/app/src/main/res/drawable/ic_black_barcode.xml new file mode 100644 index 00000000..33e8f061 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_barcode.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_barcode_scanner.xml b/app/src/main/res/drawable/ic_black_barcode_scanner.xml new file mode 100644 index 00000000..0058aea8 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_barcode_scanner.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_download.xml b/app/src/main/res/drawable/ic_black_download.xml new file mode 100644 index 00000000..42e84916 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_download.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_empty_box.xml b/app/src/main/res/drawable/ic_black_empty_box.xml new file mode 100644 index 00000000..acd54434 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_empty_box.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_external.xml b/app/src/main/res/drawable/ic_black_external.xml new file mode 100644 index 00000000..62bb2fae --- /dev/null +++ b/app/src/main/res/drawable/ic_black_external.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_home.xml b/app/src/main/res/drawable/ic_black_home.xml new file mode 100644 index 00000000..4d5dcf67 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_home.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_internal.xml b/app/src/main/res/drawable/ic_black_internal.xml new file mode 100644 index 00000000..94e02013 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_internal.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_latest_delivery.xml b/app/src/main/res/drawable/ic_black_latest_delivery.xml new file mode 100644 index 00000000..214d19e2 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_latest_delivery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_load_shelf.xml b/app/src/main/res/drawable/ic_black_load_shelf.xml new file mode 100644 index 00000000..3062a0f3 --- /dev/null +++ b/app/src/main/res/drawable/ic_black_load_shelf.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_recover.xml b/app/src/main/res/drawable/ic_black_recover.xml new file mode 100644 index 00000000..6612722f --- /dev/null +++ b/app/src/main/res/drawable/ic_black_recover.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_black_upload.xml b/app/src/main/res/drawable/ic_black_upload.xml new file mode 100644 index 00000000..6edadf8e --- /dev/null +++ b/app/src/main/res/drawable/ic_black_upload.xml @@ -0,0 +1,4 @@ + + + diff --git a/app/src/main/res/drawable/ic_download_black_24dp.xml b/app/src/main/res/drawable/ic_download_black_24dp.xml deleted file mode 100644 index 492b41d3..00000000 --- a/app/src/main/res/drawable/ic_download_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_empty_box_96.png b/app/src/main/res/drawable/ic_empty_box_96.png deleted file mode 100644 index bf75102d..00000000 Binary files a/app/src/main/res/drawable/ic_empty_box_96.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml deleted file mode 100644 index 70fb2910..00000000 --- a/app/src/main/res/drawable/ic_home_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_latest_delivery.xml b/app/src/main/res/drawable/ic_latest_delivery.xml new file mode 100644 index 00000000..9e415ce0 --- /dev/null +++ b/app/src/main/res/drawable/ic_latest_delivery.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_load_shelf_96.png b/app/src/main/res/drawable/ic_load_shelf_96.png deleted file mode 100644 index 7586f3a9..00000000 Binary files a/app/src/main/res/drawable/ic_load_shelf_96.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_recover_96.png b/app/src/main/res/drawable/ic_recover_96.png deleted file mode 100644 index 3fdf95d8..00000000 Binary files a/app/src/main/res/drawable/ic_recover_96.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_upload_black_24dp.xml b/app/src/main/res/drawable/ic_upload_black_24dp.xml deleted file mode 100644 index d6339722..00000000 --- a/app/src/main/res/drawable/ic_upload_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 9d8811bf..d7703683 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -102,48 +102,23 @@ app:binding="@{loginViewModel.codAzienda}"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="24dp" + android:layout_marginBottom="24dp"/> + diff --git a/app/src/main/res/layout/dialog_ask_cliente.xml b/app/src/main/res/layout/dialog_ask_cliente.xml new file mode 100644 index 00000000..a98e4009 --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_cliente.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_cliente__dropdown_item.xml b/app/src/main/res/layout/dialog_ask_cliente__dropdown_item.xml new file mode 100644 index 00000000..177f556b --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_cliente__dropdown_item.xml @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_cliente__dropdown_item_destinatario.xml b/app/src/main/res/layout/dialog_ask_cliente__dropdown_item_destinatario.xml new file mode 100644 index 00000000..e384cfd4 --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_cliente__dropdown_item_destinatario.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_cliente__page1.xml b/app/src/main/res/layout/dialog_ask_cliente__page1.xml new file mode 100644 index 00000000..624cac08 --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_cliente__page1.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_cliente__page2.xml b/app/src/main/res/layout/dialog_ask_cliente__page2.xml new file mode 100644 index 00000000..ade75caa --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_cliente__page2.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_position_of_lu.xml b/app/src/main/res/layout/dialog_ask_position_of_lu.xml index 4c30f378..81eded53 100644 --- a/app/src/main/res/layout/dialog_ask_position_of_lu.xml +++ b/app/src/main/res/layout/dialog_ask_position_of_lu.xml @@ -55,7 +55,6 @@ android:gravity="center_horizontal"/> - @@ -286,7 +286,7 @@ android:layout_marginTop="16dp" android:text="@string/vendita_title_fragment" android:textAllCaps="true" - android:textColor="@color/grey_700" + android:textColor="@color/gray_700" android:textStyle="bold" /> @@ -330,7 +330,7 @@ android:gravity="center_horizontal" android:text="@string/rettifica_giacenze_fragment_title" android:textAllCaps="true" - android:textColor="@color/grey_700" + android:textColor="@color/gray_700" android:textStyle="bold" /> @@ -375,7 +375,7 @@ android:gravity="center_horizontal" android:text="@string/versamento_merce_fragment_title" android:textAllCaps="true" - android:textColor="@color/grey_700" + android:textColor="@color/gray_700" android:textStyle="bold" /> @@ -421,53 +421,59 @@ android:gravity="center_horizontal" android:text="@string/free_picking" android:textAllCaps="true" - android:textColor="@color/grey_700" + android:textColor="@color/gray_700" android:textStyle="bold" /> - - - - - - - - - - - + + + + - - - - - - + - - - - - + - - - - - - - - - + - - + + + @@ -532,7 +538,7 @@ android:gravity="center_horizontal" android:text="@string/prod_versamento_materiale_title_fragment" android:textAllCaps="true" - android:textColor="@color/grey_700" + android:textColor="@color/gray_700" android:textStyle="bold" /> @@ -577,7 +583,7 @@ android:gravity="center_horizontal" android:text="@string/prod_recupero_materiale_title_fragment" android:textAllCaps="true" - android:textColor="@color/grey_700" + android:textColor="@color/gray_700" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/fragment_main_accettazione.xml b/app/src/main/res/layout/fragment_main_accettazione.xml index 084b0ba5..5a851576 100644 --- a/app/src/main/res/layout/fragment_main_accettazione.xml +++ b/app/src/main/res/layout/fragment_main_accettazione.xml @@ -25,6 +25,60 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + @@ -38,11 +38,11 @@ diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index bf5310ef..47beecda 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -12,6 +12,7 @@ %s del %s]]> %s]]> Cerca... + Login Accettazione Ordine di accettazione Ordini di accettazione @@ -136,6 +137,7 @@ Nessuna UL registrata a magazzino Nessun articolo da prelevare + Nessun ordine da evadere Nessun articolo @@ -156,6 +158,7 @@ Numero ordine Cliente + Destinatario Data consegna Termini di consegna Automezzo @@ -208,4 +211,9 @@ Produzione Versamento materiale Recupero materiale + + Prima di procedere seleziona un cliente + Prima di procedere seleziona un destinatario + Cliente non valido + Destinatario non valido \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index ac7c680e..8d337f0c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -42,8 +42,11 @@ #388E3C - #616161 - #424242 + #BDBDBD + #9E9E9E + #757575 + #616161 + #424242 #813f51b5 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3363cc63..ae3af675 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ Loading Completed Search... + Login Permissions are required for app to work properly @@ -141,6 +142,7 @@ No LU already registered No items to pick + No orders to dispatch No items The scanned label has already been used @@ -162,6 +164,7 @@ Orders number Customer + Recipient Ship date Terms of delivery Vehicle @@ -214,4 +217,10 @@ Recover raw material + Please, select a customer before proceeding + Please, select a recipient before proceeding + Invalid customer + Invalid recipient + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 954361d1..1c1d7141 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -24,6 +24,10 @@ @font/product_sans_regular normal + + + + + @@ -127,5 +138,4 @@ - diff --git a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java index 616869f3..0451cb2e 100644 --- a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java +++ b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java @@ -8,7 +8,7 @@ public interface BarcodeReaderInterface { boolean isRightAdapter(); - void init() throws BarcodeAdapterNotFoundException; + void init(Runnable onDeviceReady) throws BarcodeAdapterNotFoundException; void deinit(); diff --git a/ext_sources/9DBDE980.png b/ext_sources/9DBDE980.png deleted file mode 100644 index ab966c21..00000000 Binary files a/ext_sources/9DBDE980.png and /dev/null differ diff --git a/ext_sources/ICONS/icons8-barcode-scanner.svg b/ext_sources/ICONS/icons8-barcode-scanner.svg new file mode 100644 index 00000000..7f089028 --- /dev/null +++ b/ext_sources/ICONS/icons8-barcode-scanner.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-barcode.svg b/ext_sources/ICONS/icons8-barcode.svg new file mode 100644 index 00000000..9e2776ab --- /dev/null +++ b/ext_sources/ICONS/icons8-barcode.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-database-restore.svg b/ext_sources/ICONS/icons8-database-restore.svg new file mode 100644 index 00000000..3fe607f5 --- /dev/null +++ b/ext_sources/ICONS/icons8-database-restore.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-deliver-food (1).svg b/ext_sources/ICONS/icons8-deliver-food (1).svg new file mode 100644 index 00000000..fbdec32d --- /dev/null +++ b/ext_sources/ICONS/icons8-deliver-food (1).svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-deliver-food.svg b/ext_sources/ICONS/icons8-deliver-food.svg new file mode 100644 index 00000000..b8bff51d --- /dev/null +++ b/ext_sources/ICONS/icons8-deliver-food.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/ext_sources/ICONS/icons8-download.svg b/ext_sources/ICONS/icons8-download.svg new file mode 100644 index 00000000..8441369e --- /dev/null +++ b/ext_sources/ICONS/icons8-download.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-empty-box.svg b/ext_sources/ICONS/icons8-empty-box.svg new file mode 100644 index 00000000..d08c794e --- /dev/null +++ b/ext_sources/ICONS/icons8-empty-box.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-external.svg b/ext_sources/ICONS/icons8-external.svg new file mode 100644 index 00000000..e62d9b49 --- /dev/null +++ b/ext_sources/ICONS/icons8-external.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-home-page.svg b/ext_sources/ICONS/icons8-home-page.svg new file mode 100644 index 00000000..0720cca3 --- /dev/null +++ b/ext_sources/ICONS/icons8-home-page.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-internal.svg b/ext_sources/ICONS/icons8-internal.svg new file mode 100644 index 00000000..96c06bcd --- /dev/null +++ b/ext_sources/ICONS/icons8-internal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-restart.svg b/ext_sources/ICONS/icons8-restart.svg new file mode 100644 index 00000000..53559186 --- /dev/null +++ b/ext_sources/ICONS/icons8-restart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/ICONS/icons8-upload.svg b/ext_sources/ICONS/icons8-upload.svg new file mode 100644 index 00000000..b964c1e7 --- /dev/null +++ b/ext_sources/ICONS/icons8-upload.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ext_sources/Screenshots/0_Home.png b/ext_sources/Screenshots/0_Home.png new file mode 100644 index 00000000..394afa7d Binary files /dev/null and b/ext_sources/Screenshots/0_Home.png differ diff --git a/ext_sources/Screenshots/0a_Menu Laterale.png b/ext_sources/Screenshots/0a_Menu Laterale.png new file mode 100644 index 00000000..13886a2b Binary files /dev/null and b/ext_sources/Screenshots/0a_Menu Laterale.png differ diff --git a/ext_sources/Screenshots/1a_Elenco ordini.png b/ext_sources/Screenshots/1a_Elenco ordini.png new file mode 100644 index 00000000..14063ff0 Binary files /dev/null and b/ext_sources/Screenshots/1a_Elenco ordini.png differ diff --git a/ext_sources/Screenshots/1b_Elenco articoli accettazione.png b/ext_sources/Screenshots/1b_Elenco articoli accettazione.png new file mode 100644 index 00000000..0c1a52f8 Binary files /dev/null and b/ext_sources/Screenshots/1b_Elenco articoli accettazione.png differ diff --git a/ext_sources/Screenshots/1c_Input quantita accettazione.png b/ext_sources/Screenshots/1c_Input quantita accettazione.png new file mode 100644 index 00000000..c243d87a Binary files /dev/null and b/ext_sources/Screenshots/1c_Input quantita accettazione.png differ diff --git a/ext_sources/Screenshots/2a_Elenco ordini spedizione.png b/ext_sources/Screenshots/2a_Elenco ordini spedizione.png new file mode 100644 index 00000000..7e0370b1 Binary files /dev/null and b/ext_sources/Screenshots/2a_Elenco ordini spedizione.png differ diff --git a/ext_sources/Screenshots/2b_Elenco articoli spedizione.png b/ext_sources/Screenshots/2b_Elenco articoli spedizione.png new file mode 100644 index 00000000..97b4f88f Binary files /dev/null and b/ext_sources/Screenshots/2b_Elenco articoli spedizione.png differ diff --git a/ext_sources/Screenshots/2c_Input quantita spedizione.png b/ext_sources/Screenshots/2c_Input quantita spedizione.png new file mode 100644 index 00000000..9328a8a6 Binary files /dev/null and b/ext_sources/Screenshots/2c_Input quantita spedizione.png differ diff --git a/ext_sources/box.svg b/ext_sources/box.svg deleted file mode 100644 index 6cd0dc12..00000000 --- a/ext_sources/box.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/honeywellscannerlibrary/build.gradle b/honeywellscannerlibrary/build.gradle index fb28ef3b..b141d6c4 100644 --- a/honeywellscannerlibrary/build.gradle +++ b/honeywellscannerlibrary/build.gradle @@ -20,6 +20,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + } } diff --git a/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneyWellBarcodeReader.java b/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneyWellBarcodeReader.java index 357301e4..7632d255 100644 --- a/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneyWellBarcodeReader.java +++ b/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneyWellBarcodeReader.java @@ -1,8 +1,24 @@ package it.integry.honeywellscannerlibrary; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; import com.honeywell.aidc.AidcManager; +import com.honeywell.aidc.BarcodeFailureEvent; +import com.honeywell.aidc.BarcodeReadEvent; +import com.honeywell.aidc.BarcodeReader; +import com.honeywell.aidc.InvalidScannerNameException; +import com.honeywell.aidc.ScannerUnavailableException; +import com.honeywell.aidc.UnsupportedPropertyException; + +import java.util.HashMap; +import java.util.Map; import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException; import it.integry.plugins.barcode_base_library.extension.RunnableArgs; @@ -11,51 +27,156 @@ import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; public class HoneyWellBarcodeReader implements BarcodeReaderInterface { - private Context mContext; + private final AppCompatActivity mContext; + private AidcManager manager; + private BarcodeReader barcodeReader; - private boolean canGoOn = false; + private static RunnableArgs mOnScanSuccessfull; + private static RunnableArgs mOnScanFailed; - public HoneyWellBarcodeReader(Context context) { + private static final String TAG = HoneyWellBarcodeReader.class.getName(); + + public HoneyWellBarcodeReader(final AppCompatActivity context) { this.mContext = context; - - AidcManager.create(context, new AidcManager.CreatedCallback() { - @Override - public void onCreated(AidcManager aidcManager) { - canGoOn = true; - } - }); - - while(!canGoOn) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } } @Override public boolean isRightAdapter() { - return false; + String model = Build.MODEL; + if(model.equalsIgnoreCase("EDA50")) { + return true; + } else return false; } @Override - public void init() throws BarcodeAdapterNotFoundException { + public void init(final Runnable onDeviceReady) throws BarcodeAdapterNotFoundException { + if(isRightAdapter()) { + AidcManager.create(mContext, new AidcManager.CreatedCallback() { + + @Override + public void onCreated(AidcManager aidcManager) { + + manager = aidcManager; + + try{ + barcodeReader = manager.createBarcodeReader(); + registerListenersInternal(); + } + catch (InvalidScannerNameException e){ + Toast.makeText(mContext, "Invalid Scanner Name Exception: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + } + catch (Exception e){ + Toast.makeText(mContext, "Exception: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + } + + + onDeviceReady.run(); + } + }); + + } else { + throw new BarcodeAdapterNotFoundException(getAdapterName()); + } } @Override public void deinit() { + if (barcodeReader != null) { + // close BarcodeReader to clean up resources. + barcodeReader.close(); + barcodeReader = null; + } + if (manager != null) { + // close AidcManager to disconnect from the scanner service. + // once closed, the object can no longer be used. + manager.close(); + } } + @Override public void register(RunnableArgs onScanSuccessfull, RunnableArgs onScanFailed) { - + mOnScanSuccessfull = onScanSuccessfull; + mOnScanFailed = onScanFailed; } + @Override public String getAdapterName() { - return null; + return "Honeywell"; + } + + + + + + + private void registerListenersInternal() { + // register bar code event listener + barcodeReader.addBarcodeListener(new BarcodeReader.BarcodeListener() { + @Override + public void onBarcodeEvent(BarcodeReadEvent barcodeReadEvent) { + dispatchEvent(barcodeReadEvent); + } + + @Override + public void onFailureEvent(BarcodeFailureEvent barcodeFailureEvent) { + + } + }); + + + // set the trigger mode to client control + try { + barcodeReader.setProperty(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE, + BarcodeReader.TRIGGER_CONTROL_MODE_CLIENT_CONTROL); + } catch (UnsupportedPropertyException e) { + Toast.makeText(mContext, "Failed to apply properties", Toast.LENGTH_SHORT).show(); + } + + Map properties = new HashMap<>(); + + // Set Symbologies On/Off + properties.put(BarcodeReader.PROPERTY_EAN_8_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_EAN_13_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_CODE_39_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_CODE_128_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_GS1_128_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_UPC_A_ENABLE, true); + + + properties.put(BarcodeReader.PROPERTY_EAN_8_CHECK_DIGIT_TRANSMIT_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_UPC_A_CHECK_DIGIT_TRANSMIT_ENABLED, true); + + properties.put(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE, BarcodeReader.TRIGGER_CONTROL_MODE_AUTO_CONTROL); + + // Apply the settings + barcodeReader.setProperties(properties); + + + try { + barcodeReader.claim(); + } catch (ScannerUnavailableException e) { + e.printStackTrace(); + } + + } + + + private void dispatchEvent(BarcodeReadEvent barcodeReadEvent) + { + mContext.runOnUiThread(() -> { + + BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO() + .setByteValue(barcodeReadEvent.getBarcodeData().getBytes()) + .setStringValue(barcodeReadEvent.getBarcodeData()) + .setType(HoneywellBarcodeTypeMapper.map(barcodeReadEvent.getCodeId())) + .setName(HoneywellBarcodeTypeMapper.map(barcodeReadEvent.getCodeId()).toString()); + + mOnScanSuccessfull.run(barcodeScanDTO); + }); } } diff --git a/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java b/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java new file mode 100644 index 00000000..4b55a929 --- /dev/null +++ b/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java @@ -0,0 +1,35 @@ +package it.integry.honeywellscannerlibrary; + +import android.util.Log; + +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class HoneywellBarcodeTypeMapper { + + public static BarcodeType map(String inputType) { + + switch (inputType) { + case "h": + return BarcodeType.CODE11; + case "j": + return BarcodeType.CODE128; + case "b": + return BarcodeType.CODE39; + + case "d": + return BarcodeType.EAN13; + case "D": + return BarcodeType.EAN8; + + case "c": + return BarcodeType.UPCA; + case "E": + return BarcodeType.UPCE; + default: + Log.d("SCAN TYPE", inputType); + return null; + } + + } + +} diff --git a/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java b/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java index bedac4db..566feba7 100644 --- a/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java +++ b/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java @@ -5,6 +5,8 @@ import android.content.Context; import android.content.Intent; import android.util.Log; +import androidx.appcompat.app.AppCompatActivity; + import java.nio.charset.StandardCharsets; import device.common.DecodeResult; @@ -18,7 +20,7 @@ import it.integry.plugins.barcode_base_library.model.BarcodeType; public class PointMobileBarcodeReader implements BarcodeReaderInterface { - private Context mContext; + private AppCompatActivity mContext; private static ScanManager mScanManager; private static DecodeResult mDecodeResult; @@ -27,7 +29,7 @@ public class PointMobileBarcodeReader implements BarcodeReaderInterface { private static String TAG = PointMobileBarcodeReader.class.getName(); - public PointMobileBarcodeReader(Context context) { + public PointMobileBarcodeReader(AppCompatActivity context) { this.mContext = context; mScanManager = new ScanManager(); @@ -45,11 +47,13 @@ public class PointMobileBarcodeReader implements BarcodeReaderInterface { } @Override - public void init() throws BarcodeAdapterNotFoundException { + public void init(Runnable onDeviceReady) throws BarcodeAdapterNotFoundException { if(isRightAdapter()){ try{ mScanManager.aDecodeSetTerminator(ScanConst.Terminator.DCD_TERMINATOR_NONE); mScanManager.aDecodeSetResultType(ScanConst.ResultType.DCD_RESULT_USERMSG); + + onDeviceReady.run(); } catch (Exception ex) { throw new BarcodeAdapterNotFoundException(getAdapterName()); } diff --git a/zebrascannerlibrary/src/main/java/it/integry/zebrascannerlibrary/ZebraBarcodeReader.java b/zebrascannerlibrary/src/main/java/it/integry/zebrascannerlibrary/ZebraBarcodeReader.java index 44d8e3c7..56a9ef0f 100644 --- a/zebrascannerlibrary/src/main/java/it/integry/zebrascannerlibrary/ZebraBarcodeReader.java +++ b/zebrascannerlibrary/src/main/java/it/integry/zebrascannerlibrary/ZebraBarcodeReader.java @@ -6,6 +6,8 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.Build; +import androidx.appcompat.app.AppCompatActivity; + import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException; import it.integry.plugins.barcode_base_library.extension.RunnableArgs; import it.integry.plugins.barcode_base_library.interfaces.BarcodeReaderInterface; @@ -13,7 +15,7 @@ import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; public class ZebraBarcodeReader implements BarcodeReaderInterface { - private final Context mContext; + private final AppCompatActivity mContext; private static RunnableArgs mOnScanSuccessfull; private static RunnableArgs mOnScanFailed; @@ -21,7 +23,7 @@ public class ZebraBarcodeReader implements BarcodeReaderInterface { private static final String TAG = ZebraBarcodeReader.class.getName(); private static final String INTENT_FILTER_STRING = "it.integry.scan_filter"; - public ZebraBarcodeReader(Context context) { + public ZebraBarcodeReader(AppCompatActivity context) { this.mContext = context; } @@ -34,12 +36,14 @@ public class ZebraBarcodeReader implements BarcodeReaderInterface { } @Override - public void init() throws BarcodeAdapterNotFoundException { + public void init(Runnable onDeviceReady) throws BarcodeAdapterNotFoundException { if(isRightAdapter()) { IntentFilter filter = new IntentFilter(); filter.addCategory(Intent.CATEGORY_DEFAULT); filter.addAction(INTENT_FILTER_STRING); mContext.registerReceiver(myBroadcastReceiver, filter); + + onDeviceReady.run(); } else { throw new BarcodeAdapterNotFoundException(getAdapterName()); }