Finish v1.16.34(216)

This commit is contained in:
Giuseppe Scorrano 2021-05-13 17:47:54 +02:00
commit f4ff33a942
46 changed files with 1383 additions and 1186 deletions

View File

@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 215 def appVersionCode = 216
def appVersionName = '1.16.33' def appVersionName = '1.16.34'
signingConfigs { signingConfigs {
release { release {
@ -24,12 +24,12 @@ android {
} }
} }
compileSdkVersion 29 compileSdkVersion 30
defaultConfig { defaultConfig {
applicationId "it.integry.integrywmsnative" applicationId "it.integry.integrywmsnative"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 30
versionCode appVersionCode versionCode appVersionCode
versionName appVersionName versionName appVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@ -104,15 +104,15 @@ dependencies {
implementation 'com.google.android.material:material:1.3.0' implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.cardview:cardview:1.0.0' 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 '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:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.annimon:stream:1.2.1' implementation 'com.annimon:stream:1.2.2'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' 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' implementation 'org.apache.commons:commons-text:1.9'
//MVVM //MVVM
@ -127,16 +127,16 @@ dependencies {
implementation 'com.github.clans:fab:1.6.4' implementation 'com.github.clans:fab:1.6.4'
//CUSTOM VIEWS //CUSTOM VIEWS
implementation 'com.github.NaimishTrivedi:FBToast:1.0' 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.github.frankiesardo:linearlistview:1.0.1@aar'
implementation 'com.fede987:status-bar-alert:1.0.1' implementation 'com.github.fede87:StatusBarAlert:1.0.1'
implementation 'com.fxn769:stash:1.2' implementation 'com.github.akshay2211:Stash:master'
testImplementation 'junit:junit:4.13.1' testImplementation 'junit:junit:4.13.2'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3' implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'com.github.pedromassango:doubleClick:3.0' implementation 'com.github.pedromassango:doubleClick:3.0'
//SQLite ROOM //SQLite ROOM
def room_version = "2.2.6" def room_version = "2.3.0"
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version"
@ -150,11 +150,12 @@ dependencies {
implementation project(':barcode_base_android_library') implementation project(':barcode_base_android_library')
implementation project(':honeywellscannerlibrary') implementation project(':honeywellscannerlibrary')
implementation project(':keyobardemulatorscannerlibrary') implementation project(':keyobardemulatorscannerlibrary')
implementation project(':barcode_kaiteki') androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1'
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' androidTestImplementation 'org.testng:testng:7.4.0'
androidTestImplementation 'org.testng:testng:7.3.0'
} }
repositories { repositories {
mavenCentral() mavenCentral()
google() google()
maven { url 'https://jitpack.io' }
} }

View File

@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.CAMERA" />
<application <application
android:name=".MainApplication" android:name=".MainApplication"

View File

@ -33,6 +33,8 @@ import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviForn
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
@ -62,6 +64,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
ProdFabbisognoLineeProdModule.class, ProdFabbisognoLineeProdModule.class,
VersamentoMerceModule.class, VersamentoMerceModule.class,
DialogAskMagazzinoProssimitaModule.class, DialogAskMagazzinoProssimitaModule.class,
DialogChooseBatchLotModule.class,
DialogRowInfoProdFabbisognoLineeProdModule.class}) DialogRowInfoProdFabbisognoLineeProdModule.class})
public interface MainApplicationComponent { public interface MainApplicationComponent {
@ -82,6 +85,7 @@ public interface MainApplicationComponent {
ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent(); ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent();
VersamentoMerceComponent.Factory versamentoMerceComponent(); VersamentoMerceComponent.Factory versamentoMerceComponent();
DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent(); DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent();
DialogChooseBatchLotComponent.Factory dialogChooseBatchLotComponent();
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent(); DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();

View File

@ -8,7 +8,6 @@ import androidx.room.Update;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper; import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper;
@ -17,7 +16,7 @@ public interface GrigliaDao {
@Query("SELECT * from griglie") @Query("SELECT * from griglie")
List<Griglia> getAll(); List<Griglia> 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); GrigliaWrapper findByCodAlis(String codAlis);
@Insert @Insert

View File

@ -11,6 +11,7 @@ import androidx.room.PrimaryKey;
@Index(value = "cod_alis", unique = true) @Index(value = "cod_alis", unique = true)
} }
) )
public class Griglia { public class Griglia {
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "griglia_id") @ColumnInfo(name = "griglia_id")

View File

@ -40,12 +40,14 @@ public class BaseActivity extends AppCompatActivity {
protected void openProgress() { protected void openProgress() {
BarcodeManager.disable();
if (this.mCurrentProgress == null) { if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this); this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this);
} }
} }
protected void closeProgress() { protected void closeProgress() {
BarcodeManager.enable();
if (mCurrentProgress != null) { if (mCurrentProgress != null) {
mCurrentProgress.dismiss(); mCurrentProgress.dismiss();
mCurrentProgress = null; mCurrentProgress = null;

View File

@ -23,7 +23,7 @@ public class UtilityString {
} }
public static String empty2null(String stringToCheck) { 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){ public static String capitalizeWords(String capString){

View File

@ -7,7 +7,6 @@ import android.text.SpannableString;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import it.integry.integrywmsnative.R; 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.core.utility.UtilityProgress;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter; import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import static android.app.Activity.RESULT_OK; import static android.app.Activity.RESULT_OK;
@ -66,7 +66,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
mContext.bindings.contenutoBancaleMainList.setLayoutManager(new LinearLayoutManager(mContext)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mContext.bindings.contenutoBancaleMainList.addItemDecoration(itemDecorator); mContext.bindings.contenutoBancaleMainList.addItemDecoration(itemDecorator);

View File

@ -2,22 +2,22 @@ package it.integry.integrywmsnative.gest.lista_bancali.viewmodel;
import android.app.Dialog; import android.app.Dialog;
import androidx.databinding.ObservableArrayList;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; 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.interfaces.IRecyclerItemClicked;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; 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.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.lista_bancali.core.MainListListaColliAdapter; import it.integry.integrywmsnative.gest.lista_bancali.core.MainListListaColliAdapter;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> { public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
@ -42,7 +42,7 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
mContext.bindings.listaColliMainList.setHasFixedSize(true); mContext.bindings.listaColliMainList.setHasFixedSize(true);
mContext.bindings.listaColliMainList.setLayoutManager(new LinearLayoutManager(mContext)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mContext.bindings.listaColliMainList.addItemDecoration(itemDecorator); mContext.bindings.listaColliMainList.addItemDecoration(itemDecorator);

View File

@ -43,7 +43,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaBinding; 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.dialogs.DialogVenditaFiltroAvanzatoViewModel;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoAdapter; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoAdapter;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoListModel; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoListModel;
@ -125,9 +125,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
this.initRecyclerView(); this.initRecyclerView();
this.initBarcodeReader(); this.initBarcodeReader();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
return mBindings.getRoot(); return mBindings.getRoot();
} }
@ -135,9 +132,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
if(mAppliedFilterViewModel != null) { String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
}
} }
@Override @Override
@ -155,13 +151,13 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
boolean canSelectMultipleOrdini = SettingsManager.iDB().isFlagSpedizioneCanSelectMultipleOrders(); boolean canSelectMultipleOrdini = SettingsManager.iDB().isFlagSpedizioneCanSelectMultipleOrders();
boolean canSelectMultipleClienti = SettingsManager.iDB().isFlagMultiClienteOrdV(); boolean canSelectMultipleClienti = SettingsManager.iDB().isFlagMultiClienteOrdV();
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList); this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), v -> this.refreshList(null));
OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter = OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter =
new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData) new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData)
.setEmptyView(this.mBindings.ordiniVenditaEmptyView) .setEmptyView(this.mBindings.ordiniVenditaEmptyView)
.setOnGroupItemClicked(x -> { .setOnGroupItemClicked(x -> {
if(!canSelectMultipleClienti) { if (!canSelectMultipleClienti) {
Stream.of(mOrdiniInevasiMutableData) Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get()) .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false)); .forEach(y -> y.getSelectedObservable().set(false));
@ -176,7 +172,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.forEach(y -> y.getSelectedObservable().set(!allSelected)); .forEach(y -> y.getSelectedObservable().set(!allSelected));
}) })
.setOnItemChecked(x -> { .setOnItemChecked(x -> {
if(!canSelectMultipleClienti && x.getSelectedObservable().get()) { if (!canSelectMultipleClienti && x.getSelectedObservable().get()) {
Stream.of(mOrdiniInevasiMutableData) Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get()) .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false)); .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.setAdapter(ordiniUscitaElencoAdapter);
this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity())); this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
if(mToolbar != null) if (mToolbar != null)
mToolbar.setRecyclerView(this.mBindings.venditaMainList); mToolbar.setRecyclerView(this.mBindings.venditaMainList);
} }
@ -211,9 +207,21 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
}); });
}; };
private void refreshList(List<OrdiniUscitaElencoDTO> orderList) { private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) {
List<OrdiniUscitaElencoDTO> 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.clear();
this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(orderList)); this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList));
} }
private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) { private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) {
@ -348,17 +356,15 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
@Override @Override
public void onFilterClick() { public void onFilterClick() {
DialogVenditaFiltroAvanzato.make( DialogVenditaFiltroAvanzatoView.make(
getActivity(), getActivity(),
this.mViewModel.getOrderList().getValue(), this.mViewModel.getOrderList().getValue(),
mAppliedFilterViewModel, mAppliedFilterViewModel,
(filteredOrderList, filter) -> { filter -> {
mAppliedFilterViewModel = filter;
if(filteredOrderList != null){ mAppliedFilterViewModel = filter;
refreshList(filteredOrderList); refreshList(null);
}
}).show(); }).show();
} }

View File

@ -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<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone;
private final List<OrdiniUscitaElencoDTO> currentOrderList;
private List<OrdiniUscitaElencoDTO> currentFilteredOrderList;
private ArrayAdapter<String> arrayAdapterCodMdep;
private ArrayAdapter<String> arrayAdapterIdViaggio;
private ArrayAdapter<String> arrayAdapterNumOrds;
private ArrayAdapter<String> arrayAdapterCliente;
private ArrayAdapter<String> arrayAdapterTermCons;
private ArrayAdapter<String> arrayAdapterVettore;
private ArrayAdapter<String> arrayAdapterAgente;
private ArrayAdapter<String> arrayAdapterAutomezzo;
private ArrayAdapter<String> arrayAdapterPaese;
private Predicate<OrdiniUscitaElencoDTO> currentDepositoPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentIdViaggioPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentNumOrdsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentClientePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentDataConsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentTermConsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentVettorePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentAgentePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentAutomezzoPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentPaesePredicate = null;
private boolean firstInit = true;
public static AlertDialog make(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, RunnableArgss<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, null, onDismiss).currentAlert;
}
public static AlertDialog make(final Context context,
final List<OrdiniUscitaElencoDTO> ordersList,
DialogVenditaFiltroAvanzatoViewModel baseViewModel,
RunnableArgss<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert;
}
private DialogVenditaFiltroAvanzato(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss<List<OrdiniUscitaElencoDTO>, 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<Integer> 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<Integer> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<String> 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<OrdiniUscitaElencoDTO> 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<OrdiniUscitaElencoDTO> 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();
}
}
}

