diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..cec4f599 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1 @@ +/saveactions_settings.xml diff --git a/app/build.gradle b/app/build.gradle index 9db9edb1..fbc4f617 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,17 @@ apply plugin: 'com.android.application' -apply plugin: 'com.google.firebase.firebase-perf' + +if (!project.hasProperty("disable-performance-plugin")) { + apply plugin: 'com.google.firebase.firebase-perf' +} + apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 254 - def appVersionName = '1.22.0' + def appVersionCode = 261 + def appVersionName = '1.23.6' signingConfigs { release { @@ -27,12 +31,12 @@ android { } } - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { applicationId "it.integry.integrywmsnative" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 versionCode appVersionCode versionName appVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -94,37 +98,37 @@ dependencies { //Firebase // Import the Firebase BoM - implementation platform('com.google.firebase:firebase-bom:26.3.0') + implementation platform('com.google.firebase:firebase-bom:29.1.0') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-core' - implementation 'com.google.firebase:firebase-crash' implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-perf' - implementation 'com.google.android.gms:play-services-basement:17.6.0' + implementation 'com.google.android.gms:play-services-basement:18.0.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation 'com.google.android.material:material:1.5.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.preference:preference-ktx:1.1.1' + implementation 'androidx.preference:preference-ktx:1.2.0' implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.annimon:stream:1.2.2' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1' + implementation 'androidx.lifecycle:lifecycle-common-java8:2.4.1' implementation 'org.apache.commons:commons-text:1.9' //MVVM - def dagger2_version = '2.35.1' + def dagger2_version = '2.40' api "com.google.dagger:dagger:$dagger2_version" annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version" api "com.google.dagger:dagger-android:$dagger2_version" - api "com.google.dagger:dagger-android-support:$dagger2_version" // if you use the support libraries + api "com.google.dagger:dagger-android-support:$dagger2_version" + // if you use the support libraries annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version" //FAB @@ -139,7 +143,7 @@ dependencies { implementation 'com.github.pedromassango:doubleClick:3.0' //SQLite ROOM - def room_version = "2.3.0" + def room_version = "2.4.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" @@ -158,7 +162,6 @@ dependencies { implementation 'com.github.RaviKoradiya:LiveAdapter:1.3.4' - implementation 'org.reflections:reflections:0.10.2' } repositories { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index acf8fdef..b8226a96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,7 +19,8 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true" - android:fullBackupContent="@xml/backup_descriptor"> + android:fullBackupContent="@xml/backup_descriptor" + android:requestLegacyExternalStorage="true"> + android:windowSoftInputMode="adjustNothing" + android:exported="true"> @@ -73,7 +75,8 @@ + android:theme="@style/SplashTheme" + android:exported="true"> diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 60078c14..b75c3411 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -5,6 +5,10 @@ import javax.inject.Singleton; import dagger.Component; import it.integry.integrywmsnative.core.context.AppContext; import it.integry.integrywmsnative.core.data_store.db.RoomModule; +import it.integry.integrywmsnative.core.expansion.BaseActivityComponent; +import it.integry.integrywmsnative.core.expansion.BaseActivityModule; +import it.integry.integrywmsnative.core.expansion.BaseFragmentComponent; +import it.integry.integrywmsnative.core.expansion.BaseFragmentModule; import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneComponent; import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneModule; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingComponent; @@ -15,6 +19,8 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDo import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoModule; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormComponent; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormModule; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsComponent; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsModule; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent; @@ -63,6 +69,7 @@ import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.Dial import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsModule; 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.info_aggiuntive_lu.InfoAggiuntiveLUDialogComponent; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component; @@ -78,6 +85,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr RoomModule.class, SplashActivityModule.class, MainApplicationModule.class, + BaseActivityModule.class, + BaseFragmentModule.class, LoginModule.class, MainActivityModule.class, MainFragmentModule.class, @@ -109,47 +118,91 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DialogChooseArtsFromListaArtsModule.class, DocInterniModule.class, DialogSelectDocInfoModule.class, - DocInterniEditFormModule.class + DocInterniEditFormModule.class, + DialogSelectDocRowsModule.class }) public interface MainApplicationComponent { + BaseActivityComponent.Factory baseActivityComponent(); + + BaseFragmentComponent.Factory baseFragmentComponent(); + SplashActivityComponent.Factory splashActivityComponent(); + LoginComponent.Factory loginActivityComponent(); + MainActivityComponent.Factory mainActivityComponent(); + MainFragmentComponent.Factory mainFragmentComponent(); + MainAccettazioneComponent.Factory mainAccettazioneComponent(); + ListaBancaliComponent.Factory listaBancaliComponent(); + ContenutoBancaleComponent.Factory contenutoBancaleComponent(); + PVOrdiniAcquistoGrigliaComponent.Factory pvOrdineAcquistoGrigliaComponent(); + PVOrdineAcquistoEditComponent.Factory pvOrdineAcquistoEditComponent(); + PickingLiberoComponent.Factory pickingLiberoComponent(); + RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent(); + SpedizioneComponent.Factory spedizioneComponent(); + AccettazionePickingComponent.Factory accettazionePickingComponent(); + UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent(); + UltimiArriviFornitoreComponent.Factory ultimiArriviFornitoreComponent(); + PickingResiComponent.Factory pickingResiComponent(); + OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent(); + DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component(); + DialogInputLUProdComponent.Factory dialogInputLUProdComponent(); + DialogScanArtComponent.Factory dialogScanArtComponent(); + DialogScanOrCreateLUComponent.Factory dialogScanOrCreateLUComponent(); + ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent(); + VersamentoMerceComponent.Factory versamentoMerceComponent(); + DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent(); + DialogChooseBatchLotComponent.Factory dialogChooseBatchLotComponent(); + DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent(); + ProdRientroMerceComponent.Factory prodRientroMerceComponent(); + ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent(); + ProdOrdineProduzioneElencoComponent.Factory prodOrdineProduzioneElencoComponent(); + ProdRecuperoMaterialeComponent.Factory prodRecuperoMaterialeComponent(); + ProdVersamentoMaterialeComponent.Factory prodVersamentoMaterialeComponent(); + DialogChooseArtsFromListaArtsComponent.Factory dialogChooseArtsFromListaArtsComponent(); + DocInterniComponent.Factory docInterniComponent(); + DialogSelectDocInfoComponent.Factory dialogSelectMgrpDtipPairComponent(); + + DialogSelectDocRowsComponent.Factory dialogSelectDocRowsComponent(); + DocInterniEditFormComponent.Factory docInterniEditFormComponent(); + InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent(); + void inject(MainApplication mainApplication); + void inject(AppContext mainApplication); } diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 5af2bd2b..0c9c7f38 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -19,14 +19,18 @@ import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.services.inventario.InventarioService; +import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; @Module public class MainApplicationModule { @@ -69,6 +73,18 @@ public class MainApplicationModule { return new MenuService(menuRESTConsumer); } + @Provides + @Singleton + UpdatesManager provideUpdatesManager() { + return new UpdatesManager(); + } + + @Provides + @Singleton + DialogProgressView providesDialogProgressView() { + return DialogProgressView.newInstance(); + } + @Provides @Singleton OrdiniRESTConsumer provideOrdiniRESTConsumer(SystemRESTConsumer systemRESTConsumer, EntityRESTConsumer entityRESTConsumer) { @@ -165,5 +181,16 @@ public class MainApplicationModule { return new DocInterniRESTConsumer(); } + @Provides + @Singleton + GiacenzaRESTConsumer provideGiacenzaRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + return new GiacenzaRESTConsumer(systemRESTConsumer, articoloRESTConsumer); + } + + @Provides + @Singleton + InventarioService provideInventarioService(GiacenzaRESTConsumer giacenzaRESTConsumer) { + return new InventarioService(giacenzaRESTConsumer); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java index 55a30e4c..bdfaa248 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java @@ -16,7 +16,7 @@ public class CommonConst { public static String DEFAULT_ANONYMOUS_UL_SERIE = "UL"; - public static int NUMBER_OF_DECIMAL_DIGITS = 3; + public static int NUMBER_OF_DECIMAL_DIGITS = 5; } public static class Files { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/Coollection.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/Coollection.java deleted file mode 100644 index 447fd58e..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/Coollection.java +++ /dev/null @@ -1,49 +0,0 @@ -package it.integry.integrywmsnative.core.coollection; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; -import it.integry.integrywmsnative.core.coollection.matcher.custom.Contains; -import it.integry.integrywmsnative.core.coollection.matcher.custom.Equals; -import it.integry.integrywmsnative.core.coollection.matcher.custom.EqualsIgnoreCase; -import it.integry.integrywmsnative.core.coollection.matcher.custom.GreaterThan; -import it.integry.integrywmsnative.core.coollection.matcher.custom.IsNull; -import it.integry.integrywmsnative.core.coollection.matcher.custom.LessThan; -import it.integry.integrywmsnative.core.coollection.matcher.custom.Not; -import it.integry.integrywmsnative.core.coollection.query.Query; - -import java.util.Collection; - -public class Coollection { - - public static Query from(Collection collection) { - return new Query(collection); - } - - public static Matcher eq(Object value) { - return new Equals(value); - } - - public static Matcher contains(String value) { - return new Contains(value); - } - - public static Matcher eqIgnoreCase(String value) { - return new EqualsIgnoreCase(value); - } - - public static Matcher not(Matcher matcher) { - return new Not(matcher); - } - - public static Matcher greaterThan(Number value) { - return new GreaterThan(value); - } - - public static Matcher lessThan(Number value) { - return new LessThan(value); - } - - public static Matcher isNull() { - return new IsNull(); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/Matcher.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/Matcher.java deleted file mode 100644 index c2b41db2..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/Matcher.java +++ /dev/null @@ -1,7 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher; - -public interface Matcher { - - boolean match(Object value); - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Contains.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Contains.java deleted file mode 100644 index e0d80ac7..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Contains.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class Contains implements Matcher { - - private final String matcherValue; - - public Contains(String matcherValue) { - this.matcherValue = matcherValue; - } - - @Override - public boolean match(Object value) { - return String.valueOf(value).contains(matcherValue); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Equals.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Equals.java deleted file mode 100644 index ca2cc6c1..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Equals.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class Equals implements Matcher { - - private final Object value; - - public Equals(Object value) { - this.value = value; - } - - @Override - public boolean match(Object anotherValue) { - return value.equals(anotherValue); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/EqualsIgnoreCase.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/EqualsIgnoreCase.java deleted file mode 100644 index 5c138c93..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/EqualsIgnoreCase.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class EqualsIgnoreCase implements Matcher { - - private final String value; - - public EqualsIgnoreCase(String value) { - this.value = value; - } - - @Override - public boolean match(Object anotherValue) { - return (value).equalsIgnoreCase((String) anotherValue); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/GreaterThan.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/GreaterThan.java deleted file mode 100644 index 1414a9e0..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/GreaterThan.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class GreaterThan implements Matcher { - - private final Number value; - - public GreaterThan(Number value) { - this.value = value; - } - - @Override - public boolean match(Object matchValue) { - if (matchValue == null) { - return false; - } - return ((Number) matchValue).doubleValue() > value.doubleValue(); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/IsNull.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/IsNull.java deleted file mode 100644 index f14151e5..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/IsNull.java +++ /dev/null @@ -1,12 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class IsNull implements Matcher { - - @Override - public boolean match(Object value) { - return value == null; - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/LessThan.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/LessThan.java deleted file mode 100644 index c9c3c99e..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/LessThan.java +++ /dev/null @@ -1,21 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class LessThan implements Matcher { - - private final Number value; - - public LessThan(Number value) { - this.value = value; - } - - @Override - public boolean match(Object matchValue) { - if (matchValue == null) { - return false; - } - return ((Number) matchValue).doubleValue() < value.doubleValue(); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Not.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Not.java deleted file mode 100644 index dd76555f..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/matcher/custom/Not.java +++ /dev/null @@ -1,18 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.matcher.custom; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; - -public class Not implements Matcher { - - private final Matcher matcher; - - public Not(Matcher matcher) { - this.matcher = matcher; - } - - @Override - public boolean match(Object value) { - return !matcher.match(value); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/Query.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/Query.java deleted file mode 100644 index e6220bea..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/Query.java +++ /dev/null @@ -1,90 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query; - - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; -import it.integry.integrywmsnative.core.coollection.query.criteria.Criteria; -import it.integry.integrywmsnative.core.coollection.query.criteria.CriteriaList; -import it.integry.integrywmsnative.core.coollection.query.order.Order; -import it.integry.integrywmsnative.core.coollection.query.order.OrderCriteria; -import it.integry.integrywmsnative.core.coollection.query.specification.custom.AndSpecification; -import it.integry.integrywmsnative.core.coollection.query.specification.custom.OrSpecification; - -public class Query { - - private final Collection collection; - private CriteriaList criterias; - private OrderCriteria orderCriteria; - - public Query(Collection collection) { - this.collection = collection; - criterias = new CriteriaList(); - } - - public Query where(String method, Matcher matcher) { - Criteria criteria = new Criteria(method, matcher); - criterias.add(criteria); - return this; - } - - public Query and(String method, Matcher matcher) { - Criteria criteria = new Criteria(method, matcher); - criteria.setSpecification(new AndSpecification()); - criterias.add(criteria); - return this; - } - - public Query or(String method, Matcher matcher) { - Criteria criteria = new Criteria(method, matcher); - criteria.setSpecification(new OrSpecification()); - criterias.add(criteria); - return this; - } - - public Query orderBy(String method, Order order) { - orderCriteria = new OrderCriteria(method, order); - return this; - } - - public Query orderBy(String method) { - return orderBy(method, Order.ASC); - } - - public List all() { - List all = new ArrayList(); - for (T item : collection) { - if (criterias.match(item)) { - all.add(item); - } - } - if (orderCriteria != null) { - all = orderCriteria.sort(all); - } - return all; - } - - public T first() { - List all = cloneCollection(collection); - if (orderCriteria != null) { - all = orderCriteria.sort(all); - } - for (T item : all) { - if (criterias.match(item)) { - return item; - } - } - return null; - } - - private List cloneCollection(Collection collection) { - List list = new ArrayList(); - for (T item : collection) { - list.add(item); - } - return list; - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/criteria/Criteria.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/criteria/Criteria.java deleted file mode 100644 index 027d232a..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/criteria/Criteria.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.criteria; - -import it.integry.integrywmsnative.core.coollection.matcher.Matcher; -import it.integry.integrywmsnative.core.coollection.query.specification.Specification; -import it.integry.integrywmsnative.core.coollection.reflection.Phanton; - -public class Criteria { - - private final String method; - private final Matcher matcher; - private Specification specification; - - public Criteria(String method, Matcher matcher) { - this.method = method; - this.matcher = matcher; - } - - public void setSpecification(Specification specification) { - this.specification = specification; - } - - public Specification specification() { - return specification; - } - - public boolean match(T item) { - try { - Object value = Phanton.from(item).call(method); - return matcher.match(value); - } catch (Exception err) { - throw new RuntimeException(err); - } - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/criteria/CriteriaList.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/criteria/CriteriaList.java deleted file mode 100644 index e2f2f433..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/criteria/CriteriaList.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.criteria; - -import java.util.ArrayList; -import java.util.List; - -public class CriteriaList { - - private List> criterias; - - public CriteriaList() { - criterias = new ArrayList>(); - } - - public void add(Criteria criteria) { - criterias.add(criteria); - } - - public boolean match(T item) { - if (criterias.size() == 0) { - return true; - } - if (criterias.size() == 1) { - return criterias.get(0).match(item); - } - boolean matched = true; - for (int i = criterias.size() - 1; i > 0; i--) { - Criteria one = criterias.get(i); - Criteria other = criterias.get(i - 1); - matched = matched && one.specification().match(item, one, other); - } - return matched; - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/Order.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/Order.java deleted file mode 100644 index 4ed8e86c..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/Order.java +++ /dev/null @@ -1,5 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.order; - -public enum Order { - ASC, DESC -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/OrderComparator.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/OrderComparator.java deleted file mode 100644 index a4bc0e64..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/OrderComparator.java +++ /dev/null @@ -1,30 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.order; - -import it.integry.integrywmsnative.core.coollection.reflection.Phanton; - -import java.util.Comparator; - -public class OrderComparator implements Comparator { - - private final String method; - - public OrderComparator(String method) { - this.method = method; - } - - @Override - @SuppressWarnings("unchecked") - public int compare(T one, T other) { - Object oneValue = Phanton.from(one).call(method); - Object otherValue = Phanton.from(other).call(method); - if (oneValue == null || otherValue == null) { - return 0; - } - if (oneValue instanceof Comparable) { - return ((Comparable) oneValue).compareTo(otherValue); - } else { - return 0; - } - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/OrderCriteria.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/OrderCriteria.java deleted file mode 100644 index a049dc1e..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/order/OrderCriteria.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.order; - -import java.util.Collections; -import java.util.List; - -public class OrderCriteria { - - private final String method; - private final Order order; - - public OrderCriteria(String method, Order order) { - this.method = method; - this.order = order; - } - - public List sort(List list) { - Collections.sort(list, new OrderComparator(method)); - if (order == Order.DESC) { - Collections.reverse(list); - } - return list; - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/Specification.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/Specification.java deleted file mode 100644 index 719ea931..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/Specification.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.specification; - -import it.integry.integrywmsnative.core.coollection.query.criteria.Criteria; - -public interface Specification { - - boolean match(T item, Criteria one, Criteria other); - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/custom/AndSpecification.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/custom/AndSpecification.java deleted file mode 100644 index 6119df2d..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/custom/AndSpecification.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.specification.custom; - -import it.integry.integrywmsnative.core.coollection.query.criteria.Criteria; -import it.integry.integrywmsnative.core.coollection.query.specification.Specification; - -public class AndSpecification implements Specification { - - @Override - public boolean match(T item, Criteria one, Criteria other) { - return one.match(item) && other.match(item); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/custom/OrSpecification.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/custom/OrSpecification.java deleted file mode 100644 index 2b83db22..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/query/specification/custom/OrSpecification.java +++ /dev/null @@ -1,14 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.query.specification.custom; - -import it.integry.integrywmsnative.core.coollection.query.criteria.Criteria; -import it.integry.integrywmsnative.core.coollection.query.specification.Specification; - -public class OrSpecification implements Specification { - - @Override - public boolean match(T item, Criteria one, Criteria other) { - return one.match(item) || other.match(item); - } - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/coollection/reflection/Phanton.java b/app/src/main/java/it/integry/integrywmsnative/core/coollection/reflection/Phanton.java deleted file mode 100644 index 0c8cf9c9..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/coollection/reflection/Phanton.java +++ /dev/null @@ -1,37 +0,0 @@ -package it.integry.integrywmsnative.core.coollection.reflection; - -import java.lang.reflect.Field; - -public class Phanton { - - private final T target; - private Class clazz; - - private Phanton(T target) { - this.target = target; - clazz = target.getClass(); - } - - public static Phanton from(T target) { - return new Phanton(target); - } - - public Object call(String name) { - return invoke(name); - } - - private Object invoke(String name) { - for (final Field field : clazz.getDeclaredFields()) { - try { - if (name.equals(field.getName())) { - field.setAccessible(Boolean.TRUE); - return field.get(target); - } - } catch (final IllegalAccessException e) { - throw new RuntimeException(e); - } - } - throw new RuntimeException("No such property with name " + name); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java index 94ef061a..c69bda7d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java @@ -18,7 +18,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 5, exportSchema = false) +@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 7, exportSchema = false) @TypeConverters({ DateConverter.class }) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java index c501cc7f..42c01e96 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java @@ -6,7 +6,6 @@ import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; -import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; @@ -21,10 +20,13 @@ public interface ArticoloGrigliaDao { @Insert void insertAll(List articoli); + @Insert Long insert(ArticoloGriglia articolo); + @Update void updateAll(List articoli); + @Update void update(ArticoloGriglia articolo); @@ -45,4 +47,7 @@ public interface ArticoloGrigliaDao { @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId") List getArticoliFromGriglia(int grigliaId); + + @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId and new_no_promo = 1") + List getNewArticoliInGriglia(int grigliaId); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java index f42f98bd..f28a2434 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java @@ -71,6 +71,9 @@ public class ArticoloGriglia { @ColumnInfo(name = "id_griglia") private int idGriglia; + @ColumnInfo(name = "new_no_promo") + private boolean newNoPromo = false; + public int getArticoloGrigliaId() { return articoloGrigliaId; } @@ -191,6 +194,14 @@ public class ArticoloGriglia { this.qtaProposta = qtaProposta; } + public boolean isNewNoPromo() { + return newNoPromo; + } + + public void setNewNoPromo(boolean newNoPromo) { + this.newNoPromo = newNoPromo; + } + public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) { ArticoloOrdine articolo = new ArticoloOrdine(); @@ -210,6 +221,7 @@ public class ArticoloGriglia { articolo.setGiacenza(BigDecimal.valueOf(this.getGiacenza())); articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita())); articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta())); + articolo.setNewNoPromo(this.isNewNoPromo()); articolo.setQtaOrd(0); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java index f55a69d5..cb8364da 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java @@ -29,7 +29,7 @@ import java.util.Date; public class ArticoloOrdine { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "articolo_ordine_id") - private int articoloOrdineId; + private Integer articoloOrdineId; @ColumnInfo(name = "cod_mart") private String codMart; @@ -67,6 +67,8 @@ public class ArticoloOrdine { @ColumnInfo(name = "data_ins") private Date dataIns; + @ColumnInfo(name = "new_no_promo") + private boolean newNoPromo; @Ignore private int ggScadenza = 0; @@ -81,7 +83,7 @@ public class ArticoloOrdine { private BigDecimal qtaProposta = BigDecimal.ZERO; - public int getArticoloOrdineId() { + public Integer getArticoloOrdineId() { return articoloOrdineId; } @@ -221,14 +223,27 @@ public class ArticoloOrdine { return this; } - public BigDecimal getQtaCnfPrevistaVendita(){ - return qtaPrevistaVendita.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaPrevistaVendita.divide(BigDecimal.valueOf(qtaCnf),0, RoundingMode.CEILING); + public BigDecimal getQtaCnfPrevistaVendita() { + return qtaPrevistaVendita.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaPrevistaVendita.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING); } - public BigDecimal getQtaCnfProposta(){ - return qtaProposta.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaProposta.divide(BigDecimal.valueOf(qtaCnf),0, RoundingMode.CEILING); + public BigDecimal getQtaCnfProposta() { + return qtaProposta.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaProposta.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING); } - public BigDecimal getQtaCnfGiacenza(){ - return giacenza.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : giacenza.divide(BigDecimal.valueOf(qtaCnf),0, RoundingMode.CEILING); + + public BigDecimal getQtaCnfGiacenza() { + return giacenza.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : giacenza.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING); + } + + public boolean isNewNoPromo() { + return newNoPromo; + } + + public void setNewNoPromo(boolean newNoPromo) { + this.newNoPromo = newNoPromo; + } + + public float getCnfDaRic() { + return qtaCnf > 0.f ? merceDaRic / qtaCnf : 0; } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoloGrigliaRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoloGrigliaRepository.java index cbcfc259..eb712af8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoloGrigliaRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoloGrigliaRepository.java @@ -16,4 +16,6 @@ public interface ArticoloGrigliaRepository { void findArticoloByScanAndGriglia(String scan, int idGriglia, RunnableArgs onSuccess, RunnableArgs onFail); + void findNewArticoliInGrigla(int idGriglia, RunnableArgs> onSuccess, RunnableArgs onFail); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java index 51f16d58..d47945ed 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java @@ -89,4 +89,14 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri } }); } + + public void findNewArticoliInGrigla(int idGriglia, RunnableArgs> onSuccess, RunnableArgs onFail) { + execute(() -> { + try { + onSuccess.run(mArticoloGrigliaDao.getNewArticoliInGriglia(idGriglia)); + } catch (Exception e) { + onFail.run(e); + } + }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java index d3ec82e8..a82c193e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java @@ -28,13 +28,15 @@ public class ArticoliOrdineDataSource extends Repository implements ArticoliOrdi List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); for (ArticoloOrdine art : articoli) { - if (art.getArticoloOrdineId() > 0) { + if (art.getArticoloOrdineId() != null && art.getArticoloOrdineId() > 0) { toUpdate.add(art); } else { toInsert.add(art); } } - mArticoloOrdineDao.insertAll(toInsert); + for (ArticoloOrdine newArt : toInsert) { + mArticoloOrdineDao.insert(newArt); + } mArticoloOrdineDao.updateAll(toUpdate); onSuccess.run(); @@ -48,7 +50,7 @@ public class ArticoliOrdineDataSource extends Repository implements ArticoliOrdi public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSuccess, RunnableArgs onFail) { execute(() -> { try { - if (articolo.getArticoloOrdineId() > 0) { + if (articolo.getArticoloOrdineId() != null && articolo.getArticoloOrdineId() > 0) { mArticoloOrdineDao.update(articolo); } else { mArticoloOrdineDao.insert(articolo); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java index 0ac39bc9..f3c7a02b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java @@ -1,35 +1,23 @@ package it.integry.integrywmsnative.core.data_store.db.view_model; -import androidx.room.ColumnInfo; - import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; public class ArticoloDTO { - private String codMart; - - private String descrizione; - - private String untMis; - - private String barcode; - - private String flagQtaMultipla; - - private float qtaCnf; - - private float merceDaRic; - - private float mediaSett; - - private float qtaMinOrdinabile; - + public String codMart; + public String descrizione; + public String untMis; + public float qtaCnf; + public String barcode; + public float merceDaRic; + public float mediaSett; + public String flagQtaMultipla; + public String flagTracciabilita; + public float qtaMinOrdinabile; + public boolean newNoPromo; private int ggScadenza; - private float giacenza; - private float qtaPrevistaVendita; - private float qtaProposta; @@ -145,6 +133,24 @@ public class ArticoloDTO { this.qtaProposta = qtaProposta; } + public String getFlagTracciabilita() { + return flagTracciabilita; + } + + public ArticoloDTO setFlagTracciabilita(String flagTracciabilita) { + this.flagTracciabilita = flagTracciabilita; + return this; + } + + public boolean isNewNoPromo() { + return newNoPromo; + } + + public ArticoloDTO setNewNoPromo(boolean newNoPromo) { + this.newNoPromo = newNoPromo; + return this; + } + public ArticoloGriglia toArticoloGriglia() { ArticoloGriglia result = new ArticoloGriglia(); result.setBarCode(this.getBarCode()); @@ -157,6 +163,7 @@ public class ArticoloDTO { result.setFlagQtaMultipla(this.getFlagQtaMultipla()); result.setQtaMinOrdinabile(this.getQtaMinOrdinabile()); result.setGgScadenza(this.ggScadenza); + result.setNewNoPromo(this.newNoPromo); result.setGiacenza(this.giacenza); result.setQtaPrevistaVendita(this.qtaPrevistaVendita); result.setQtaProposta(this.qtaProposta); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java index 89bb6199..72dd32e1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java @@ -1,21 +1,37 @@ package it.integry.integrywmsnative.core.expansion; -import android.app.Dialog; +import android.content.Context; +import android.util.AttributeSet; import android.view.KeyEvent; +import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public class BaseActivity extends AppCompatActivity { + @Inject + public DialogProgressView mCurrentProgress; - protected Dialog mCurrentProgress; + @Nullable + @Override + public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) { + var v = super.onCreateView(parent, name, context, attrs); - public BaseActivity() { - //Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this, BaseActivity.class)); + MainApplication.appComponent + .baseActivityComponent() + .create() + .inject(this); + + return v; } @Override @@ -42,8 +58,8 @@ public class BaseActivity extends AppCompatActivity { protected void openProgress() { runOnUiThread(() -> { BarcodeManager.disable(); - if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this); + if (!this.mCurrentProgress.isVisible() && !this.mCurrentProgress.isAdded()) { + this.mCurrentProgress.show(getSupportFragmentManager(), "tag"); } }); } @@ -51,9 +67,8 @@ public class BaseActivity extends AppCompatActivity { protected void closeProgress() { runOnUiThread(() -> { BarcodeManager.enable(); - if (mCurrentProgress != null) { + if (mCurrentProgress.isVisible()) { mCurrentProgress.dismiss(); - mCurrentProgress = null; } }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivityComponent.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivityComponent.java new file mode 100644 index 00000000..e4da916a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivityComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.core.expansion; + +import dagger.Subcomponent; + +@Subcomponent +public interface BaseActivityComponent { + + @Subcomponent.Factory + interface Factory { + BaseActivityComponent create(); + } + + void inject(BaseActivity baseActivity); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivityModule.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivityModule.java new file mode 100644 index 00000000..eb3d3500 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivityModule.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.expansion; + +import dagger.Module; + +@Module(subcomponents = BaseActivityComponent.class) +public class BaseActivityModule { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java index 7ede3676..5b932074 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.core.expansion; -import android.app.Dialog; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; @@ -15,11 +14,12 @@ import androidx.fragment.app.FragmentTransaction; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public class BaseDialogFragment extends DialogFragment { private boolean mBarcodeListener = false; - private Dialog mCurrentProgress; + private DialogProgressView mCurrentProgress; public BaseDialogFragment() { super(); @@ -82,7 +82,7 @@ public class BaseDialogFragment extends DialogFragment { // new Thread(() -> { requireActivity().runOnUiThread(() -> { if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity()); + this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(requireActivity()); } }); // }).start(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java index 6db30d6e..a11f7412 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java @@ -1,21 +1,30 @@ package it.integry.integrywmsnative.core.expansion; -import android.app.Dialog; +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.fragment.app.Fragment; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public abstract class BaseFragment extends Fragment { - protected Dialog mCurrentProgress; + @Inject + public DialogProgressView mCurrentProgress; protected ElevatedToolbar mToolbar; @@ -26,28 +35,35 @@ public abstract class BaseFragment extends Fragment { mToolbar = toolbar; } - public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); } + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + + MainApplication.appComponent + .baseFragmentComponent() + .create() + .inject(this); + + return view; + } public void onLoadingStarted() { - new Thread(() -> { - BarcodeManager.disable(); - this.openProgress(); - }).start(); + BarcodeManager.disable(); + this.openProgress(); } public void onLoadingEnded() { - new Thread(() -> { - this.closeProgress(); - BarcodeManager.enable(); - }).start(); + this.closeProgress(); + BarcodeManager.enable(); } public void onError(Exception ex) { - this.getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { this.closeProgress(); UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); BarcodeManager.enable(); @@ -65,24 +81,23 @@ public abstract class BaseFragment extends Fragment { } protected void openProgress() { - getActivity().runOnUiThread(() -> { - if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity()); + requireActivity().runOnUiThread(() -> { + if (!this.mCurrentProgress.isVisible() && !this.mCurrentProgress.isAdded()) { + this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag"); } }); } protected void closeProgress() { - getActivity().runOnUiThread(() -> { - if (mCurrentProgress != null) { + requireActivity().runOnUiThread(() -> { + if (mCurrentProgress.isVisible()) { mCurrentProgress.dismiss(); - mCurrentProgress = null; } }); } protected void popMe() { - getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { ((IPoppableActivity) requireActivity()).pop(); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragmentComponent.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragmentComponent.java new file mode 100644 index 00000000..91e1cacb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragmentComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.core.expansion; + +import dagger.Subcomponent; + +@Subcomponent +public interface BaseFragmentComponent { + + @Subcomponent.Factory + interface Factory { + BaseFragmentComponent create(); + } + + void inject(BaseFragment baseFragment); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragmentModule.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragmentModule.java new file mode 100644 index 00000000..2b161e90 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragmentModule.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.expansion; + +import dagger.Module; + +@Module(subcomponents = BaseFragmentComponent.class) +public class BaseFragmentModule { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java index a73a097f..38458d0a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -60,7 +60,7 @@ public class MtbColr extends EntityBase { public MtbColr() { type = "mtb_colr"; - if(SettingsManager.i().isUserLoggedIn()) { + if (SettingsManager.i().isUserLoggedIn()) { setUtente(SettingsManager.i().getUser().getFullname()); } } @@ -82,7 +82,6 @@ public class MtbColr extends EntityBase { } - public MtbColr setGestione(GestioneEnum gestione) { this.gestione = gestione.getText(); return this; @@ -124,6 +123,11 @@ public class MtbColr extends EntityBase { return this; } + public MtbColr setDataCollo(Date dataCollo) { + setDataCollo(UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); + return this; + } + public Integer getRiga() { return riga; @@ -301,8 +305,6 @@ public class MtbColr extends EntityBase { } - - public String getDatetimeRowS() { return datetimeRow; } @@ -322,11 +324,6 @@ public class MtbColr extends EntityBase { } - - - - - public String getCodJcom() { return codJcom; } @@ -364,11 +361,6 @@ public class MtbColr extends EntityBase { } - - - - - public String getDataScadPartitaS() { return dataScadPartita; } @@ -398,7 +390,6 @@ public class MtbColr extends EntityBase { } - public String getUntMis() { return untMis; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index bab4b01c..54ab7855 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -57,6 +57,7 @@ public class MtbColt extends EntityBase { private String codJcom; private List mtbCols; + private MtbTCol mtbTCol; private Boolean disablePrint; private String ragSocCliente; @@ -83,7 +84,6 @@ public class MtbColt extends EntityBase { } - private ObservableArrayList mtbColr = new ObservableArrayList<>(); public ObservableArrayList getMtbColr() { @@ -95,12 +95,12 @@ public class MtbColt extends EntityBase { return this; } - public MtbColt(){ + public MtbColt() { type = "mtb_colt"; setDataCollo(UtilityDate.getDateInstance()); setSerCollo("/"); - if(SettingsManager.i().isUserLoggedIn()) { + if (SettingsManager.i().isUserLoggedIn()) { setPreparatoDa(SettingsManager.i().getUser().getFullname()); } } @@ -137,11 +137,11 @@ public class MtbColt extends EntityBase { Date dataColloD = null; try { dataColloD = getDataColloD(); - } catch (Exception ex){ + } catch (Exception ex) { UtilityLogger.errorMe(ex); } - if(dataColloD != null){ + if (dataColloD != null) { return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN_LONG); } else return null; } @@ -392,7 +392,7 @@ public class MtbColt extends EntityBase { public String getTimeVers() { Date dataColloD = getDataVersD(); - if(dataColloD != null){ + if (dataColloD != null) { return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.TIME); } else return null; } @@ -526,6 +526,15 @@ public class MtbColt extends EntityBase { return this; } + public MtbTCol getMtbTCol() { + return mtbTCol; + } + + public MtbColt setMtbTCol(MtbTCol mtbTCol) { + this.mtbTCol = mtbTCol; + return this; + } + public void generaFiltroOrdineFromDTO(List filtroOrdineDtos) { String xmlPrefix = "{\"whereCond\": \""; @@ -533,9 +542,9 @@ public class MtbColt extends EntityBase { StringBuilder whereCond = new StringBuilder(); - if(filtroOrdineDtos != null && filtroOrdineDtos.size() > 0) { + if (filtroOrdineDtos != null && filtroOrdineDtos.size() > 0) { - for(int i = 0; i < filtroOrdineDtos.size(); i++){ + for (int i = 0; i < filtroOrdineDtos.size(); i++) { FiltroOrdineDTO x = filtroOrdineDtos.get(i); try { @@ -545,13 +554,13 @@ public class MtbColt extends EntityBase { UtilityDB.valueToString(UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)), UtilityDB.valueToString(x.getNumOrd()))); - if(!UtilityString.isNullOrEmpty(x.getDataConsS())) { + if (!UtilityString.isNullOrEmpty(x.getDataConsS())) { whereCond.append(String.format(" AND dr.dc = %s", UtilityDB.valueToString(UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)))); } whereCond.append(")"); - if(i < filtroOrdineDtos.size()-1) { + if (i < filtroOrdineDtos.size() - 1) { whereCond.append(" OR "); } } catch (Exception e) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java new file mode 100644 index 00000000..25262c8d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java @@ -0,0 +1,273 @@ +package it.integry.integrywmsnative.core.model; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Created by ValerioC on 06/03/2018. + */ + +public class MvwSitArtUdcDetInventario { + + private String gestione; + private Date dataCollo; + private String serCollo; + private Integer numCollo; + private Integer segno; + private String codMdep; + private String posizione; + private Integer priorita; + private String codGruppo; + private String gruppo; + private String codSgruppo; + private String sottogruppo; + private String codMart; + private String diacod; + private String descrizioneEstesa; + private String partitaMag; + private String codJcom; + private String commessa; + private String untMis; + private BigDecimal qtaCol; + private BigDecimal numCnf; + private BigDecimal qtaCnf; + private BigDecimal pesoNettoKg; + private BigDecimal pesoLordoKg; + private String codJfas; + private MtbAart mtbAart; + + + public String getGestione() { + return gestione; + } + + public MvwSitArtUdcDetInventario setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public Date getDataCollo() { + return dataCollo; + } + + public MvwSitArtUdcDetInventario setDataCollo(Date dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public MvwSitArtUdcDetInventario setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public MvwSitArtUdcDetInventario setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public Integer getSegno() { + return segno; + } + + public MvwSitArtUdcDetInventario setSegno(Integer segno) { + this.segno = segno; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public MvwSitArtUdcDetInventario setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MvwSitArtUdcDetInventario setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public Integer getPriorita() { + return priorita; + } + + public MvwSitArtUdcDetInventario setPriorita(Integer priorita) { + this.priorita = priorita; + return this; + } + + public String getCodGruppo() { + return codGruppo; + } + + public MvwSitArtUdcDetInventario setCodGruppo(String codGruppo) { + this.codGruppo = codGruppo; + return this; + } + + public String getGruppo() { + return gruppo; + } + + public MvwSitArtUdcDetInventario setGruppo(String gruppo) { + this.gruppo = gruppo; + return this; + } + + public String getCodSgruppo() { + return codSgruppo; + } + + public MvwSitArtUdcDetInventario setCodSgruppo(String codSgruppo) { + this.codSgruppo = codSgruppo; + return this; + } + + public String getSottogruppo() { + return sottogruppo; + } + + public MvwSitArtUdcDetInventario setSottogruppo(String sottogruppo) { + this.sottogruppo = sottogruppo; + return this; + } + + public String getCodMart() { + return codMart; + } + + public MvwSitArtUdcDetInventario setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDiacod() { + return diacod; + } + + public MvwSitArtUdcDetInventario setDiacod(String diacod) { + this.diacod = diacod; + return this; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public MvwSitArtUdcDetInventario setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public MvwSitArtUdcDetInventario setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public MvwSitArtUdcDetInventario setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getCommessa() { + return commessa; + } + + public MvwSitArtUdcDetInventario setCommessa(String commessa) { + this.commessa = commessa; + return this; + } + + public String getUntMis() { + return untMis; + } + + public MvwSitArtUdcDetInventario setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public BigDecimal getQtaCol() { + return qtaCol; + } + + public MvwSitArtUdcDetInventario setQtaCol(BigDecimal qtaCol) { + this.qtaCol = qtaCol; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public MvwSitArtUdcDetInventario setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public MvwSitArtUdcDetInventario setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public BigDecimal getPesoNettoKg() { + return pesoNettoKg; + } + + public MvwSitArtUdcDetInventario setPesoNettoKg(BigDecimal pesoNettoKg) { + this.pesoNettoKg = pesoNettoKg; + return this; + } + + public BigDecimal getPesoLordoKg() { + return pesoLordoKg; + } + + public MvwSitArtUdcDetInventario setPesoLordoKg(BigDecimal pesoLordoKg) { + this.pesoLordoKg = pesoLordoKg; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public MvwSitArtUdcDetInventario setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public MvwSitArtUdcDetInventario setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java index 23eda756..deadedff 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java @@ -83,7 +83,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer { @Override public void onResponse(Call> call, Response> response) { analyzeAnswer(response, "getByCodMart", (m) -> { - if(response.body().getEntityList() != null && !response.body().getEntityList().isEmpty()) { + if (response.body().getEntityList() != null && !response.body().getEntityList().isEmpty()) { onComplete.run(response.body().getEntityList().get(0)); } else onComplete.run(null); @@ -107,9 +107,10 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer { }) .toList(); - var whereCond = " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondMap); + var whereCond = whereCondMap.isEmpty() ? "" : " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondMap); - Type typeOfObjectsList = new TypeToken>() {}.getType(); + Type typeOfObjectsList = new TypeToken>() { + }.getType(); this.systemRESTConsumer.processSql("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList, onComplete, onFailed); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index 7eb06e37..22658517 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -155,7 +155,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { mtbColrClone .setNumCollo(null) - .setDataCollo(null) + .setDataCollo((String) null) .setRiga(null) .setGestione(GestioneEnum.LAVORAZIONE) @@ -209,7 +209,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { MtbColr mtbColrClone = new MtbColr(); mtbColrClone .setNumCollo(null) - .setDataCollo(null) + .setDataCollo((String) null) .setRiga(null) .setGestione(GestioneEnum.LAVORAZIONE) .setDataColloRif(sourceMtbColt.getDataColloD()) @@ -239,7 +239,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { saveCollo(newMtbColt, onComplete, onFailed); } - public void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, GestioneEnum gestione, RunnableArgs onComplete, RunnableArgs onFailed) { createColloFromEtichettaAnonima(barcodeScanDTO.getStringValue(), gestione, onComplete, onFailed); } @@ -399,7 +398,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }, onFailed); } - private void cyclicGetMultipleByTestate(@NotNull Iterator sourceMtbColts, boolean onlyResiduo, ArrayList resultMtbColt, Runnable onComplete, RunnableArgs onAbort) { if (sourceMtbColts.hasNext()) { getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> { @@ -449,7 +447,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } - public void changePosizione(MtbColt mtbColtToMove, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs onFailed) { String codMdep = posizione.getCodMdep(); @@ -545,7 +542,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }, onFailed); } - public static void retrieveBasketColli(RunnableArgs> onComplete, RunnableArgs onFailed) { ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); colliMagazzinoRESTConsumerService.getColliInBasket(SettingsManager.i().getUserSession().getDepo().getCodMdep()).enqueue(new Callback>>() { @@ -622,7 +618,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } - public void assegnaLottoSuColloScarico(MtbColt sourceMtbColt, Runnable onComplete, RunnableArgs onFailed) { MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone(); @@ -648,7 +643,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } - public void versamentoAutomaticoUL(MtbColt sourceMtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone(); @@ -682,7 +676,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())) .findFirst(); - if(mtbAartOpt.isPresent()){ + if (mtbAartOpt.isPresent()) { foundMtbAart = mtbAartOpt.get(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumer.java new file mode 100644 index 00000000..d784d61c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumer.java @@ -0,0 +1,69 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; +import it.integry.integrywmsnative.core.utility.UtilityQuery; + +@Singleton +public class GiacenzaRESTConsumer extends _BaseRESTConsumer { + + private final SystemRESTConsumer mSystemRESTConsumer; + private final ArticoloRESTConsumer mArticoloRESTConsumer; + + public GiacenzaRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + this.mSystemRESTConsumer = systemRESTConsumer; + this.mArticoloRESTConsumer = articoloRESTConsumer; + + } + + public void getGiacenzeInPosizione(MtbDepoPosizione posizione, RunnableArgs> onComplete, RunnableArgs onFailed) { + + HashMap params = new HashMap<>(); + params.put("posizione", posizione.getPosizione()); + String whereCond = UtilityQuery.concatFieldsInWhereCond(params); + String query = "SELECT * from mvw_sitart_udc_det_inventario" + + " WHERE " + whereCond; + + + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + this.mSystemRESTConsumer.>processSql(query, typeOfObjectsList, inventarioList -> { + List codMarts = Stream.of(inventarioList) + .map(x -> x.getCodMart().trim()) + .toList(); + + mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> { + for (var row : inventarioList) { + + MtbAart foundMtbAart = null; + Optional mtbAartOpt = Stream.of(mtbAarts) + .filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart())) + .findFirst(); + + if (mtbAartOpt.isPresent()) { + foundMtbAart = mtbAartOpt.get(); + } + + row.setMtbAart(foundMtbAart); + } + + onComplete.run(inventarioList); + }, onFailed); + }, onFailed); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumerService.java new file mode 100644 index 00000000..17d3460c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumerService.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +public interface GiacenzaRESTConsumerService { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java index 65cd40d4..1155243f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java @@ -4,6 +4,9 @@ import android.text.TextUtils; import android.util.Log; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; import com.orhanobut.logger.Logger; @@ -13,20 +16,22 @@ import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.inject.Singleton; import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.MailRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityString; import retrofit2.Call; @@ -46,7 +51,17 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { @Override public void onResponse(Call> call, Response> response) { analyzeAnswer(response, "ProcessSql", o -> { - Gson gson = new Gson(); + Gson gson = new GsonBuilder() + .registerTypeAdapter(Date.class, (JsonDeserializer) (json, typeOfT, context) -> { + try { + return UtilityDate.recognizeDate(json.getAsString()); + } catch (Exception e) { + throw new JsonParseException(e); + } + }) + .create(); + + String json = gson.toJson(o); InputStream ims = new ByteArrayInputStream(json.getBytes()); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/services/inventario/InventarioService.java b/app/src/main/java/it/integry/integrywmsnative/core/services/inventario/InventarioService.java new file mode 100644 index 00000000..587147a6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/services/inventario/InventarioService.java @@ -0,0 +1,104 @@ +package it.integry.integrywmsnative.core.services.inventario; + +import androidx.databinding.ObservableArrayList; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; +import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; + +@Singleton +public class InventarioService { + + private final GiacenzaRESTConsumer mGiacenzaRESTConsumer; + + public InventarioService(GiacenzaRESTConsumer giacenzaRESTConsumer) { + this.mGiacenzaRESTConsumer = giacenzaRESTConsumer; + } + + public void getInventarioDaPosizione(MtbDepoPosizione posizione, RunnableArgs> onSuccess, RunnableArgs onError) { + mGiacenzaRESTConsumer.getGiacenzeInPosizione(posizione, onSuccess, onError); + } + + public void getInventarioDaPosizionePerArticolo(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgs> onSuccess, RunnableArgs onError) { + getInventarioDaPosizione(posizione, (inventario) -> { + List inventarioArticolo = Stream.of(inventario).filter( + x -> articolo.getCodMart().equalsIgnoreCase(x.getCodMart()) + ).toList(); + onSuccess.run(inventarioArticolo); + }, onError); + } + + public MtbColt mapInventarioToMtbColt(MvwSitArtUdcDetInventario inventario) { + return mapInventarioToMtbColt(inventario, true); + } + + public MtbColt mapInventarioToMtbColt(MvwSitArtUdcDetInventario inventario, boolean includeRows) { + MtbColt mtbColt = new MtbColt(); + + mtbColt.setGestione(inventario.getGestione()); + mtbColt.setDataCollo(inventario.getDataCollo()); + mtbColt.setSerCollo(inventario.getSerCollo()); + mtbColt.setNumCollo(inventario.getNumCollo()); + mtbColt.setSegno(inventario.getSegno()); + mtbColt.setCodMdep(inventario.getCodMdep()); + mtbColt.setPosizione(inventario.getPosizione()); + mtbColt.setCodJcom(inventario.getCodJcom()); + mtbColt.setPesoNettoKg(inventario.getPesoNettoKg()); + mtbColt.setPesoKg(inventario.getPesoLordoKg()); + mtbColt.setCodJfas(inventario.getCodJfas()); + + if (includeRows) { + ObservableArrayList rows = new ObservableArrayList<>(); + rows.add(mapInventarioToMtbColr(inventario)); + mtbColt.setMtbColr(rows); + } + return mtbColt; + } + + public MtbColr mapInventarioToMtbColr(MvwSitArtUdcDetInventario inventario) { + MtbColr mtbColr = new MtbColr(); + + mtbColr.setGestione(inventario.getGestione()); + mtbColr.setDataCollo(inventario.getDataCollo()); + mtbColr.setSerCollo(inventario.getSerCollo()); + mtbColr.setNumCollo(inventario.getNumCollo()); + mtbColr.setCodMart(inventario.getCodMart()); + mtbColr.setDescrizione(inventario.getDescrizioneEstesa()); + mtbColr.setPartitaMag(inventario.getPartitaMag()); + mtbColr.setCodJcom(inventario.getCodJcom()); + mtbColr.setUntMis(inventario.getUntMis()); + mtbColr.setQtaCol(inventario.getQtaCol()); + mtbColr.setNumCnf(inventario.getNumCnf()); + mtbColr.setQtaCnf(inventario.getQtaCnf()); + mtbColr.setPesoNettoKg(inventario.getPesoNettoKg()); + mtbColr.setPesoLordoKg(inventario.getPesoLordoKg()); + mtbColr.setMtbAart(inventario.getMtbAart()); + + + return mtbColr; + } + + public List mapInventarioToMtbColtList(List inventario) { + return new ArrayList<>(Stream.of(inventario).groupBy(x -> x.getNumCollo() + "-" + x.getDataCollo() + "-" + x.getSerCollo() + x.getGestione()).map(inv -> { + List rows = inv.getValue(); + MtbColt mtbColt = mapInventarioToMtbColt(rows.get(0), false); + ObservableArrayList mtbColrs = new ObservableArrayList<>(); + mtbColrs.addAll(Stream.of(rows).map(this::mapInventarioToMtbColr).toList()); + mtbColt.setMtbColr(mtbColrs); + return mtbColt; + }).toList()); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 0528c066..6983010e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -3,10 +3,10 @@ package it.integry.integrywmsnative.core.settings; import java.util.ArrayList; import java.util.List; -import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; -import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; public class DBSettingsModel { @@ -36,6 +36,8 @@ public class DBSettingsModel { private boolean flagSpedizioneCanSelectMultipleOrders; private List notePerditaDocInterni = new ArrayList<>(); private boolean flagSpedizioneUseQtaOrd; + private boolean flagOrdinaNuoviArticoliInGriglia; + private String docInterniCheckFornitore; private String produzioneDefaultCodAnag; private String reportNameSpedizionChiudiOrdine; private int onNumCnfInputChanged = 1; @@ -72,7 +74,7 @@ public class DBSettingsModel { } public DBSettingsModel setDatiAzienda(Azienda datiAzienda) { - this.datiAzienda = datiAzienda; + this.datiAzienda = datiAzienda; return this; } @@ -247,6 +249,15 @@ public class DBSettingsModel { return this; } + public DBSettingsModel setFlagOrdinaNuoviArticoliInGriglia(boolean flagOrdinaNuoviArticoliInGriglia) { + this.flagOrdinaNuoviArticoliInGriglia = flagOrdinaNuoviArticoliInGriglia; + return this; + } + + public boolean getFlagOrdinaNuoviArticoliInGriglia() { + return this.flagOrdinaNuoviArticoliInGriglia; + } + public String getProduzioneDefaultCodAnag() { return produzioneDefaultCodAnag; } @@ -282,4 +293,13 @@ public class DBSettingsModel { this.notePerditaDocInterni = notePerditaDocInterni; return this; } + + public String getDocInterniCheckFornitore() { + return docInterniCheckFornitore; + } + + public DBSettingsModel setDocInterniCheckFornitore(String docInterniCheckFornitore) { + this.docInterniCheckFornitore = docInterniCheckFornitore; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index b32e234f..6d933ddd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -270,6 +270,14 @@ public class SettingsManager { .setGestName("PVM") .setSection("DOC_INTERNI") .setKeySection("NOTE_PERDITA")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PVM") + .setSection("ORDINI_A") + .setKeySection("ORDINA_NUOVI_ARTICOLI")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PVM") + .setSection("DOC_INTERNI") + .setKeySection("CHECK_FORNITORE")); GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { @@ -294,8 +302,11 @@ public class SettingsManager { dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class)); dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class)); dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); - String notePerdita = getValueFromList(list,"DOC_INTERNI","NOTE_PERDITA",String.class); - if (notePerdita != null){ + dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class)); + dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class)); + + String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); + if (notePerdita != null) { dbSettingsModelIstance.setNotePerditaDocInterni(Arrays.asList(notePerdita.split("\\|"))); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java deleted file mode 100644 index 32f4fa16..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java +++ /dev/null @@ -1,60 +0,0 @@ -package it.integry.integrywmsnative.core.update; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.AsyncTask; -import android.os.Environment; -import android.util.Log; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; - -public class UpdateApp extends AsyncTask { - private Context context; - public void setContext(Context contextf){ - context = contextf; - } - - @Override - protected Void doInBackground(String... arg0) { - try { - URL url = new URL(arg0[0]); - HttpURLConnection c = (HttpURLConnection) url.openConnection(); - c.setRequestMethod("GET"); - c.setDoOutput(true); - c.connect(); - - File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); - file.mkdirs(); - File outputFile = new File(file, "update.apk"); - if(outputFile.exists()){ - outputFile.delete(); - } - FileOutputStream fos = new FileOutputStream(outputFile); - - InputStream is = c.getInputStream(); - - byte[] buffer = new byte[1024]; - int len1 = 0; - while ((len1 = is.read(buffer)) != -1) { - fos.write(buffer, 0, len1); - } - fos.close(); - is.close(); - - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)), "application/vnd.android.package-archive"); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error! - context.startActivity(intent); - - - } catch (Exception e) { - Log.e("UpdateAPP", "Update error! " + e.getMessage()); - } - return null; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java index f978434a..3ba6afeb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java @@ -1,30 +1,35 @@ package it.integry.integrywmsnative.core.update; -import android.app.Activity; -import android.app.DownloadManager; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.net.Uri; import android.os.Build; import android.os.Environment; +import androidx.appcompat.app.AppCompatActivity; + import com.github.javiersantos.appupdater.AppUpdater; import com.github.javiersantos.appupdater.enums.Display; import com.github.javiersantos.appupdater.enums.UpdateFrom; import java.io.File; -import it.integry.integrywmsnative.R; +import javax.inject.Singleton; + import it.integry.integrywmsnative.core.class_router.BaseCustomConfiguration; import it.integry.integrywmsnative.core.class_router.ClassRouter; import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration; import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.FileDownloader; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; +@Singleton public class UpdatesManager { - public static void init(Activity context) { + private AppCompatActivity mContext; + + public void init(AppCompatActivity activityContext) { + this.mContext = activityContext; + String suffix; ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION); try { @@ -40,64 +45,67 @@ public class UpdatesManager { String currentDownloadUrl = "http://" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "/ems-api/wms/android-release" + suffix + ".apk"; - AppUpdater appUpdater = new AppUpdater(context) + AppUpdater appUpdater = new AppUpdater(mContext) .setDisplay(Display.DIALOG) .setUpdateFrom(UpdateFrom.JSON) .setUpdateJSON(currentVersionUrl) .setButtonDoNotShowAgain(null) .setButtonUpdateClickListener((dialog, which) -> { - installAPK(context, currentDownloadUrl); + installAPK(currentDownloadUrl); }); appUpdater.start(); } - private static void installAPK(Activity context, String downloadURL) { + private void installAPK(String downloadURL) { + String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"; - String fileName = context.getResources().getString(R.string.app_name) + ".apk"; - destination += fileName; - final Uri uri = Uri.parse("file://" + destination); - //Delete update file if exists - final File file = new File(destination); - if (file.exists()) - file.delete(); + var progressDialog = DialogProgressView.newInstance("Download", null, false); + progressDialog.show(mContext.getSupportFragmentManager(), "tag"); - //set downloadmanager - DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL)); - request.setDescription(context.getString(R.string.notification_update_download)); - request.setTitle(context.getString(R.string.app_name)); - //set destination - request.setDestinationUri(uri); + var fileDownloader = new FileDownloader() + .setDestFolder(destination) + .setUrlString(downloadURL) + .setOnProgressUpdate(progress -> { + mContext.runOnUiThread(() -> { + progressDialog.setProgress(progress); + }); + }) + .setOnDownloadCompleted(destPath -> { - // get download service and enqueue file - final DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); - manager.enqueue(request); + mContext.runOnUiThread(() -> { + progressDialog.dismiss(); - //set BroadcastReceiver to install app when .apk is downloaded - BroadcastReceiver onComplete = new BroadcastReceiver() { - public void onReceive(Context ctxt, Intent i) { + Uri fileLoc; + Intent intent; - Uri fileLoc; - Intent intent; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); + fileLoc = GenericFileProvider.getUriForFile(mContext, + mContext.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider", + new File(destPath)); + } else { + intent = new Intent(Intent.ACTION_VIEW); + fileLoc = Uri.fromFile(new File(destPath)); + } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); - fileLoc = GenericFileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider", file); - } else { - intent = new Intent(Intent.ACTION_VIEW); - fileLoc = Uri.fromFile(file); - } + intent.setDataAndType(fileLoc, "application/vnd.android.package-archive"); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - intent.setDataAndType(fileLoc, "application/vnd.android.package-archive"); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + mContext.startActivity(intent); + }); - context.startActivity(intent); + }); + + + new Thread(() -> { + try { + fileDownloader.download(); + } catch (Exception e) { + e.printStackTrace(); } - }; - - //register receiver for when .apk download is compete - context.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); + }).start(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java new file mode 100644 index 00000000..a3718bee --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java @@ -0,0 +1,113 @@ +package it.integry.integrywmsnative.core.utility; + +import android.webkit.URLUtil; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class FileDownloader { + + private String urlString; + private String destFolder; + + private RunnableArgs onProgressUpdate; + private RunnableArgs onDownloadCompleted; + + + public void download() throws Exception { + InputStream input = null; + OutputStream output = null; + HttpURLConnection connection = null; + String destPathFile; + + try { + File direct = new File(destFolder); + if (!direct.exists()) { + direct.mkdirs(); + } + + URL url = new URL(urlString); + connection = (HttpURLConnection) url.openConnection(); + connection.connect(); + connection.setConnectTimeout(120 * 1000); + + if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) + throw new Exception("Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage()); + + input = connection.getInputStream(); + int totalBytesToDownload = connection.getContentLength(); + int downloadedBytes = 0; + + String title = URLUtil.guessFileName(String.valueOf(url), null, null); + + destPathFile = destFolder + title; + + if (new File(destPathFile).exists()) + new File(destPathFile).delete(); + + output = new FileOutputStream(destPathFile); + + byte[] buf = new byte[1024]; + int len; + while ((len = input.read(buf)) > 0) { + output.write(buf, 0, len); + + downloadedBytes += len; + if (onProgressUpdate != null) + onProgressUpdate.run((downloadedBytes * 100) / totalBytesToDownload); + } + + } catch (Exception e) { + throw e; + + } finally { + try { + if (output != null) + output.close(); + if (input != null) + input.close(); + } catch (IOException ignored) { + } + if (connection != null) + connection.disconnect(); + } + + if (onDownloadCompleted != null) onDownloadCompleted.run(destPathFile); + } + + + public String getUrlString() { + return urlString; + } + + public FileDownloader setUrlString(String urlString) { + this.urlString = urlString; + return this; + } + + public String getDestFolder() { + return destFolder; + } + + public FileDownloader setDestFolder(String destFolder) { + this.destFolder = destFolder; + return this; + } + + public FileDownloader setOnProgressUpdate(RunnableArgs onProgressUpdate) { + this.onProgressUpdate = onProgressUpdate; + return this; + } + + public FileDownloader setOnDownloadCompleted(RunnableArgs onDownloadCompleted) { + this.onDownloadCompleted = onDownloadCompleted; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java index 0b1b6e37..e43108db 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.core.utility; -import android.app.Dialog; import android.content.Context; import android.text.Html; @@ -13,6 +12,7 @@ import com.orhanobut.logger.Logger; import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.rest.CommonRESTException; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class UtilityExceptions { @@ -21,9 +21,9 @@ public class UtilityExceptions { }; - public static void defaultException(Context context, Exception ex, Dialog progressDialog) { + public static void defaultException(Context context, Exception ex, DialogProgressView progressDialog) { defaultException(context, ex); - if (progressDialog != null) progressDialog.dismiss(); + if (progressDialog != null && progressDialog.isVisible()) progressDialog.dismiss(); } public static void defaultException(Context context, Exception ex) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityFocus.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityFocus.java index 93d47c27..0315d040 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityFocus.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityFocus.java @@ -8,7 +8,8 @@ public class UtilityFocus { public static void focusTextBox(Context context, EditText editTextToFocus) { editTextToFocus.requestFocus(); - + editTextToFocus.setSelectAllOnFocus(true); + editTextToFocus.selectAll(); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editTextToFocus, InputMethodManager.SHOW_IMPLICIT); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java index a36929e9..085b1a09 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java @@ -1,7 +1,5 @@ package it.integry.integrywmsnative.core.utility; -import com.google.android.gms.common.internal.service.Common; - import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java index 67974ed9..de3b328f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java @@ -31,10 +31,13 @@ public class UtilityPosizione { } public static MtbDepoPosizione getFromCache(String posizione) { - List tmpList = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + var availablePosizioni = SettingsManager.iDB().getAvailablePosizioni(); + if(availablePosizioni == null) return null; + + List tmpList = Stream.of(availablePosizioni) .filter(x -> x.getPosizione().equalsIgnoreCase(posizione)).toList(); - if(tmpList != null && tmpList.size() > 0) return tmpList.get(0); + if(tmpList.size() > 0) return tmpList.get(0); else return null; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java index 800c42c3..17887c96 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java @@ -1,25 +1,21 @@ package it.integry.integrywmsnative.core.utility; -import android.app.Dialog; -import android.content.Context; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; -import it.integry.integrywmsnative.view.dialogs.DialogProgress; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public class UtilityProgress { - public static Dialog createDefaultProgressDialog(Context mContext) { -// final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), -// mContext.getText(R.string.loading) + " ...", true); -// -// return progress; - - Dialog progress = DialogProgress.make(mContext); - progress.show(); + public static DialogProgressView createDefaultProgressDialog(FragmentActivity mContext) { + var progress = DialogProgressView.newInstance(); + progress.show(mContext.getSupportFragmentManager(), "tag"); return progress; } - public static Dialog createDefaultProgressDialog(Context mContext,String subtitle) { - Dialog progress = DialogProgress.make(mContext,subtitle); - progress.show(); + + public static DialogProgressView createDefaultProgressDialog(AppCompatActivity mContext, String title, String subtitle) { + DialogProgressView progress = DialogProgressView.newInstance(title, subtitle, true); + progress.show(mContext.getSupportFragmentManager(), "tag"); return progress; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java index 30dbcaf0..6857bda6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java @@ -41,6 +41,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; @@ -72,9 +73,9 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; +import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialog; 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.note_aggiuntive_lu.NoteAggiuntiveLUDialog; import it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView; public class AccettazionePickingActivity extends BaseActivity implements AccettazionePickingViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener { @@ -791,9 +792,9 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta } @Override - public void onNoteAggiuntiveRequest(RunnableArgs onComplete) { + public void onInfoAggiuntiveRequest(RunnableArgss onComplete) { runOnUiThread(() -> { - NoteAggiuntiveLUDialog.make(this, onComplete).show(); + InfoAggiuntiveLUDialog.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index d72c941b..d4bc5649 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -34,6 +34,7 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; @@ -359,7 +360,7 @@ public class AccettazionePickingViewModel { } public void createNewLU(Integer customNumCollo, String customSerCollo, boolean disablePrint, Runnable onComplete) { - this.sendOnNoteAggiuntiveRequest(additionalNotes -> { + this.sendOnInfoAggiuntiveRequest((additionalNotes, tCol) -> { this.mGestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_POSIZIONE_COLLI_ACCETTAZIONE", defaultPosAccettazioneDTO -> { @@ -375,6 +376,11 @@ public class AccettazionePickingViewModel { .setPosizione(defaultPosAccettazione) .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + if (tCol != null) { + mtbColt.setCodTcol(tCol.getCodTcol()); + mtbColt.setMtbTCol(tCol); + } + if (customNumCollo != null) { mtbColt.setNumCollo(customNumCollo); } @@ -896,8 +902,8 @@ public class AccettazionePickingViewModel { if (this.mListener != null) this.mListener.onVersamentoAutomaticoULRequest(onComplete); } - private void sendOnNoteAggiuntiveRequest(RunnableArgs onComplete) { - if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete); + private void sendOnInfoAggiuntiveRequest(RunnableArgss onComplete) { + if (this.mListener != null) this.mListener.onInfoAggiuntiveRequest(onComplete); } private void sendError(Exception ex) { @@ -990,7 +996,7 @@ public class AccettazionePickingViewModel { void onVersamentoAutomaticoULRequest(RunnableArgs onComplete); - void onNoteAggiuntiveRequest(RunnableArgs onComplete); + void onInfoAggiuntiveRequest(RunnableArgss onComplete); void onError(Exception ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java index ed158cf7..8ac7bfe0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java @@ -6,14 +6,11 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniViewModel; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; @@ -94,11 +91,11 @@ public class DialogSelectDocInfoViewModel { } public List getAvailableCodDtips() { - return Stream.of(mDocInterniSetupDTO.getTipiDoc()).map(TipiDocDTO::getLabel).toList(); + return mDocInterniSetupDTO.getTipiDoc() != null ? Stream.of(mDocInterniSetupDTO.getTipiDoc()).map(TipiDocDTO::getLabel).toList() : new ArrayList<>(); } public List getAvailableCodMgrps() { - return Stream.of(mDocInterniSetupDTO.getGruppiArt()).map(GruppiArticoloDTO::getLabel).toList(); + return mDocInterniSetupDTO.getGruppiArt() != null ? Stream.of(mDocInterniSetupDTO.getGruppiArt()).map(GruppiArticoloDTO::getLabel).toList() : new ArrayList<>(); } public List getAvailableFornitori() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java index 7b964890..a017beec 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java @@ -13,6 +13,10 @@ public class ColloDTO { private String segno; private String idDisp; private String codDtip; + private String codAnag; + private String codVdes; + private Integer numDoc; + private Date dataDoc; private List artRows = new ArrayList<>(); private RifOrd rifOrd; @@ -88,6 +92,42 @@ public class ColloDTO { return rifOrd; } + public String getCodAnag() { + return codAnag; + } + + public ColloDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public Integer getNumDoc() { + return numDoc; + } + + public ColloDTO setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + return this; + } + + public Date getDataDoc() { + return dataDoc; + } + + public ColloDTO setDataDoc(Date dataDoc) { + this.dataDoc = dataDoc; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public ColloDTO setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + public void setRifOrd(RifOrd rifOrd) { this.rifOrd = rifOrd; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java new file mode 100644 index 00000000..3c48b2fa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java @@ -0,0 +1,85 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class DialogChooseRowFromListaDocRowsListModel { + + private String codMart; + private String descrizione; + private String qtaOrdReadable; + private String barcode; + private boolean isNew; + private SqlMtbColr originalModel; + private BindableBoolean checked = new BindableBoolean(false); + + public DialogChooseRowFromListaDocRowsListModel() { + } + + public BindableBoolean getChecked() { + return checked; + } + + public DialogChooseRowFromListaDocRowsListModel setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public void toggleCheck() { + this.checked.set(!this.checked.get()); + } + + public String getCodMart() { + return codMart; + } + + public DialogChooseRowFromListaDocRowsListModel setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public DialogChooseRowFromListaDocRowsListModel setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getQtaOrdReadable() { + return qtaOrdReadable; + } + + public DialogChooseRowFromListaDocRowsListModel setQtaOrdReadable(String qtaOrdReadable) { + this.qtaOrdReadable = qtaOrdReadable; + return this; + } + + public String getBarcode() { + return barcode; + } + + public DialogChooseRowFromListaDocRowsListModel setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public boolean isNew() { + return isNew; + } + + public DialogChooseRowFromListaDocRowsListModel setNew(boolean aNew) { + isNew = aNew; + return this; + } + + public SqlMtbColr getOriginalModel() { + return originalModel; + } + + public DialogChooseRowFromListaDocRowsListModel setOriginalModel(SqlMtbColr originalModel) { + this.originalModel = originalModel; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java index 349e46c9..9db96088 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java @@ -14,6 +14,7 @@ public class GrigliaAcquistiChildDTO { public String flagQtaMultipla; public String flagTracciabilita; public BigDecimal qtaMinOrdinabile; + public boolean newNoPromo; private int ggScadenza; private float giacenza; private float qtaPrevistaVendita; @@ -144,4 +145,13 @@ public class GrigliaAcquistiChildDTO { this.qtaProposta = qtaProposta; return this; } + + public boolean isNewNoPromo() { + return newNoPromo; + } + + public GrigliaAcquistiChildDTO setNewNoPromo(boolean newNoPromo) { + this.newNoPromo = newNoPromo; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index 603ad11f..88527b6c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -39,6 +39,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; @@ -49,8 +50,8 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua public class DocInterniEditFormActivity extends BaseActivity implements DocInterniEditFormViewModel.Listener, BottomSheetMtbColrEditView.Listener { - private static String DATA_KEY_DOCUMENT = "document"; - private static String DATA_KEY_PRODUCTS_LIST = "productsList"; + private static final String DATA_KEY_DOCUMENT = "document"; + private static final String DATA_KEY_PRODUCTS_LIST = "productsList"; @Inject MtbColrRepository documentRowsRepository; @@ -101,22 +102,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter SqlMtbColt document = this.viewModel.getDocument(); this.codDtip.set(document.getCodDtipProvv()); this.note.set(document.getAnnotazioni()); - if(document.getCodMgrp() != null){ + if (document.getCodMgrp() != null) { this.codMgrp.set(document.getCodMgrp()); - }else{ + } else { binding.mtbGrupContainer.setVisibility(View.GONE); } - if (document.getCodAnag() != null){ - this.codAnag.set(document.getCodAnag() + (document.getCodVdes()!=null?" - "+document.getCodVdes():"")); - }else{ + if (document.getCodAnag() != null) { + this.codAnag.set(document.getCodAnag() + (document.getCodVdes() != null ? " - " + document.getCodVdes() : "")); + } else { this.binding.supplierLayout.setVisibility(View.GONE); } this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv())); - if (document.getNumDoc() != null && document.getDataDoc() != null){ + if (document.getNumDoc() != null && document.getDataDoc() != null) { this.documentRifHeader.set(String.format(this.getString(R.string.doc_testata), document.getNumDoc().toString(), document.getDataDoc())); - }else{ + } else { this.binding.docRifLayout.setVisibility(View.GONE); } } @@ -133,11 +134,13 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } private void initViewModel(SqlMtbColt document, List productList) { + this.viewModel.init(); this.viewModel.setListeners(this); this.viewModel.setDocument(document); this.viewModel.setProductsList(productList); } + private void initRecyclerView() { this.viewModel.docRows.observe(this, this::refreshList); DocumentRowsListAdapter listAdapter = new DocumentRowsListAdapter(this, documentRowsObservableList); @@ -156,14 +159,13 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } - public void closeEdit() { this.onBackPressed(); } public void manualSearch() { BarcodeManager.disable(); - DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", null, this.viewModel::onSearch, BarcodeManager::enable).show(); + DialogSimpleInputHelper.makeInputDialog(this, "Ricerca articolo", null, "Cod articolo / Barcode", this.viewModel::onSearch, BarcodeManager::enable).show(); } @@ -184,7 +186,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() - .setOnScanSuccessfull(this.viewModel::onScanSuccessful) + .setOnScanSuccessfull(this.viewModel::processBarcode) .setOnScanFailed(this::onError)); this.viewModel.fetchDocumentRows(); } @@ -209,6 +211,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita) { + this.onLoadingStarted(); MtbAart mtbAart = new MtbAart(); mtbAart.setBarCode(row.getCodBarre()); mtbAart.setDiacod(row.getCodBarre()); @@ -217,7 +220,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter mtbAart.setQtaCnf(BigDecimal.valueOf(row.getQtaCnf())); mtbAart.setDescrizione(row.getDescrizione()); mtbAart.setDescrizioneEstesa(row.getDescrizione()); - mtbAart.setFlagTracciabilita(flagTracciabilita? "S" : "N"); + mtbAart.setFlagTracciabilita(flagTracciabilita ? "S" : "N"); mtbAart.setUntMis(row.getUntMis()); DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() @@ -226,6 +229,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter .setInitialQtaCnf(BigDecimal.valueOf(row.getQtaCnf())) .setInitialQtaTot(BigDecimal.valueOf(row.getQtaCol())) .setNote(row.getNote()) + .setSaveOnImeDone(true) .setPartitaMag(row.getPartitaMag()) .setDataScad(row.getDataScad()) .setCanOverflowOrderQuantity(false) @@ -236,12 +240,11 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter .setSuggestPartitaMag(data -> { Date dataScad = data.getDataScad(); String partitaMag = null; - if (dataScad != null){ + if (dataScad != null) { partitaMag = new SimpleDateFormat("yyyymmdd").format(dataScad); } return partitaMag; }); - DialogInputQuantityV2View .newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { this.onLoadingStarted(); @@ -271,7 +274,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onMtbColrEdit(MtbColr mtbColr) { GrigliaAcquistiChildDTO articolo = viewModel.getArticoloByCodMart(mtbColr.getCodMart()); - this.viewModel.editRow(entityToSql(mtbColr),articolo.getFlagTracciabilita().equalsIgnoreCase("S")); + this.viewModel.editRow(entityToSql(mtbColr), articolo.getFlagTracciabilita().equalsIgnoreCase("S")); } @Override @@ -279,6 +282,16 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter this.viewModel.deleteRow(entityToSql(mtbColr)); } + @Override + public void onMultipleRowsFound(List rows, GrigliaAcquistiChildDTO articolo) { + DialogSelectDocRowsView.newInstance(rows, (row) -> { + this.onLoadingEnded(); + if (row != null) { + this.viewModel.editRow(row, (articolo.getFlagTracciabilita().equalsIgnoreCase("S"))); + } + } + ).show(this.getSupportFragmentManager(), "dialogSelectDocRows"); + } private MtbColr sqlToEntity(SqlMtbColr sqlMtbColr) { MtbColr entity = new MtbColr(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index 3cc8ae14..b559a023 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -4,6 +4,10 @@ import androidx.lifecycle.MutableLiveData; import com.annimon.stream.Stream; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONException; +import org.json.JSONObject; + import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -16,6 +20,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ArtDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ColloDTO; @@ -33,7 +38,8 @@ public class DocInterniEditFormViewModel { private final DocInterniRESTConsumer docInterniRESTConsumer; private DocInterniEditFormViewModel.Listener listener; private List productsList; - + private boolean isCheckPartitaMag = false; + private JSONObject checkFornitoreRules = null; public MutableLiveData document = new MutableLiveData<>(); public MutableLiveData> docRows = new MutableLiveData<>(); @@ -45,6 +51,16 @@ public class DocInterniEditFormViewModel { this.docRows.setValue(new ArrayList<>()); } + public void init() { + try { + var docInterniCheckFornitore = SettingsManager.iDB().getDocInterniCheckFornitore(); + this.checkFornitoreRules = docInterniCheckFornitore != null ? new JSONObject(docInterniCheckFornitore) : null; + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void sendOnLoadingStarted() { if (this.listener != null) listener.onLoadingStarted(); } @@ -68,8 +84,8 @@ public class DocInterniEditFormViewModel { } - public void editRow(SqlMtbColr row,boolean flagTracciabilita) { - this.listener.onEditRowRequest(row,flagTracciabilita); + public void editRow(SqlMtbColr row, boolean flagTracciabilita) { + this.listener.onEditRowRequest(row, flagTracciabilita && this.isCheckPartitaMag); } private Integer getNextIdRiga() { @@ -91,7 +107,8 @@ public class DocInterniEditFormViewModel { }, this::sendError); }, this::sendError); } -public void deleteDocument() { + + public void deleteDocument() { this.sendOnLoadingStarted(); docInterniRESTConsumer.saveDoc(this.getSaveDto(), obj -> { SqlMtbColt document = this.getDocument(); @@ -108,46 +125,55 @@ public void deleteDocument() { } public void onSearch(String search) { - this.sendOnLoadingStarted(); GrigliaAcquistiChildDTO articolo = this.searchArticolo(search); if (articolo == null) { this.sendError(new Exception("Nessun articolo corrispondente al codice fornito!")); - this.sendOnLoadingEnded(); return; } - SqlMtbColr row = this.getRowForArticolo(articolo); - this.editRow(row,articolo.getFlagTracciabilita().equalsIgnoreCase("S")); + List rows = this.getRowsForArticolo(articolo); + if (rows.isEmpty()) { + this.sendError(new Exception("Nessun articolo corrispondente al codice fornito!")); + } + if (rows.size() > 1) { + this.listener.onMultipleRowsFound(rows, articolo); + } else { + this.editRow(rows.get(0), (articolo.getFlagTracciabilita().equalsIgnoreCase("S"))); + } } - private SqlMtbColr getRowForArticolo(GrigliaAcquistiChildDTO articolo) { + private List getRowsForArticolo(GrigliaAcquistiChildDTO articolo) { List docRows = this.docRows.getValue(); if (docRows == null) { docRows = new ArrayList<>(); } SqlMtbColt document = this.document.getValue(); - SqlMtbColr row = Stream.of(docRows).filter(docRow -> docRow.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null); - if (row == null) { - row = new SqlMtbColr(); - row.setIdCollo(document.getId()); - row.setRiga(getNextIdRiga()); - row.setCodMart(articolo.getCodMart()); - row.setSerCollo(document.getSerCollo()); - row.setGestione(document.getGestione()); - row.setNumCollo(document.getNumCollo()); - row.setDataCollo(document.getDataCollo()); - row.setDescrizione(articolo.getDescrizione()); - row.setUntMis(articolo.getUntMis()); - row.setCodBarre(articolo.getBarcode()); - row.setQtaCnf(articolo.getQtaCnf().floatValue()); - row.setNumCnf(0f); - row.setQtaCol(0f); - } - return row; + SqlMtbColr row = new SqlMtbColr(); + row.setIdCollo(document.getId()); + row.setRiga(getNextIdRiga()); + row.setCodMart(articolo.getCodMart()); + row.setSerCollo(document.getSerCollo()); + row.setGestione(document.getGestione()); + row.setNumCollo(document.getNumCollo()); + row.setDataCollo(document.getDataCollo()); + row.setDescrizione(articolo.getDescrizione()); + row.setUntMis(articolo.getUntMis()); + row.setCodBarre(articolo.getBarcode()); + row.setQtaCnf(articolo.getQtaCnf().floatValue()); + row.setNumCnf(0f); + row.setQtaCol(0f); + List rows = Stream.of(docRows).filter(docRow -> docRow.getCodMart().equalsIgnoreCase(articolo.getCodMart())).toList(); + rows.add(row); + return rows; } private GrigliaAcquistiChildDTO searchArticolo(String filter) { - return Stream.of(this.productsList).filter(dto -> dto.getCodMart().equalsIgnoreCase(filter) || dto.getBarcode().equalsIgnoreCase(filter)).findFirstOrElse(null); + return Stream.of(this.productsList).filter(dto -> + filter.equalsIgnoreCase(dto.getCodMart()) + || filter.equalsIgnoreCase(dto.getBarcode()) + || StringUtils.leftPad(filter, 13, '0').equalsIgnoreCase(dto.getCodMart()) + || StringUtils.leftPad(filter, 13, '0').equalsIgnoreCase(dto.getBarcode()) + ).findFirstOrElse(null); } private SaveDTO getSaveDto() { @@ -168,6 +194,10 @@ public void deleteDocument() { collo.setCreatedDate(UtilityDate.formatDate(document.getDataCollo(), UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); collo.setAnnotazioni(document.getAnnotazioni()); collo.setSegno(saveDTO.getSegno()); + collo.setDataDoc(document.getDataDoc()); + collo.setNumDoc(document.getNumDoc()); + collo.setCodAnag(document.getCodAnag()); + collo.setCodVdes(document.getCodVdes()); for (SqlMtbColr row : this.getDocumentRows()) { ArtDTO artDto = new ArtDTO(); @@ -195,6 +225,26 @@ public void deleteDocument() { public void setDocument(SqlMtbColt document) { this.document.setValue(document); + this.initCheckFornitore(); + } + + private void initCheckFornitore() { + SqlMtbColt doc = this.document.getValue(); + boolean isCheckPartitaMag = false; + if (doc != null && this.checkFornitoreRules != null) { + String key = doc.getCodAnag(); + if (doc.getCodVdes() != null && !doc.getCodVdes().isEmpty()) { + key += "-" + doc.getCodVdes(); + } + try { + if (this.checkFornitoreRules.has(key) && ((String) ((JSONObject) this.checkFornitoreRules.get(key)).get(doc.getCodDtipProvv())).equalsIgnoreCase("check-partitaMag")) { + isCheckPartitaMag = true; + } + } catch (Exception ignored) { + } + + } + this.isCheckPartitaMag = isCheckPartitaMag; } public SqlMtbColt getDocument() { @@ -209,7 +259,7 @@ public void deleteDocument() { this.productsList = productsList; } - public void onScanSuccessful(BarcodeScanDTO dto) { + public void processBarcode(BarcodeScanDTO dto) { String code = dto.getStringValue(); this.onSearch(code); } @@ -246,7 +296,7 @@ public void deleteDocument() { } public GrigliaAcquistiChildDTO getArticoloByCodMart(String codMart) { - return Stream.of(productsList).filter(prod->prod.codMart.equalsIgnoreCase(codMart)).findFirstOrElse(null); + return Stream.of(productsList).filter(prod -> prod.codMart.equalsIgnoreCase(codMart)).findFirstOrElse(null); } public interface Listener extends ILoadingListener { @@ -255,7 +305,9 @@ public void deleteDocument() { void onRowsChanged(List rows); - void onEditRowRequest(SqlMtbColr row,boolean flagTracciabilita); + void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita); + + void onMultipleRowsFound(List rows, GrigliaAcquistiChildDTO articolo); void onDocumentHoldRequest(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java new file mode 100644 index 00000000..29bb8f1c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogSelectDocRowsComponent { + + @Subcomponent.Factory + interface Factory { + DialogSelectDocRowsComponent create(); + } + + + void inject(DialogSelectDocRowsView dialogSelectDocInfoView); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java new file mode 100644 index 00000000..499da135 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import dagger.Module; + +@Module(subcomponents = DialogSelectDocRowsComponent.class) +public class DialogSelectDocRowsModule { + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java new file mode 100644 index 00000000..4da76842 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java @@ -0,0 +1,143 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import android.content.DialogInterface; +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 android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.List; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.DialogChooseRowFromListaDocRowsLayoutBinding; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DialogChooseRowFromListaDocRowsListModel; +import kotlin.Unit; + +public class DialogSelectDocRowsView extends BaseDialogFragment { + + private final RunnableArgs onRowSelected; + private final List listArts; + private final MutableLiveData> listModels = new MutableLiveData<>(); + private DialogChooseRowFromListaDocRowsLayoutBinding binding; + public MutableLiveData selectedRow = new MutableLiveData<>(); + + public static DialogSelectDocRowsView newInstance( + List listArts, + RunnableArgs onDismiss + ) { + return new DialogSelectDocRowsView(listArts, onDismiss); + } + + + private DialogSelectDocRowsView(List listArts, RunnableArgs onDismiss) { + super(); + this.onRowSelected = onDismiss; + this.listArts = listArts; + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + if (onRowSelected != null) onRowSelected.run(this.selectedRow.getValue()); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_row_from_lista_doc_rows_layout, container, false); + binding.setLifecycleOwner(this); + MainApplication + .appComponent + .dialogSelectDocRowsComponent() + .create() + .inject(this); + binding.setView(this); + + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + initView(); + this.refreshList(); + + + binding.positiveButton.setOnClickListener(view -> { + getDialog().dismiss(); + }); + + binding.negativeButton.setOnClickListener(view -> { + this.selectedRow.setValue(null); + getDialog().dismiss(); + }); + + + this.onLoadingEnded(); + return binding.getRoot(); + } + + private void refreshList() { + var list = Stream.of(this.listArts).map(row -> { + DialogChooseRowFromListaDocRowsListModel model = new DialogChooseRowFromListaDocRowsListModel(); + model.setCodMart(row.getCodMart()); + model.setBarcode(row.getCodMart()); + model.setOriginalModel(row); + model.setNew(row.getId() < 1); + model.setDescrizione(row.getDescrizione()); + model.setQtaOrdReadable(row.getQtaCol() + "\n" + row.getUntMis()); + model.getChecked().addOnPropertyChangedCallback(() -> { + this.checkRow(row, model.getChecked().get()); + }); + return model; + }).toList(); + this.listModels.postValue(list); + + } + + private void checkRow(SqlMtbColr row, boolean checked) { + if (checked) { + this.selectedRow.setValue(row); + var models = this.listModels.getValue(); + if (models != null && !models.isEmpty()) { + Stream.of(models).filter(model -> model.getOriginalModel().getId() != row.getId()).forEach(model -> { + model.getChecked().set(false); + }); + } + } else { + var selectedRow = this.selectedRow.getValue(); + if (selectedRow != null && selectedRow.getId() == row.getId()) { + this.selectedRow.setValue(null); + } + } + } + + private void initView() { + initArrayAdapters(); + } + + private void initArrayAdapters() { + + new LiveAdapter(listModels, getViewLifecycleOwner(), BR.row) + .map(DialogChooseRowFromListaDocRowsListModel.class, R.layout.dialog_choose_row_from_lista_doc_rows__item_model) + .onNoData(noData -> { + binding.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE); + return Unit.INSTANCE; + } + ).into(binding.listaDocRows); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java index 0c76e122..2ba06186 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java @@ -67,6 +67,9 @@ public class MainActivity extends BaseActivity @Inject MainContext mainContext; + @Inject + UpdatesManager updatesManager; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -79,7 +82,7 @@ public class MainActivity extends BaseActivity mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); setContentView(mBinding.getRoot()); - UpdatesManager.init(this); + updatesManager.init(this); UtilityContext.initMainActivity(this); setSupportActionBar(mBinding.appBarMain.toolbar); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index af2c9bba..a06313bc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -138,6 +138,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main_ordini_uscita, container, false); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java index c8e1d912..49931645 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java @@ -155,6 +155,8 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessfull(onScanSuccessful) .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + + BarcodeManager.enable(); } private void initBottomSheet() { @@ -199,10 +201,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme }; public void createNewLU() { - this.onLoadingStarted(); - this.mViewModel.createNewLU(null, null, () -> { - this.onLoadingEnded(); }); } @@ -227,7 +226,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme @Override public void onLUOpened(MtbColt mtbColt) { - getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo())); initAdapter(); @@ -248,7 +247,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme @Override public void onLUClosed() { - getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString()); destroyAdapter(); @@ -289,9 +288,9 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme } @Override - public void onArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort) { + public void onArtSelectionRequest(List mtbColrsToPick, MtbAart mtbAart, RunnableArgs> onComplete, Runnable onAbort) { DialogChooseArtsFromListaArts - .newInstance(mtbColrsToPick, onComplete, () -> { + .newInstance(mtbColrsToPick, mtbAart, onComplete, () -> { onAbort.run(); BarcodeManager.enable(); }) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java index b56e3eb1..5e57fc58 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java @@ -7,6 +7,7 @@ import dagger.Provides; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; @Module(subcomponents = {PickingLiberoComponent.class}) public class PickingLiberoModule { @@ -15,7 +16,9 @@ public class PickingLiberoModule { @Singleton PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer) { - return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer); + BarcodeRESTConsumer barcodeRESTConsumer, + PosizioniRESTConsumer posizioniRESTConsumer + ) { + return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java index 7513606e..9224d462 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java @@ -15,6 +15,7 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener; @@ -23,18 +24,21 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; @@ -48,6 +52,7 @@ public class PickingLiberoViewModel { private final ArticoloRESTConsumer mArticoloRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final PosizioniRESTConsumer mPosizioniRESTConsumer; private boolean mFlagAskCliente; @@ -60,10 +65,13 @@ public class PickingLiberoViewModel { @Inject public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer) { + BarcodeRESTConsumer barcodeRESTConsumer, + PosizioniRESTConsumer posizioniRESTConsumer + ) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mPosizioniRESTConsumer = posizioniRESTConsumer; } @@ -88,6 +96,10 @@ public class PickingLiberoViewModel { //Cerco gli articoli presenti nell'ul dell'etichetta anonima this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { + //Cerco tramite etichetta un collo in posizione mono ul + this.executeEtichettaPosizione(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi una UL) this.executeEtichettaEan128(barcodeScanDTO, onComplete); @@ -97,11 +109,41 @@ public class PickingLiberoViewModel { this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); } else { + //Cerco tramite ean13 un collo in posizione mono ul definita in anagrafica articolo, altrimenti se abilitato procedo con picking manuale this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); } } + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + this.executePosizione(foundPosizione, null, onComplete); + + } + + private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, Runnable onComplete) { + this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { + + if (mtbColtList == null || mtbColtList.size() == 0) { + if (articolo != null) { + this.dispatchArt(articolo, null); + } else { + this.sendError(new NoLUFoundException()); + } + } else if (mtbColtList.size() == 1) { + this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + pickMerceULtoUL(mtbColt, articolo, onComplete); + }, this::sendError); + } else { + this.sendError(new TooManyLUFoundInMonoLUPositionException()); + } + + }, this::sendError); + } + private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { try { Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); @@ -164,10 +206,18 @@ public class PickingLiberoViewModel { } mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { - if (mtbAartList != null && mtbAartList.size() > 0) { - this.dispatchArt(mtbAartList.get(0), ean128Model); - onComplete.run(); + MtbAart articolo = mtbAartList.get(0); + MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); + + if (posizione != null && posizione.isFlagMonoCollo()) { + this.executePosizione(posizione, articolo, onComplete); + } else if(mDefaultGestione == GestioneEnum.VENDITA){ + this.dispatchArt(articolo, ean128Model); + onComplete.run(); + } else { + this.sendError(new NoResultFromBarcodeException()); + } } else { this.sendError(new NoResultFromBarcodeException()); @@ -179,7 +229,6 @@ public class PickingLiberoViewModel { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { if (this.mFlagAskCliente) { - this.sendOnLoadingEnded(); this.sendLUClienteRequired((vtbDest, codJcom) -> { createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, codJcom, onComplete); }, () -> { @@ -226,6 +275,8 @@ public class PickingLiberoViewModel { this.mCurrentMtbColt = mtbColt; + this.sendOnLoadingEnded(); + if (onComplete != null) onComplete.run(); this.sendLUOpened(mtbColt); }, this::sendError); @@ -336,13 +387,16 @@ public class PickingLiberoViewModel { }); } - private void pickMerceULtoUL(MtbColt sourceMtbColt, Runnable onComplete) { + pickMerceULtoUL(sourceMtbColt, null, onComplete); + } + + private void pickMerceULtoUL(MtbColt sourceMtbColt, MtbAart mtbAart, Runnable onComplete) { List mtbColrsToPick = Stream.of(sourceMtbColt.getMtbColr()) .filter(x -> UtilityBigDecimal.greaterThan(x.getQtaCol(), BigDecimal.ZERO)) .toList(); - this.sendArtSelectionRequest(mtbColrsToPick, pickedAarts -> { + this.sendArtSelectionRequest(mtbColrsToPick, mtbAart, pickedAarts -> { List destNewMtbColr = new ArrayList<>(); if (pickedAarts.size() > 0) { @@ -369,7 +423,7 @@ public class PickingLiberoViewModel { .setNumCollo(null) .setDataColloRif(cloneMtbColr.getDataColloS()) - .setDataCollo(null) + .setDataCollo((String) null) .setPesoLordoKg(null) .setPesoNettoKg(null); @@ -480,46 +534,46 @@ public class PickingLiberoViewModel { new Thread(this::sendOnLoadingStarted).start(); - final MtbColr mtbColr = new MtbColr() - .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) - .setPartitaMag(partitaMag) - .setDataScadPartita(dataScad) - .setQtaCol(qtaTot) - .setQtaCnf(qtaCnf) - .setNumCnf(numCnf) - .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) - .setDatetimeRow(UtilityDate.getDateInstance()); + final MtbColr mtbColr = new MtbColr() + .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) + .setPartitaMag(partitaMag) + .setDataScadPartita(dataScad) + .setQtaCol(qtaTot) + .setQtaCnf(qtaCnf) + .setNumCnf(numCnf) + .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()); - mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); - cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); + MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); - cloneMtbColt.setMtbColr(new ObservableArrayList<>()); - cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); + cloneMtbColt.setMtbColr(new ObservableArrayList<>()); + cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); - if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { - this.sendOnLoadingEnded(); - return; - } + if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { + this.sendOnLoadingEnded(); + return; + } - mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { - mtbColr - .setDataCollo(value.getDataColloS()) - .setNumCollo(value.getNumCollo()) - .setGestione(value.getGestione()) - .setSerCollo(value.getSerCollo()) - .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) - .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) - .setMtbAart(pickingObjectDTO.getMtbAart()); + mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) + .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) + .setMtbAart(pickingObjectDTO.getMtbAart()); - mCurrentMtbColt.getMtbColr().add(mtbColr); + mCurrentMtbColt.getMtbColr().add(mtbColr); - this.sendOnRowSaved(); - this.sendOnLoadingEnded(); + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); - if (shouldCloseLU) closeLU(null); - }, this::sendError); + if (shouldCloseLU) closeLU(null); + }, this::sendError); } @@ -763,9 +817,9 @@ public class PickingLiberoViewModel { if (this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort); } - private void sendArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort) { + private void sendArtSelectionRequest(List mtbColrsToPick, MtbAart mtbAart, RunnableArgs> onComplete, Runnable onAbort) { if (this.mListener != null) - mListener.onArtSelectionRequest(mtbColrsToPick, onComplete, onAbort); + mListener.onArtSelectionRequest(mtbColrsToPick, mtbAart, onComplete, onAbort); } private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO, @@ -819,7 +873,7 @@ public class PickingLiberoViewModel { void onLUClienteRequired(RunnableArgss onComplete, Runnable onAbort); - void onArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort); + void onArtSelectionRequest(List mtbColrsToPick, MtbAart mtbAart, RunnableArgs> onComplete, Runnable onAbort); void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java index 7607dec1..e78c5c2a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java @@ -33,6 +33,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -42,18 +43,18 @@ import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivityPickingResiBinding; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; import it.integry.integrywmsnative.gest.picking_resi.ui.PickingResiListAdapter; import it.integry.integrywmsnative.gest.picking_resi.ui.PickingResiListModel; -import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; +import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialog; 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.note_aggiuntive_lu.NoteAggiuntiveLUDialog; public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener { @@ -276,15 +277,15 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag } @Override - public void onNoteAggiuntiveRequired(RunnableArgs onComplete) { - NoteAggiuntiveLUDialog.make(this, onComplete).show(); + public void onInfoAggiuntiveRequired(RunnableArgss onComplete) { + InfoAggiuntiveLUDialog.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); } @Override public void onError(Exception ex) { this.closeProgress(); - if(ex instanceof InvalidPesoKGException) { + if (ex instanceof InvalidPesoKGException) { UtilityToast.showToast(ex.getMessage()); } else { UtilityExceptions.defaultException(this, ex, mCurrentProgress); @@ -401,7 +402,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag null, R.string.button_ignore_print, onComplete) - .show(getSupportFragmentManager(), "tag"); + .show(getSupportFragmentManager(), "tag"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java index be32fd1e..d52ac0a8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -28,6 +28,7 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; @@ -161,11 +162,16 @@ public class PickingResiViewModel { this.sendOnLoadingEnded(); }); } else { - this.sendOnNoteAggiuntiveRequired(noteAggiuntive -> { + this.sendOnInfoAggiuntiveRequired((noteAggiuntive, tCol) -> { if (!UtilityString.isNullOrEmpty(noteAggiuntive)) { this.mCurrentMtbColt.setAnnotazioni(noteAggiuntive); } + if (tCol != null) { + this.mCurrentMtbColt.setCodTcol(tCol.getCodTcol()); + this.mCurrentMtbColt.setMtbTCol(tCol); + + } this.mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> { @@ -717,8 +723,8 @@ public class PickingResiViewModel { return mPickingList; } - private void sendOnNoteAggiuntiveRequired(RunnableArgs onComplete) { - if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete); + private void sendOnInfoAggiuntiveRequired(RunnableArgss onComplete) { + if (this.mListener != null) this.mListener.onInfoAggiuntiveRequired(onComplete); } private void sendOnLoadingStarted() { @@ -795,7 +801,7 @@ public class PickingResiViewModel { public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener { - void onNoteAggiuntiveRequired(RunnableArgs onComplete); + void onInfoAggiuntiveRequired(RunnableArgss onComplete); void onError(Exception ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumer.java index 0db56157..752a7a33 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumer.java @@ -80,7 +80,7 @@ public class ProdRientroMerceOrderDetailRESTConsumer extends _BaseRESTConsumer { }.getType(); systemRESTConsumer.>processSql(mtbColtSql, mtbColtTypeOfObjectsList, mtbColtList -> { - if(mtbColtList == null) mtbColtList = new ArrayList<>(); + if (mtbColtList == null) mtbColtList = new ArrayList<>(); for (MtbColt mtbColt : mtbColtList) { @@ -108,23 +108,21 @@ public class ProdRientroMerceOrderDetailRESTConsumer extends _BaseRESTConsumer { } - - public void importColloDaProduzione(ImportColliDaProduzioneRequestDTO importColliDaProduzioneRequestDTO, RunnableArgs onComplete, RunnableArgs onFailed) { ProdRientroMerceOrderDetailRESTConsumerService service = RESTBuilder.getService(ProdRientroMerceOrderDetailRESTConsumerService.class); - service.importColloDaProduzione(importColliDaProduzioneRequestDTO).enqueue(new Callback>() { + service.importColloDaProduzione(importColliDaProduzioneRequestDTO).enqueue(new Callback>>() { @Override - public void onResponse(Call> call, Response> response) { + public void onResponse(Call>> call, Response>> response) { analyzeAnswer(response, "importColliDaProduzione", mtbColt -> { - onComplete.run(mtbColt); + onComplete.run(mtbColt.get(0)); }, ex -> { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); }); } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call>> call, Throwable t) { Logger.e(t, "importColliDaProduzione"); onFailed.run(new Exception(t)); } @@ -140,7 +138,7 @@ public class ProdRientroMerceOrderDetailRESTConsumer extends _BaseRESTConsumer { analyzeAnswer(response, "deleteColloDaProduzione", mtbColt -> { onComplete.run(); }, ex -> { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumerService.java index 7943bae0..fbbf13da 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumerService.java @@ -13,10 +13,10 @@ public interface ProdRientroMerceOrderDetailRESTConsumerService { @POST("importColliDaProduzioneJson") - Call> importColliDaProduzione(@Body List importColliDaProduzioneRequestDTO); + Call>> importColliDaProduzione(@Body List importColliDaProduzioneRequestDTO); @POST("importColloDaProduzioneJson") - Call> importColloDaProduzione(@Body ImportColliDaProduzioneRequestDTO importColloDaProduzioneRequestDTO); + Call>> importColloDaProduzione(@Body ImportColliDaProduzioneRequestDTO importColloDaProduzioneRequestDTO); @POST("cancellaColloDaProduzione") Call> deleteColloDaProduzione(@Body MtbColt mtbColtToDelete); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index febbc9ca..257cfba6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -12,6 +12,8 @@ import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; +import com.annimon.stream.Stream; + import java.util.ArrayList; import java.util.List; @@ -32,6 +34,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaReposito import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding; @@ -65,7 +68,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { ArticoloGrigliaRepository mArticoloGrigliaRepository; - public static Intent newInstance(Context context, Ordine ordine){ + public static Intent newInstance(Context context, Ordine ordine) { Intent myIntent = new Intent(context, PVOrdineAcquistoEditActivity.class); String keyOrdine = DataCache.addItem(ordine); myIntent.putExtra(DATA_KEY_ORDER, keyOrdine); @@ -110,6 +113,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { .setOnScanFailed(this::handleException)); } + @Override public boolean onSupportNavigateUp() { @@ -159,6 +163,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { private void handleException(Exception ex) { runOnUiThread(() -> { + this.closeProgress(); BarcodeManager.enable(); UtilityExceptions.defaultException(this, ex, false); }); @@ -198,6 +203,32 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { fetchArticoli(); } + private void orderNewProducts() { + this.openProgress(); + mhelper.getNewArticoli(mOrdine.getIdGriglia(), articoli -> { + if (articoli != null && !articoli.isEmpty()) { + List articoliToSave = new ArrayList<>(); + Stream.of(articoli).forEach(articolo -> { + if ( + Stream.of(mArticoli).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirst().isEmpty() + && Stream.of(articoliToSave).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirst().isEmpty() + ) { + ArticoloOrdine dto = articolo.convertToArticoloOrdine(mOrdine); + dto.setQtaOrd(dto.getQtaCnf()); + articoliToSave.add(dto); + } + }); + if (!articoliToSave.isEmpty()) { + mhelper.saveArticoliToOrdine(articoliToSave, this::fetchArticoli, this::handleException); + } else { + this.closeProgress(); + } + } else { + this.closeProgress(); + } + }, this::handleException); + } + private void fetchGriglia() { mhelper.loadGriglia(mOrdine.getIdGriglia(), griglia -> { runOnUiThread(() -> { @@ -218,6 +249,9 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { mBinding.pvOrdineExport.setVisibility(mArticoli.size() > 0 ? View.INVISIBLE : View.GONE); mBinding.closeActivityFab.close(false); mBinding.scanArtSpinner.setVisibility(mArticoli.size() > 0 ? View.GONE : View.VISIBLE); + if (mArticoli.isEmpty() && isOrderNewProdsForced()) { + orderNewProducts(); + } }); }, this::handleException); } @@ -253,9 +287,9 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { super.onBackPressed(); } - public void manualSearch(){ + public void manualSearch() { BarcodeManager.disable(); - DialogSimpleInputHelper.makeInputDialog(this,"Inserisci il codice a barre/codice articolo da cercare",codice->{ + DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", codice -> { this.openProgress(); mhelper.checkArticolo( mOrdine, @@ -272,4 +306,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { }, BarcodeManager::enable).show(); } + private boolean isOrderNewProdsForced() { + return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java index 54925165..3c99f01e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java @@ -10,6 +10,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -27,7 +28,6 @@ import it.integry.integrywmsnative.core.di.BindableInteger; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityFocus; import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper; @@ -53,7 +53,7 @@ public class EditArticoloDialog extends BaseDialogFragment { mArticolo.setValue(articolo); mHelper = helper; qtaOrd.set(BigDecimal.valueOf(articolo.getQtaOrd())); - numCnf.set(BigDecimal.valueOf(articolo.getQtaOrd()).divide(BigDecimal.valueOf(articolo.getQtaCnf()),0,RoundingMode.CEILING).intValue()); + numCnf.set(BigDecimal.valueOf(articolo.getQtaOrd()).divide(BigDecimal.valueOf(articolo.getQtaCnf()), 0, RoundingMode.CEILING).intValue()); qtaCnf.set(BigDecimal.valueOf(articolo.getQtaCnf())); this.onDialogDismiss = onDialogDismiss; @@ -71,7 +71,7 @@ public class EditArticoloDialog extends BaseDialogFragment { public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); ArticoloOrdine articolo = mArticolo.getValue(); - if (articolo != null && articolo.getQtaOrd() <= 0f){ + if (articolo != null && articolo.getQtaOrd() <= 0f) { articolo = null; } onDialogDismiss.run(articolo); @@ -87,14 +87,12 @@ public class EditArticoloDialog extends BaseDialogFragment { getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); initBindings(); - return mBinding.getRoot(); } @Override public void onStart() { super.onStart(); - UtilityFocus.focusTextBox(mContext, mBinding.inputQtaOrd); } private void initBindings() { @@ -106,17 +104,17 @@ public class EditArticoloDialog extends BaseDialogFragment { ArticoloOrdine articoloOrdine = mArticolo.getValue(); BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf()); int cnf = 0; - if (qtaOrd.get() != null && qtaOrd.get().compareTo(BigDecimal.ZERO) > 0){ + if (qtaOrd.get() != null && qtaOrd.get().compareTo(BigDecimal.ZERO) > 0) { cnf = qtaOrd.get().divide(qtaCnf, 0, RoundingMode.CEILING).intValue(); } - this.numCnf.set( cnf); + this.numCnf.set(cnf); this.mBinding.executePendingBindings(); mLockedInput = false; } }); BindableInteger.registerListener(numCnf, qta -> { - if (!mLockedInput){ + if (!mLockedInput) { mLockedInput = true; ArticoloOrdine articoloOrdine = mArticolo.getValue(); @@ -127,6 +125,22 @@ public class EditArticoloDialog extends BaseDialogFragment { mLockedInput = false; } }); + mBinding.inputQtaOrd.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { +// saveAndExit(); + mBinding.inputNumCnfText.requestFocus(); + return true; + } + return false; + }); + + mBinding.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + saveAndExit(); + return true; + } + return false; + }); } public void saveAndExit() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java index da003f81..daf89bc9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java @@ -2,11 +2,12 @@ package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper; import java.util.List; +import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; -import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -63,7 +64,15 @@ public class PVEditOrderHelper { mArticoliOrdineRepository.saveArticoloToOrdine(articolo, onSave, onFail); } - public void removeArticoloFromOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs onError){ + public void saveArticoliToOrdine(List articoli, Runnable onSave, RunnableArgs onFail) { + mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail); + } + + public void removeArticoloFromOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs onError) { mArticoliOrdineRepository.deleteArticolo(articolo, onSave, onError); } + + public void getNewArticoli(int idGrigla, RunnableArgs> onSuccess, RunnableArgs onError) { + mArticoliGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index 60abff71..0d5c1a58 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -1,8 +1,6 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto; -import android.app.Dialog; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.text.Html; import android.text.SpannableString; @@ -25,7 +23,6 @@ import javax.inject.Inject; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; -import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; @@ -41,12 +38,13 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity; -import it.integry.integrywmsnative.gest.pv_ordini_acquisto.ui.OrdineAcquistoPvOpenListAdapter; 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.ui.OrdineAcquistoPvOpenListAdapter; 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.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment { @@ -55,7 +53,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled private OrdineAcquistoPvHelper mHelper; private Griglia mGriglia; private OrdineAcquistoPvOpenListAdapter mAdapter; - private Dialog mCurrentProgress; + private DialogProgressView mCurrentProgress; private final List mRenderedOrderList = new ArrayList<>(); private boolean mRedirectToNewOrder = true; @@ -177,7 +175,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled } private void editOrdine(Ordine ordine) { - requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(),ordine)); + requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java index ba6f7ca1..594d38a3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs; -import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.graphics.Color; @@ -8,6 +7,7 @@ import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.FragmentActivity; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.R; @@ -21,15 +21,16 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogScanCodiceGrigliaBinding; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public class DialogScanLisA { - private Activity mContext; + private FragmentActivity mContext; private BaseDialog mDialog; - private Dialog mCurrentProgress; + private DialogProgressView mCurrentProgress; - private DialogScanCodiceGrigliaBinding mBinding; + private final DialogScanCodiceGrigliaBinding mBinding; private RunnableArgs mOnDialogDismiss; @@ -38,7 +39,7 @@ public class DialogScanLisA { private GrigliaRepository mGrigliaRepository; private Griglia mGriglia; - private DialogScanLisA(Activity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { + private DialogScanLisA(FragmentActivity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { mOnDialogDismiss = null; mContext = context; mGrigliaRepository = grigliaRepository; @@ -54,9 +55,10 @@ public class DialogScanLisA { mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mOnDialogDismiss = onDialogDismiss; initBarcode(); + } - public static Dialog make(Activity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { + public static Dialog make(FragmentActivity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { return new DialogScanLisA(context, grigliaRepository, helper, onDialogDismiss).mDialog; } @@ -75,7 +77,6 @@ public class DialogScanLisA { }); } - private final RunnableArgs onScanSuccessfull = data -> { BarcodeManager.disable(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 916e6125..91b09a44 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -1,7 +1,7 @@ package it.integry.integrywmsnative.gest.rettifica_giacenze; -import android.app.Dialog; import android.content.Context; +import android.content.pm.ActivityInfo; import android.content.res.ColorStateList; import android.content.res.Resources; import android.os.Bundle; @@ -57,6 +57,7 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.DialogConsts; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts; @@ -81,7 +82,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr private int barcodeScannerIstanceID = -1; - private Dialog mCurrentProgress; + private DialogProgressView mCurrentProgress; public RettificaGiacenzeFragment() { // Required empty public constructor @@ -95,15 +96,21 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr @Override public void onCreate(Bundle savedInstanceState) { + requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.onCreate(savedInstanceState); } + @Override + public void onDestroy() { + requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); + super.onDestroy(); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_rettifica_giacenze, container, false); - MainApplication.appComponent .rettificaGiacenzeComponent() .create() @@ -126,7 +133,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr return mBinding.getRoot(); } - private void initVars() { thereIsAnOpenedUL.addOnPropertyChangedCallback(() -> { thereIsntAnOpenedUL.set(!thereIsAnOpenedUL.get()); @@ -335,7 +341,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr if (ex instanceof InvalidPesoKGException) { UtilityToast.showToast(ex.getMessage()); } else { - UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); + UtilityExceptions.defaultException(requireActivity(), ex, mCurrentProgress); } BarcodeManager.enable(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 83b3f6de..806a757d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -776,34 +776,34 @@ public class SpedizioneViewModel { List availableBatchLots = Stream.of(scannedMtbColrs) .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && ( - x.getPartitaMag() == null || + 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(); //Controllo se una delle partite combacia con quella che voglio evadere - if(refMtbColr != null && refMtbColr.getMtbPartitaMag() != null) { + if (refMtbColr != null && refMtbColr.getMtbPartitaMag() != null) { MtbPartitaMag refMtbPartitaMag = refMtbColr.getMtbPartitaMag(); Optional matchPartitaMag = Stream.of(availableBatchLots) .filter(availableBatchLot -> refMtbPartitaMag.getPartitaMag().equalsIgnoreCase(availableBatchLot.getPartitaMag())) .findFirst(); - if(matchPartitaMag.isPresent()) { + if (matchPartitaMag.isPresent()) { availableBatchLots.clear(); availableBatchLots.add(refMtbPartitaMag); } } - if(availableBatchLots.size() > 1) { + if (availableBatchLots.size() > 1) { this.sendOnLoadingStarted(); List tmp = new ArrayList<>(); - if(Stream.of(availableBatchLots).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) { + if (Stream.of(availableBatchLots).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) { tmp.addAll( Stream.of(availableBatchLots) .filter(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()) && UtilityDate.getDateInstance().before(x.getDataScadD())) @@ -811,7 +811,7 @@ public class SpedizioneViewModel { .toList()); } - if(Stream.of(availableBatchLots).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) { + if (Stream.of(availableBatchLots).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) { tmp.addAll( Stream.of(availableBatchLots) .filter(x -> UtilityString.isNullOrEmpty(x.getDataScadS())) @@ -822,7 +822,7 @@ public class SpedizioneViewModel { this.sendBatchLotSelectionRequest(tmp, selected -> { this.sendOnLoadingEnded(); - if(selected != null) { + 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())) || @@ -897,7 +897,7 @@ public class SpedizioneViewModel { // } - if(refMtbColr != null) { + if (refMtbColr != null) { if (pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) { if (UtilityBigDecimal.equalsOrLowerThan(refMtbColr.getQtaCol(), qtaDaEvadere)) { numCnfDaPrelevare = refMtbColr.getNumCnf(); @@ -1456,7 +1456,7 @@ public class SpedizioneViewModel { refMtbColt.getMtbColr().size() > 0 ? refMtbColt.getMtbColr().get(0) : null; - if(originalRefMtbColr != null) { + if (originalRefMtbColr != null) { refMtbColr.setId(originalRefMtbColr.getId()); } @@ -1695,7 +1695,7 @@ public class SpedizioneViewModel { .setRiga(null) .setNumCollo(null) .setGestione((String) null) - .setDataCollo(null) + .setDataCollo((String) null) .setSerCollo(null) .setCausale(MtbColr.Causale.VERSAMENTO); @@ -1721,7 +1721,7 @@ public class SpedizioneViewModel { if (!shouldPrint) { onComplete.run(); } else { - cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); + cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); } @@ -1762,10 +1762,12 @@ public class SpedizioneViewModel { .filter(x -> !this.mColliRegistrati.contains(x)) .forEach(x -> this.mColliRegistrati.add(x)); - for (MtbColt mtbColt : mtbColtList) { - Stream.of(mTestateOrdini) - .filter(x -> x.getNumOrd().equals(mtbColt.getNumOrd()) && x.getDataOrdD().equals(mtbColt.getDataOrdD()) && x.getGestioneEnum() == mtbColt.getGestioneEnum()) - .forEach(x -> x.setExistColloBoolean(true)); + if (mTestateOrdini != null) { + for (MtbColt mtbColt : mtbColtList) { + Stream.of(mTestateOrdini) + .filter(x -> x.getNumOrd().equals(mtbColt.getNumOrd()) && x.getDataOrdD().equals(mtbColt.getDataOrdD()) && x.getGestioneEnum() == mtbColt.getGestioneEnum()) + .forEach(x -> x.setExistColloBoolean(true)); + } } if (mMtbColtSessionID != null) diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java index fa959fbc..54514c3e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java @@ -79,7 +79,7 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie public void onPropertyChanged(Observable sender, int propertyId) { var mtbColt = mViewModel.getObservableMtbColt().get(); - if(mtbColt != null) { + if (mtbColt != null) { initAdapter(); onMtbColrItemChanged(); @@ -101,6 +101,7 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie List mtbColrs = mViewModel.getObservableMtbColt().get().getMtbColr(); mBinding.textviewArtCounter.setText(String.valueOf(mtbColrs.size())); mBinding.textviewArtDescription.setText(mContext.getResources().getQuantityString(R.plurals.articles, mtbColrs.size())); + mViewModel.calcPesi(); } public BottomSheetFragmentLUContentView setListener(Listener listener) { @@ -131,12 +132,12 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie @Override public void onMtbColrEdit(MtbColr mtbColr) { - if(mListener != null) this.mListener.onMtbColrEdit(mtbColr); + if (mListener != null) this.mListener.onMtbColrEdit(mtbColr); } @Override public void onMtbColrDelete(MtbColr mtbColr) { - if(mListener != null) this.mListener.onMtbColrDelete(mtbColr); + if (mListener != null) this.mListener.onMtbColrDelete(mtbColr); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java index 9a99aa4c..9996722b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java @@ -2,16 +2,24 @@ package it.integry.integrywmsnative.view.bottom_sheet__lu_content; import androidx.databinding.ObservableField; +import java.math.BigDecimal; +import java.math.RoundingMode; + +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbTCol; public class BottomSheetFragmentLUContentViewModel { public ObservableField mtbColt = new ObservableField<>(); + public ObservableField pesoKg = new ObservableField<>(); + public ObservableField pesoNettoKg = new ObservableField<>(); private Listener mListener; private MtbColrListener mMtbColrListener; public void closeCurrentLU() { - if(this.mListener != null) this.mListener.onBottomSheetLUClose(); + if (this.mListener != null) this.mListener.onBottomSheetLUClose(); } public BottomSheetFragmentLUContentViewModel setMtbColt(MtbColt mtbColt) { @@ -33,6 +41,26 @@ public class BottomSheetFragmentLUContentViewModel { return this; } + public void calcPesi() { + MtbColt collo = this.mtbColt.get(); + if (collo != null) { + MtbTCol tipoPedana = collo.getMtbTCol(); + BigDecimal taraPedana = tipoPedana != null ? tipoPedana.getTaraKg() : BigDecimal.ZERO; + BigDecimal pesoNetto = BigDecimal.ZERO; + for (MtbColr mtbColr : collo.getMtbColr()) { + MtbAart articolo = mtbColr.getMtbAart(); + if (articolo != null) { + BigDecimal pesoRiga = articolo.isFlagQtaCnfFissaBoolean() ? mtbColr.getNumCnf().multiply(articolo.getPesoKg()) : mtbColr.getQtaCol(); + BigDecimal pesoTara = articolo.getTaraKg().multiply(mtbColr.getNumCnf()); + pesoRiga = pesoRiga.add(pesoTara); + pesoNetto = pesoNetto.add(pesoRiga); + } + } + this.pesoNettoKg.set(pesoNetto.setScale(2, RoundingMode.CEILING).toString()); + this.pesoKg.set(pesoNetto.add(taraPedana).setScale(2, RoundingMode.CEILING).toString()); + } + } + public interface Listener { void onBottomSheetLUClose(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java deleted file mode 100644 index d29dc050..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java +++ /dev/null @@ -1,61 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs; - -import android.app.Dialog; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.LayoutInflater; - -import androidx.databinding.DataBindingUtil; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.databinding.DialogProgressBinding; - -public class DialogProgress { - - private Context mContext; - private DialogProgressBinding mBinding; - - private Dialog mDialog; - - public static Dialog make(Context context,String subtitle) { - DialogProgress progress = new DialogProgress(context); - progress.setSubtitle(subtitle); - return progress.mDialog; - } - - public static Dialog make(Context context) { - return new DialogProgress(context).mDialog; - } - - - - private DialogProgress(Context context) { - mContext = context; - - LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_progress, null, false); - -// final Thread[] progressBarThread = new Thread[1]; - - mDialog = new Dialog(mContext); - mDialog.setContentView(mBinding.getRoot()); - mDialog.setCanceledOnTouchOutside(false); - mDialog.setCancelable(false); - mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - mDialog.setOnShowListener(dialog -> { -// ((ProgressBar) currentView.findViewById(R.id.progressBar)).setIndeterminate(true); -// progressBarThread[0] = UtilityProgress.makeProgressBarIndeterminate(mBinding.progressBar); - }); - - mDialog.setOnDismissListener(dialog -> { -// progressBarThread[0].interrupt(); - }); - } - - private void setSubtitle(String subtitle){ - mBinding.subtitleText.setText(subtitle); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgressView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgressView.java new file mode 100644 index 00000000..405d04e4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgressView.java @@ -0,0 +1,88 @@ +package it.integry.integrywmsnative.view.dialogs; + +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; +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 javax.inject.Singleton; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogProgressBinding; + +@Singleton +public class DialogProgressView extends DialogFragment { + + private DialogProgressBinding mBindings; + + private String title; + private String subtitle; + private boolean indeterminateProgress; + + public static DialogProgressView newInstance(String title, String subtitle, boolean indeterminate) { + return new DialogProgressView() + .setIndeterminateProgress(indeterminate) + .setTitle(title) + .setSubtitle(subtitle); + } + + public static DialogProgressView newInstance() { + return newInstance(null, null, true); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_progress, container, false); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + mBindings.setTitle(UtilityString.isNullOrEmpty(title) ? requireActivity().getString(R.string.loading) : title); + + mBindings.setSubtitle(subtitle); + mBindings.progressBar.setIndeterminate(isIndeterminateProgress()); + + if(!isIndeterminateProgress()){ + mBindings.progressBar.setMax(100); + } + + return mBindings.getRoot(); + } + + + public boolean isIndeterminateProgress() { + return indeterminateProgress; + } + + public DialogProgressView setIndeterminateProgress(boolean indeterminateProgress) { + this.indeterminateProgress = indeterminateProgress; + return this; + } + + + public DialogProgressView setTitle(String title) { + this.title = title; + return this; + } + + public DialogProgressView setSubtitle(String subtitle) { + this.subtitle = subtitle; + return this; + } + + public void setProgress(int progress) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + mBindings.progressBar.setProgress(progress, true); + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java index 21db78f8..74fcf726 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteAdapter.java @@ -23,17 +23,31 @@ import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.IDialogAsk public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener { - private Context mContext; + private final Context mContext; - private List> mDatasetLayout; - private List> mDatasetViews; + private final List>> mDatasetLayout; + private final List> mDatasetViews; + private final List mDatasetViewModels; private DeactivatableViewPager viewPager; - public DialogAskClienteAdapter(Context context, List> datasetLayouts) { + public DialogAskClienteAdapter(Context context, List>> datasetLayouts) { this.mContext = context; this.mDatasetLayout = datasetLayouts; this.mDatasetViews = new ArrayList<>(); + this.mDatasetViewModels = new ArrayList<>(); + + + for (var viewModelEntry : mDatasetLayout) { + var viewModelClazz = viewModelEntry.getValue(); + + try { + IDialogAskClienteViewModel viewModel = viewModelClazz.newInstance(); + mDatasetViewModels.add(viewModel); + } catch (IllegalAccessException | InstantiationException e) { + e.printStackTrace(); + } + } } @@ -43,20 +57,13 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O Integer viewId = mDatasetLayout.get(position).getKey(); - LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - ViewDataBinding mBinding = DataBindingUtil.inflate(inflater, viewId, null, false); + ViewDataBinding mBinding = DataBindingUtil.inflate(inflater, viewId, container, false); - Class viewModelClass = mDatasetLayout.get(position).getValue(); - IDialogAskClienteViewModel viewModel = null; - try { - viewModel = (IDialogAskClienteViewModel) viewModelClass.newInstance(); - viewModel.setBinding(mBinding); - viewModel.setContext(mContext); - } catch (IllegalAccessException | InstantiationException e) { - e.printStackTrace(); - } + var viewModel = this.mDatasetViewModels.get(position); + viewModel.setBinding(mBinding); + viewModel.setContext(mContext); mBinding.setVariable(BR.viewmodel, viewModel); @@ -82,10 +89,10 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O return mDatasetLayout.size(); } - public IDialogAskClienteViewModel getViewModel(@NonNull int layoutID) { + public IDialogAskClienteViewModel getViewModel(int layoutID) { for(int i = 0; i < mDatasetLayout.size(); i++) { if(mDatasetLayout.get(i).getKey() == layoutID) { - return this.mDatasetViews.get(i).getValue(); + return this.mDatasetViewModels.get(i); } } return null; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteView.java index cbd5f1d8..7a24d2b2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/DialogAskClienteView.java @@ -31,6 +31,7 @@ import it.integry.integrywmsnative.databinding.DialogAskClienteBinding; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel; import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel; +import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.IDialogAskClienteViewModel; public class DialogAskClienteView extends BaseDialogFragment { @@ -45,7 +46,7 @@ public class DialogAskClienteView extends BaseDialogFragment { private boolean mIsClienteSelected = false; public static DialogAskClienteView newInstance(@NotNull RunnableArgss onComplete, @NotNull Runnable onAbort) { - return new DialogAskClienteView( onComplete, onAbort); + return new DialogAskClienteView(onComplete, onAbort); } private DialogAskClienteView(@NotNull RunnableArgss onComplete, @NotNull Runnable onAbort) { @@ -69,7 +70,7 @@ public class DialogAskClienteView extends BaseDialogFragment { getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - List> views = new ArrayList<>(); + List>> views = new ArrayList<>(); views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page1, DialogAskCliente_Page1ViewModel.class)); views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page2, DialogAskCliente_Page2ViewModel.class)); @@ -79,9 +80,7 @@ public class DialogAskClienteView extends BaseDialogFragment { mBindings.viewpager.addOnPageChangeListener(mAdapter); mBindings.viewpager.setCurrentItem(0, false); - getDialog().setOnShowListener(d -> { - this.initView(); - }); + this.initView(); return mBindings.getRoot(); } @@ -93,11 +92,6 @@ public class DialogAskClienteView extends BaseDialogFragment { } - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - } - private void initView() { DialogAskCliente_Page1ViewModel viewModel1 = (DialogAskCliente_Page1ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page1); DialogAskCliente_Page2ViewModel viewModel2 = (DialogAskCliente_Page2ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page2); @@ -106,7 +100,7 @@ public class DialogAskClienteView extends BaseDialogFragment { .setOnConfirmClickListener(() -> { String codAnag = viewModel1.getCurrentCliente(); - if(UtilityString.isNullOrEmpty(codAnag)) { + if (UtilityString.isNullOrEmpty(codAnag)) { this.mIsClienteSelected = true; dismiss(); mOnComplete.run(null, null); @@ -134,7 +128,7 @@ public class DialogAskClienteView extends BaseDialogFragment { @Override public void onDismiss(@NonNull DialogInterface dialog) { mAdapter.onDismiss(); - if(!mIsClienteSelected) { + if (!mIsClienteSelected) { this.mOnAbort.run(); } super.onDismiss(dialog); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java index 608c2269..ba437361 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page1ViewModel.java @@ -40,7 +40,10 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod private int mBarcodeScannerInstanceID; private ArrayList availableClienti; - private ObservableArrayList codJcoms = new ObservableArrayList<>(); + private final ObservableArrayList codJcoms = new ObservableArrayList<>(); + + private Runnable onConfirmClickListener; + private Runnable onAbortClickListener; public DialogAskCliente_Page1ViewModel() { @@ -104,6 +107,20 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod } }); + this.mBinding.buttonYes.setOnClickListener(v -> { + if (validateCliente()) { + this.resetClienteError(); + BarcodeManager.removeCallback(mBarcodeScannerInstanceID); + if (onConfirmClickListener != null) onConfirmClickListener.run(); + } else { + this.setClienteError(mContext.getResources().getText(R.string.not_valid_customer_error).toString()); + } + }); + + this.mBinding.buttonNo.setOnClickListener(v -> { + if (onAbortClickListener != null) onAbortClickListener.run(); + }); + } @Override @@ -113,16 +130,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod @Override public void setOnConfirmClickListener(Runnable onConfirm) { - this.mBinding.buttonYes.setOnClickListener(v -> { - if (validateCliente()) { - this.resetClienteError(); - BarcodeManager.removeCallback(mBarcodeScannerInstanceID); - if (onConfirm != null) onConfirm.run(); - } else { - this.setClienteError(mContext.getResources().getText(R.string.not_valid_customer_error).toString()); - } - - }); + this.onConfirmClickListener = onConfirm; } @@ -174,9 +182,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod @Override public void setOnAbortClickListener(Runnable onAbort) { - this.mBinding.buttonNo.setOnClickListener(v -> { - if (onAbort != null) onAbort.run(); - }); + this.onAbortClickListener = onAbort; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java index 2d4afc7b..d38aefef 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_cliente/viewmodel/DialogAskCliente_Page2ViewModel.java @@ -25,6 +25,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod private Context mContext; private Runnable mOnConfirm; + private Runnable mOnAbort; private List availableDestinatari; @@ -69,6 +70,21 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod } }); + + + this.mBinding.buttonYes.setOnClickListener(v -> { + if (validateDestinatario()) { + this.resetClienteError(); + if (mOnConfirm != null) mOnConfirm.run(); + } else { + this.setClienteError(mContext.getResources().getText(R.string.not_valid_recipient_error).toString()); + } + }); + + + this.mBinding.buttonNo.setOnClickListener(v -> { + if (mOnAbort != null) mOnAbort.run(); + }); } @Override @@ -78,22 +94,11 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod @Override public void setOnConfirmClickListener(Runnable onConfirm) { this.mOnConfirm = onConfirm; - this.mBinding.buttonYes.setOnClickListener(v -> { - if (validateDestinatario()) { - this.resetClienteError(); - if (onConfirm != null) onConfirm.run(); - } else { - this.setClienteError(mContext.getResources().getText(R.string.not_valid_recipient_error).toString()); - } - - }); } @Override public void setOnAbortClickListener(Runnable onAbort) { - this.mBinding.buttonNo.setOnClickListener(v -> { - if (onAbort != null) onAbort.run(); - }); + this.mOnAbort = onAbort; } public void setCodAnag(String codAnag) { @@ -102,7 +107,6 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod private void initializeAdapter(ArrayList items) { - DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java index 351619a1..1ad3cfae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java @@ -2,7 +2,6 @@ package it.integry.integrywmsnative.view.dialogs.base; import android.app.Dialog; import android.content.Context; -import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; @@ -12,6 +11,7 @@ import androidx.databinding.DataBindingUtil; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding; /** @@ -21,7 +21,7 @@ import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding; public class DialogSimpleInputHelper { - private static Dialog makeBase(Context mContext, String titleText, String valueText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ Dialog dialog = new Dialog(mContext); DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog); @@ -39,10 +39,14 @@ public class DialogSimpleInputHelper { //Title VIEW mBinding.titleText.setText(titleText); - if (valueText != null){ - mBinding.generalInput.setText(valueText); + + if (!UtilityString.isNullOrEmpty(hintText)){ + mBinding.generalInput.setHint(hintText); + } + + if (!UtilityString.isNullOrEmpty(defaultTextValue)){ + mBinding.generalInput.setText(defaultTextValue); } - ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE); //Content View dialog.setCancelable(true); @@ -60,17 +64,19 @@ public class DialogSimpleInputHelper { return makeBase(mContext, title, null, + null, onPositiveClick, onNegativeClick); } - public static Dialog makeInputDialog(Context mContext, String title,String value, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ return makeBase(mContext, title, - value, + defaultTextValue, + hintText, onPositiveClick, onNegativeClick); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java index 16d00ccc..835431de 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; @@ -42,6 +41,7 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsLayoutBinding; import it.integry.integrywmsnative.view.dialogs.DialogCommon; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public class DialogChooseArtsFromListaArts extends BaseDialogFragment { @@ -62,11 +62,23 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { private final List mDataset; private int mBarcodeScannerIstanceID; + private DialogProgressView mCurrentProgress; + private MtbAart selectedArt; public static DialogChooseArtsFromListaArts newInstance(List listaMtbColr, RunnableArgs> onItemsChoosed, Runnable onAbort) { return new DialogChooseArtsFromListaArts(listaMtbColr, onItemsChoosed, onAbort); } + public static DialogChooseArtsFromListaArts newInstance(List listaMtbColr, MtbAart mtbAart, RunnableArgs> onItemsChoosed, Runnable onAbort) { + DialogChooseArtsFromListaArts dialog = newInstance(listaMtbColr, onItemsChoosed, onAbort); + dialog.setSelectedArt(mtbAart); + return dialog; + } + + public void setSelectedArt(MtbAart mtbAart) { + this.selectedArt = mtbAart; + } + private DialogChooseArtsFromListaArts(List listaMtbColr, RunnableArgs> onItemsChoosed, Runnable onAbort) { super(); @@ -125,6 +137,14 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { return mBindings.getRoot(); } + @Override + public void onStart() { + super.onStart(); + + if (selectedArt != null) { + this.loadArticolo(selectedArt.getBarCode(), null); + } + } private void initRecyclerView() { mBindings.listaArts.setNestedScrollingEnabled(false); @@ -229,8 +249,6 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { } - - @Override public void onDismiss(@NonNull DialogInterface dialog) { BarcodeManager.removeCallback(mBarcodeScannerIstanceID); @@ -242,14 +260,15 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { private final RunnableArgs onScanSuccessfull = data -> { BarcodeManager.disable(); - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(context); + openProgress(); + if (UtilityBarcode.isEan13(data)) { - this.loadArticolo(data.getStringValue(), null, progressDialog); + this.loadArticolo(data.getStringValue(), null); } else if (UtilityBarcode.isEtichetta128(data)) { - this.executeEtichettaEan128(data, progressDialog); + this.executeEtichettaEan128(data); } else { - progressDialog.dismiss(); + closeProgress(); BarcodeManager.enable(); } @@ -257,7 +276,7 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { }; - private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) { + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) { this.barcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { String barcodeProd = null; @@ -271,11 +290,11 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { if (!UtilityString.isNullOrEmpty(barcodeProd)) { if (!UtilityString.isNullOrEmpty(ean128Model.Gtin) || !UtilityString.isNullOrEmpty(ean128Model.Content)) { - this.loadArticolo(barcodeProd, ean128Model, progressDialog); + this.loadArticolo(barcodeProd, ean128Model); } else { DialogCommon.showNoArtFoundDialog(context, () -> { BarcodeManager.enable(); - progressDialog.dismiss(); + closeProgress(); }); } @@ -285,18 +304,19 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { //EAN 128 non completo o comunque mancano i riferimenti al prodotto DialogCommon.showNoArtFoundDialog(context, () -> { BarcodeManager.enable(); - progressDialog.dismiss(); + closeProgress(); }); } }, ex -> { - UtilityExceptions.defaultException(context, ex, progressDialog); + closeProgress(); + UtilityExceptions.defaultException(context, ex); BarcodeManager.enable(); }); } - private void loadArticolo(String barcodeProd, Ean128Model ean128Model, Dialog progressDialog) { + private void loadArticolo(String barcodeProd, Ean128Model ean128Model) { if (barcodeProd.length() == 14) { barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); } @@ -310,19 +330,20 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { this.searchArtInList(mtbAartList.get(0), ean128Model); BarcodeManager.enable(); - progressDialog.dismiss(); + closeProgress(); } else { DialogCommon.showNoArtFoundDialog(context, () -> { BarcodeManager.enable(); - progressDialog.dismiss(); + closeProgress(); }); } }, ex -> { + closeProgress(); BarcodeManager.enable(); - UtilityExceptions.defaultException(context, ex, progressDialog); + UtilityExceptions.defaultException(context, ex); }); } @@ -364,5 +385,20 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment { this.dismiss(); } + protected void openProgress() { + requireActivity().runOnUiThread(() -> { + if (this.mCurrentProgress == null) { + this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity()); + } + }); + } + protected void closeProgress() { + requireActivity().runOnUiThread(() -> { + if (mCurrentProgress != null) { + mCurrentProgress.dismiss(); + mCurrentProgress = null; + } + }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialog.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialog.java new file mode 100644 index 00000000..75155e02 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialog.java @@ -0,0 +1,146 @@ +package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu; + +import android.content.DialogInterface; +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 android.view.WindowManager; +import android.widget.AdapterView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableField; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; + +import org.jetbrains.annotations.NotNull; + +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.RunnableArgss; +import it.integry.integrywmsnative.core.model.MtbTCol; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.core.utility.UtilityObservable; +import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding; +import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter; +import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel; + +public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAggiuntiveLUDialogViewModel.Listener { + + @Inject + InfoAggiuntiveLUDialogViewModel mViewModel; + + private DialogNoteAggiuntiveNuovaUlBinding mBindings; + private final RunnableArgss mOnComplete; + + private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null; + public ObservableField additionalNotes = new ObservableField<>(); + public ObservableField selectedMtbTcol = new ObservableField<>(); + public ObservableField currentMtbTCol = new ObservableField<>(); + + public static InfoAggiuntiveLUDialog newInstance(@NotNull RunnableArgss onComplete) { + return new InfoAggiuntiveLUDialog(onComplete); + } + + private InfoAggiuntiveLUDialog(@NotNull RunnableArgss onComplete) { + super(); + this.mOnComplete = onComplete; + + } + + + @Override + public void onStart() { + super.onStart(); + this.init(); + + UtilityDialog.setTo90PercentWidth(requireActivity(), this); + this.mViewModel.setListener(this); + this.mViewModel.init(); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, container, false); + mBindings.setLifecycleOwner(this); + + MainApplication.appComponent + .infoAggiuntiveLUDialogComponent() + .create() + .inject(this); + + mBindings.setView(this); + mBindings.setViewModel(this.mViewModel); + + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getDialog().setCanceledOnTouchOutside(false); + getDialog().setCancelable(false); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + + return mBindings.getRoot(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + if (mOnComplete != null) + mOnComplete.run(additionalNotes.get(), mViewModel.getInternalTipoPed()); + super.onDismiss(dialog); + } + + + private void init() { + + + UtilityObservable.addPropertyChanged(this.selectedMtbTcol, (value) -> { + if (this.codTcolArrayAdapter != null && this.codTcolArrayAdapter.getDataset() != null) { + Optional selectedItem = Stream.of(this.codTcolArrayAdapter.getDataset()) + .filter(x -> x.toString().equals(value)) + .findFirst(); + + if (selectedItem.isPresent()) { + currentMtbTCol.set(selectedItem.get()); + this.mViewModel.setInternalTipoPed(selectedItem.get().getOriginalModel()); + } + } + }); + + this.mViewModel.getTipiCollo().observe(getViewLifecycleOwner(), tipiCollo -> { + + codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo); + mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter); + + }); + + this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + currentMtbTCol.set(codTcolArrayAdapter.getItem(i)); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + currentMtbTCol.set(null); + } + }); + + mBindings.buttonConfirm.setOnClickListener(v -> { + dismiss(); + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java new file mode 100644 index 00000000..e5f7969c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu; + +import dagger.Subcomponent; + +@Subcomponent +public interface InfoAggiuntiveLUDialogComponent { + + @Subcomponent.Factory + interface Factory { + InfoAggiuntiveLUDialogComponent create(); + } + + void inject(InfoAggiuntiveLUDialog infoAggiuntiveLUDialog); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogModule.java new file mode 100644 index 00000000..737399cc --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogModule.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; + +@Module(subcomponents = InfoAggiuntiveLUDialogComponent.class) +public class InfoAggiuntiveLUDialogModule { + + @Provides + InfoAggiuntiveLUDialogViewModel providesInfoAggiuntiveLUDialogViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer) { + return new InfoAggiuntiveLUDialogViewModel(magazzinoRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogViewModel.java new file mode 100644 index 00000000..715ee8bb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogViewModel.java @@ -0,0 +1,72 @@ +package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu; + +import androidx.lifecycle.MutableLiveData; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.MtbTCol; +import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; + +public class InfoAggiuntiveLUDialogViewModel { + + public final MutableLiveData> tipiCollo = new MutableLiveData<>(); + + private MtbTCol internalTipoPed; + + private Listener mListener; + + private final MagazzinoRESTConsumer mMagazzinoRESTConsumer; + + @Inject + public InfoAggiuntiveLUDialogViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer) { + this.mMagazzinoRESTConsumer = magazzinoRESTConsumer; + } + + public void init() { + new Thread(this::sendOnLoadingStarted).start(); + + mMagazzinoRESTConsumer.getTipiCollo(tipiCollo -> { + this.tipiCollo.postValue(tipiCollo); + this.sendOnLoadingEnded(); + }, this::sendError); + } + + public MutableLiveData> getTipiCollo() { + return this.tipiCollo; + } + + + public void setInternalTipoPed(MtbTCol internalTipoPed) { + this.internalTipoPed = internalTipoPed; + } + + + public MtbTCol getInternalTipoPed() { + return internalTipoPed; + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + public void setListener(Listener listener) { + this.mListener = listener; + } + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java index 9b6c620b..1c72ce25 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java @@ -100,7 +100,6 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI } - @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -154,12 +153,12 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI }); UtilityObservable.addPropertyChanged(this.selectedMtbTcol, (value) -> { - if(this.codTcolArrayAdapter != null && this.codTcolArrayAdapter.getDataset() != null) { + if (this.codTcolArrayAdapter != null && this.codTcolArrayAdapter.getDataset() != null) { Optional selectedItem = Stream.of(this.codTcolArrayAdapter.getDataset()) .filter(x -> x.toString().equals(value)) .findFirst(); - if(selectedItem.isPresent()) { + if (selectedItem.isPresent()) { currentMtbTCol.set(selectedItem.get()); this.mViewModel.setInternalTipoPed(selectedItem.get().getOriginalModel()); } @@ -171,12 +170,12 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI }); UtilityObservable.addPropertyChanged(this.selectedLineaProd, (value) -> { - if(this.lineeProdArrayAdapter != null && this.lineeProdArrayAdapter.getDataset() != null) { + if (this.lineeProdArrayAdapter != null && this.lineeProdArrayAdapter.getDataset() != null) { Optional selectedItem = Stream.of(this.lineeProdArrayAdapter.getDataset()) .filter(x -> x.toString().equals(value)) .findFirst(); - if(selectedItem.isPresent()) { + if (selectedItem.isPresent()) { currentLineaProd.set(selectedItem.get()); this.mViewModel.setInternalLineaProd(selectedItem.get().getOriginalModel()); } @@ -196,7 +195,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI }); UtilityObservable.addPropertyChanged(this.currentPesoNetto, (value) -> { - if(value != null) { + if (value != null) { this.currentPesoNetto.set(value.setScale(0, RoundingMode.HALF_UP)); } if (this.mEnableDataCallback) { @@ -217,7 +216,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI }); UtilityObservable.addPropertyChanged(this.currentPesoLordo, (value) -> { - if(value != null) { + if (value != null) { this.currentPesoLordo.set(value.setScale(0, RoundingMode.HALF_UP)); } if (this.mEnableDataCallback) { @@ -322,12 +321,12 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo); mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter); - if(mDialogInputLUProdDTO.getCodTcol() != null) { + if (mDialogInputLUProdDTO.getCodTcol() != null) { Optional optTCol = Stream.of(tipiCollo) .filter(x -> x.getCodTcol().equalsIgnoreCase(mDialogInputLUProdDTO.getCodTcol())) .findFirst(); - if(optTCol.isPresent()) + if (optTCol.isPresent()) selectedMtbTcol.set(new DialogInputLUProdTipoColloListModel().setOriginalModel(optTCol.get()).toString()); } @@ -341,12 +340,12 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI lineeProdArrayAdapter = new DialogInputLULineeProdAdapter(getActivity(), R.layout.array_adapter_single_item, lineeProd); mBindings.filledExposedDropdownCodJfas.setAdapter(lineeProdArrayAdapter); - if(mDialogInputLUProdDTO.getSuggestedCodJfas() != null) { + if (mDialogInputLUProdDTO.getSuggestedCodJfas() != null) { Optional optFas = Stream.of(lineeProd) .filter(x -> x.getCodJfas().equalsIgnoreCase(mDialogInputLUProdDTO.getSuggestedCodJfas())) .findFirst(); - if(optFas.isPresent()) + if (optFas.isPresent()) selectedLineaProd.set(new DialogInputLULineeProdListModel().setOriginalModel(optFas.get()).toString()); } }); @@ -372,9 +371,6 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI } - - - public void resetValues() { this.mViewModel.blockedNumCnf.set(false); this.mViewModel.blockedPesoLordo.set(false); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPeso.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPeso.java index 82d6604e..df570d41 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPeso.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPeso.java @@ -8,6 +8,7 @@ import android.view.LayoutInflater; import android.widget.ArrayAdapter; import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.FragmentActivity; import com.annimon.stream.Optional; import com.annimon.stream.Stream; @@ -24,24 +25,25 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogInputPesoLuBinding; +import it.integry.integrywmsnative.view.dialogs.DialogProgressView; public class DialogInputPeso { - private Context mContext; - private DialogInputPesoLuBinding mBindings; - private DialogInputPesoViewModel mViewModel; - private Dialog currentDialog; + private final FragmentActivity mContext; + private final DialogInputPesoLuBinding mBindings; + private final DialogInputPesoViewModel mViewModel; + private final Dialog currentDialog; private List codTcolList = null; private ArrayAdapter codTcolArrayAdapter = null; - public static Dialog make(final Context context, String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { + public static Dialog make(final FragmentActivity context, String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { return new DialogInputPeso(context, codTcol, netWeight, grossWeight, onDialogDismiss).currentDialog; } - private DialogInputPeso(final Context context, String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { + private DialogInputPeso(final FragmentActivity context, String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { this.mContext = context; @@ -91,7 +93,7 @@ public class DialogInputPeso { private void init() { - final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + final DialogProgressView progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); MagazzinoRESTConsumer.getTipiColloStatic(codTcols -> { this.codTcolList = codTcols; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index 72852662..92b225aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -31,6 +31,7 @@ public class DialogInputQuantityV2DTO { private boolean isDataScadMandatory = false; private boolean isNotesAllowed = false; private boolean canLUBeClosed; + private boolean saveOnImeDone = false; private String partitaMag; private String note; @@ -236,4 +237,13 @@ public class DialogInputQuantityV2DTO { this.suggestPartitaMag = suggestPartitaMag; return this; } + + public boolean isSaveOnImeDone() { + return saveOnImeDone; + } + + public DialogInputQuantityV2DTO setSaveOnImeDone(boolean saveOnImeDone) { + this.saveOnImeDone = saveOnImeDone; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 58b8ddcd..f6eaeb96 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -3,8 +3,6 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2; import android.content.Context; import android.content.DialogInterface; import android.content.res.ColorStateList; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.Html; import android.text.InputType; @@ -12,6 +10,7 @@ import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -27,6 +26,7 @@ import com.pedromassango.doubleclick.DoubleClickListener; import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; +import java.util.Calendar; import java.util.Date; import javax.inject.Inject; @@ -39,6 +39,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbUntMis; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; @@ -51,9 +52,12 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia @Inject DialogInputQuantityV2ViewModel mViewModel; - private DialogInputQuantityV2DTO mDialogInputQuantityV2DTO; - private RunnableArgss mOnComplete; - private Runnable mOnAbort; + private final DialogInputQuantityV2DTO mDialogInputQuantityV2DTO; + private final RunnableArgss mOnComplete; + private final Runnable mOnAbort; + + public ObservableField currentTextNumCnfToTake = new ObservableField<>(0); + public ObservableField currentTextNumPezziToTake = new ObservableField<>(0); public ObservableField currentPartitaMag = new ObservableField<>(); public ObservableField currentNotes = new ObservableField<>(); @@ -63,9 +67,14 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public ObservableField currentQtaCnf = new ObservableField<>(); public ObservableField currentQtaTot = new ObservableField<>(); + public ObservableField currentTaraTot = new ObservableField<>(); + public ObservableField currentTaraArticolo = new ObservableField<>(); + public ObservableField currentPesoLordo = new ObservableField<>(); + public ObservableField enabledNumCnf = new ObservableField<>(true); public ObservableField enabledQtaCnf = new ObservableField<>(true); public ObservableField enabledQtaTot = new ObservableField<>(true); + public ObservableField enabledPesoLordo = new ObservableField<>(false); public ObservableField enabledChangePartitaMag = new ObservableField<>(true); public ObservableField enabledNotes = new ObservableField<>(false); @@ -94,7 +103,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); - this.initBarcode(); } @@ -105,7 +113,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_v2, container, false); mBindings.setLifecycleOwner(this); - mBindings.toolbar.setTitle("Inserimento articolo"); MainApplication.appComponent @@ -141,7 +148,18 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia mBindings.inputQtaTotText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); } - getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + if (mDialogInputQuantityV2DTO.isSaveOnImeDone()) { + + mBindings.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + save(); + return true; + } + return false; + }); + } + this.onLoadingEnded(); return mBindings.getRoot(); } @@ -194,21 +212,41 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia } private void init() { + UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> { if (this.mEnableDataCallback) { this.mViewModel.setPartitaMag(value); } }); - UtilityObservable.addPropertyChanged(this.currentNotes, (value) -> { + UtilityObservable.addPropertyChanged(this.currentDataScad, (value) -> { if (this.mEnableDataCallback) { - this.mViewModel.setNote(value); + MtbAart mtbAart = this.mViewModel.getMtbAart(); + if (value != null && mtbAart != null && mtbAart.getGgScadPartita() != null && mtbAart.getGgScadPartita() > 0) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, mtbAart.getGgScadPartita()); + Date minDataScad = calendar.getTime(); + if (minDataScad.after(value) && value.after(new Date())) { + DialogSimpleMessageView + .makeWarningDialog(new SpannableString("La data selezionata è precedente alla data di scadenza consigliata per l'articolo scelto ( " + mtbAart.getGgScadPartita() + " giorni) . Continuare?"), null, () -> { + this.mViewModel.setDataScad(value); + }, () -> { + this.currentDataScad.set(null); + }) + .show(requireActivity().getSupportFragmentManager(), "tag"); + } else { + this.mViewModel.setDataScad(value); + } + } else { + this.mViewModel.setDataScad(value); + } + } }); - UtilityObservable.addPropertyChanged(this.currentDataScad, (value) -> { + UtilityObservable.addPropertyChanged(this.currentNotes, (value) -> { if (this.mEnableDataCallback) { - this.mViewModel.setDataScad(value); + this.mViewModel.setNote(value); } }); @@ -339,6 +377,18 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.mViewModel.shouldAskDataScad = this.mDialogInputQuantityV2DTO.isDataScadMandatory(); this.enabledNotes.set(this.mDialogInputQuantityV2DTO.isNotesAllowed()); this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed()); + this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg()); + + if (this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue() == 0)) { + this.currentTextNumCnfToTake.set(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue()); + int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().intValue() % this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue(); + this.currentTextNumPezziToTake.set(qtaText); + } else { + this.currentTextNumCnfToTake.set(0); + this.currentTextNumPezziToTake.set(0); + + } + } @@ -364,11 +414,17 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.currentPartitaMag.set(this.mViewModel.getPartitaMag()); this.currentNotes.set(this.mViewModel.getNote()); this.currentDataScad.set(this.mViewModel.getDataScad()); - this.currentNumCnf.set(this.mViewModel.getNumCnf()); this.currentQtaCnf.set(this.mViewModel.getQtaCnf()); this.currentQtaTot.set(this.mViewModel.getQtaTot()); + MtbAart articolo = this.mViewModel.getMtbAart(); + if (articolo != null && !articolo.isFlagQtaCnfFissaBoolean()) { + BigDecimal taraTot = this.mViewModel.getNumCnf().multiply(articolo.getTaraKg()); + this.currentTaraTot.set(taraTot); + this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot)); + } + this.mBindings.executePendingBindings(); this.mEnableDataCallback = true; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java index a696b4cc..0e486126 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java @@ -63,7 +63,7 @@ public class DialogInputQuantityV2ViewModel { private String internalNote; private Date internalDataScad; - private RunnableArgsWithReturn suggestPartitaMagRunnable; + private RunnableArgsWithReturn suggestPartitaMagRunnable; private boolean canOverflowOrderQuantity; private boolean canPartitaMagBeChanged; @@ -102,7 +102,7 @@ public class DialogInputQuantityV2ViewModel { this.internalQtaTot = totalQtaOrd; } - if (this.shouldAskDataScad == null){ + if (this.shouldAskDataScad == null) { this.shouldAskDataScad = mtbAart.get().isFlagTracciabilitaBoolean() && mtbAart.get().getGgScadPartita() != null && mtbAart.get().getGgScadPartita() > 0; } this.shouldShowDataScad = this.shouldAskDataScad || this.internalDataScad != null; @@ -151,7 +151,7 @@ public class DialogInputQuantityV2ViewModel { return; } - if(canPartitaMagBeChanged) { + if (canPartitaMagBeChanged) { if (!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) { this.setPartitaMag(ean128Model.BatchLot); @@ -334,10 +334,11 @@ public class DialogInputQuantityV2ViewModel { this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf); break; - case UPDATE_QTA_TOT:if (!this.blockedQtaTot.get() && this.internalQtaCnf != null) - this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf); - else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null) - this.internalQtaCnf = UtilityBigDecimal.divide(internalQtaTot, newValue); + case UPDATE_QTA_TOT: + if (!this.blockedQtaTot.get() && this.internalQtaCnf != null) + this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf); + else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null) + this.internalQtaCnf = UtilityBigDecimal.divide(internalQtaTot, newValue); break; } @@ -403,13 +404,13 @@ public class DialogInputQuantityV2ViewModel { return false; } else if (mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) { - if (suggestPartitaMagRunnable != null){ + if (suggestPartitaMagRunnable != null) { internalPartitaMag = suggestPartitaMagRunnable.run(this); - if (internalPartitaMag == null){ + if (internalPartitaMag == null) { this.mListener.onError(new InvalidBatchLotException()); return false; } - }else{ + } else { this.mListener.onError(new InvalidBatchLotException()); return false; } @@ -480,11 +481,16 @@ public class DialogInputQuantityV2ViewModel { return this; } - public DialogInputQuantityV2ViewModel setSuggestPartitaMagRunnable(RunnableArgsWithReturn suggestPartitaMagRunnable) { + public DialogInputQuantityV2ViewModel setSuggestPartitaMagRunnable(RunnableArgsWithReturn suggestPartitaMagRunnable) { this.suggestPartitaMagRunnable = suggestPartitaMagRunnable; return this; } + + public MtbAart getMtbAart() { + return this.mtbAart.get(); + } + public interface Listener { void onDataChanged(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java deleted file mode 100644 index 01f390d5..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java +++ /dev/null @@ -1,47 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu; - -import android.app.Dialog; -import android.content.Context; - -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.LayoutInflater; - -import androidx.databinding.DataBindingUtil; -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.utility.UtilityDialog; -import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding; - -public class NoteAggiuntiveLUDialog { - - private Dialog mDialog; - - public static Dialog make(Context context, final RunnableArgs onComplete) { - return new NoteAggiuntiveLUDialog(context, onComplete).mDialog; - } - - private NoteAggiuntiveLUDialog(Context context, final RunnableArgs onComplete){ - - LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - DialogNoteAggiuntiveNuovaUlBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, null, false); - - - mDialog = new Dialog(context); - mDialog.setContentView(bindings.getRoot()); - - mDialog.setCanceledOnTouchOutside(false); - mDialog.setCancelable(false); - mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - UtilityDialog.setTo90PercentWidth(context, mDialog); - - - bindings.buttonConfirm.setOnClickListener(v -> { - mDialog.dismiss(); - if(onComplete != null) onComplete.run(bindings.additionalNotesText.getText().toString()); - }); - - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java index 66c40b54..e1219bcc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java @@ -8,6 +8,7 @@ import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; @@ -17,6 +18,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; public class DialogScanOrCreateLUViewModel { @@ -62,6 +64,8 @@ public class DialogScanOrCreateLUViewModel { this.executeEtichettaAnonima(barcodeScanDTO, onComplete); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { this.executeEAN128(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEan13(barcodeScanDTO)) { + this.executeEAN13(barcodeScanDTO, onComplete); } else { onComplete.run(); } @@ -73,8 +77,12 @@ public class DialogScanOrCreateLUViewModel { MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) .single(); + this.executePosizione(foundPosizione, onComplete); - this.mPosizioniRESTConsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + } + + private void executePosizione(MtbDepoPosizione posizione, Runnable onComplete) { + this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { if (mtbColtList == null || mtbColtList.size() == 0) { this.sendError(new NoLUFoundException()); @@ -88,7 +96,6 @@ public class DialogScanOrCreateLUViewModel { } }, this::sendError); - } @@ -96,7 +103,7 @@ public class DialogScanOrCreateLUViewModel { this.mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), mShouldCheckResiduo, false, mtbColt -> { if (mtbColt == null) { - if(mEnableCreation) { + if (mEnableCreation) { this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(barcodeScanDTO, GestioneEnum.LAVORAZIONE, createdMtbColt -> { onComplete.run(); this.sendOnLUOpened(createdMtbColt, true); @@ -158,6 +165,22 @@ public class DialogScanOrCreateLUViewModel { }, this::sendError); } + private void executeEAN13(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + this.mArticoloRESTConsumer.getByBarcodeProd(barcodeScanDTO.getStringValue(), articoli -> { + if (articoli.size() == 1) { + MtbAart articolo = articoli.get(0); + MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); + if (posizione != null && posizione.isFlagMonoCollo()) { + this.executePosizione(posizione, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + } else { + this.sendError(new NoLUFoundException()); + } + }, this::sendError); + } + private void sendOnLUVenditaConfirmRequired(RunnableArgs onConfirm) { if (this.mListener != null) mListener.onLUVenditaConfirmRequired(onConfirm); } diff --git a/app/src/main/res/drawable/ic_baseline_alert_24.xml b/app/src/main/res/drawable/ic_baseline_alert_24.xml new file mode 100644 index 00000000..40ad9444 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_alert_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_new_24.xml b/app/src/main/res/drawable/ic_baseline_new_24.xml new file mode 100644 index 00000000..af35c19b --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_new_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_stars_24.xml b/app/src/main/res/drawable/ic_baseline_stars_24.xml new file mode 100644 index 00000000..ecfbeb6f --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_stars_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml index a5bfb9f0..688eaf0e 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml @@ -13,6 +13,10 @@ + + + + @@ -27,10 +31,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:background="@android:color/white" android:orientation="vertical" app:cardCornerRadius="12dp" - app:cardElevation="0dp" - android:background="@android:color/white"> + app:cardElevation="0dp"> + + + + + + + + + + + + + + + + + + + + + + @@ -536,7 +628,89 @@ android:layout_height="wrap_content" android:layout_marginTop="8dp" android:orientation="horizontal" - > + android:visibility="@{viewmodel.mtbAart.isFlagQtaCnfFissaBoolean() ? View.GONE : View.VISIBLE}" + android:weightSum="3"> + + + + + + + + + + + + + + + + + + + + + + + + android:visibility="@{view.enabledNotes ? View.VISIBLE : View.GONE }"> + + + + + @@ -262,7 +267,8 @@ + android:layout_height="wrap_content" + android:visibility="@{UtilityString.isNullOrEmpty(viewModel.mtbColt.posizione) ? View.GONE : View.VISIBLE}"> + android:layout_height="wrap_content" + android:visibility="@{UtilityString.isNullOrEmpty(viewModel.mtbColt.ragSocCliente) ? View.GONE : View.VISIBLE}" + + > + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_ask_cliente.xml b/app/src/main/res/layout/dialog_ask_cliente.xml index a98e4009..746c356d 100644 --- a/app/src/main/res/layout/dialog_ask_cliente.xml +++ b/app/src/main/res/layout/dialog_ask_cliente.xml @@ -1,63 +1,24 @@ - - - - - - - - - - - - - - - - - - - - + android:layout_height="0dp" + android:layout_margin="24dp" /> - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_cliente__page1.xml b/app/src/main/res/layout/dialog_ask_cliente__page1.xml index 34c2065a..b89e8b23 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page1.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page1.xml @@ -3,55 +3,59 @@ + - - - - - - - - + + + + + + + android:hint="@string/customer" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/description_text"> + android:ellipsize="end" + android:singleLine="true" /> @@ -60,64 +64,55 @@ style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/job"> + android:hint="@string/job" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/input_cliente"> + android:ellipsize="end" + android:singleLine="true" /> - - - - - + app:layout_constraintGuide_percent="0.5" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/input_commessa" + app:strokeColor="@color/colorPrimary" /> + app:layout_constraintStart_toStartOf="@id/center_buttons_guideline" + app:layout_constraintTop_toBottomOf="@id/input_commessa" /> - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_cliente__page2.xml b/app/src/main/res/layout/dialog_ask_cliente__page2.xml index 4500a471..a110ea93 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page2.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page2.xml @@ -3,104 +3,96 @@ + - + android:orientation="vertical"> - - - + + - - + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:layout_marginBottom="8dp" + android:gravity="start" + android:text="@string/select_a_recipient_message" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/title_text" /> - + + + android:ellipsize="end" + android:singleLine="true" /> - - - - + - - - - - + android:orientation="vertical" + app:layout_constraintGuide_percent="0.5" /> - + - + - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml new file mode 100644 index 00000000..4b389296 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml new file mode 100644 index 00000000..c738e70c --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_input_general.xml b/app/src/main/res/layout/dialog_input_general.xml index 14456ed0..d155b2a7 100644 --- a/app/src/main/res/layout/dialog_input_general.xml +++ b/app/src/main/res/layout/dialog_input_general.xml @@ -1,142 +1,122 @@ - + + - - + android:layout_gravity="center_horizontal" + android:orientation="vertical" + app:cardBackgroundColor="@color/light_blue_300" + app:cardCornerRadius="24dp" + app:cardElevation="0dp"> - - - - - + android:layout_margin="4dp" + android:background="@drawable/dialog_card_child_bg" + android:padding="24dp"> - - - - - - - + android:gravity="center_horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Insert here" /> - + + + android:layout_height="wrap_content" + tools:hint="input here" /> - - - - - - - - - + - + - + - - - - - - + - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index 39a84a9c..6f0683a7 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -14,6 +14,10 @@ + + + + @@ -69,16 +73,17 @@ android:text="@{viewmodel.mtbAart.codMart}" android:textColor="@color/colorPrimary" tools:text="COD MART (Partita mag)" /> + @@ -190,6 +195,95 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -512,6 +608,8 @@ android:hint="@string/qty_x_pck" android:imeOptions="actionDone" android:inputType="numberDecimal" + android:nextFocusForward="@+id/input_qta_tot_text" + android:selectAllOnFocus="true" app:binding="@{view.currentQtaCnf}" /> @@ -535,6 +633,7 @@ android:digits="0123456789" android:hint="@string/tot_qty" android:inputType="number" + android:selectAllOnFocus="true" app:binding="@{view.currentQtaTot}" /> @@ -547,7 +646,89 @@ android:layout_height="wrap_content" android:layout_marginTop="8dp" android:orientation="horizontal" - > + android:visibility="@{viewmodel.mtbAart.isFlagQtaCnfFissaBoolean() ? View.GONE : View.VISIBLE}" + android:weightSum="3"> + + + + + + + + + + + + + + + + + + + + + + + + android:visibility="@{view.enabledNotes ? View.VISIBLE : View.GONE }"> + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/input_cod_tcol"> diff --git a/app/src/main/res/layout/dialog_progress.xml b/app/src/main/res/layout/dialog_progress.xml index 53d8ac4a..b9d76f88 100644 --- a/app/src/main/res/layout/dialog_progress.xml +++ b/app/src/main/res/layout/dialog_progress.xml @@ -6,6 +6,11 @@ + + + @@ -28,15 +33,13 @@ + + + + + + + + + + @@ -191,6 +224,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -310,8 +428,7 @@ android:background="@drawable/badge_round_corner" android:backgroundTint="@color/colorPrimary" android:orientation="vertical" - android:padding="8dp" - > + android:padding="8dp"> - - @@ -480,6 +596,7 @@ android:digits="0123456789" android:hint="@string/tot_qty" android:inputType="number" + android:selectAllOnFocus="true" app:binding="@{view.qtaOrd}" /> diff --git a/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml index fc03339d..b46625db 100644 --- a/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml +++ b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml @@ -63,81 +63,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/title_text" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + - + @@ -15,132 +16,121 @@ - - + + + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" + android:padding="16dp"> + android:orientation="horizontal"> - + android:text="@string/cod_alis_name" + android:textColor="@android:color/black" + android:layout_marginEnd="8dp" + android:textSize="16sp" /> - - - - - - + tools:text="4SECCO" + android:textColor="@android:color/black" + android:textSize="16sp" + android:textStyle="bold" /> - - - - - - - - - - - - - - - - - - - + tools:text="LISTINO FORMAT CEDI SECCO" + android:textColor="@android:color/black" + android:textSize="14sp" + android:layout_marginStart="4dp" + android:textStyle="italic" /> - + + + + + + + + + + + + + + + + + - > + android:paddingEnd="2dp" /> + android:adjustViewBounds="true" /> + android:text="@string/no_orders_found_message" /> - - + + - - @@ -222,7 +210,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:orientation="horizontal" - app:layout_constraintGuide_percent="0.3"/> + app:layout_constraintGuide_percent="0.3" /> - - + fab:fab_colorRipple="#66FFFFFF" /> \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ea39924b..c801f0ae 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -99,8 +99,8 @@ pezzi - collo - colli + confezione + confezioni Unt mis col @@ -117,7 +117,6 @@ Pezzo - deve essere tra 3 e 30 caratteri inserire un username valido inserire un codice azienda valido @@ -137,6 +136,7 @@ Qtà Peso netto (KG) Peso lordo (KG) + Peso Collo (KG) Tipo pedana Totale ordinato @@ -158,6 +158,7 @@ Peso totale Tara pedana Tara collo + Tara articolo Salvataggio Salvataggio completato @@ -374,4 +375,8 @@ Previsione di vendita Giacenza Qtà proposta + giorni + Nuovo articolo in griglia + Seleziona la riga da modificare + Colli in arrivo \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 4959bd0d..f896ab54 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -46,6 +46,9 @@ #BBDEFB #64B5F6 + #42A5F5 + #2196F3 + #1E88E5 #1976D2 #1565C0 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cef9b618..1a3ecbc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -134,6 +134,7 @@ Qty Net weight (KG) Gross weight (KG) + LU weight (KG) LU type Total ordered @@ -156,6 +157,7 @@ Qty x pck Tot qty Tare LU + Tare product Tare pckg Saving @@ -382,4 +384,8 @@ Sales prediction Stock Suggested Qty + days + Newly added product + Select document row to edit + Incoming packages diff --git a/barcode_base_android_library/build.gradle b/barcode_base_android_library/build.gradle index 68c46eb4..82f65226 100644 --- a/barcode_base_android_library/build.gradle +++ b/barcode_base_android_library/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles 'consumer-rules.pro' @@ -32,7 +32,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.4.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { diff --git a/build.gradle b/build.gradle index 94b01d9c..95264602 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - kotlin_version = '1.5.21' + kotlin_version = '1.6.10' } repositories { @@ -10,13 +10,14 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.4' + classpath 'com.android.tools.build:gradle:7.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.gms:google-services:4.3.5' - classpath 'com.google.firebase:perf-plugin:1.3.5' + classpath 'com.google.gms:google-services:4.3.10' + + classpath 'com.google.firebase:perf-plugin:1.4.1' // Add the Firebase Crashlytics Gradle plugin. - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.2' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/dynamic__base/build.gradle b/dynamic__base/build.gradle index 2edefc68..e3f751bf 100644 --- a/dynamic__base/build.gradle +++ b/dynamic__base/build.gradle @@ -3,7 +3,7 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 diff --git a/dynamic_vgalimenti/build.gradle b/dynamic_vgalimenti/build.gradle index db6c8f05..74caf549 100644 --- a/dynamic_vgalimenti/build.gradle +++ b/dynamic_vgalimenti/build.gradle @@ -3,7 +3,7 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 } @@ -18,5 +18,5 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation project(':app') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.4.1' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index abc62726..78eb53b7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip diff --git a/honeywellscannerlibrary/build.gradle b/honeywellscannerlibrary/build.gradle index d259f2d0..48543a16 100644 --- a/honeywellscannerlibrary/build.gradle +++ b/honeywellscannerlibrary/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -32,7 +32,7 @@ dependencies { // implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation project(":honeywellsdk") - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.4.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { diff --git a/keyobardemulatorscannerlibrary/build.gradle b/keyobardemulatorscannerlibrary/build.gradle index cfae7fc2..57f18f1d 100644 --- a/keyobardemulatorscannerlibrary/build.gradle +++ b/keyobardemulatorscannerlibrary/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles 'consumer-rules.pro' @@ -31,7 +31,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.4.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { diff --git a/pointmobilescannerlibrary/build.gradle b/pointmobilescannerlibrary/build.gradle index aacf18eb..51b0f771 100644 --- a/pointmobilescannerlibrary/build.gradle +++ b/pointmobilescannerlibrary/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -29,7 +29,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.4.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', { diff --git a/pointmobilescannerlibrary/src/main/AndroidManifest.xml b/pointmobilescannerlibrary/src/main/AndroidManifest.xml index 6e9286be..e20b179e 100644 --- a/pointmobilescannerlibrary/src/main/AndroidManifest.xml +++ b/pointmobilescannerlibrary/src/main/AndroidManifest.xml @@ -14,7 +14,8 @@ android:name="it.integry.pointmobilescannerlibrary.PointMobileBarcodeReader$ScanResultReceiver" android:enabled="true" android:permission="it.integry.pointmobilescannerlibrary.permission.SCANNER_RESULT_RECEIVER" - android:priority="0" > + android:priority="0" + android:exported="true"> diff --git a/zebrascannerlibrary/build.gradle b/zebrascannerlibrary/build.gradle index 828bde64..c77b13fc 100644 --- a/zebrascannerlibrary/build.gradle +++ b/zebrascannerlibrary/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 31 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -31,7 +31,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.4.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {