Finish v1.23.6(261)

This commit is contained in:
Giuseppe Scorrano 2022-02-23 12:50:45 +01:00
commit 968e904715
139 changed files with 3646 additions and 1680 deletions

1
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1 @@
/saveactions_settings.xml

View File

@ -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 {

View File

@ -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">
<activity
android:name=".gest.spedizione.SpedizioneActivity"
android:screenOrientation="portrait"
@ -40,7 +41,8 @@
<activity
android:name=".gest.main.MainActivity"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing">
android:windowSoftInputMode="adjustNothing"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.CLIENTBARCODEACTIVITY" />
@ -73,7 +75,8 @@
<activity
android:name=".SplashActivity"
android:label="@string/app_name"
android:theme="@style/SplashTheme">
android:theme="@style/SplashTheme"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

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

View File

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

View File

@ -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 {

View File

@ -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 <T> Query<T> from(Collection<T> collection) {
return new Query<T>(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();
}
}

View File

@ -1,7 +0,0 @@
package it.integry.integrywmsnative.core.coollection.matcher;
public interface Matcher {
boolean match(Object value);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<T> {
private final Collection<T> collection;
private CriteriaList<T> criterias;
private OrderCriteria<T> orderCriteria;
public Query(Collection<T> collection) {
this.collection = collection;
criterias = new CriteriaList<T>();
}
public Query<T> where(String method, Matcher matcher) {
Criteria<T> criteria = new Criteria<T>(method, matcher);
criterias.add(criteria);
return this;
}
public Query<T> and(String method, Matcher matcher) {
Criteria<T> criteria = new Criteria<T>(method, matcher);
criteria.setSpecification(new AndSpecification<T>());
criterias.add(criteria);
return this;
}
public Query<T> or(String method, Matcher matcher) {
Criteria<T> criteria = new Criteria<T>(method, matcher);
criteria.setSpecification(new OrSpecification<T>());
criterias.add(criteria);
return this;
}
public Query<T> orderBy(String method, Order order) {
orderCriteria = new OrderCriteria<T>(method, order);
return this;
}
public Query<T> orderBy(String method) {
return orderBy(method, Order.ASC);
}
public List<T> all() {
List<T> all = new ArrayList<T>();
for (T item : collection) {
if (criterias.match(item)) {
all.add(item);
}
}
if (orderCriteria != null) {
all = orderCriteria.sort(all);
}
return all;
}
public T first() {
List<T> all = cloneCollection(collection);
if (orderCriteria != null) {
all = orderCriteria.sort(all);
}
for (T item : all) {
if (criterias.match(item)) {
return item;
}
}
return null;
}
private List<T> cloneCollection(Collection<T> collection) {
List<T> list = new ArrayList<T>();
for (T item : collection) {
list.add(item);
}
return list;
}
}

View File

@ -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<T> {
private final String method;
private final Matcher matcher;
private Specification<T> specification;
public Criteria(String method, Matcher matcher) {
this.method = method;
this.matcher = matcher;
}
public void setSpecification(Specification<T> specification) {
this.specification = specification;
}
public Specification<T> 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);
}
}
}

View File

@ -1,34 +0,0 @@
package it.integry.integrywmsnative.core.coollection.query.criteria;
import java.util.ArrayList;
import java.util.List;
public class CriteriaList<T> {
private List<Criteria<T>> criterias;
public CriteriaList() {
criterias = new ArrayList<Criteria<T>>();
}
public void add(Criteria<T> 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<T> one = criterias.get(i);
Criteria<T> other = criterias.get(i - 1);
matched = matched && one.specification().match(item, one, other);
}
return matched;
}
}

View File

@ -1,5 +0,0 @@
package it.integry.integrywmsnative.core.coollection.query.order;
public enum Order {
ASC, DESC
}

View File

@ -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<T> implements Comparator<T> {
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<Object>) oneValue).compareTo(otherValue);
} else {
return 0;
}
}
}

View File