View File

@ -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.RunnableArgs;
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 RunnableArgs<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<String> arrayAdapterCodMdep;
private ArrayAdapter<String> arrayAdapterIdViaggio;
private ArrayAdapter<String> arrayAdapterNumOrds;
private ArrayAdapter<String> arrayAdapterCliente;
private ArrayAdapter<String> arrayAdapterTermCons;
private ArrayAdapter<String> arrayAdapterVettore;
private ArrayAdapter<String> arrayAdapterAgente;
private ArrayAdapter<String> arrayAdapterAutomezzo;
private ArrayAdapter<String> arrayAdapterPaese;
private DialogVenditaFiltroAvanzatoViewModel viewModel;
public static AlertDialog make(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert;
}
public static AlertDialog make(final Context context,
final List<OrdiniUscitaElencoDTO> ordersList,
DialogVenditaFiltroAvanzatoViewModel baseViewModel,
RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzatoView(context, ordersList, baseViewModel, onDismiss).currentAlert;
}
private DialogVenditaFiltroAvanzatoView(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgs<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);
});
}
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<String> arrayAdapter, List<String> inputList) {
arrayAdapter.clear();
arrayAdapter.addAll(inputList);
arrayAdapter.notifyDataSetChanged();
}
private List<String> 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<String> getAvailableAgente(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getNomeAgente)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableCodMdeps(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getCodMdep)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableCliente(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getRagSocOrd)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableNumOrds(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(x -> x.getNumOrd().toString())
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableTermCons(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getTermCons)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> 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<String> getAvailableAutomezzi(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getDescrizioneAuto)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> 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);
}
}

