From 3a0d4d290c2c7665f968edf505d865bb44170541 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 13 May 2021 09:44:43 +0200 Subject: [PATCH 1/5] Aggiornamenti vari. Implementata gestione di partite multiple all'interno di una UL. --- app/build.gradle | 31 ++-- app/src/main/AndroidManifest.xml | 1 + .../MainApplicationComponent.java | 4 + .../core/data_store/db/dao/GrigliaDao.java | 3 +- .../core/data_store/db/entity/Griglia.java | 1 + .../core/expansion/BaseActivity.java | 2 + .../core/utility/UtilityString.java | 2 +- .../viewmodel/ContenutoBancaleViewModel.java | 4 +- .../viewmodel/ListaBancaliViewModel.java | 8 +- .../picking_libero/PickingLiberoFragment.java | 4 +- .../PVOrdineAcquistoEditActivity.java | 4 +- .../PVOrdiniAcquistoGrigliaFragment.java | 4 +- .../RettificaGiacenzeFragment.java | 6 +- .../gest/spedizione/SpedizioneActivity.java | 20 +-- .../gest/spedizione/SpedizioneViewModel.java | 87 +++++++-- .../ui/SimpleDividerItemDecoration.java | 165 ++++++++++++++++++ .../page1/DialogBasketLU_Page1_ViewModel.java | 6 +- .../page2/DialogBasketLU_Page2_ViewModel.java | 4 +- .../DialogCameraBarcodeReader.java | 146 ---------------- .../DialogChooseArtFromListaArts.java | 12 +- .../DialogChooseArtFromListaMtbColrView.java | 4 +- .../DialogChooseBatchLotAdapter.java | 74 ++++++++ .../DialogChooseBatchLotComponent.java | 15 ++ .../DialogChooseBatchLotModule.java | 14 ++ .../DialogChooseBatchLotView.java | 111 ++++++++++++ .../DialogChooseBatchLotViewModel.java | 4 + .../main/res/layout/activity_spedizione.xml | 20 +-- .../layout/dialog_camera_barcode_reader.xml | 51 ------ ..._choose_art_from_lista_art__item_model.xml | 8 +- .../res/layout/dialog_choose_batch_lot.xml | 85 +++++++++ .../dialog_choose_batch_lot_item_model.xml | 88 ++++++++++ app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + barcode_base_android_library/build.gradle | 2 +- barcode_kaiteki/build.gradle | 5 +- build.gradle | 8 +- dynamic_gramm/build.gradle | 4 +- honeywellscannerlibrary/build.gradle | 2 +- keyobardemulatorscannerlibrary/build.gradle | 2 +- pointmobilescannerlibrary/build.gradle | 2 +- zebrascannerlibrary/build.gradle | 2 +- 41 files changed, 716 insertions(+), 301 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/ui/SimpleDividerItemDecoration.java delete mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotComponent.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotModule.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotView.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotViewModel.java delete mode 100644 app/src/main/res/layout/dialog_camera_barcode_reader.xml create mode 100644 app/src/main/res/layout/dialog_choose_batch_lot.xml create mode 100644 app/src/main/res/layout/dialog_choose_batch_lot_item_model.xml diff --git a/app/build.gradle b/app/build.gradle index 28adf0b0..c2cd13e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,12 +24,12 @@ android { } } - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId "it.integry.integrywmsnative" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode appVersionCode versionName appVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -104,15 +104,15 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'androidx.preference:preference-ktx:1.1.1' - implementation 'com.squareup.okhttp3:okhttp:4.9.0' + implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' - implementation 'com.annimon:stream:1.2.1' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0' + implementation 'com.annimon:stream:1.2.2' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.0' + implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1' implementation 'org.apache.commons:commons-text:1.9' //MVVM @@ -127,16 +127,16 @@ dependencies { implementation 'com.github.clans:fab:1.6.4' //CUSTOM VIEWS implementation 'com.github.NaimishTrivedi:FBToast:1.0' - implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2' + implementation 'com.github.cachapa:ExpandableLayout:2.9.2' implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' - implementation 'com.fede987:status-bar-alert:1.0.1' - implementation 'com.fxn769:stash:1.2' - testImplementation 'junit:junit:4.13.1' + implementation 'com.github.fede87:StatusBarAlert:1.0.1' + implementation 'com.github.akshay2211:Stash:master' + testImplementation 'junit:junit:4.13.2' implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3' implementation 'com.github.pedromassango:doubleClick:3.0' //SQLite ROOM - def room_version = "2.2.6" + def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" @@ -150,11 +150,12 @@ dependencies { implementation project(':barcode_base_android_library') implementation project(':honeywellscannerlibrary') implementation project(':keyobardemulatorscannerlibrary') - implementation project(':barcode_kaiteki') - androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' - androidTestImplementation 'org.testng:testng:7.3.0' + androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1' + androidTestImplementation 'org.testng:testng:7.4.0' } + repositories { mavenCentral() google() + maven { url 'https://jitpack.io' } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1439c8a7..90a5623f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ + getAll(); - @Query("SELECT *, COUNT(articoli_griglia.articolo_griglia_id) as countArticoli from griglie LEFT JOIN articoli_griglia ON (griglie.griglia_id = articoli_griglia.id_griglia) where cod_alis = :codAlis GROUP BY griglie.griglia_id") + @Query("SELECT griglie.*, COUNT(articoli_griglia.articolo_griglia_id) as countArticoli from griglie LEFT JOIN articoli_griglia ON (griglie.griglia_id = articoli_griglia.id_griglia) where cod_alis = :codAlis GROUP BY griglie.griglia_id") GrigliaWrapper findByCodAlis(String codAlis); @Insert diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java index 093507c0..b056d387 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java @@ -11,6 +11,7 @@ import androidx.room.PrimaryKey; @Index(value = "cod_alis", unique = true) } ) + public class Griglia { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "griglia_id") diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java index cdc2bee5..4bb3dc50 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java @@ -40,12 +40,14 @@ public class BaseActivity extends AppCompatActivity { protected void openProgress() { + BarcodeManager.disable(); if (this.mCurrentProgress == null) { this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this); } } protected void closeProgress() { + BarcodeManager.enable(); if (mCurrentProgress != null) { mCurrentProgress.dismiss(); mCurrentProgress = null; 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 cbbeea5b..53e7ceb2 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 @@ -23,7 +23,7 @@ public class UtilityString { } public static String empty2null(String stringToCheck) { - return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim(); + return (stringToCheck == null || stringToCheck.trim().length() == 0) ? null : stringToCheck.trim(); } public static String capitalizeWords(String capString){ diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java index f4a5ab67..5219400b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java @@ -7,7 +7,6 @@ import android.text.SpannableString; import androidx.core.content.ContextCompat; import androidx.databinding.ObservableField; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import it.integry.integrywmsnative.R; @@ -24,6 +23,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import static android.app.Activity.RESULT_OK; @@ -66,7 +66,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked mContext.bindings.contenutoBancaleMainList.setLayoutManager(new LinearLayoutManager(mContext)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); mContext.bindings.contenutoBancaleMainList.addItemDecoration(itemDecorator); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java index 274129ea..6f4fc2ca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java @@ -2,22 +2,22 @@ package it.integry.integrywmsnative.gest.lista_bancali.viewmodel; import android.app.Dialog; -import androidx.databinding.ObservableArrayList; import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.List; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.lista_bancali.core.MainListListaColliAdapter; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; public class ListaBancaliViewModel implements IRecyclerItemClicked { @@ -42,7 +42,7 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked { mContext.bindings.listaColliMainList.setHasFixedSize(true); mContext.bindings.listaColliMainList.setLayoutManager(new LinearLayoutManager(mContext)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); mContext.bindings.listaColliMainList.addItemDecoration(itemDecorator); 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 ee558fd1..7e319cd8 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 @@ -13,7 +13,6 @@ import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableList; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import com.tfb.fbtoast.FBToast; @@ -52,6 +51,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGExcep import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; @@ -168,7 +168,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme mBindings.pickingLiberoMainList.setHasFixedSize(true); mBindings.pickingLiberoMainList.setLayoutManager(new LinearLayoutManager(getActivity())); - DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); mBindings.pickingLiberoMainList.addItemDecoration(itemDecorator); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index 4da7c280..a8f24976 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -9,7 +9,6 @@ import android.widget.Toast; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.ArrayList; @@ -40,6 +39,7 @@ import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.adapter.OrdineAc import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.DialogAskAction; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; @@ -114,7 +114,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(this, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); mBinding.articoliOrdineList.addItemDecoration(itemDecorator); mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index 065c665c..8246e7cf 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -15,7 +15,6 @@ import androidx.appcompat.widget.AppCompatTextView; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.ArrayList; @@ -46,6 +45,7 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.core.OrdineAcquistoPv import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLisA; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.DialogAskAction; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; @@ -169,7 +169,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(getActivity())); - DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator); mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 0d4e5772..edaaf44d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -17,7 +17,6 @@ import androidx.core.content.res.ResourcesCompat; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableField; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import com.google.android.material.textfield.TextInputLayout; @@ -57,13 +56,14 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts; -import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView; import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNo; @@ -153,7 +153,7 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme mBinding.rettificaGiacenzeMainList.setHasFixedSize(true); mBinding.rettificaGiacenzeMainList.setLayoutManager(new LinearLayoutManager(getActivity())); - DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator); } 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 a613a931..c5225a75 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 @@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; @@ -68,7 +69,7 @@ import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPosi import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -import it.integry.integrywmsnative.view.dialogs.camera_barcode_reader.DialogCameraBarcodeReader; +import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView; import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; @@ -642,13 +643,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo }, BarcodeManager::enable).show(); } - public void startCameraBarcode() { - DialogCameraBarcodeReader.newInstance(this, data -> { - this.onScanSuccessful.run(data); - }) - .show(getSupportFragmentManager(), "camera_barcode"); - } - public void removeListFilter() { this.mViewmodel.resetMatchedRows(); } @@ -724,7 +718,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); DialogSimpleMessageView .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) - .show(getSupportFragmentManager(), "tag");; + .show(getSupportFragmentManager(), "tag"); } @Override @@ -765,7 +759,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo () -> onComplete.run(true), () -> onComplete.run(false) ) - .show(getSupportFragmentManager(), "tag"); + .show(getSupportFragmentManager(), "tag"); } @Override @@ -859,6 +853,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo }).show(); } + @Override + public void onBatchLotSelectionRequest(List availableBatchLots, RunnableArgs onComplete) { + DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete) + .show(getSupportFragmentManager(), "tag"); + } + @Override public void onRowSaved() { FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); 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 cf516e7e..4357e998 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 @@ -395,6 +395,11 @@ public class SpedizioneViewModel { if (this.mListener != null) mListener.onLUPositionChangeRequest(onComplete); } + private void sendBatchLotSelectionRequest(List availableBatchLots, RunnableArgs onComplete) { + if (this.mListener != null) + mListener.onBatchLotSelectionRequest(availableBatchLots, onComplete); + } + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { //Se non c'è una UL aperta @@ -758,6 +763,69 @@ public class SpedizioneViewModel { public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, boolean canPartitaMagBeChanged) { + //TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta + + if (pickingObjectDTO.getTempPickData() != null && + pickingObjectDTO.getTempPickData().getSourceMtbColt() != null && + pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null) { + + + List availableBatchLot = Stream.of(pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr()) + .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && ( + x.getPartitaMag() == null || UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD()) + )) + .distinctBy(MtbColr::getPartitaMag) + .map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag()) + .toList(); + + if(availableBatchLot.size() > 1) { + this.sendOnLoadingStarted(); + + List tmp = new ArrayList<>(); + + if(Stream.of(availableBatchLot).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) { + tmp.addAll( + Stream.of(availableBatchLot) + .filter(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()) && UtilityDate.getDateInstance().before(x.getDataScadD())) + .sortBy(MtbPartitaMag::getDataScadD) + .toList()); + } + + if(Stream.of(availableBatchLot).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) { + tmp.addAll( + Stream.of(availableBatchLot) + .filter(x -> UtilityString.isNullOrEmpty(x.getDataScadS())) + .sortBy(MtbPartitaMag::getPartitaMag) + .toList()); + } + + this.sendBatchLotSelectionRequest(tmp, selected -> { + this.sendOnLoadingEnded(); + + if(selected != null) { + MtbColr scannedMtbColr = Stream.of(pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr()) + .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && + ((x.getPartitaMag() != null && selected.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(selected.getPartitaMag())) || + (x.getPartitaMag() == null && selected.getPartitaMag() == null))) + .toList() + .get(0); + + dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, scannedMtbColr, canPartitaMagBeChanged); + } + }); + + } else { + dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, null, canPartitaMagBeChanged); + } + + } else { + dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, null, canPartitaMagBeChanged); + } + + + } + + private void dispatchOrdineRowOnPostBatchLotSelection(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, MtbColr scannedMtbColr, boolean canPartitaMagBeChanged) { BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd(); BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd(); BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd(); @@ -791,21 +859,13 @@ public class SpedizioneViewModel { Date dataScad = null; - //TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta - MtbColr scannedMtbColr = pickingObjectDTO.getTempPickData() != null && - pickingObjectDTO.getTempPickData().getSourceMtbColt() != null && - pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null && - pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ? - pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null; - - if (refMtbColt == null && pickingObjectDTO.getMtbColts() != null && pickingObjectDTO.getMtbColts().size() == 1) { refMtbColt = pickingObjectDTO.getMtbColts().get(0); } MtbColr refMtbColr = null; - if (refMtbColt != null && refMtbColt.getMtbColr().size() > 0) { + if (scannedMtbColr != null && refMtbColt != null && refMtbColt.getMtbColr().size() > 0) { Optional optionalMtbColr = Stream.of(refMtbColt.getMtbColr()) .filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) && UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) && @@ -933,7 +993,6 @@ public class SpedizioneViewModel { }); } - public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) { PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() @@ -1460,7 +1519,7 @@ public class SpedizioneViewModel { MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone(); - if(mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) { + if (mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) { mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE); } else { mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT); @@ -1540,7 +1599,7 @@ public class SpedizioneViewModel { } else { distribuisciLU(mtbColts -> { - if(this.mIsNewLU) { + if (this.mIsNewLU) { this.sendLUPositionChangeRequest((shouldChangePosition, mtbDepoPosizione) -> { if (shouldChangePosition) { @@ -1702,7 +1761,7 @@ public class SpedizioneViewModel { this.mCurrentMtbColt = null; - if(mEnableQuantityReset) { + if (mEnableQuantityReset) { for (PickingObjectDTO pickingObjectDTO : mPickingList.getValue()) { List withdrawMtbColrList = pickingObjectDTO.getWithdrawMtbColrs(); @@ -1864,6 +1923,8 @@ public class SpedizioneViewModel { void onLUPositionChangeRequest(RunnableArgss onComplete); + + void onBatchLotSelectionRequest(List availableBatchLots, RunnableArgs onComplete); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/SimpleDividerItemDecoration.java b/app/src/main/java/it/integry/integrywmsnative/ui/SimpleDividerItemDecoration.java new file mode 100644 index 00000000..40d664b5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/SimpleDividerItemDecoration.java @@ -0,0 +1,165 @@ +package it.integry.integrywmsnative.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration { + public static final int HORIZONTAL = LinearLayout.HORIZONTAL; + public static final int VERTICAL = LinearLayout.VERTICAL; + + private static final String TAG = "DividerItem"; + private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; + + private Drawable mDivider; + + /** + * Current orientation. Either {@link #HORIZONTAL} or {@link #VERTICAL}. + */ + private int mOrientation; + + private final Rect mBounds = new Rect(); + + /** + * Creates a divider {@link RecyclerView.ItemDecoration} that can be used with a + * {@link LinearLayoutManager}. + * + * @param context Current context, it will be used to access resources. + * @param orientation Divider orientation. Should be {@link #HORIZONTAL} or {@link #VERTICAL}. + */ + public SimpleDividerItemDecoration(Context context, int orientation) { + final TypedArray a = context.obtainStyledAttributes(ATTRS); + mDivider = a.getDrawable(0); + if (mDivider == null) { + Log.w(TAG, "@android:attr/listDivider was not set in the theme used for this " + + "DividerItemDecoration. Please set that attribute all call setDrawable()"); + } + a.recycle(); + setOrientation(orientation); + } + + /** + * Sets the orientation for this divider. This should be called if + * {@link RecyclerView.LayoutManager} changes orientation. + * + * @param orientation {@link #HORIZONTAL} or {@link #VERTICAL} + */ + public void setOrientation(int orientation) { + if (orientation != HORIZONTAL && orientation != VERTICAL) { + throw new IllegalArgumentException( + "Invalid orientation. It should be either HORIZONTAL or VERTICAL"); + } + mOrientation = orientation; + } + + /** + * Sets the {@link Drawable} for this divider. + * + * @param drawable Drawable that should be used as a divider. + */ + public void setDrawable(@NonNull Drawable drawable) { + if (drawable == null) { + throw new IllegalArgumentException("Drawable cannot be null."); + } + mDivider = drawable; + } + + /** + * @return the {@link Drawable} for this divider. + */ + @Nullable + public Drawable getDrawable() { + return mDivider; + } + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + if (parent.getLayoutManager() == null || mDivider == null) { + return; + } + if (mOrientation == VERTICAL) { + drawVertical(c, parent); + } else { + drawHorizontal(c, parent); + } + } + + private void drawVertical(Canvas canvas, RecyclerView parent) { + canvas.save(); + final int left; + final int right; + //noinspection AndroidLintNewApi - NewApi lint fails to handle overrides. + if (parent.getClipToPadding()) { + left = parent.getPaddingLeft(); + right = parent.getWidth() - parent.getPaddingRight(); + canvas.clipRect(left, parent.getPaddingTop(), right, + parent.getHeight() - parent.getPaddingBottom()); + } else { + left = 0; + right = parent.getWidth(); + } + + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount - 1; i++) { + final View child = parent.getChildAt(i); + parent.getDecoratedBoundsWithMargins(child, mBounds); + final int bottom = mBounds.bottom + Math.round(child.getTranslationY()); + final int top = bottom - mDivider.getIntrinsicHeight(); + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(canvas); + } + canvas.restore(); + } + + private void drawHorizontal(Canvas canvas, RecyclerView parent) { + canvas.save(); + final int top; + final int bottom; + //noinspection AndroidLintNewApi - NewApi lint fails to handle overrides. + if (parent.getClipToPadding()) { + top = parent.getPaddingTop(); + bottom = parent.getHeight() - parent.getPaddingBottom(); + canvas.clipRect(parent.getPaddingLeft(), top, + parent.getWidth() - parent.getPaddingRight(), bottom); + } else { + top = 0; + bottom = parent.getHeight(); + } + + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount - 1; i++) { + final View child = parent.getChildAt(i); + parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); + final int right = mBounds.right + Math.round(child.getTranslationX()); + final int left = right - mDivider.getIntrinsicWidth(); + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(canvas); + } + canvas.restore(); + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, + RecyclerView.State state) { + if (mDivider == null) { + outRect.set(0, 0, 0, 0); + return; + } + if (mOrientation == VERTICAL) { + outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); + } else { + outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java index e110c041..78d73165 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page1/DialogBasketLU_Page1_ViewModel.java @@ -5,7 +5,6 @@ import android.view.View; import androidx.core.content.ContextCompat; import androidx.databinding.ViewDataBinding; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.List; @@ -14,9 +13,8 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.utility.UtilityDialog; -import it.integry.integrywmsnative.databinding.DialogBasketLuBinding; import it.integry.integrywmsnative.databinding.DialogBasketLuPage1Binding; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.DialogBasketLU_BaseViewModel; import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; @@ -82,7 +80,7 @@ public class DialogBasketLU_Page1_ViewModel extends DialogBasketLU_BaseViewModel mBinding.dialogBasketLuMainList.setHasFixedSize(true); mBinding.dialogBasketLuMainList.setLayoutManager(new LinearLayoutManager(mContext)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); mBinding.dialogBasketLuMainList.addItemDecoration(itemDecorator); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java index ccc4653e..1094644f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/basket_lu/pages/page2/DialogBasketLU_Page2_ViewModel.java @@ -5,7 +5,6 @@ import android.view.View; import androidx.core.content.ContextCompat; import androidx.databinding.ViewDataBinding; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.List; @@ -15,6 +14,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.databinding.DialogBasketLuPage2Binding; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.DialogBasketLU_BaseViewModel; import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; @@ -79,7 +79,7 @@ public class DialogBasketLU_Page2_ViewModel extends DialogBasketLU_BaseViewModel mBinding.dialogBasketLuMtbColrList.setHasFixedSize(true); mBinding.dialogBasketLuMtbColrList.setLayoutManager(new LinearLayoutManager(mContext)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); mBinding.dialogBasketLuMtbColrList.addItemDecoration(itemDecorator); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java deleted file mode 100644 index 785fe3e2..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java +++ /dev/null @@ -1,146 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs.camera_barcode_reader; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.DialogFragment; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.Result; -import com.kroegerama.kaiteki.bcode.BarcodeResultListener; -import com.orhanobut.logger.Logger; - -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -import it.integry.barcode_base_android_library.model.BarcodeScanDTO; -import it.integry.barcode_base_android_library.model.BarcodeType; -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.utility.UtilityDialog; -import it.integry.integrywmsnative.databinding.DialogCameraBarcodeReaderBinding; - -public class DialogCameraBarcodeReader extends DialogFragment implements BarcodeResultListener { - - private Context mContext; - - private DialogCameraBarcodeReaderBinding mBindings; - private final RunnableArgs onComplete; - - public static DialogCameraBarcodeReader newInstance(@NonNull Context context, @NonNull final RunnableArgs onComplete) { - return new DialogCameraBarcodeReader(context, onComplete); - } - - private DialogCameraBarcodeReader(@NonNull Context context, @NonNull final RunnableArgs onComplete){ - this.mContext = context; - this.onComplete = onComplete; - } - - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_camera_barcode_reader, container, false); - - - getDialog().setCanceledOnTouchOutside(false); - getDialog().setCancelable(false); - getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - this.initBarcodeView(); - - mBindings.buttonConfirm.setOnClickListener(v -> { - dismiss(); - }); - - return mBindings.getRoot(); - } - - @Override - public void onStart() { - super.onStart(); - - UtilityDialog.setTo95PercentWidth(mContext, this); - } - - @Override - public void onStop() { - super.onStop(); - this.mBindings.bcode.unbind(); - } - - private void initBarcodeView() { - List availableBarcodeFormats = new ArrayList<>(); - availableBarcodeFormats.add(BarcodeFormat.QR_CODE); - availableBarcodeFormats.add(BarcodeFormat.CODE_128); - availableBarcodeFormats.add(BarcodeFormat.UPC_E); - availableBarcodeFormats.add(BarcodeFormat.CODABAR); - availableBarcodeFormats.add(BarcodeFormat.EAN_8); - availableBarcodeFormats.add(BarcodeFormat.EAN_13); - availableBarcodeFormats.add(BarcodeFormat.ITF); - availableBarcodeFormats.add(BarcodeFormat.UPC_A); - - mBindings.bcode.setFormats(availableBarcodeFormats); - mBindings.bcode.setBarcodeInverted(false); - mBindings.bcode.setBarcodeResultListener(this); - mBindings.bcode.bindToLifecycle(this); - } - - @Override - public boolean onBarcodeResult(@NotNull Result result) { - - BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO() - .setByteValue(result.getRawBytes()) - .setStringValue(result.getText()); - - BarcodeType type = null; - - switch (result.getBarcodeFormat()) { - case CODE_128: - type = BarcodeType.CODE128; - break; - case CODE_39: - type = BarcodeType.CODE39; - break; - - case EAN_13: - type = BarcodeType.EAN13; - break; - case EAN_8: - type = BarcodeType.EAN8; - break; - - case UPC_A: - type = BarcodeType.UPCA; - break; - case UPC_E: - type = BarcodeType.UPCE; - break; - default: - Logger.e("Barcode type " + result.getBarcodeFormat().toString() + " was not mapped in DialogCameraBarcodeReader.java"); - type = null; - break; - } - - barcodeScanDTO.setType(type); - - this.dismiss(); - this.onComplete.run(barcodeScanDTO); - return true; - } - - @Override - public void onBarcodeScanCancelled() { - - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java index b1d82cea..493b36a3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java @@ -2,15 +2,14 @@ package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; import android.app.Dialog; import android.content.Context; -import androidx.databinding.DataBindingUtil; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; - import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.LinearLayoutManager; + import java.util.List; import it.integry.integrywmsnative.R; @@ -19,6 +18,7 @@ import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; public class DialogChooseArtFromListaArts { @@ -61,7 +61,7 @@ public class DialogChooseArtFromListaArts { binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(currentContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java index b9872432..22480a72 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/DialogChooseArtFromListaMtbColrView.java @@ -8,7 +8,6 @@ import android.view.LayoutInflater; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.List; @@ -19,6 +18,7 @@ import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; public class DialogChooseArtFromListaMtbColrView { @@ -61,7 +61,7 @@ public class DialogChooseArtFromListaMtbColrView { binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); - DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(currentContext, SimpleDividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotAdapter.java new file mode 100644 index 00000000..70f90566 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotAdapter.java @@ -0,0 +1,74 @@ +package it.integry.integrywmsnative.view.dialogs.choose_batch_lot; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbPartitaMag; +import it.integry.integrywmsnative.databinding.DialogChooseBatchLotItemModelBinding; + +public class DialogChooseBatchLotAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private final List mDataset; + private final IRecyclerItemClicked mOnItemClickListener; + + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseBatchLotItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseBatchLotItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbPartitaMag mtbPartitaMag) { + mViewDataBinding.setMtbPartitaMag(mtbPartitaMag); + mViewDataBinding.executePendingBindings(); + } + } + + public DialogChooseBatchLotAdapter(List myDataset, IRecyclerItemClicked onItemClickListener) { + mDataset = myDataset; + mOnItemClickListener = onItemClickListener; + } + + @Override + public DialogChooseBatchLotAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseBatchLotItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_batch_lot_item_model, parent, false); + return new DialogChooseBatchLotAdapter.ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseBatchLotAdapter.ViewHolder holder, int position) { + MtbPartitaMag item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(DialogChooseBatchLotAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotComponent.java new file mode 100644 index 00000000..8a055734 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.dialogs.choose_batch_lot; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogChooseBatchLotComponent { + + @Subcomponent.Factory + interface Factory { + DialogChooseBatchLotComponent create(); + } + + void inject(DialogChooseBatchLotView dialogChooseBatchLotView); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotModule.java new file mode 100644 index 00000000..3e118b75 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.choose_batch_lot; + +import dagger.Module; +import dagger.Provides; + +@Module +public class DialogChooseBatchLotModule { + + @Provides + DialogChooseBatchLotViewModel providesDialogChooseBatchLotViewModel() { + return new DialogChooseBatchLotViewModel(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotView.java new file mode 100644 index 00000000..2a7d8fb1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotView.java @@ -0,0 +1,111 @@ +package it.integry.integrywmsnative.view.dialogs.choose_batch_lot; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbPartitaMag; +import it.integry.integrywmsnative.databinding.DialogChooseBatchLotBinding; +import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; + +public class DialogChooseBatchLotView extends BaseDialogFragment { + + @Inject + DialogChooseBatchLotViewModel mViewModel; + + private List mAvailableBatchLot; + private RunnableArgs mOnItemSelected; + + private Context mContext; + private DialogChooseBatchLotBinding mBindings; + + private DialogChooseBatchLotAdapter mAdapter; + + private MtbPartitaMag mSelectedItem; + + public static DialogChooseBatchLotView newInstance(List availableBatchLot, RunnableArgs onItemSelected) { + return new DialogChooseBatchLotView(availableBatchLot, onItemSelected); + } + + private DialogChooseBatchLotView(List availableBatchLot, RunnableArgs onItemSelected) { + super(); + + this.mAvailableBatchLot = availableBatchLot; + this.mOnItemSelected = onItemSelected; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.mContext = getActivity(); + + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_batch_lot, container, false); + + MainApplication.appComponent + .dialogChooseBatchLotComponent() + .create() + .inject(this); + + mBindings.setView(this); + mBindings.setViewmodel(this.mViewModel); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + return mBindings.getRoot(); + } + + @Override + public void onStart() { + super.onStart(); + + this.initRecyclerView(); + } + + @Override + public void dismiss() { + super.dismiss(); + + if(mOnItemSelected != null) { + this.mOnItemSelected.run(mSelectedItem); + } + } + + private void initRecyclerView() { + mBindings.mainList.setNestedScrollingEnabled(false); + mBindings.mainList.setHasFixedSize(true); + mBindings.mainList.setLayoutManager(new LinearLayoutManager(mContext)); + + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mBindings.mainList.addItemDecoration(itemDecorator); + + mAdapter = new DialogChooseBatchLotAdapter(mAvailableBatchLot, onItemClicked); + mBindings.mainList.setAdapter(mAdapter); + } + + private final IRecyclerItemClicked onItemClicked = (item, position) -> { + mSelectedItem = item; + dismiss(); + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotViewModel.java new file mode 100644 index 00000000..9889a0c3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_batch_lot/DialogChooseBatchLotViewModel.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.view.dialogs.choose_batch_lot; + +public class DialogChooseBatchLotViewModel { +} diff --git a/app/src/main/res/layout/activity_spedizione.xml b/app/src/main/res/layout/activity_spedizione.xml index 3eefc481..ada4900c 100644 --- a/app/src/main/res/layout/activity_spedizione.xml +++ b/app/src/main/res/layout/activity_spedizione.xml @@ -79,23 +79,11 @@ android:tint="@color/colorPrimaryGray" android:visibility="@{BuildConfig.DEBUG ? View.VISIBLE : View.GONE}" /> - - - - - + - - + diff --git a/app/src/main/res/layout/dialog_camera_barcode_reader.xml b/app/src/main/res/layout/dialog_camera_barcode_reader.xml deleted file mode 100644 index 19c3372f..00000000 --- a/app/src/main/res/layout/dialog_camera_barcode_reader.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml index 7f739823..811e9ff8 100644 --- a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml @@ -12,7 +12,7 @@ type="it.integry.integrywmsnative.core.model.MtbAart"/> - - - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_batch_lot.xml b/app/src/main/res/layout/dialog_choose_batch_lot.xml new file mode 100644 index 00000000..0936ccfa --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_batch_lot.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_batch_lot_item_model.xml b/app/src/main/res/layout/dialog_choose_batch_lot_item_model.xml new file mode 100644 index 00000000..361ceb0c --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_batch_lot_item_model.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 36aed500..c3f6e08f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -275,6 +275,7 @@ Lav. terzi / Trasf. interni Produzione Linea di produzione + Seleziona un lotto Movimentazione interna Accettazione da ordine Picking da ordine diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 781a9637..fe0256d6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -280,6 +280,7 @@ Manufacture / Internal movement Production Production line + Select a batch lot Internal handling Production picking Manufacture picking diff --git a/barcode_base_android_library/build.gradle b/barcode_base_android_library/build.gradle index 36e6a5ac..6de1224c 100644 --- a/barcode_base_android_library/build.gradle +++ b/barcode_base_android_library/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { exclude group: 'com.android.support', module: 'support-annotations' diff --git a/barcode_kaiteki/build.gradle b/barcode_kaiteki/build.gradle index 36fe6c65..ebc5e92b 100644 --- a/barcode_kaiteki/build.gradle +++ b/barcode_kaiteki/build.gradle @@ -1,13 +1,12 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.1.1" } diff --git a/build.gradle b/build.gradle index 2d07a2ab..0a12c5ee 100644 --- a/build.gradle +++ b/build.gradle @@ -2,12 +2,12 @@ buildscript { ext { - kotlin_version = '1.4.31' + kotlin_version = '1.5.0' } repositories { - jcenter() google() + mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.2.0' @@ -16,7 +16,7 @@ buildscript { classpath 'com.google.firebase:perf-plugin:1.3.5' // Add the Firebase Crashlytics Gradle plugin. - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -25,9 +25,9 @@ buildscript { allprojects { repositories { - jcenter() google() maven { url 'https://jitpack.io' } + mavenCentral() } } diff --git a/dynamic_gramm/build.gradle b/dynamic_gramm/build.gradle index 88d9fdcc..c0e13cb7 100644 --- a/dynamic_gramm/build.gradle +++ b/dynamic_gramm/build.gradle @@ -21,8 +21,8 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation project(":app") - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - androidTestImplementation 'androidx.annotation:annotation:1.1.0' + androidTestImplementation 'androidx.annotation:annotation:1.2.0' } \ No newline at end of file diff --git a/honeywellscannerlibrary/build.gradle b/honeywellscannerlibrary/build.gradle index 4df057fa..2ed73626 100644 --- a/honeywellscannerlibrary/build.gradle +++ b/honeywellscannerlibrary/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation 'androidx.appcompat:appcompat:1.2.0' - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { exclude group: 'com.android.support', module: 'support-annotations' diff --git a/keyobardemulatorscannerlibrary/build.gradle b/keyobardemulatorscannerlibrary/build.gradle index 0462a7f5..7eee9b11 100644 --- a/keyobardemulatorscannerlibrary/build.gradle +++ b/keyobardemulatorscannerlibrary/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { exclude group: 'com.android.support', module: 'support-annotations' diff --git a/pointmobilescannerlibrary/build.gradle b/pointmobilescannerlibrary/build.gradle index 629e95ea..df257659 100644 --- a/pointmobilescannerlibrary/build.gradle +++ b/pointmobilescannerlibrary/build.gradle @@ -31,7 +31,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { exclude group: 'com.android.support', module: 'support-annotations' diff --git a/zebrascannerlibrary/build.gradle b/zebrascannerlibrary/build.gradle index 886038c7..5095fdf2 100644 --- a/zebrascannerlibrary/build.gradle +++ b/zebrascannerlibrary/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { exclude group: 'com.android.support', module: 'support-annotations' From ea7acf6053fe456e1e195cbde2b0127309e9c06f Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 13 May 2021 15:33:58 +0200 Subject: [PATCH 2/5] Refactoring DialogFiltroVenditaAvanzato --- .../OrdiniUscitaElencoFragment.java | 4 +- .../dialogs/DialogVenditaFiltroAvanzato.java | 838 ------------------ .../DialogVenditaFiltroAvanzatoView.java | 465 ++++++++++ .../DialogVenditaFiltroAvanzatoViewModel.java | 171 +++- .../layout/dialog_vendita_filtro_avanzato.xml | 24 +- 5 files changed, 639 insertions(+), 863 deletions(-) delete mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzato.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java 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 3dfdcced..efc62be9 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 @@ -43,7 +43,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaBinding; -import it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzato; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoViewModel; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoAdapter; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoListModel; @@ -348,7 +348,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF @Override public void onFilterClick() { - DialogVenditaFiltroAvanzato.make( + DialogVenditaFiltroAvanzatoView.make( getActivity(), this.mViewModel.getOrderList().getValue(), mAppliedFilterViewModel, diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzato.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzato.java deleted file mode 100644 index f20af8e3..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzato.java +++ /dev/null @@ -1,838 +0,0 @@ -package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs; - -import android.app.DatePickerDialog; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.WindowManager; -import android.widget.ArrayAdapter; -import android.widget.MultiAutoCompleteTextView; - -import androidx.appcompat.app.AlertDialog; -import androidx.databinding.DataBindingUtil; - -import com.annimon.stream.Stream; -import com.annimon.stream.function.Predicate; - -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.List; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.class_router.ClassRouter; -import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita; -import it.integry.integrywmsnative.core.di.BindableString; -import it.integry.integrywmsnative.core.expansion.RunnableArgss; -import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding; -import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; - - -public class DialogVenditaFiltroAvanzato { - - - private final AlertDialog currentAlert; - private final Context currentContext; - - private final RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone; - - private final List currentOrderList; - private List currentFilteredOrderList; - - private ArrayAdapter arrayAdapterCodMdep; - private ArrayAdapter arrayAdapterIdViaggio; - private ArrayAdapter arrayAdapterNumOrds; - private ArrayAdapter arrayAdapterCliente; - private ArrayAdapter arrayAdapterTermCons; - private ArrayAdapter arrayAdapterVettore; - private ArrayAdapter arrayAdapterAgente; - private ArrayAdapter arrayAdapterAutomezzo; - private ArrayAdapter arrayAdapterPaese; - - private Predicate currentDepositoPredicate = null; - private Predicate currentIdViaggioPredicate = null; - private Predicate currentNumOrdsPredicate = null; - private Predicate currentClientePredicate = null; - private Predicate currentDataConsPredicate = null; - private Predicate currentTermConsPredicate = null; - private Predicate currentVettorePredicate = null; - private Predicate currentAgentePredicate = null; - private Predicate currentAutomezzoPredicate = null; - private Predicate currentPaesePredicate = null; - - private boolean firstInit = true; - - public static AlertDialog make(final Context context, final List ordersList, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { - return new DialogVenditaFiltroAvanzato(context, ordersList, null, onDismiss).currentAlert; - } - - public static AlertDialog make(final Context context, - final List ordersList, - DialogVenditaFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { - return new DialogVenditaFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert; - } - - private DialogVenditaFiltroAvanzato(final Context context, final List ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { - currentContext = context; - currentOrderList = ordersList; - currentOnFilterDone = onDismiss; - - DialogVenditaFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogVenditaFiltroAvanzatoViewModel(); - - LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - - DialogVenditaFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false); - - final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) - .setView(binding.getRoot()); - - binding.setViewmodel(viewModel); - initViewModelNew(viewModel); - initView(binding, viewModel); - - currentAlert = alertDialog.create(); - currentAlert.setCanceledOnTouchOutside(false); - - currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - - - binding.positiveBtn.setOnClickListener(view -> { - currentAlert.dismiss(); - }); - - binding.neutralBtn.setOnClickListener(view -> { - resetAll(viewModel); - }); - - - currentAlert.setOnDismissListener(dialogInterface -> { - if(currentOnFilterDone != null) currentOnFilterDone.run(currentFilteredOrderList, viewModel); - }); - - refreshList(); - } - - private void resetAll(DialogVenditaFiltroAvanzatoViewModel viewModel) { - viewModel.deposito.set(null); - viewModel.idViaggio.set(null); - viewModel.numOrds.set(null); - viewModel.cliente.set(null); - viewModel.dataConsegna.set(null); - viewModel.terminiConsegna.set(null); - viewModel.vettore.set(null); - viewModel.automezzo.set(null); - viewModel.agente.set(null); - viewModel.paese.set(null); - } - - private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) { - IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA); - -// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> { -// bindings.filledExposedDropdownDataCons.callOnClick(); -// }); - - bindings.filledExposedDropdownDataCons.setOnClickListener(view -> { - Calendar c = UtilityDate.getCalendarInstance(); - - if(viewModel.dataConsegnaDate != null) { - c.setTime(viewModel.dataConsegnaDate); - } - - int mYear = c.get(Calendar.YEAR); - int mMonth = c.get(Calendar.MONTH); - int mDay = c.get(Calendar.DAY_OF_MONTH); - - DatePickerDialog datePickerDialog = new DatePickerDialog(currentContext, - (view2, year, month, day) -> { - - viewModel.dataConsegnaDate = new GregorianCalendar(year, month, day).getTime(); - viewModel.dataConsegna.set(UtilityDate.formatDate(viewModel.dataConsegnaDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); - - }, mYear, mMonth, mDay); - datePickerDialog.show(); - }); - - - arrayAdapterCodMdep = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(false)); - bindings.inputCodMdepNew.setVisibility(filtroOrdiniVendita.shoudShowCodMdepFilter() ? View.VISIBLE : View.GONE); - bindings.filledExposedDropdownCodMdep.setAdapter(arrayAdapterCodMdep); - - arrayAdapterIdViaggio = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(false)); - bindings.inputIdViaggio.setVisibility(filtroOrdiniVendita.shoudShowIdViaggioFilter() ? View.VISIBLE : View.GONE); - bindings.filledExposedDropdownIdViaggio.setAdapter(arrayAdapterIdViaggio); - - arrayAdapterAgente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterAgente.addAll(getAvailableAgente(false)); - bindings.inputAgente.setVisibility(filtroOrdiniVendita.shoudShowAgenteFilter() ? View.VISIBLE : View.GONE); - bindings.filledExposedDropdownAgente.setAdapter(arrayAdapterAgente); - - arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(false)); - bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds); - bindings.filledExposedDropdownNumOrds.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); - - arrayAdapterCliente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterCliente.addAll(getAvailableCliente(false)); - bindings.filledExposedDropdownCliente.setAdapter(arrayAdapterCliente); - - arrayAdapterTermCons = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterTermCons.addAll(getAvailableTermCons(false)); - bindings.filledExposedDropdownTermCons.setAdapter(arrayAdapterTermCons); - - arrayAdapterVettore = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterVettore.addAll(getAvailableVettori(false)); - bindings.filledExposedDropdownVettore.setAdapter(arrayAdapterVettore); - - arrayAdapterAutomezzo = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(false)); - bindings.filledExposedDropdownAutomezzo.setAdapter(arrayAdapterAutomezzo); - - arrayAdapterPaese = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); - arrayAdapterPaese.addAll(getAvailablePaesi(false)); - bindings.filledExposedDropdownPaese.setAdapter(arrayAdapterPaese); - - - viewModel.deposito.refresh(); - viewModel.idViaggio.refresh(); - viewModel.numOrds.refresh(); - viewModel.cliente.refresh(); - viewModel.terminiConsegna.refresh(); - viewModel.vettore.refresh(); - viewModel.automezzo.refresh(); - viewModel.dataConsegna.refresh(); - viewModel.agente.refresh(); - viewModel.paese.refresh(); - - - } - - private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel) { - BindableString.registerListener(viewModel.idViaggio, value -> { - if(UtilityString.isNullOrEmpty(value)) currentIdViaggioPredicate = null; - else { - String[] idViaggiSplitted = value.split("[,\\ ]"); - - try{ - List idViaggiInteger = Stream.of(idViaggiSplitted) - .filter(x -> !UtilityString.isNullOrEmpty(x)) - .map(Integer::parseInt).toList(); - - currentIdViaggioPredicate = o -> idViaggiInteger.contains(o.getIdViaggio()); - } catch (NumberFormatException ex) { - currentNumOrdsPredicate = null; - } - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.registerListener(viewModel.deposito, value -> { - if(UtilityString.isNullOrEmpty(value)) currentDepositoPredicate = null; - else { - currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().equalsIgnoreCase(value); - } - - refreshList(); - - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.registerListener(viewModel.numOrds, value -> { - if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null; - else { - String[] numOrdsSplitted = value.split("[,\\ ]"); - - try{ - List numOrdsInteger = Stream.of(numOrdsSplitted) - .filter(x -> !UtilityString.isNullOrEmpty(x)) - .map(Integer::parseInt).toList(); - - currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd()); - } catch (NumberFormatException ex) { - currentNumOrdsPredicate = null; - } - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.registerListener(viewModel.cliente, value -> { - if(UtilityString.isNullOrEmpty(value)) currentClientePredicate = null; - else { - currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(value.toLowerCase()); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.registerListener(viewModel.terminiConsegna, value -> { - if(UtilityString.isNullOrEmpty(value)) currentTermConsPredicate = null; - else { - currentTermConsPredicate = o -> !UtilityString.isNullOrEmpty(o.getTermCons()) && o.getTermCons().equalsIgnoreCase(value); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.registerListener(viewModel.vettore, value -> { - if(UtilityString.isNullOrEmpty(value)) currentVettorePredicate = null; - else { - currentVettorePredicate = o -> (o.getCodVvet() + " - " + o.getDescrizioneVettore()).equalsIgnoreCase(value); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.registerListener(viewModel.automezzo, value -> { - if(UtilityString.isNullOrEmpty(value)) currentAutomezzoPredicate = null; - else { - currentAutomezzoPredicate = o -> !UtilityString.isNullOrEmpty(o.getDescrizioneAuto()) && (o.getDescrizioneAuto().toLowerCase().contains(value) || o.getDescrizioneAuto().equalsIgnoreCase(value)); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.resetListeners(viewModel.dataConsegna); - BindableString.registerListener(viewModel.dataConsegna, value -> { - if(UtilityString.isNullOrEmpty(value)) currentDataConsPredicate = null; - else { - currentDataConsPredicate = o -> o.getDataConsD().equals(viewModel.dataConsegnaDate); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.resetListeners(viewModel.agente); - BindableString.registerListener(viewModel.agente, value -> { - if(UtilityString.isNullOrEmpty(value)) currentAgentePredicate = null; - else { - currentAgentePredicate = o -> !UtilityString.isNullOrEmpty(o.getNomeAgente()) && (o.getNomeAgente().toLowerCase().contains(value) || o.getNomeAgente().equalsIgnoreCase(value)); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterPaese.clear(); - arrayAdapterPaese.addAll(getAvailablePaesi(true)); - }); - - BindableString.resetListeners(viewModel.paese); - BindableString.registerListener(viewModel.paese, value -> { - if(UtilityString.isNullOrEmpty(value)) currentPaesePredicate = null; - else { - currentPaesePredicate = o -> !UtilityString.isNullOrEmpty(o.getCitta()) && (o.getCitta().toLowerCase().contains(value) || o.getCitta().equalsIgnoreCase(value)); - } - - refreshList(); - - arrayAdapterCodMdep.clear(); - arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); - arrayAdapterIdViaggio.clear(); - arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); - arrayAdapterNumOrds.clear(); - arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); - arrayAdapterCliente.clear(); - arrayAdapterCliente.addAll(getAvailableCliente(true)); - arrayAdapterTermCons.clear(); - arrayAdapterTermCons.addAll(getAvailableTermCons(true)); - arrayAdapterVettore.clear(); - arrayAdapterVettore.addAll(getAvailableVettori(true)); - arrayAdapterAutomezzo.clear(); - arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); - arrayAdapterAgente.clear(); - arrayAdapterAgente.addAll(getAvailableAgente(true)); - }); - - } - - - - private List getAvailableIdViaggio(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentAutomezzoPredicate == null && - currentVettorePredicate == null && - currentTermConsPredicate == null && - currentDepositoPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream - .of(currentFilteredOrderList) - .filter(x -> x.getIdViaggio() != null) - .sortBy(x -> -x.getIdViaggio()) - .map(x -> x.getIdViaggio() != null ? x.getIdViaggio().toString() : null) - .distinct() - .toList(); - } - - private List getAvailableAgente(boolean skipRecalc) { - if(currentDepositoPredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentAutomezzoPredicate == null && - currentVettorePredicate == null && - currentTermConsPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getNomeAgente).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailableCodMdeps(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentAutomezzoPredicate == null && - currentVettorePredicate == null && - currentTermConsPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getCodMdep).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailableCliente(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentDepositoPredicate == null && - currentDataConsPredicate == null && - currentAutomezzoPredicate == null && - currentVettorePredicate == null && - currentTermConsPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getRagSocOrd).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailableNumOrds(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentDepositoPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentAutomezzoPredicate == null && - currentVettorePredicate == null && - currentTermConsPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(x -> x.getNumOrd().toString()).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailableTermCons(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentAutomezzoPredicate == null && - currentVettorePredicate == null && - currentDepositoPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getTermCons).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailableVettori(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentTermConsPredicate == null && - currentAutomezzoPredicate == null && - currentDepositoPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate .test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).filter(x -> x.getCodVvet() != null).map(x -> x.getCodVvet() + " - " + x.getDescrizioneVettore()).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailableAutomezzi(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentTermConsPredicate == null && - currentVettorePredicate == null && - currentDepositoPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getDescrizioneAuto).distinct().withoutNulls().sorted().toList(); - } - - private List getAvailablePaesi(boolean skipRecalc) { - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentTermConsPredicate == null && - currentVettorePredicate == null && - currentDepositoPredicate == null && - currentAutomezzoPredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else if(!skipRecalc){ - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getCitta).withoutNulls().distinct().sorted().toList(); - } - - private void refreshList() { - - if(currentAgentePredicate == null && - currentIdViaggioPredicate == null && - currentNumOrdsPredicate == null && - currentClientePredicate == null && - currentDataConsPredicate == null && - currentTermConsPredicate == null && - currentVettorePredicate == null && - currentAutomezzoPredicate == null && - currentDepositoPredicate == null && - currentPaesePredicate == null - ){ - currentFilteredOrderList = currentOrderList; - } else { - Stream tmpStream = Stream.of(currentOrderList) - .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && - (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && - (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && - (currentPaesePredicate == null || (currentPaesePredicate.test(x))) - ); - - currentFilteredOrderList = tmpStream.toList(); - } - - - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java new file mode 100644 index 00000000..a063ee90 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java @@ -0,0 +1,465 @@ +package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs; + +import android.app.DatePickerDialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.widget.ArrayAdapter; +import android.widget.MultiAutoCompleteTextView; + +import androidx.appcompat.app.AlertDialog; +import androidx.databinding.DataBindingUtil; + +import com.annimon.stream.Stream; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.Objects; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.class_router.ClassRouter; +import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita; +import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; + + +public class DialogVenditaFiltroAvanzatoView { + + + private final AlertDialog currentAlert; + private final Context currentContext; + + private final RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone; + + + + public BindableString deposito = new BindableString(); + public BindableString idViaggio = new BindableString(); + public BindableString numOrds = new BindableString(); + public BindableString cliente = new BindableString(); + public BindableString dataConsegna = new BindableString(); + public BindableString terminiConsegna = new BindableString(); + public BindableString agente = new BindableString(); + public BindableString vettore = new BindableString(); + public BindableString automezzo = new BindableString(); + public BindableString paese = new BindableString(); + + public Date dataConsegnaDate; + + private ArrayAdapter arrayAdapterCodMdep; + private ArrayAdapter arrayAdapterIdViaggio; + private ArrayAdapter arrayAdapterNumOrds; + private ArrayAdapter arrayAdapterCliente; + private ArrayAdapter arrayAdapterTermCons; + private ArrayAdapter arrayAdapterVettore; + private ArrayAdapter arrayAdapterAgente; + private ArrayAdapter arrayAdapterAutomezzo; + private ArrayAdapter arrayAdapterPaese; + + private DialogVenditaFiltroAvanzatoViewModel viewModel; + + public static AlertDialog make(final Context context, final List ordersList, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert; + } + + public static AlertDialog make(final Context context, + final List ordersList, + DialogVenditaFiltroAvanzatoViewModel baseViewModel, + RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + return new DialogVenditaFiltroAvanzatoView(context, ordersList, baseViewModel, onDismiss).currentAlert; + } + + private DialogVenditaFiltroAvanzatoView(final Context context, final List ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + currentContext = context; + currentOnFilterDone = onDismiss; + + viewModel = baseViewModel != null ? baseViewModel : new DialogVenditaFiltroAvanzatoViewModel(); + viewModel.init(ordersList); + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + + DialogVenditaFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false); + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(binding.getRoot()); + + binding.setView(this); + binding.setViewmodel(viewModel); + initViewModelNew(viewModel); + initView(binding, viewModel); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + + + binding.positiveBtn.setOnClickListener(view -> { + currentAlert.dismiss(); + }); + + binding.neutralBtn.setOnClickListener(view -> { + resetAll(); + }); + + + currentAlert.setOnDismissListener(dialogInterface -> { + if(currentOnFilterDone != null) currentOnFilterDone.run(viewModel.getMutableFilteredOrderList().getValue(), viewModel); + }); + + } + + private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) { + IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA); + +// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> { +// bindings.filledExposedDropdownDataCons.callOnClick(); +// }); + + bindings.filledExposedDropdownDataCons.setOnClickListener(view -> { + Calendar c = UtilityDate.getCalendarInstance(); + + if(dataConsegnaDate != null) { + c.setTime(dataConsegnaDate); + } + + int mYear = c.get(Calendar.YEAR); + int mMonth = c.get(Calendar.MONTH); + int mDay = c.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog(currentContext, + (view2, year, month, day) -> { + + dataConsegnaDate = new GregorianCalendar(year, month, day).getTime(); + dataConsegna.set(UtilityDate.formatDate(dataConsegnaDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + + }, mYear, mMonth, mDay); + datePickerDialog.show(); + }); + + + arrayAdapterCodMdep = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterCodMdep.addAll(getAvailableCodMdeps(false)); + bindings.inputCodMdepNew.setVisibility(filtroOrdiniVendita.shoudShowCodMdepFilter() ? View.VISIBLE : View.GONE); + bindings.filledExposedDropdownCodMdep.setAdapter(arrayAdapterCodMdep); + + arrayAdapterIdViaggio = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(false)); + bindings.inputIdViaggio.setVisibility(filtroOrdiniVendita.shoudShowIdViaggioFilter() ? View.VISIBLE : View.GONE); + bindings.filledExposedDropdownIdViaggio.setAdapter(arrayAdapterIdViaggio); + + arrayAdapterAgente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterAgente.addAll(getAvailableAgente(false)); + bindings.inputAgente.setVisibility(filtroOrdiniVendita.shoudShowAgenteFilter() ? View.VISIBLE : View.GONE); + bindings.filledExposedDropdownAgente.setAdapter(arrayAdapterAgente); + + arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterNumOrds.addAll(getAvailableNumOrds(false)); + bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds); + bindings.filledExposedDropdownNumOrds.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); + + arrayAdapterCliente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterCliente.addAll(getAvailableCliente(false)); + bindings.filledExposedDropdownCliente.setAdapter(arrayAdapterCliente); + + arrayAdapterTermCons = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterTermCons.addAll(getAvailableTermCons(false)); + bindings.filledExposedDropdownTermCons.setAdapter(arrayAdapterTermCons); + + arrayAdapterVettore = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterVettore.addAll(getAvailableVettori(false)); + bindings.filledExposedDropdownVettore.setAdapter(arrayAdapterVettore); + + arrayAdapterAutomezzo = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(false)); + bindings.filledExposedDropdownAutomezzo.setAdapter(arrayAdapterAutomezzo); + + arrayAdapterPaese = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterPaese.addAll(getAvailablePaesi(false)); + bindings.filledExposedDropdownPaese.setAdapter(arrayAdapterPaese); + + + refreshAll(); + } + + private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel) { + viewModel.applyAllTests(); + + BindableString.registerListener(idViaggio, value -> { + viewModel.setIDViaggioFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.registerListener(deposito, value -> { + viewModel.setDepositoFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.registerListener(numOrds, value -> { + viewModel.setNumOrdFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.registerListener(cliente, value -> { + viewModel.setClienteFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.registerListener(terminiConsegna, value -> { + viewModel.setTerminiConsegnaFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.registerListener(vettore, value -> { + viewModel.setVettoreFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.registerListener(automezzo, value -> { + viewModel.setAutomezzoFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + }); + + BindableString.resetListeners(dataConsegna); + BindableString.registerListener(dataConsegna, value -> { + viewModel.setDataConsegnaFilter(dataConsegnaDate); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + }); + + BindableString.resetListeners(agente); + BindableString.registerListener(agente, value -> { + viewModel.setAgenteFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + }); + + BindableString.resetListeners(paese); + BindableString.registerListener(paese, value -> { + viewModel.setPaeseFilter(value); + viewModel.applyAllTests(); + + refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true)); + refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true)); + refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true)); + refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true)); + refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true)); + refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true)); + refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true)); + refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true)); + }); + + } + + + private void refreshArrayAdapter(ArrayAdapter arrayAdapter, List inputList) { + arrayAdapter.clear(); + arrayAdapter.addAll(inputList); + arrayAdapter.notifyDataSetChanged(); + } + + + private List getAvailableIdViaggio(boolean skipRecalc) { + return Stream + .of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .filter(x -> x.getIdViaggio() != null) + .sortBy(x -> -x.getIdViaggio()) + .map(x -> x.getIdViaggio() != null ? x.getIdViaggio().toString() : null) + .distinct() + .toList(); + } + + private List getAvailableAgente(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(OrdiniUscitaElencoDTO::getNomeAgente) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailableCodMdeps(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(OrdiniUscitaElencoDTO::getCodMdep) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailableCliente(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(OrdiniUscitaElencoDTO::getRagSocOrd) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailableNumOrds(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(x -> x.getNumOrd().toString()) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailableTermCons(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(OrdiniUscitaElencoDTO::getTermCons) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailableVettori(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .filter(x -> x.getCodVvet() != null) + .map(x -> x.getCodVvet() + " - " + x.getDescrizioneVettore()) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailableAutomezzi(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(OrdiniUscitaElencoDTO::getDescrizioneAuto) + .distinct() + .withoutNulls() + .sorted() + .toList(); + } + + private List getAvailablePaesi(boolean skipRecalc) { + return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue())) + .map(OrdiniUscitaElencoDTO::getCitta) + .withoutNulls() + .distinct() + .sorted() + .toList(); + } + + + public void refreshAll() { + deposito.refresh(); + idViaggio.refresh(); + numOrds.refresh(); + cliente.refresh(); + terminiConsegna.refresh(); + vettore.refresh(); + automezzo.refresh(); + dataConsegna.refresh(); + agente.refresh(); + paese.refresh(); + } + + + public void resetAll() { + deposito.set(null); + idViaggio.set(null); + numOrds.set(null); + cliente.set(null); + dataConsegna.set(null); + terminiConsegna.set(null); + vettore.set(null); + automezzo.set(null); + agente.set(null); + paese.set(null); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java index c2a7b8fb..3efba5fb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoViewModel.java @@ -1,22 +1,167 @@ package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs; -import java.util.Date; +import androidx.lifecycle.MutableLiveData; -import it.integry.integrywmsnative.core.di.BindableString; +import com.annimon.stream.Stream; +import com.annimon.stream.function.Predicate; + +import java.util.Date; +import java.util.List; + +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; public class DialogVenditaFiltroAvanzatoViewModel { - public BindableString deposito = new BindableString(); - public BindableString idViaggio = new BindableString(); - public BindableString numOrds = new BindableString(); - public BindableString cliente = new BindableString(); - public BindableString dataConsegna = new BindableString(); - public BindableString terminiConsegna = new BindableString(); - public BindableString agente = new BindableString(); - public BindableString vettore = new BindableString(); - public BindableString automezzo = new BindableString(); - public BindableString paese = new BindableString(); + private Predicate currentDepositoPredicate = null; + private Predicate currentIdViaggioPredicate = null; + private Predicate currentNumOrdsPredicate = null; + private Predicate currentClientePredicate = null; + private Predicate currentDataConsPredicate = null; + private Predicate currentTermConsPredicate = null; + private Predicate currentVettorePredicate = null; + private Predicate currentAgentePredicate = null; + private Predicate currentAutomezzoPredicate = null; + private Predicate currentPaesePredicate = null; - public Date dataConsegnaDate; + + private List initialOrderList; + private MutableLiveData> currentFilteredOrderList = new MutableLiveData<>(); + + public void init(List initialList) { + this.initialOrderList = initialList; + this.currentFilteredOrderList.setValue(this.initialOrderList); + } + + public MutableLiveData> getMutableFilteredOrderList() { + return this.currentFilteredOrderList; + } + + public void setIDViaggioFilter(String idViaggio) { + if(UtilityString.isNullOrEmpty(idViaggio)) currentIdViaggioPredicate = null; + else { + String[] idViaggiSplitted = idViaggio.split("[,\\ ]"); + + try{ + List idViaggiInteger = Stream.of(idViaggiSplitted) + .filter(x -> !UtilityString.isNullOrEmpty(x)) + .map(Integer::parseInt).toList(); + + currentIdViaggioPredicate = o -> idViaggiInteger.contains(o.getIdViaggio()); + } catch (NumberFormatException ex) { + currentIdViaggioPredicate = null; + } + } + } + + public void setDepositoFilter(String deposito) { + if(UtilityString.isNullOrEmpty(deposito)) currentDepositoPredicate = null; + else { + currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().equalsIgnoreCase(deposito); + } + } + + public void setNumOrdFilter(String numOrds) { + if(UtilityString.isNullOrEmpty(numOrds)) currentNumOrdsPredicate = null; + else { + String[] numOrdsSplitted = numOrds.split("[,\\ ]"); + + try{ + List numOrdsInteger = Stream.of(numOrdsSplitted) + .filter(x -> !UtilityString.isNullOrEmpty(x)) + .map(Integer::parseInt).toList(); + + currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd()); + } catch (NumberFormatException ex) { + currentNumOrdsPredicate = null; + } + } + } + + public void setClienteFilter(String cliente) { + if(UtilityString.isNullOrEmpty(cliente)) currentClientePredicate = null; + else { + currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(cliente.toLowerCase()); + } + } + + public void setTerminiConsegnaFilter(String terminiConsegna) { + if(UtilityString.isNullOrEmpty(terminiConsegna)) currentTermConsPredicate = null; + else { + currentTermConsPredicate = o -> !UtilityString.isNullOrEmpty(o.getTermCons()) && o.getTermCons().equalsIgnoreCase(terminiConsegna); + } + } + + public void setVettoreFilter(String vettore) { + if(UtilityString.isNullOrEmpty(vettore)) currentVettorePredicate = null; + else { + currentVettorePredicate = o -> (o.getCodVvet() + " - " + o.getDescrizioneVettore()).equalsIgnoreCase(vettore); + } + } + + public void setAutomezzoFilter(String automezzo) { + if(UtilityString.isNullOrEmpty(automezzo)) currentAutomezzoPredicate = null; + else { + currentAutomezzoPredicate = o -> !UtilityString.isNullOrEmpty(o.getDescrizioneAuto()) && (o.getDescrizioneAuto().toLowerCase().contains(automezzo) || o.getDescrizioneAuto().equalsIgnoreCase(automezzo)); + } + } + + public void setDataConsegnaFilter(Date dataConsegna) { + if(dataConsegna == null) currentDataConsPredicate = null; + else { + currentDataConsPredicate = o -> o.getDataConsD().equals(dataConsegna); + } + } + + public void setAgenteFilter(String agente) { + if(UtilityString.isNullOrEmpty(agente)) currentAgentePredicate = null; + else { + currentAgentePredicate = o -> !UtilityString.isNullOrEmpty(o.getNomeAgente()) && (o.getNomeAgente().toLowerCase().contains(agente) || o.getNomeAgente().equalsIgnoreCase(agente)); + } + } + + public void setPaeseFilter(String paese) { + if(UtilityString.isNullOrEmpty(paese)) currentPaesePredicate = null; + else { + currentPaesePredicate = o -> !UtilityString.isNullOrEmpty(o.getCitta()) && (o.getCitta().toLowerCase().contains(paese) || o.getCitta().equalsIgnoreCase(paese)); + } + } + + public void applyAllTests() { + + List returnList = null; + + if (currentNumOrdsPredicate == null && + currentClientePredicate == null && + currentDataConsPredicate == null && + currentTermConsPredicate == null && + currentVettorePredicate == null && + currentAutomezzoPredicate == null && + currentDepositoPredicate == null && + currentIdViaggioPredicate == null && + currentAgentePredicate == null && + currentPaesePredicate == null + ) { + returnList = this.initialOrderList; + } else { + Stream tmpStream = Stream.of(this.initialOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) && + (currentPaesePredicate == null || (currentPaesePredicate.test(x))) + ); + + returnList = tmpStream.toList(); + } + + this.currentFilteredOrderList.setValue(returnList); + } } diff --git a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml index 933e19ee..ea826238 100644 --- a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml @@ -9,6 +9,10 @@ name="viewmodel" type="it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoViewModel" /> + + + app:binding="@{view.deposito}" /> @@ -79,7 +83,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_num_ords" - app:binding="@{viewmodel.idViaggio}" /> + app:binding="@{view.idViaggio}" /> @@ -101,7 +105,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_cliente" - app:binding="@{viewmodel.numOrds}"/> + app:binding="@{view.numOrds}"/> @@ -122,7 +126,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_vettore" - app:binding="@{viewmodel.cliente}"/> + app:binding="@{view.cliente}"/> @@ -143,7 +147,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_automezzo" - app:binding="@{viewmodel.vettore}"/> + app:binding="@{view.vettore}"/> @@ -164,7 +168,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_paese" - app:binding="@{viewmodel.automezzo}"/> + app:binding="@{view.automezzo}"/> @@ -186,7 +190,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_agente" - app:binding="@{viewmodel.paese}"/> + app:binding="@{view.paese}"/> @@ -207,7 +211,7 @@ android:ellipsize="end" android:imeOptions="actionNext" android:nextFocusForward="@id/filled_exposed_dropdown_term_cons" - app:binding="@{viewmodel.agente}"/> + app:binding="@{view.agente}"/> @@ -226,7 +230,7 @@ android:inputType="textNoSuggestions" android:focusable="false" android:singleLine="true" - app:binding="@{viewmodel.dataConsegna}"/> + app:binding="@{view.dataConsegna}"/> @@ -246,7 +250,7 @@ android:singleLine="true" android:ellipsize="end" android:imeOptions="actionDone" - app:binding="@{viewmodel.terminiConsegna}"/> + app:binding="@{view.terminiConsegna}"/> From 8ea38fd31c3d410075d44df40da4680df9b704a4 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 13 May 2021 17:39:29 +0200 Subject: [PATCH 3/5] Sistemato ricaricamento ordini di uscita senza perdere l'istanza del filtro applicato. --- .../OrdiniUscitaElencoFragment.java | 42 +++++++++++-------- .../DialogVenditaFiltroAvanzatoView.java | 12 +++--- .../gest/spedizione/SpedizioneViewModel.java | 5 ++- 3 files changed, 33 insertions(+), 26 deletions(-) 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 efc62be9..94a5867a 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 @@ -125,9 +125,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.initRecyclerView(); this.initBarcodeReader(); - String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol); - return mBindings.getRoot(); } @@ -135,9 +132,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF public void onStart() { super.onStart(); - if(mAppliedFilterViewModel != null) { - - } + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol); } @Override @@ -155,13 +151,13 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF boolean canSelectMultipleOrdini = SettingsManager.iDB().isFlagSpedizioneCanSelectMultipleOrders(); boolean canSelectMultipleClienti = SettingsManager.iDB().isFlagMultiClienteOrdV(); - this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList); + this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), v -> this.refreshList(null)); OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter = new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData) .setEmptyView(this.mBindings.ordiniVenditaEmptyView) .setOnGroupItemClicked(x -> { - if(!canSelectMultipleClienti) { + if (!canSelectMultipleClienti) { Stream.of(mOrdiniInevasiMutableData) .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get()) .forEach(y -> y.getSelectedObservable().set(false)); @@ -176,7 +172,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF .forEach(y -> y.getSelectedObservable().set(!allSelected)); }) .setOnItemChecked(x -> { - if(!canSelectMultipleClienti && x.getSelectedObservable().get()) { + if (!canSelectMultipleClienti && x.getSelectedObservable().get()) { Stream.of(mOrdiniInevasiMutableData) .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get()) .forEach(y -> y.getSelectedObservable().set(false)); @@ -189,7 +185,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.mBindings.venditaMainList.setAdapter(ordiniUscitaElencoAdapter); this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity())); - if(mToolbar != null) + if (mToolbar != null) mToolbar.setRecyclerView(this.mBindings.venditaMainList); } @@ -211,9 +207,21 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF }); }; - private void refreshList(List orderList) { + private void refreshList(List filteredList) { + List tmpList = null; + + if(filteredList != null) { + tmpList = filteredList; + } else if (mAppliedFilterViewModel != null) { + mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); + mAppliedFilterViewModel.applyAllTests(); + tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); + } else { + tmpList = mViewModel.getOrderList().getValue(); + } + this.mOrdiniInevasiMutableData.clear(); - this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(orderList)); + this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList)); } private List convertDataModelToListModel(List dataList) { @@ -353,14 +361,12 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.mViewModel.getOrderList().getValue(), mAppliedFilterViewModel, - (filteredOrderList, filter) -> { - mAppliedFilterViewModel = filter; + filter -> { - if(filteredOrderList != null){ - refreshList(filteredOrderList); - } + mAppliedFilterViewModel = filter; + refreshList(null); - }).show(); + }).show(); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java index a063ee90..0c34d915 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/dialogs/DialogVenditaFiltroAvanzatoView.java @@ -25,7 +25,7 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.class_router.ClassRouter; import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita; import it.integry.integrywmsnative.core.di.BindableString; -import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; @@ -37,7 +37,7 @@ public class DialogVenditaFiltroAvanzatoView { private final AlertDialog currentAlert; private final Context currentContext; - private final RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone; + private final RunnableArgs currentOnFilterDone; @@ -66,18 +66,18 @@ public class DialogVenditaFiltroAvanzatoView { private DialogVenditaFiltroAvanzatoViewModel viewModel; - public static AlertDialog make(final Context context, final List ordersList, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + public static AlertDialog make(final Context context, final List ordersList, RunnableArgs onDismiss) { return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert; } public static AlertDialog make(final Context context, final List ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, - RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + RunnableArgs onDismiss) { return new DialogVenditaFiltroAvanzatoView(context, ordersList, baseViewModel, onDismiss).currentAlert; } - private DialogVenditaFiltroAvanzatoView(final Context context, final List ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + private DialogVenditaFiltroAvanzatoView(final Context context, final List ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgs onDismiss) { currentContext = context; currentOnFilterDone = onDismiss; @@ -114,7 +114,7 @@ public class DialogVenditaFiltroAvanzatoView { currentAlert.setOnDismissListener(dialogInterface -> { - if(currentOnFilterDone != null) currentOnFilterDone.run(viewModel.getMutableFilteredOrderList().getValue(), viewModel); + if(currentOnFilterDone != null) currentOnFilterDone.run(viewModel); }); } 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 4357e998..ae84ba9e 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 @@ -769,8 +769,9 @@ public class SpedizioneViewModel { pickingObjectDTO.getTempPickData().getSourceMtbColt() != null && pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null) { + List scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr(); - List availableBatchLot = Stream.of(pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr()) + List availableBatchLot = Stream.of(scannedMtbColrs) .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && ( x.getPartitaMag() == null || UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD()) )) @@ -815,7 +816,7 @@ public class SpedizioneViewModel { }); } else { - dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, null, canPartitaMagBeChanged); + dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, scannedMtbColrs.get(0), canPartitaMagBeChanged); } } else { From e22f7cf5c71d70be763ca0eabf77b85c78b63148 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 13 May 2021 17:45:52 +0200 Subject: [PATCH 4/5] Riabilitato filtro paese --- app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml index ea826238..ee289fa4 100644 --- a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml @@ -178,8 +178,7 @@ style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/city" - android:visibility="gone"> + android:hint="@string/city"> Date: Thu, 13 May 2021 17:47:47 +0200 Subject: [PATCH 5/5] -> v1.16.34 (216) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c2cd13e9..34741b9d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 215 - def appVersionName = '1.16.33' + def appVersionCode = 216 + def appVersionName = '1.16.34' signingConfigs { release {