@ -1,24 +0,0 @@
package it.integry.integrywmsnative.core.coollection.query.order;
import java.util.Collections;
import java.util.List;
public class OrderCriteria<T> {
private final String method;
private final Order order;
public OrderCriteria(String method, Order order) {
this.method = method;
this.order = order;
}
public List<T> sort(List<T> list) {
Collections.sort(list, new OrderComparator<T>(method));
if (order == Order.DESC) {
Collections.reverse(list);
}
return list;
}
}

View File

@ -1,9 +0,0 @@
package it.integry.integrywmsnative.core.coollection.query.specification;
import it.integry.integrywmsnative.core.coollection.query.criteria.Criteria;
public interface Specification<T> {
boolean match(T item, Criteria<T> one, Criteria<T> other);
}

View File

@ -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<T> implements Specification<T> {
@Override
public boolean match(T item, Criteria<T> one, Criteria<T> other) {
return one.match(item) && other.match(item);
}
}

View File

@ -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<T> implements Specification<T> {
@Override
public boolean match(T item, Criteria<T> one, Criteria<T> other) {
return one.match(item) || other.match(item);
}
}

View File

@ -1,37 +0,0 @@
package it.integry.integrywmsnative.core.coollection.reflection;
import java.lang.reflect.Field;
public class Phanton<T> {
private final T target;
private Class<?> clazz;
private Phanton(T target) {
this.target = target;
clazz = target.getClass();
}
public static <T> Phanton<T> from(T target) {
return new Phanton<T>(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);
}
}

View File

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

View File

@ -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<ArticoloGriglia> articoli);
@Insert
Long insert(ArticoloGriglia articolo);
@Update
void updateAll(List<ArticoloGriglia> articoli);
@Update
void update(ArticoloGriglia articolo);
@ -45,4 +47,7 @@ public interface ArticoloGrigliaDao {
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId and new_no_promo = 1")
List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId);
}

View File

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

View File

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

View File

@ -16,4 +16,6 @@ public interface ArticoloGrigliaRepository {
void findArticoloByScanAndGriglia(String scan, int idGriglia, RunnableArgs<ArticoloGriglia> onSuccess, RunnableArgs<Exception> onFail);
void findNewArticoliInGrigla(int idGriglia, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onFail);
}

View File

@ -89,4 +89,14 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri
}
});
}
public void findNewArticoliInGrigla(int idGriglia, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onFail) {
execute(() -> {
try {
onSuccess.run(mArticoloGrigliaDao.getNewArticoliInGriglia(idGriglia));
} catch (Exception e) {
onFail.run(e);
}
});
}
}

View File