View File

@ -1,22 +1,167 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs; 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 class DialogVenditaFiltroAvanzatoViewModel {
public BindableString deposito = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentDepositoPredicate = null;
public BindableString idViaggio = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentIdViaggioPredicate = null;
public BindableString numOrds = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentNumOrdsPredicate = null;
public BindableString cliente = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentClientePredicate = null;
public BindableString dataConsegna = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentDataConsPredicate = null;
public BindableString terminiConsegna = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentTermConsPredicate = null;
public BindableString agente = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentVettorePredicate = null;
public BindableString vettore = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentAgentePredicate = null;
public BindableString automezzo = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentAutomezzoPredicate = null;
public BindableString paese = new BindableString(); private Predicate<OrdiniUscitaElencoDTO> currentPaesePredicate = null;
public Date dataConsegnaDate;
private List<OrdiniUscitaElencoDTO> initialOrderList;
private MutableLiveData<List<OrdiniUscitaElencoDTO>> currentFilteredOrderList = new MutableLiveData<>();
public void init(List<OrdiniUscitaElencoDTO> initialList) {
this.initialOrderList = initialList;
this.currentFilteredOrderList.setValue(this.initialOrderList);
}
public MutableLiveData<List<OrdiniUscitaElencoDTO>> getMutableFilteredOrderList() {
return this.currentFilteredOrderList;
}
public void setIDViaggioFilter(String idViaggio) {
if(UtilityString.isNullOrEmpty(idViaggio)) currentIdViaggioPredicate = null;
else {
String[] idViaggiSplitted = idViaggio.split("[,\\ ]");
try{
List<Integer> 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<Integer> 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<OrdiniUscitaElencoDTO> 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<OrdiniUscitaElencoDTO> 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);
}
} }

