From bda1328dec3347bfcc9110c01076c17068f4e9a6 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Mon, 6 Feb 2023 18:36:15 +0100 Subject: [PATCH 1/3] Migliorie nel KeyboardEmulatorBarcodeReader --- .../core/expansion/BaseDialogFragment.java | 38 ++++++---- .../DialogAskInfoInventarioView.java | 1 + .../DialogScanGrigliaAcquistoView.java | 1 + .../dialogs/basket_lu/DialogBasketLUView.java | 1 + .../DialogChooseArtFromListaArtsView.java | 5 +- .../DialogChooseArtsFromMtbAartListView.java | 1 + .../DialogChooseArtsFromMtbColrList.java | 1 + .../input_peso_lu/DialogInputPesoLUView.java | 1 + .../DialogScanOrCreateLUView.java | 3 +- .../KeyboardEmulatorBarcodeReader.java | 72 ++++++++++++------- 10 files changed, 82 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java index 6c37ddb4..530aff5d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.expansion; +import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; @@ -18,7 +19,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.view.dialogs.DialogProgressView; -public class BaseDialogFragment extends DialogFragment { +public class BaseDialogFragment extends DialogFragment implements DialogInterface.OnShowListener { @Inject public DialogProgressView mCurrentProgress; @@ -41,20 +42,7 @@ public class BaseDialogFragment extends DialogFragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - - MainApplication.appComponent - .baseDialogFragmentComponent() - .create() - .inject(this); - - if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { - getDialog().setOnKeyListener((dialog, keyCode, event) -> { - if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) { - return BarcodeManager.onKeyDown(event.getKeyCode(), event); - } - return false; - }); - } + this.initialize(); } public void onLoadingStarted() { @@ -107,4 +95,24 @@ public class BaseDialogFragment extends DialogFragment { } + @Override + public void onShow(DialogInterface dialogInterface) { + this.initialize(); + } + + private void initialize() { + MainApplication.appComponent + .baseDialogFragmentComponent() + .create() + .inject(this); + + if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator() && getDialog() != null) { + getDialog().setOnKeyListener((dialog, keyCode, event) -> { + if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) { + return BarcodeManager.onKeyDown(event.getKeyCode(), event); + } + return false; + }); + } + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java index a53929bb..6d537e63 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java @@ -82,6 +82,7 @@ public class DialogAskInfoInventarioView extends BaseDialogFragment { .create(); alertDialog.setCanceledOnTouchOutside(cancelable); + alertDialog.setOnShowListener(this); return alertDialog; } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java index 8c37c77e..78fb44e7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java @@ -72,6 +72,7 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment { var alertDialog = alertDialogBuilder.create(); alertDialog.setCanceledOnTouchOutside(true); + alertDialog.setOnShowListener(this); return alertDialog; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLUView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLUView.java index 389db303..40ee7a73 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLUView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/DialogBasketLUView.java @@ -44,6 +44,7 @@ public class DialogBasketLUView extends BaseDialogFragment { .create(); alertDialog.setCanceledOnTouchOutside(false); + alertDialog.setOnShowListener(this); this.initViewPager(alertDialog); return alertDialog; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java index 89f4908e..67c9becb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsView.java @@ -7,7 +7,6 @@ import android.view.LayoutInflater; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; -import androidx.fragment.app.DialogFragment; import androidx.recyclerview.widget.LinearLayoutManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -15,12 +14,13 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; -public class DialogChooseArtFromListaArtsView extends DialogFragment { +public class DialogChooseArtFromListaArtsView extends BaseDialogFragment { private final List mListaArts; @@ -47,6 +47,7 @@ public class DialogChooseArtFromListaArtsView extends DialogFragment { .create(); alertDialog.setCanceledOnTouchOutside(false); + alertDialog.setOnShowListener(this); return alertDialog; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromMtbAartListView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromMtbAartListView.java index ca1d490e..965ef399 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromMtbAartListView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromMtbAartListView.java @@ -102,6 +102,7 @@ public class DialogChooseArtsFromMtbAartListView extends BaseDialogFragment impl @Override public void onShow(DialogInterface dialogInterface) { + super.onShow(dialogInterface); this.initList(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_mtbcolr_list/DialogChooseArtsFromMtbColrList.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_mtbcolr_list/DialogChooseArtsFromMtbColrList.java index 3b42d43e..c85678c8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_mtbcolr_list/DialogChooseArtsFromMtbColrList.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_mtbcolr_list/DialogChooseArtsFromMtbColrList.java @@ -144,6 +144,7 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment implemen @Override public void onShow(DialogInterface dialogInterface) { + super.onShow(dialogInterface); this.initList(); this.initFilter(); this.setupBarcode(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java index 2cc755d0..c70ee8a5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java @@ -90,6 +90,7 @@ public class DialogInputPesoLUView extends BaseDialogFragment { .create(); alertDialog.setCanceledOnTouchOutside(cancelable); + alertDialog.setOnShowListener(this); return alertDialog; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java index 1716cef5..b2688f6a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java @@ -103,11 +103,12 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial }).show(requireActivity().getSupportFragmentManager(), "tag"); }); - var alertDialog = new MaterialAlertDialogBuilder(requireContext()) + var alertDialog = new MaterialAlertDialogBuilder(requireContext()) .setView(mBindings.getRoot()) .setCancelable(false) .create(); alertDialog.setCanceledOnTouchOutside(false); + alertDialog.setOnShowListener(this); return alertDialog; } diff --git a/keyobardemulatorscannerlibrary/src/main/java/it/integry/keyobardemulatorscannerlibrary/KeyboardEmulatorBarcodeReader.java b/keyobardemulatorscannerlibrary/src/main/java/it/integry/keyobardemulatorscannerlibrary/KeyboardEmulatorBarcodeReader.java index ec4a4af8..048b9584 100644 --- a/keyobardemulatorscannerlibrary/src/main/java/it/integry/keyobardemulatorscannerlibrary/KeyboardEmulatorBarcodeReader.java +++ b/keyobardemulatorscannerlibrary/src/main/java/it/integry/keyobardemulatorscannerlibrary/KeyboardEmulatorBarcodeReader.java @@ -1,6 +1,8 @@ package it.integry.keyobardemulatorscannerlibrary; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.util.Pair; import android.view.KeyEvent; @@ -18,7 +20,8 @@ public class KeyboardEmulatorBarcodeReader implements BarcodeReaderInterface { private RunnableArgs mOnScanSuccessfull; private RunnableArgs mOnScanFailed; private String mTextBarcode = ""; - private long mLastCharInsertTime = 0; + private final Handler handler = new Handler(Looper.getMainLooper()); +// private long mLastCharInsertTime = 0; public KeyboardEmulatorBarcodeReader(Context applicationContext) { @@ -54,35 +57,56 @@ public class KeyboardEmulatorBarcodeReader implements BarcodeReaderInterface { @Override public void onKeyEvent(KeyEvent keyEvent) { - if (keyEvent.getEventTime() - mLastCharInsertTime > 500) { - mLastCharInsertTime = keyEvent.getEventTime(); - mTextBarcode = ""; - } - if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_ENTER) { - if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_SHIFT_LEFT) { - mLastCharInsertTime = keyEvent.getEventTime(); - if (keyEvent.getUnicodeChar() > 0) { - mTextBarcode += (char) keyEvent.getUnicodeChar(); - } else if (keyEvent.getCharacters() != null) { - mTextBarcode = keyEvent.getCharacters(); - } - } - } else { - if (mTextBarcode.length() > 0) { +// if (keyEvent.getEventTime() - mLastCharInsertTime > 500) { +// mLastCharInsertTime = keyEvent.getEventTime(); +// mTextBarcode = ""; +// } +// if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_ENTER) { +// if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_SHIFT_LEFT) { +// mLastCharInsertTime = keyEvent.getEventTime(); - BarcodeType barcodeType = decodeBarcode(mTextBarcode); - BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO() - .setByteValue(mTextBarcode.getBytes()) - .setStringValue(mTextBarcode) - .setType(barcodeType) - .setName(barcodeType != null ? barcodeType.toString() : ""); + handler.removeCallbacks(dispatchBarcode); - mOnScanSuccessfull.run(barcodeScanDTO); - } + if (keyEvent.getUnicodeChar() > 0) { + mTextBarcode += (char) keyEvent.getUnicodeChar(); + } else if (keyEvent.getCharacters() != null) { + mTextBarcode = keyEvent.getCharacters(); } + handler.postDelayed(dispatchBarcode, 500); +// } +// } else { +// if (mTextBarcode.length() > 0) { +// +// BarcodeType barcodeType = decodeBarcode(mTextBarcode); +// BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO() +// .setByteValue(mTextBarcode.getBytes()) +// .setStringValue(mTextBarcode) +// .setType(barcodeType) +// .setName(barcodeType != null ? barcodeType.toString() : ""); +// +// mOnScanSuccessfull.run(barcodeScanDTO); +// } +// } + } + + private final Runnable dispatchBarcode = new Runnable() { + @Override + public void run() { + BarcodeType barcodeType = decodeBarcode(mTextBarcode); + BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO() + .setByteValue(mTextBarcode.getBytes()) + .setStringValue(mTextBarcode) + .setType(barcodeType) + .setName(barcodeType != null ? barcodeType.toString() : ""); + + mOnScanSuccessfull.run(barcodeScanDTO); + mTextBarcode = ""; + } + }; + public BarcodeType decodeBarcode(String barcode) { /*Pattern patternUPCA = Pattern.compile("^[0-9]{12}$"); Pattern patternUPCE = Pattern.compile("^[0-1][0-9]{7}$"); From 9371e5824f531f69d2f87220a9e5f1636dc2beae Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 8 Feb 2023 10:55:33 +0100 Subject: [PATCH 2/3] Implementato pick extra item sui magazzini automatici --- .../core/expansion/RunnableArgsssss.java | 6 + .../OrdiniUscitaElencoBindings.java | 8 ++ .../OrdiniUscitaElencoFragment.java | 69 ++++++++- .../filters/VenditaFiltroOrdiniViewModel.java | 136 +++++++++++++++--- .../gest/spedizione/SpedizioneActivity.java | 3 + .../gest/spedizione/SpedizioneViewModel.java | 15 ++ .../dialogs/scan_art/DialogScanArtModule.java | 13 +- .../dialogs/scan_art/DialogScanArtView.java | 26 ++-- .../scan_art/DialogScanArtViewModel.java | 47 +++++- .../layout_filter_agente__list_item.xml | 2 +- .../layout_filter_automezzo__list_item.xml | 2 +- .../layout_filter_cliente__list_item.xml | 2 +- .../layout_filter_cod_art__list_item.xml | 2 +- .../layout_filter_commessa__list_item.xml | 2 +- .../layout_filter_deposito__list_item.xml | 2 +- .../layout/layout_filter_descr__list_item.xml | 2 +- .../layout/layout_filter_paese__list_item.xml | 2 +- .../layout_filter_posizione__list_item.xml | 2 +- .../layout_filter_term_cons__list_item.xml | 2 +- .../layout_filter_vettore__list_item.xml | 2 +- .../layout_filter_viaggio__list_item.xml | 2 +- 21 files changed, 294 insertions(+), 53 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsssss.java diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsssss.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsssss.java new file mode 100644 index 00000000..b1880c71 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsssss.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.core.expansion; + +public interface RunnableArgsssss { + + void run(S data1, T data2, U data3, V data4, X data5); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java index 8e64395a..14683904 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java @@ -12,6 +12,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaese import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterViaggioLayoutView; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; public class OrdiniUscitaElencoBindings { @@ -28,6 +29,7 @@ public class OrdiniUscitaElencoBindings { public static final int TERM_CONS_FILTER_ID = 8; public static final int DATA_CONS_FILTER_ID = 9; public static final int GRUPPO_MERC_FILTER_ID = 10; + public static final int COMMESSA_FILTER_ID = 11; public static final HashMap AVAILABLE_FILTERS = new HashMap<>() {{ put(DEPOSITO_FILTER_ID, new FilterChipDTO() @@ -94,6 +96,12 @@ public class OrdiniUscitaElencoBindings { .setPosizione(7) .setFilterChipText("Gruppo merceologico") .setFilterLayoutView(new FilterGruppoMercLayoutView())); + + put(COMMESSA_FILTER_ID, new FilterChipDTO() + .setID(COMMESSA_FILTER_ID) + .setPosizione(11) + .setFilterChipText("Commessa") + .setFilterLayoutView(new FilterCommessaLayoutView())); }}; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index b9348bae..76225e60 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -38,6 +38,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.model.JtbComt; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepo; @@ -45,6 +46,7 @@ import it.integry.integrywmsnative.core.model.MtbGrup; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; @@ -66,6 +68,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterViagg import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.VenditaFiltroOrdiniViewModel; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui.OrdiniUscitaElencoAdapter; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.ui.OrdiniUscitaElencoListModel; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; import it.integry.integrywmsnative.ui.ElevatedToolbar; @@ -83,6 +86,9 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF @Inject ArticoloRESTConsumer mArticoloRESTConsumer; + @Inject + CommessaRESTConsumer mCommessaRESTConsumer; + @Inject OrdiniUscitaElencoViewModel mViewModel; @@ -104,6 +110,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF private List mtbDepoCache; private List mtbGrupCache; + private List jtbComtCache; public OrdiniUscitaElencoFragment() { // Required empty public constructor @@ -193,7 +200,9 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), v -> { this.onLoadingStarted(); - this.initMtbGrupsCache(this::onLoadingEnded); + this.initMtbGrupsCache(() -> { + this.initJtbComtCache(this::onLoadingEnded); + }); mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); @@ -265,6 +274,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentTermConsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentDataConsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); + mAppliedFilterViewModel.getCurrentCommessaPredicate().addOnPropertyChangedCallback(onPredicateChanged); List filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()) .map(Map.Entry::getValue) @@ -527,6 +537,31 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); break; + case OrdiniUscitaElencoBindings.COMMESSA_FILTER_ID: + mAppliedFilterViewModel.getCurrentCommessaPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentCommessaPredicate().get() == null) { + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> { + mAppliedFilterViewModel.setCommessaFilter(null); + mAppliedFilterViewModel.getCurrentCommessaPredicate().set(null); + }); + break; + } this.mBindings.filterChipsGroup.addView(filterChipView); @@ -559,6 +594,19 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF .getFilterLayoutView(); switch (filterChipDTO.getID()) { + case OrdiniUscitaElencoBindings.COMMESSA_FILTER_ID: + ((FilterCommessaLayoutView) filterLayoutView) + .setAllCommesse(mAppliedFilterViewModel.getAllCommesse(this.jtbComtCache)) + .setAvailableCommesse(mAppliedFilterViewModel.getAvailableCommesse(this.jtbComtCache)) + .setOnFilterApplied(mAppliedFilterViewModel::setCommessaFilter) + .setPreSelectedCommesse(Stream.of(Objects.requireNonNull(mViewModel.getOrderList().getValue())) + .filter(mAppliedFilterViewModel.getCurrentCommessaPredicate().get() == null ? + x -> false : + mAppliedFilterViewModel.getCurrentCommessaPredicate().get()) + .map(x -> Stream.of(jtbComtCache).filter(y -> x.getCodJcom().equalsIgnoreCase(y.getCodJcom())).findFirst().get()) + .toList()); + break; + case OrdiniUscitaElencoBindings.DEPOSITO_FILTER_ID: ((FilterDepositoLayoutView) filterLayoutView) .setAllCodMdeps(mAppliedFilterViewModel.getAllCodMdeps(mtbDepoCache)) @@ -865,4 +913,23 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF onComplete.run(); }, this::onError); } + + + + + private void initJtbComtCache(Runnable onComplete) { + if (this.mViewModel.getOrderList().getValue() == null) { + this.jtbComtCache = new ArrayList<>(); + onComplete.run(); + return; + } + var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue())) + .flatMap(x -> Stream.of(x.getCodJcom())) + .toList(); + + this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> { + this.jtbComtCache = jtbComtCache; + onComplete.run(); + }, this::onError); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java index e3f84f58..96b16257 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java @@ -13,6 +13,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; +import it.integry.integrywmsnative.core.model.JtbComt; import it.integry.integrywmsnative.core.model.MtbDepo; import it.integry.integrywmsnative.core.model.MtbGrup; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; @@ -33,6 +34,7 @@ public class VenditaFiltroOrdiniViewModel { private final ObservableField> currentAutomezzoPredicate = new ObservableField<>(); private final ObservableField> currentPaesePredicate = new ObservableField<>(); private final ObservableField> currentGruppoMercPredicate = new ObservableField<>(); + private final ObservableField> currentCommessaPredicate = new ObservableField<>(); private Date selectedDataCons = null; private List selectedMtbGrup = new ArrayList<>(); @@ -123,6 +125,14 @@ public class VenditaFiltroOrdiniViewModel { } } + public void setCommessaFilter(List jtbComtList) { + if (jtbComtList == null || jtbComtList.isEmpty()) currentCommessaPredicate.set(null); + else { + List codJcoms = Stream.of(jtbComtList).map(JtbComt::getCodJcom).toList(); + currentCommessaPredicate.set(o -> codJcoms.contains(o.getCodJcom())); + } + } + public void setGruppoMercFilter(List mtbGrupList) { if (mtbGrupList == null || mtbGrupList.isEmpty()) { currentGruppoMercPredicate.set(null); @@ -159,7 +169,8 @@ public class VenditaFiltroOrdiniViewModel { currentIdViaggioPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { returnList = this.initialOrderList; } else { @@ -175,7 +186,8 @@ public class VenditaFiltroOrdiniViewModel { (currentIdViaggioPredicate.get() == null || (currentIdViaggioPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ); returnList = tmpStream.toList(); @@ -228,6 +240,10 @@ public class VenditaFiltroOrdiniViewModel { return currentGruppoMercPredicate; } + public ObservableField> getCurrentCommessaPredicate() { + return currentCommessaPredicate; + } + public List getAllCodMdeps(List mtbDepoFullList) { List codMdeps = Stream.of(initialOrderList) .map(OrdineInevasoDTO::getCodMdep) @@ -253,7 +269,8 @@ public class VenditaFiltroOrdiniViewModel { currentIdViaggioPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllCodMdeps(mtbDepoFullList); } else { @@ -268,7 +285,8 @@ public class VenditaFiltroOrdiniViewModel { (currentIdViaggioPredicate.get() == null || (currentIdViaggioPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineInevasoDTO::getCodMdep) .distinct() @@ -305,7 +323,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllIDViaggio(); } else { @@ -320,7 +339,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getIdViaggio) .distinct() @@ -350,7 +370,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllNumOrds(); } else { @@ -365,7 +386,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getNumOrd) .distinct() @@ -395,7 +417,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllClienti(); } else { @@ -410,7 +433,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getRagSocOrd) .distinct() @@ -440,7 +464,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllVettori(); } else { @@ -455,7 +480,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(x -> x.getCodVvet() + (!UtilityString.isNullOrEmpty(x.getCodVvet()) ? " - " + x.getDescrizioneVettore() : "")) .distinct() @@ -485,7 +511,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllAutomezzi(); } else { @@ -500,7 +527,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getDescrizioneAuto) .distinct() @@ -530,7 +558,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentAgentePredicate.get() == null && currentAutomezzoPredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { List all = getAllPaesi(); return all; @@ -546,7 +575,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentAutomezzoPredicate.get() == null || (currentAutomezzoPredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getCitta) .distinct() @@ -576,7 +606,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentPaesePredicate.get() == null && currentAutomezzoPredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { List all = getAllAgenti(); return all; @@ -592,7 +623,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && (currentAutomezzoPredicate.get() == null || (currentAutomezzoPredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getNomeAgente) .distinct() @@ -622,7 +654,8 @@ public class VenditaFiltroOrdiniViewModel { currentDepositoPredicate.get() == null && currentPaesePredicate.get() == null && currentAutomezzoPredicate.get() == null && - currentGruppoMercPredicate.get() == null + currentGruppoMercPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllTermCons(); } else { @@ -637,7 +670,8 @@ public class VenditaFiltroOrdiniViewModel { (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && (currentAutomezzoPredicate.get() == null || (currentAutomezzoPredicate.get().test(x))) && - (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .map(OrdineUscitaInevasoDTO::getTermCons) .distinct() @@ -646,6 +680,62 @@ public class VenditaFiltroOrdiniViewModel { } + public List getAllCommesse(List commesseFullList) { + List codJcom = Stream.of(initialOrderList) + .map(OrdiniUscitaElencoDTO::getCodJcom) + .distinct() + .toList(); + + return Stream.of(Objects.requireNonNull(commesseFullList)) + .filter(x -> codJcom.contains(x.getCodJcom())) + .distinct() + .withoutNulls() + .sortBy(JtbComt::getCodJcom) + .toList(); + } + public List getAvailableCommesse(List commesseFullList) { + + if (currentIdViaggioPredicate.get() == null && + currentNumOrdsPredicate.get() == null && + currentDataConsPredicate.get() == null && + currentAgentePredicate.get() == null && + currentClientePredicate.get() == null && + currentVettorePredicate.get() == null && + currentDepositoPredicate.get() == null && + currentPaesePredicate.get() == null && + currentAutomezzoPredicate.get() == null && + currentGruppoMercPredicate.get() == null && + currentTermConsPredicate.get() == null) { + return getAllCommesse(commesseFullList); + } else { + List availableCommesse = Stream.of(this.initialOrderList) + .filter(x -> + (currentIdViaggioPredicate.get() == null || (currentIdViaggioPredicate.get().test(x))) && + (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) && + (currentDataConsPredicate.get() == null || (currentDataConsPredicate.get().test(x))) && + (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && + (currentClientePredicate.get() == null || (currentClientePredicate.get().test(x))) && + (currentVettorePredicate.get() == null || (currentVettorePredicate.get().test(x))) && + (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && + (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && + (currentAutomezzoPredicate.get() == null || (currentAutomezzoPredicate.get().test(x))) && + (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))) && + (currentTermConsPredicate.get() == null || (currentTermConsPredicate.get().test(x))) + ) + .map(OrdineUscitaInevasoDTO::getCodJcom) + .distinct() + .toList(); + + return Stream.of(Objects.requireNonNull(commesseFullList)) + .filter(x -> availableCommesse.contains(x.getCodJcom())) + .distinct() + .withoutNulls() + .sortBy(JtbComt::getCodJcom) + .toList(); + } + } + + public List getAllGruppoMerc(List mtbGrupFullList) { var codMgrp = Stream.of(initialOrderList) .flatMap(ordiniUscitaElencoDTO -> @@ -676,7 +766,8 @@ public class VenditaFiltroOrdiniViewModel { currentIdViaggioPredicate.get() == null && currentAgentePredicate.get() == null && currentPaesePredicate.get() == null && - currentDepositoPredicate.get() == null + currentDepositoPredicate.get() == null && + currentCommessaPredicate.get() == null ) { return getAllGruppoMerc(mtbGrupFullList); } else { @@ -691,7 +782,8 @@ public class VenditaFiltroOrdiniViewModel { (currentIdViaggioPredicate.get() == null || (currentIdViaggioPredicate.get().test(x))) && (currentAgentePredicate.get() == null || (currentAgentePredicate.get().test(x))) && (currentPaesePredicate.get() == null || (currentPaesePredicate.get().test(x))) && - (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) + (currentDepositoPredicate.get() == null || (currentDepositoPredicate.get().test(x))) && + (currentCommessaPredicate.get() == null || (currentCommessaPredicate.get().test(x))) ) .flatMap(x -> Stream.of(x.getAvailableClassMerc())) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index ee067f9b..96e8123d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -656,6 +656,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo if (status == DialogConsts.Results.YES) { this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColr); } + }, pickMagazzinoAutomaticoPosizione -> { + this.onLoadingStarted(); + this.mViewmodel.executeEmptyMagazzinoAutomaticoRequest(pickMagazzinoAutomaticoPosizione, this::onLoadingEnded); }) .show(getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 3851cfb5..b55a8359 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -637,6 +637,21 @@ public class SpedizioneViewModel { }); } + public void executeEmptyMagazzinoAutomaticoRequest(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) { + final List orders = Stream.of(this.mTestateOrdini) + .map(x -> new MagazzinoAutomaticoPickOrderRequestDTO(UtilityDate.toLocalDate(x.getDataOrdD()), x.getGestione(), x.getNumOrd()) + .setDataCons(UtilityDate.toLocalDate(x.getDataConsD()))) + .toList(); + + var magazzinoAutomaticoPickRequest = new MagazzinoAutomaticoPickItemsRequestDTO() + .setShouldCreateUDS(true) + .setDefaultGestioneOfNewUDS(mDefaultGestioneOfUL.getText()) + .setOrdersOfNewUDS(orders); + + mMagazzinoAutomaticoRESTConsumer.pickItems(mtbDepoPosizione, + magazzinoAutomaticoPickRequest, onComplete, this::sendError); + } + private void searchArtFromUL(MtbColt scannedUL, Runnable onComplete) { final List pickingList = mPickingList.getValue(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java index 36d3d692..8ff0b13c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java @@ -5,6 +5,8 @@ import dagger.Provides; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; @Module(subcomponents = DialogScanArtComponent.class) @@ -14,8 +16,15 @@ public class DialogScanArtModule { DialogScanArtViewModel providesDialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer, - PosizioniRESTConsumer posizioniRESTConsumer) { - return new DialogScanArtViewModel(barcodeRESTConsumer, colliMagazzinoRESTConsumer, articoloRESTConsumer, posizioniRESTConsumer); + PosizioniRESTConsumer posizioniRESTConsumer, + MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer, + GiacenzaRESTConsumer giacenzaRESTConsumer) { + return new DialogScanArtViewModel(barcodeRESTConsumer, + colliMagazzinoRESTConsumer, + articoloRESTConsumer, + posizioniRESTConsumer, + magazzinoAutomaticoRESTConsumer, + giacenzaRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java index 291b1ff7..6938c66d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java @@ -26,6 +26,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.databinding.DialogScanArtBinding; import it.integry.integrywmsnative.view.dialogs.DialogConsts; @@ -42,17 +43,19 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA private int mBarcodeScannerIstanceID; - private RunnableArgssss mOnItemChoosed = null; + private RunnableArgssss onPickingCompleted = null; + private RunnableArgs onMagazzinoAutomaticoPickingRequest = null; - public static DialogScanArtView newInstance(boolean forceOnlyUL, @NotNull RunnableArgssss onComplete) { - return new DialogScanArtView(forceOnlyUL, onComplete); + public static DialogScanArtView newInstance(boolean forceOnlyUL, @NotNull RunnableArgssss onPickingCompleted, RunnableArgs onMagazzinoAutomaticoPickingRequest) { + return new DialogScanArtView(forceOnlyUL, onPickingCompleted, onMagazzinoAutomaticoPickingRequest); } - private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss onItemChoosed) { + private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss onItemChoosed, RunnableArgs onMagazzinoAutomaticoPickingRequest) { super(); mForceOnlyUL = forceOnlyUL; - mOnItemChoosed = onItemChoosed; + onPickingCompleted = onItemChoosed; + this.onMagazzinoAutomaticoPickingRequest = onMagazzinoAutomaticoPickingRequest; } @Nullable @@ -76,7 +79,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mBindings.buttonNo.setOnClickListener(v -> { - mOnItemChoosed.run(DialogConsts.Results.ABORT, null, null, null); + onPickingCompleted.run(DialogConsts.Results.ABORT, null, null, null); dismiss(); }); @@ -116,19 +119,24 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA if (filteredMtbColrList != null && filteredMtbColrList.size() > 1) { DialogChooseArtFromListaMtbColrView.make(getActivity(), filteredMtbColrList, mtbColrChose -> { - mOnItemChoosed.run(status, mtbAart, ean128Model, mtbColrChose); + onPickingCompleted.run(status, mtbAart, ean128Model, mtbColrChose); }).show(); } else if (filteredMtbColrList != null && filteredMtbColrList.size() == 1) { - mOnItemChoosed.run(status, mtbAart, ean128Model, filteredMtbColrList.get(0)); + onPickingCompleted.run(status, mtbAart, ean128Model, filteredMtbColrList.get(0)); } else { - mOnItemChoosed.run(status, mtbAart, ean128Model, null); + onPickingCompleted.run(status, mtbAart, ean128Model, null); } this.onLoadingEnded(); + dismiss(); + }, pickMagazzinoAutomaticoPosizione -> { + this.onMagazzinoAutomaticoPickingRequest.run(pickMagazzinoAutomaticoPosizione); + + this.onLoadingEnded(); dismiss(); }); }; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java index 7bce5330..ba67634f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java @@ -1,5 +1,7 @@ package it.integry.integrywmsnative.view.dialogs.scan_art; +import com.annimon.stream.Stream; + import org.jetbrains.annotations.NotNull; import java.util.List; @@ -9,7 +11,9 @@ import it.integry.integrywmsnative.core.exception.EmptyLUException; import it.integry.integrywmsnative.core.exception.InvalidLUException; import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; @@ -17,9 +21,12 @@ import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; @@ -31,6 +38,8 @@ public class DialogScanArtViewModel { private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; private final ArticoloRESTConsumer mArticoloRESTConsumer; private final PosizioniRESTConsumer mPosizioniRESTConsumer; + private final MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer; + private final GiacenzaRESTConsumer mGiacenzaRESTConsumer; private boolean mForceOnlyUL; @@ -39,11 +48,13 @@ public class DialogScanArtViewModel { public DialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer, - PosizioniRESTConsumer posizioniRESTConsumer) { + PosizioniRESTConsumer posizioniRESTConsumer, MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer, GiacenzaRESTConsumer mGiacenzaRESTConsumer) { this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mArticoloRESTConsumer = articoloRESTConsumer; this.mPosizioniRESTConsumer = posizioniRESTConsumer; + this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer; + this.mGiacenzaRESTConsumer = mGiacenzaRESTConsumer; } public DialogScanArtViewModel setForceOnlyUL(boolean forceOnlyUL) { @@ -51,23 +62,23 @@ public class DialogScanArtViewModel { return this; } - public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onPickingCompleted, RunnableArgs onMagazzinoAutomaticoPickingRequest) { if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { //Cerco gli articoli presenti nell'ul dell'etichetta anonima - this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onPickingCompleted); } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { //Cerco l'UL presente all'interno della posizione -// this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onComplete); + this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onPickingCompleted, onMagazzinoAutomaticoPickingRequest); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { - this.executeEtichettaEan128(barcodeScanDTO, onComplete); + this.executeEtichettaEan128(barcodeScanDTO, onPickingCompleted); } else if (UtilityBarcode.isEanPeso(barcodeScanDTO) && !mForceOnlyUL) { - this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); + this.executeEtichettaEanPeso(barcodeScanDTO, onPickingCompleted); } else { - this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); + this.loadArticolo(barcodeScanDTO.getStringValue(), null, onPickingCompleted); } // else { @@ -76,6 +87,7 @@ public class DialogScanArtViewModel { } + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { @@ -128,6 +140,27 @@ public class DialogScanArtViewModel { }, this::sendError); } + + + private void executeEtichettaPosizione(String stringValue, RunnableArgssss> onComplete, RunnableArgs onMagazzinoAutomaticoPickingRequest) { + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(stringValue)) + .single(); + + if (foundPosizione == null) { + //Nessuna posizione trovata con questo barcode + this.sendError(new ScannedPositionNotExistException()); + return; + } + + if (foundPosizione.isMagazzinoAutomatico()) { + //Eseguo picking da magazzino automatico + onMagazzinoAutomaticoPickingRequest.run(foundPosizione); + } else { + this.executePosizione(foundPosizione, null, onComplete); + } + } + private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgssss> onComplete) { this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { diff --git a/app/src/main/res/layout/layout_filter_agente__list_item.xml b/app/src/main/res/layout/layout_filter_agente__list_item.xml index 12c3f5ad..66aa9570 100644 --- a/app/src/main/res/layout/layout_filter_agente__list_item.xml +++ b/app/src/main/res/layout/layout_filter_agente__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_automezzo__list_item.xml b/app/src/main/res/layout/layout_filter_automezzo__list_item.xml index 602987cc..c87823ea 100644 --- a/app/src/main/res/layout/layout_filter_automezzo__list_item.xml +++ b/app/src/main/res/layout/layout_filter_automezzo__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_cliente__list_item.xml b/app/src/main/res/layout/layout_filter_cliente__list_item.xml index 9392951c..473672a8 100644 --- a/app/src/main/res/layout/layout_filter_cliente__list_item.xml +++ b/app/src/main/res/layout/layout_filter_cliente__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_cod_art__list_item.xml b/app/src/main/res/layout/layout_filter_cod_art__list_item.xml index 6a3d78c5..2439cf15 100644 --- a/app/src/main/res/layout/layout_filter_cod_art__list_item.xml +++ b/app/src/main/res/layout/layout_filter_cod_art__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_commessa__list_item.xml b/app/src/main/res/layout/layout_filter_commessa__list_item.xml index df9a537d..5f47b131 100644 --- a/app/src/main/res/layout/layout_filter_commessa__list_item.xml +++ b/app/src/main/res/layout/layout_filter_commessa__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_deposito__list_item.xml b/app/src/main/res/layout/layout_filter_deposito__list_item.xml index a4864391..539499ed 100644 --- a/app/src/main/res/layout/layout_filter_deposito__list_item.xml +++ b/app/src/main/res/layout/layout_filter_deposito__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_descr__list_item.xml b/app/src/main/res/layout/layout_filter_descr__list_item.xml index 296a24b3..00091465 100644 --- a/app/src/main/res/layout/layout_filter_descr__list_item.xml +++ b/app/src/main/res/layout/layout_filter_descr__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_paese__list_item.xml b/app/src/main/res/layout/layout_filter_paese__list_item.xml index e03d77ae..9adb31ec 100644 --- a/app/src/main/res/layout/layout_filter_paese__list_item.xml +++ b/app/src/main/res/layout/layout_filter_paese__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_posizione__list_item.xml b/app/src/main/res/layout/layout_filter_posizione__list_item.xml index ea461c7e..daf96357 100644 --- a/app/src/main/res/layout/layout_filter_posizione__list_item.xml +++ b/app/src/main/res/layout/layout_filter_posizione__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_term_cons__list_item.xml b/app/src/main/res/layout/layout_filter_term_cons__list_item.xml index 119602ed..47240d5e 100644 --- a/app/src/main/res/layout/layout_filter_term_cons__list_item.xml +++ b/app/src/main/res/layout/layout_filter_term_cons__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_vettore__list_item.xml b/app/src/main/res/layout/layout_filter_vettore__list_item.xml index dd349d52..8eadcce7 100644 --- a/app/src/main/res/layout/layout_filter_vettore__list_item.xml +++ b/app/src/main/res/layout/layout_filter_vettore__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> diff --git a/app/src/main/res/layout/layout_filter_viaggio__list_item.xml b/app/src/main/res/layout/layout_filter_viaggio__list_item.xml index cf1be509..52d18601 100644 --- a/app/src/main/res/layout/layout_filter_viaggio__list_item.xml +++ b/app/src/main/res/layout/layout_filter_viaggio__list_item.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="8dp" + android:paddingHorizontal="8dp" android:background="?android:attr/selectableItemBackground" android:clickable="@{item.enabled}" android:onClick="@{() -> item.selected.toggle()}"> From e6e8b225546f7a464efab025a1619c5f02766d81 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 8 Feb 2023 10:56:35 +0100 Subject: [PATCH 3/3] -> v1.30.10 (328) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index de5da59a..d4dba3d2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 327 - def appVersionName = '1.30.09' + def appVersionCode = 328 + def appVersionName = '1.30.10' signingConfigs { release {