@ -28,13 +28,15 @@ public class ArticoliOrdineDataSource extends Repository implements ArticoliOrdi
List<ArticoloOrdine> toUpdate = new ArrayList<>();
List<ArticoloOrdine> 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<Exception> onFail) {
execute(() -> {
try {
if (articolo.getArticoloOrdineId() > 0) {
if (articolo.getArticoloOrdineId() != null && articolo.getArticoloOrdineId() > 0) {
mArticoloOrdineDao.update(articolo);
} else {
mArticoloOrdineDao.insert(articolo);

View File

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

View File

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

View File

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

View File

@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.expansion;
import dagger.Module;
@Module(subcomponents = BaseActivityComponent.class)
public class BaseActivityModule {
}

View File

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

View File

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

View File

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

View File

@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.expansion;
import dagger.Module;
@Module(subcomponents = BaseFragmentComponent.class)
public class BaseFragmentModule {
}

View File

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

View File

@ -57,6 +57,7 @@ public class MtbColt extends EntityBase {
private String codJcom;
private List<MtbCols> mtbCols;
private MtbTCol mtbTCol;
private Boolean disablePrint;
private String ragSocCliente;
@ -83,7 +84,6 @@ public class MtbColt extends EntityBase {
}
private ObservableArrayList<MtbColr> mtbColr = new ObservableArrayList<>();
public ObservableArrayList<MtbColr> 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<FiltroOrdineDTO> 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) {

View File

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

View File

@ -83,7 +83,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> 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<ArrayList<MtbGrup>>() {}.getType();
Type typeOfObjectsList = new TypeToken<ArrayList<MtbGrup>>() {
}.getType();
this.systemRESTConsumer.processSql("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList, onComplete, onFailed);
}

View File

@ -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<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
createColloFromEtichettaAnonima(barcodeScanDTO.getStringValue(), gestione, onComplete, onFailed);
}
@ -399,7 +398,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}, onFailed);
}
private void cyclicGetMultipleByTestate(@NotNull Iterator<MtbColt> sourceMtbColts, boolean onlyResiduo, ArrayList<MtbColt> resultMtbColt, Runnable onComplete, RunnableArgs<Exception> 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<Exception> onFailed) {
String codMdep = posizione.getCodMdep();
@ -545,7 +542,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}, onFailed);
}
public static void retrieveBasketColli(RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService.getColliInBasket(SettingsManager.i().getUserSession().getDepo().getCodMdep()).enqueue(new Callback<ServiceRESTResponse<List<MtbColt>>>() {
@ -622,7 +618,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public void assegnaLottoSuColloScarico(MtbColt sourceMtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone();
@ -648,7 +643,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public void versamentoAutomaticoUL(MtbColt sourceMtbColt, RunnableArgs<VersamentoAutomaticoULResponseDTO> onComplete, RunnableArgs<Exception> 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();
}

View File

@ -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<List<MvwSitArtUdcDetInventario>> onComplete, RunnableArgs<Exception> onFailed) {
HashMap<String, Object> 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<ArrayList<MvwSitArtUdcDetInventario>>() {
}.getType();
this.mSystemRESTConsumer.<ArrayList<MvwSitArtUdcDetInventario>>processSql(query, typeOfObjectsList, inventarioList -> {
List<String> codMarts = Stream.of(inventarioList)
.map(x -> x.getCodMart().trim())
.toList();
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var row : inventarioList) {
MtbAart foundMtbAart = null;
Optional<MtbAart> 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);
}
}

View File

@ -0,0 +1,4 @@
package it.integry.integrywmsnative.core.rest.consumers;
public interface GiacenzaRESTConsumerService {
}

View File

@ -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<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> 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());

View File

@ -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<List<MvwSitArtUdcDetInventario>> onSuccess, RunnableArgs<Exception> onError) {
mGiacenzaRESTConsumer.getGiacenzeInPosizione(posizione, onSuccess, onError);
}
public void getInventarioDaPosizionePerArticolo(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgs<List<MvwSitArtUdcDetInventario>> onSuccess, RunnableArgs<Exception> onError) {
getInventarioDaPosizione(posizione, (inventario) -> {
List<MvwSitArtUdcDetInventario> 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<MtbColr> 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<MtbColt> mapInventarioToMtbColtList(List<MvwSitArtUdcDetInventario> inventario) {
return new ArrayList<>(Stream.of(inventario).groupBy(x -> x.getNumCollo() + "-" + x.getDataCollo() + "-" + x.getSerCollo() + x.getGestione()).map(inv -> {
List<MvwSitArtUdcDetInventario> rows = inv.getValue();
MtbColt mtbColt = mapInventarioToMtbColt(rows.get(0), false);
ObservableArrayList<MtbColr> mtbColrs = new ObservableArrayList<>();
mtbColrs.addAll(Stream.of(rows).map(this::mapInventarioToMtbColr).toList());
mtbColt.setMtbColr(mtbColrs);
return mtbColt;
}).toList());
}
}

View File

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

View File

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

View File

@ -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<String,Void,Void> {
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;
}
}

View File

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

View File

@ -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<Integer> onProgressUpdate;
private RunnableArgs<String> 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<Integer> onProgressUpdate) {
this.onProgressUpdate = onProgressUpdate;
return this;
}
public FileDownloader setOnDownloadCompleted(RunnableArgs<String> onDownloadCompleted) {
this.onDownloadCompleted = onDownloadCompleted;
return this;
}
}

View File

@ -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) {

View File

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

View File

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

View File

@ -31,10 +31,13 @@ public class UtilityPosizione {
}
public static MtbDepoPosizione getFromCache(String posizione) {
List<MtbDepoPosizione> tmpList = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
var availablePosizioni = SettingsManager.iDB().getAvailablePosizioni();
if(availablePosizioni == null) return null;
List<MtbDepoPosizione> 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;
}

View File

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

View File

@ -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<String> onComplete) {
public void onInfoAggiuntiveRequest(RunnableArgss<String, MtbTCol> onComplete) {
runOnUiThread(() -> {
NoteAggiuntiveLUDialog.make(this, onComplete).show();
InfoAggiuntiveLUDialog.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
});
}

View File

@ -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<String> onComplete) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete);
private void sendOnInfoAggiuntiveRequest(RunnableArgss<String, MtbTCol> onComplete) {
if (this.mListener != null) this.mListener.onInfoAggiuntiveRequest(onComplete);
}
private void sendError(Exception ex) {
@ -990,7 +996,7 @@ public class AccettazionePickingViewModel {
void onVersamentoAutomaticoULRequest(RunnableArgs<Boolean> onComplete);
void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete);
void onInfoAggiuntiveRequest(RunnableArgss<String, MtbTCol> onComplete);
void onError(Exception ex);

View File

@ -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<String> 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<String> 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<String> getAvailableFornitori() {

View File

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

View File

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

View File

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

View File

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

View File

@ -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<GrigliaAcquistiChildDTO> productsList;
private boolean isCheckPartitaMag = false;
private JSONObject checkFornitoreRules = null;
public MutableLiveData<SqlMtbColt> document = new MutableLiveData<>();
public MutableLiveData<List<SqlMtbColr>> 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<SqlMtbColr> 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<SqlMtbColr> getRowsForArticolo(GrigliaAcquistiChildDTO articolo) {
List<SqlMtbColr> 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<SqlMtbColr> 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<SqlMtbColr> rows);
void onEditRowRequest(SqlMtbColr row,boolean flagTracciabilita);
void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita);
void onMultipleRowsFound(List<SqlMtbColr> rows, GrigliaAcquistiChildDTO articolo);
void onDocumentHoldRequest();

View File

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

View File

@ -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 {
}

View File

@ -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<SqlMtbColr> onRowSelected;
private final List<SqlMtbColr> listArts;
private final MutableLiveData<List<DialogChooseRowFromListaDocRowsListModel>> listModels = new MutableLiveData<>();
private DialogChooseRowFromListaDocRowsLayoutBinding binding;
public MutableLiveData<SqlMtbColr> selectedRow = new MutableLiveData<>();
public static DialogSelectDocRowsView newInstance(
List<SqlMtbColr> listArts,
RunnableArgs<SqlMtbColr> onDismiss
) {
return new DialogSelectDocRowsView(listArts, onDismiss);
}
private DialogSelectDocRowsView(List<SqlMtbColr> listArts, RunnableArgs<SqlMtbColr> 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);
}
}