View File

@ -13,7 +13,6 @@ import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.tfb.fbtoast.FBToast; 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.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar; 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.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteView; import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; 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.setHasFixedSize(true);
mBindings.pickingLiberoMainList.setLayoutManager(new LinearLayoutManager(getActivity())); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBindings.pickingLiberoMainList.addItemDecoration(itemDecorator); mBindings.pickingLiberoMainList.addItemDecoration(itemDecorator);
} }

View File

@ -9,7 +9,6 @@ import android.widget.Toast;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList; 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.dialog.EditArticoloDialog;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; 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.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@ -114,7 +114,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mBinding.articoliOrdineList.addItemDecoration(itemDecorator); mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction); mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction);

View File

@ -15,7 +15,6 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList; 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.dialogs.DialogScanLisA;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper;
import it.integry.integrywmsnative.ui.ElevatedToolbar; 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.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; 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())); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator); mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction); mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction);

View File

@ -17,7 +17,6 @@ import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.android.material.textfield.TextInputLayout; 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.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; 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.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; 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.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts; 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.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.scan_or_create_lu.DialogScanOrCreateLUView;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNo; 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.setHasFixedSize(true);
mBinding.rettificaGiacenzeMainList.setLayoutManager(new LinearLayoutManager(getActivity())); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator); mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator);
} }

View File