View File

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

View File

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

View File

@ -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<MtbColr> mtbColrsToPick, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
public void onArtSelectionRequest(List<MtbColr> mtbColrsToPick, MtbAart mtbAart, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
DialogChooseArtsFromListaArts
.newInstance(mtbColrsToPick, onComplete, () -> {
.newInstance(mtbColrsToPick, mtbAart, onComplete, () -> {
onAbort.run();
BarcodeManager.enable();
})

View File

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

View File

@ -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<MtbColr> mtbColrsToPick = Stream.of(sourceMtbColt.getMtbColr())
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaCol(), BigDecimal.ZERO))
.toList();
this.sendArtSelectionRequest(mtbColrsToPick, pickedAarts -> {
this.sendArtSelectionRequest(mtbColrsToPick, mtbAart, pickedAarts -> {
List<MtbColr> 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<MtbColr> mtbColrsToPick, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
private void sendArtSelectionRequest(List<MtbColr> mtbColrsToPick, MtbAart mtbAart, RunnableArgs<List<MtbColr>> 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<VtbDest, String> onComplete, Runnable onAbort);
void onArtSelectionRequest(List<MtbColr> mtbColrsToPick, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort);
void onArtSelectionRequest(List<MtbColr> mtbColrsToPick, MtbAart mtbAart, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort);
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,

View File

@ -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<String> onComplete) {
NoteAggiuntiveLUDialog.make(this, onComplete).show();
public void onInfoAggiuntiveRequired(RunnableArgss<String, MtbTCol> 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

View File

@ -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<String> onComplete) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete);
private void sendOnInfoAggiuntiveRequired(RunnableArgss<String, MtbTCol> 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<String> onComplete);
void onInfoAggiuntiveRequired(RunnableArgss<String, MtbTCol> onComplete);
void onError(Exception ex);

View File

@ -80,7 +80,7 @@ public class ProdRientroMerceOrderDetailRESTConsumer extends _BaseRESTConsumer {
}.getType();
systemRESTConsumer.<List<MtbColt>>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<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
ProdRientroMerceOrderDetailRESTConsumerService service = RESTBuilder.getService(ProdRientroMerceOrderDetailRESTConsumerService.class);
service.importColloDaProduzione(importColliDaProduzioneRequestDTO).enqueue(new Callback<ServiceRESTResponse<MtbColt>>() {
service.importColloDaProduzione(importColliDaProduzioneRequestDTO).enqueue(new Callback<ServiceRESTResponse<List<MtbColt>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbColt>> call, Response<ServiceRESTResponse<MtbColt>> response) {
public void onResponse(Call<ServiceRESTResponse<List<MtbColt>>> call, Response<ServiceRESTResponse<List<MtbColt>>> 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<ServiceRESTResponse<MtbColt>> call, Throwable t) {
public void onFailure(Call<ServiceRESTResponse<List<MtbColt>>> 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);
});
}

View File

@ -13,10 +13,10 @@ public interface ProdRientroMerceOrderDetailRESTConsumerService {
@POST("importColliDaProduzioneJson")
Call<ServiceRESTResponse<MtbColt>> importColliDaProduzione(@Body List<ImportColliDaProduzioneRequestDTO> importColliDaProduzioneRequestDTO);
Call<ServiceRESTResponse<List<MtbColt>>> importColliDaProduzione(@Body List<ImportColliDaProduzioneRequestDTO> importColliDaProduzioneRequestDTO);
@POST("importColloDaProduzioneJson")
Call<ServiceRESTResponse<MtbColt>> importColloDaProduzione(@Body ImportColliDaProduzioneRequestDTO importColloDaProduzioneRequestDTO);
Call<ServiceRESTResponse<List<MtbColt>>> importColloDaProduzione(@Body ImportColliDaProduzioneRequestDTO importColloDaProduzioneRequestDTO);
@POST("cancellaColloDaProduzione")
Call<ServiceRESTResponse<Object>> deleteColloDaProduzione(@Body MtbColt mtbColtToDelete);

View File

@ -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);
@ -111,6 +114,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
@ -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<ArticoloOrdine> 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();
}
}

View File

@ -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() {

View File

@ -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<Exception> onError){
public void saveArticoliToOrdine(List<ArticoloOrdine> articoli, Runnable onSave, RunnableArgs<Exception> onFail) {
mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail);
}
public void removeArticoloFromOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onError) {
mArticoliOrdineRepository.deleteArticolo(articolo, onSave, onError);
}
public void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {
mArticoliGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError);
}
}

View File

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

View File

@ -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<Griglia> mOnDialogDismiss;
@ -38,7 +39,7 @@ public class DialogScanLisA {
private GrigliaRepository mGrigliaRepository;
private Griglia mGriglia;
private DialogScanLisA(Activity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs<Griglia> onDialogDismiss) {
private DialogScanLisA(FragmentActivity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs<Griglia> 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<Griglia> onDialogDismiss) {
public static Dialog make(FragmentActivity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs<Griglia> onDialogDismiss) {
return new DialogScanLisA(context, grigliaRepository, helper, onDialogDismiss).mDialog;
}
@ -75,7 +77,6 @@ public class DialogScanLisA {
});
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();

View File

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

View File

@ -776,34 +776,34 @@ public class SpedizioneViewModel {
List<MtbPartitaMag> 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<MtbPartitaMag> 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<MtbPartitaMag> 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)

View File

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

View File

@ -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> mtbColt = new ObservableField<>();
public ObservableField<String> pesoKg = new ObservableField<>();
public ObservableField<String> 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();
}

View File

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

View File

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

View File

@ -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<Map.Entry<Integer, Class>> mDatasetLayout;
private List<Map.Entry<ViewDataBinding, IDialogAskClienteViewModel>> mDatasetViews;
private final List<Map.Entry<Integer, Class<? extends IDialogAskClienteViewModel>>> mDatasetLayout;
private final List<Map.Entry<ViewDataBinding, IDialogAskClienteViewModel>> mDatasetViews;
private final List<IDialogAskClienteViewModel> mDatasetViewModels;
private DeactivatableViewPager viewPager;
public DialogAskClienteAdapter(Context context, List<Map.Entry<Integer, Class>> datasetLayouts) {
public DialogAskClienteAdapter(Context context, List<Map.Entry<Integer, Class<? extends IDialogAskClienteViewModel>>> 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;

View File

@ -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<VtbDest, String> onComplete, @NotNull Runnable onAbort) {
return new DialogAskClienteView( onComplete, onAbort);
return new DialogAskClienteView(onComplete, onAbort);
}
private DialogAskClienteView(@NotNull RunnableArgss<VtbDest, String> onComplete, @NotNull Runnable onAbort) {
@ -69,7 +70,7 @@ public class DialogAskClienteView extends BaseDialogFragment {
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
List<Map.Entry<Integer, Class>> views = new ArrayList<>();
List<Map.Entry<Integer, Class<? extends IDialogAskClienteViewModel>>> 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);

View File

@ -40,7 +40,10 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
private int mBarcodeScannerInstanceID;
private ArrayList<DialogAskClienteClienteDTO> availableClienti;
private ObservableArrayList<String> codJcoms = new ObservableArrayList<>();
private final ObservableArrayList<String> 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;
}

View File

@ -25,6 +25,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
private Context mContext;
private Runnable mOnConfirm;
private Runnable mOnAbort;
private List<DialogAskClienteDestinatarioDTO> 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<DialogAskClienteDestinatarioDTO> items) {
DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items);

View File

@ -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<String> onPositiveClick, Runnable onNegativeClick){
private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs<String> 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<String> onPositiveClick, Runnable onNegativeClick){
public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
return makeBase(mContext,
title,
value,
defaultTextValue,
hintText,
onPositiveClick,
onNegativeClick);

View File

@ -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<DialogChooseArtsFromListaArtsItemModel> mDataset;
private int mBarcodeScannerIstanceID;
private DialogProgressView mCurrentProgress;
private MtbAart selectedArt;
public static DialogChooseArtsFromListaArts newInstance(List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) {
return new DialogChooseArtsFromListaArts(listaMtbColr, onItemsChoosed, onAbort);
}
public static DialogChooseArtsFromListaArts newInstance(List<MtbColr> listaMtbColr, MtbAart mtbAart, RunnableArgs<List<MtbColr>> 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<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> 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<BarcodeScanDTO> 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;
}
});
}
}

View File

@ -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<String, MtbTCol> mOnComplete;
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
public ObservableField<String> additionalNotes = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
public static InfoAggiuntiveLUDialog newInstance(@NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new InfoAggiuntiveLUDialog(onComplete);
}
private InfoAggiuntiveLUDialog(@NotNull RunnableArgss<String, MtbTCol> 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<DialogInputLUProdTipoColloListModel> 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();
});
}
}

View File

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

View File

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

View File

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

Some files were not shown because too many files have changed in this diff Show More