@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; 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.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; 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.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; 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_peso_lu.DialogInputPeso;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; 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.input_quantity_v2.DialogInputQuantityV2View;
@ -642,13 +643,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}, BarcodeManager::enable).show(); }, BarcodeManager::enable).show();
} }
public void startCameraBarcode() {
DialogCameraBarcodeReader.newInstance(this, data -> {
this.onScanSuccessful.run(data);
})
.show(getSupportFragmentManager(), "camera_barcode");
}
public void removeListFilter() { public void removeListFilter() {
this.mViewmodel.resetMatchedRows(); 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(); String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageView DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");; .show(getSupportFragmentManager(), "tag");
} }
@Override @Override
@ -859,6 +853,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}).show(); }).show();
} }
@Override
public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override @Override
public void onRowSaved() { public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);

View File

@ -395,6 +395,11 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onLUPositionChangeRequest(onComplete); if (this.mListener != null) mListener.onLUPositionChangeRequest(onComplete);
} }
private void sendBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
if (this.mListener != null)
mListener.onBatchLotSelectionRequest(availableBatchLots, onComplete);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
//Se non c'è una UL aperta //Se non c'è una UL aperta
@ -758,6 +763,70 @@ public class SpedizioneViewModel {
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, boolean canPartitaMagBeChanged) { 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<MtbColr> scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr();
List<MtbPartitaMag> 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())
))
.distinctBy(MtbColr::getPartitaMag)
.map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag())
.toList();
if(availableBatchLot.size() > 1) {
this.sendOnLoadingStarted();
List<MtbPartitaMag> 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, scannedMtbColrs.get(0), 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 totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd(); BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd(); BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd();
@ -791,21 +860,13 @@ public class SpedizioneViewModel {
Date dataScad = null; 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) { if (refMtbColt == null && pickingObjectDTO.getMtbColts() != null && pickingObjectDTO.getMtbColts().size() == 1) {
refMtbColt = pickingObjectDTO.getMtbColts().get(0); refMtbColt = pickingObjectDTO.getMtbColts().get(0);
} }
MtbColr refMtbColr = null; MtbColr refMtbColr = null;
if (refMtbColt != null && refMtbColt.getMtbColr().size() > 0) { if (scannedMtbColr != null && refMtbColt != null && refMtbColt.getMtbColr().size() > 0) {
Optional<MtbColr> optionalMtbColr = Stream.of(refMtbColt.getMtbColr()) Optional<MtbColr> optionalMtbColr = Stream.of(refMtbColt.getMtbColr())
.filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) && .filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) && UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) &&
@ -933,7 +994,6 @@ public class SpedizioneViewModel {
}); });
} }
public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) { public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) {
PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
@ -1460,7 +1520,7 @@ public class SpedizioneViewModel {
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone(); MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
if(mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) { if (mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE); mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
} else { } else {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT); mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
@ -1540,7 +1600,7 @@ public class SpedizioneViewModel {
} else { } else {
distribuisciLU(mtbColts -> { distribuisciLU(mtbColts -> {
if(this.mIsNewLU) { if (this.mIsNewLU) {
this.sendLUPositionChangeRequest((shouldChangePosition, mtbDepoPosizione) -> { this.sendLUPositionChangeRequest((shouldChangePosition, mtbDepoPosizione) -> {
if (shouldChangePosition) { if (shouldChangePosition) {
@ -1702,7 +1762,7 @@ public class SpedizioneViewModel {
this.mCurrentMtbColt = null; this.mCurrentMtbColt = null;
if(mEnableQuantityReset) { if (mEnableQuantityReset) {
for (PickingObjectDTO pickingObjectDTO : mPickingList.getValue()) { for (PickingObjectDTO pickingObjectDTO : mPickingList.getValue()) {
List<MtbColr> withdrawMtbColrList = pickingObjectDTO.getWithdrawMtbColrs(); List<MtbColr> withdrawMtbColrList = pickingObjectDTO.getWithdrawMtbColrs();
@ -1864,6 +1924,8 @@ public class SpedizioneViewModel {
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete); void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);
void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete);
} }
} }

View File

@ -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);
}
}
}

View File

@ -5,7 +5,6 @@ import android.view.View;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.ViewDataBinding; import androidx.databinding.ViewDataBinding;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List; 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.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; 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.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.DialogBasketLU_BaseViewModel;
import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; 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.setHasFixedSize(true);
mBinding.dialogBasketLuMainList.setLayoutManager(new LinearLayoutManager(mContext)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mBinding.dialogBasketLuMainList.addItemDecoration(itemDecorator); mBinding.dialogBasketLuMainList.addItemDecoration(itemDecorator);

View File

@ -5,7 +5,6 @@ import android.view.View;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.ViewDataBinding; import androidx.databinding.ViewDataBinding;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List; 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.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.DialogBasketLuPage2Binding; 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.DialogBasketLU_BaseViewModel;
import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel; 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.setHasFixedSize(true);
mBinding.dialogBasketLuMtbColrList.setLayoutManager(new LinearLayoutManager(mContext)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mBinding.dialogBasketLuMtbColrList.addItemDecoration(itemDecorator); mBinding.dialogBasketLuMtbColrList.addItemDecoration(itemDecorator);

View File

@ -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<BarcodeScanDTO> onComplete;
public static DialogCameraBarcodeReader newInstance(@NonNull Context context, @NonNull final RunnableArgs<BarcodeScanDTO> onComplete) {
return new DialogCameraBarcodeReader(context, onComplete);
}
private DialogCameraBarcodeReader(@NonNull Context context, @NonNull final RunnableArgs<BarcodeScanDTO> 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<BarcodeFormat> 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() {
}
}

View File

@ -2,15 +2,14 @@ package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; 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.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; 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.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class DialogChooseArtFromListaArts { public class DialogChooseArtFromListaArts {
@ -61,7 +61,7 @@ public class DialogChooseArtFromListaArts {
binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider));
binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator);

View File

@ -8,7 +8,6 @@ import android.view.LayoutInflater;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List; 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.model.MtbColr;
import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class DialogChooseArtFromListaMtbColrView { public class DialogChooseArtFromListaMtbColrView {
@ -61,7 +61,7 @@ public class DialogChooseArtFromListaMtbColrView {
binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); 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)); itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider));
binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator);

View File

@ -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<DialogChooseBatchLotAdapter.ViewHolder> {
protected Context mContext;
private final List<MtbPartitaMag> mDataset;
private final IRecyclerItemClicked<MtbPartitaMag> 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<MtbPartitaMag> myDataset, IRecyclerItemClicked<MtbPartitaMag> 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();
}
}

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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<MtbPartitaMag> mAvailableBatchLot;
private RunnableArgs<MtbPartitaMag> mOnItemSelected;
private Context mContext;
private DialogChooseBatchLotBinding mBindings;
private DialogChooseBatchLotAdapter mAdapter;
private MtbPartitaMag mSelectedItem;
public static DialogChooseBatchLotView newInstance(List<MtbPartitaMag> availableBatchLot, RunnableArgs<MtbPartitaMag> onItemSelected) {
return new DialogChooseBatchLotView(availableBatchLot, onItemSelected);
}
private DialogChooseBatchLotView(List<MtbPartitaMag> availableBatchLot, RunnableArgs<MtbPartitaMag> 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<MtbPartitaMag> onItemClicked = (item, position) -> {
mSelectedItem = item;
dismiss();
};
}

View File

@ -0,0 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.choose_batch_lot;
public class DialogChooseBatchLotViewModel {
}

View File

@ -79,23 +79,11 @@
android:tint="@color/colorPrimaryGray" android:tint="@color/colorPrimaryGray"
android:visibility="@{BuildConfig.DEBUG ? View.VISIBLE : View.GONE}" /> android:visibility="@{BuildConfig.DEBUG ? View.VISIBLE : View.GONE}" />
<androidx.appcompat.widget.AppCompatImageButton
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:background="@drawable/ripple_effect"
app:singleClick="@{() -> spedizioneView.startCameraBarcode()}"
android:src="@drawable/ic_photo_camera_black_24dp"
android:tint="@color/colorPrimaryGray"
android:visibility="@{BuildConfig.DEBUG ? View.VISIBLE : View.GONE}" />
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
@ -168,7 +156,7 @@
android:paddingBottom="72dp" android:paddingBottom="72dp"
android:scrollbars="vertical" /> android:scrollbars="vertical" />
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@ -199,7 +187,7 @@
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" /> app:layout_constraintGuide_percent="0.85" />
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
@ -221,7 +209,7 @@
android:text="@string/no_item_to_pick_text" android:text="@string/no_item_to_pick_text"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textSize="18sp" /> android:textSize="18sp" />
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.kroegerama.kaiteki.bcode.views.BarcodeView
android:id="@+id/bcode"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:resultPointColor="#09E85E"
app:resultPointSize="8dp"
app:showResultPoints="true" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:paddingBottom="8dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
style="@style/Button.PrimaryFull"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/action_close"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -12,7 +12,7 @@
type="it.integry.integrywmsnative.core.model.MtbAart"/> type="it.integry.integrywmsnative.core.model.MtbAart"/>
</data> </data>
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
@ -20,7 +20,7 @@
android:paddingBottom="8dp"> android:paddingBottom="8dp">
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/linearLayout" android:id="@+id/linearLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -67,8 +67,8 @@
tools:text="Descrizione lunga articolo" /> tools:text="Descrizione lunga articolo" />
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
</layout> </layout>

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView" />
</data>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_blue_300"
android:gravity="center_horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:src="@drawable/ic_error_white_24dp" />
</RelativeLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="24dp"
android:paddingRight="24dp"
android:paddingBottom="24dp">
<TextView
android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/select_batch_lot" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="android.view.View" />
<variable
name="mtbPartitaMag"
type="it.integry.integrywmsnative.core.model.MtbPartitaMag" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityString.isNull(mtbPartitaMag.partitaMag, &quot;Nessun lotto&quot;)}"
style="@style/AppTheme.NewMaterial.Text.Medium"
android:textColor="@color/colorPrimary"
android:textStyle="bold"
tools:text="PARTITA MAG" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data scad: "
android:textSize="14sp"
android:textStyle="bold"
android:layout_toStartOf="@id/data_scad"
android:layout_marginEnd="4dp"
android:visibility="@{UtilityString.isNullOrEmpty(mtbPartitaMag.dataScadS) ? View.GONE : View.VISIBLE}" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/data_scad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:text="@{UtilityDate.formatDate(mtbPartitaMag.dataScadD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)}"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="@{UtilityString.isNullOrEmpty(mtbPartitaMag.dataScadS) ? View.GONE : View.VISIBLE}"
tools:text="Data scad" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="@{UtilityString.isNull(mtbPartitaMag.descrizione, &quot;Nessuna descrizione&quot;)}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

View File

@ -9,6 +9,10 @@
name="viewmodel" name="viewmodel"
type="it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoViewModel" /> type="it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoView" />
</data> </data>
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
@ -59,7 +63,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusDown="@id/input_id_viaggio" android:nextFocusDown="@id/input_id_viaggio"
app:binding="@{viewmodel.deposito}" /> app:binding="@{view.deposito}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -79,7 +83,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_num_ords" android:nextFocusForward="@id/filled_exposed_dropdown_num_ords"
app:binding="@{viewmodel.idViaggio}" /> app:binding="@{view.idViaggio}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -101,7 +105,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_cliente" android:nextFocusForward="@id/filled_exposed_dropdown_cliente"
app:binding="@{viewmodel.numOrds}"/> app:binding="@{view.numOrds}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -122,7 +126,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_vettore" android:nextFocusForward="@id/filled_exposed_dropdown_vettore"
app:binding="@{viewmodel.cliente}"/> app:binding="@{view.cliente}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -143,7 +147,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_automezzo" android:nextFocusForward="@id/filled_exposed_dropdown_automezzo"
app:binding="@{viewmodel.vettore}"/> app:binding="@{view.vettore}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -164,7 +168,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_paese" android:nextFocusForward="@id/filled_exposed_dropdown_paese"
app:binding="@{viewmodel.automezzo}"/> app:binding="@{view.automezzo}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -174,8 +178,7 @@
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/city" android:hint="@string/city">
android:visibility="gone">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView <androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown_paese" android:id="@+id/filled_exposed_dropdown_paese"
@ -186,7 +189,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_agente" android:nextFocusForward="@id/filled_exposed_dropdown_agente"
app:binding="@{viewmodel.paese}"/> app:binding="@{view.paese}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -207,7 +210,7 @@
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:nextFocusForward="@id/filled_exposed_dropdown_term_cons" android:nextFocusForward="@id/filled_exposed_dropdown_term_cons"
app:binding="@{viewmodel.agente}"/> app:binding="@{view.agente}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -226,7 +229,7 @@
android:inputType="textNoSuggestions" android:inputType="textNoSuggestions"
android:focusable="false" android:focusable="false"
android:singleLine="true" android:singleLine="true"
app:binding="@{viewmodel.dataConsegna}"/> app:binding="@{view.dataConsegna}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@ -246,7 +249,7 @@
android:singleLine="true" android:singleLine="true"
android:ellipsize="end" android:ellipsize="end"
android:imeOptions="actionDone" android:imeOptions="actionDone"
app:binding="@{viewmodel.terminiConsegna}"/> app:binding="@{view.terminiConsegna}"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>

View File

@ -275,6 +275,7 @@
<string name="manufacture">Lav. terzi / Trasf. interni</string> <string name="manufacture">Lav. terzi / Trasf. interni</string>
<string name="production">Produzione</string> <string name="production">Produzione</string>
<string name="production_line">Linea di produzione</string> <string name="production_line">Linea di produzione</string>
<string name="select_batch_lot">Seleziona un lotto</string>
<string name="internal_handling">Movimentazione interna</string> <string name="internal_handling">Movimentazione interna</string>
<string name="prod_ordine_produzione_title_fragment">Accettazione da ordine</string> <string name="prod_ordine_produzione_title_fragment">Accettazione da ordine</string>
<string name="prod_ordine_lavorazione_title_fragment">Picking da ordine</string> <string name="prod_ordine_lavorazione_title_fragment">Picking da ordine</string>

View File

@ -280,6 +280,7 @@
<string name="manufacture">Manufacture / Internal movement</string> <string name="manufacture">Manufacture / Internal movement</string>
<string name="production">Production</string> <string name="production">Production</string>
<string name="production_line">Production line</string> <string name="production_line">Production line</string>
<string name="select_batch_lot">Select a batch lot</string>
<string name="internal_handling">Internal handling</string> <string name="internal_handling">Internal handling</string>
<string name="prod_ordine_produzione_title_fragment">Production picking</string> <string name="prod_ordine_produzione_title_fragment">Production picking</string>
<string name="prod_ordine_lavorazione_title_fragment">Manufacture picking</string> <string name="prod_ordine_lavorazione_title_fragment">Manufacture picking</string>

View File

@ -31,7 +31,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0' 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.ext:junit:1.1.2'
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'

View File

@ -1,13 +1,12 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android { android {
compileSdkVersion 29 compileSdkVersion 30
defaultConfig { defaultConfig {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 30
versionCode 1 versionCode 1
versionName "1.1.1" versionName "1.1.1"
} }

View File

@ -2,12 +2,12 @@
buildscript { buildscript {
ext { ext {
kotlin_version = '1.4.31' kotlin_version = '1.5.0'
} }
repositories { repositories {
jcenter()
google() google()
mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:4.2.0' classpath 'com.android.tools.build:gradle:4.2.0'
@ -16,7 +16,7 @@ buildscript {
classpath 'com.google.firebase:perf-plugin:1.3.5' classpath 'com.google.firebase:perf-plugin:1.3.5'
// Add the Firebase Crashlytics Gradle plugin. // 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 // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
@ -25,9 +25,9 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
jcenter()
google() google()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
mavenCentral()
} }
} }

View File

@ -21,8 +21,8 @@ android {
dependencies { dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"]) implementation fileTree(dir: "libs", include: ["*.jar"])
implementation project(":app") 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.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.annotation:annotation:1.1.0' androidTestImplementation 'androidx.annotation:annotation:1.2.0'
} }

View File

@ -31,7 +31,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation 'androidx.appcompat:appcompat:1.2.0' 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:runner:1.3.0'
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'

View File

@ -32,7 +32,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0' 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.ext:junit:1.1.2'
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'

View File

@ -31,7 +31,7 @@ android {
dependencies { dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.2.0' 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:runner:1.3.0'
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'

View File

@ -32,7 +32,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0' 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:runner:1.3.0'
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'