Compare commits

...

59 Commits

Author SHA1 Message Date
d4d494218b Finish v1.25.0(277) 2022-04-11 12:09:46 +02:00
a3d6b11c69 -> v1.25.0 (277) 2022-04-11 12:09:42 +02:00
852edf1b13 Implementata comunicazione con dispositivo bluetooth in fase di rientro merce da lav.
Rimosso printerName e quantity dalla stampa delle SSCC.
2022-04-11 12:08:58 +02:00
6806290d98 Finish v1.24.8(276) 2022-03-30 17:46:46 +02:00
66f7a51462 Finish v1.24.8(276) 2022-03-30 17:46:46 +02:00
0e1e69dc9a -> v1.24.8 (276) 2022-03-30 17:46:41 +02:00
2ef24fe6e9 impostato focus automatico sul campo numCnf 2022-03-30 17:45:57 +02:00
54c2d90334 Finish v1.24.7(275) 2022-03-29 11:05:53 +02:00
577f2041a1 Finish v1.24.7(275) 2022-03-29 11:05:53 +02:00
2f3e74fbfe -> v1.24.7 (275) 2022-03-29 11:05:45 +02:00
b0fa911322 risolto problema scrollview su display ridotti 2022-03-29 11:03:40 +02:00
473b9f22fb Aggiornato filtro ordine in caso di recupera UL. 2022-03-28 17:57:04 +02:00
cc1e1bf221 Finish v1.24.6(274) 2022-03-25 11:23:18 +01:00
a0c85b3fcb Finish v1.24.6(274) 2022-03-25 11:23:18 +01:00
0f41bd99aa -> v1.24.6 (274) 2022-03-25 11:23:03 +01:00
7a3a207462 in posizionamento merce in caso di necessità definizione livello posizione non si chiude la progress dialog 2022-03-25 11:21:25 +01:00
7206b3c37e Finish v1.24.5(273) 2022-03-24 17:26:56 +01:00
4cf8b6167f Finish v1.24.5(273) 2022-03-24 17:26:55 +01:00
b19b438489 -> v1.24.5 (273) 2022-03-24 17:26:48 +01:00
d3ee6d9ea3 Aggiornato filtro ordine in caso di recupera UL. 2022-03-24 17:25:47 +01:00
dd9789c4f3 Fix su dismiss del DialogInputQuantity 2022-03-24 16:58:58 +01:00
67571e3d7a Finish v1.24.4(272) 2022-03-24 12:40:53 +01:00
a0e17f557d Finish v1.24.4(272) 2022-03-24 12:40:52 +01:00
684946bb14 -> v1.24.4 (272) 2022-03-24 12:40:46 +01:00
4aab6b1688 Ottimizzazioni su DialogProgress 2022-03-24 12:40:15 +01:00
310a79f41d Fix su rotazione schermo in avantielenco accettazione 2022-03-23 18:08:22 +01:00
f8164ca1eb Finish v1.24.3(271) 2022-03-23 16:48:10 +01:00
790a9eae6c Finish v1.24.3(271) 2022-03-23 16:48:09 +01:00
b41edd314f -> v1.24.3 (271) 2022-03-23 16:48:04 +01:00
34d8a93c01 Merge remote-tracking branch 'origin/develop' into develop 2022-03-23 16:47:27 +01:00
3b45d8fe35 Fix su ColliDataRecoverService.
Implementata scrollview su DialogInputQuantity.
Corretta gestione cod anag in picking libero.
2022-03-23 16:47:22 +01:00
aba1fcdc7b Finish v1.24.2(270) 2022-03-22 10:12:21 +01:00
012d7caa52 Finish v1.24.2(270) 2022-03-22 10:12:21 +01:00
e7e20da206 -> v1.24.2 (270) 2022-03-22 10:12:10 +01:00
ef6535897b [ordini acquisto pv]
cambio colore in base alla differenza tra qta ordinata e proposta
auto ordinamento di 1 col alla scansione di un articolo
fix vari
2022-03-22 10:09:19 +01:00
8c75ecbd0a Finish v1.24.1(269)_2 2022-03-10 17:20:13 +01:00
fad3c4243d Finish v1.24.1(269)_2 2022-03-10 17:20:13 +01:00
a6e75114cb Rimosse classi di test 2022-03-10 17:18:59 +01:00
48a83bc0d5 Finish v1.24.1(269) 2022-03-10 12:08:07 +01:00
b58475b426 Finish v1.24.1(269) 2022-03-10 12:08:06 +01:00
207daab105 -> v1.24.1 (269) 2022-03-10 12:08:02 +01:00
c32da27b7f Fix su caricamento dati da griglia quando si scansiona un articolo gia inserito nell'ordine 2022-03-10 12:07:22 +01:00
1f94c14634 Ripristinato click per modificare righe in ordine di acquisto 2022-03-09 16:14:12 +01:00
4880ea8301 Implementata gestione dei cod_anags aziendali 2022-03-09 12:09:04 +01:00
a2d165d475 Rimosso caricamento profili allo start.
Aggiunto ulteriore controllo su licenza
2022-03-09 10:33:09 +01:00
d142f0c868 Implementata lettura errore chiamate http in login 2022-03-08 22:05:19 +01:00
746838010a Finish v1.24.0 2022-03-08 15:57:57 +01:00
a74d865c57 Finish v1.24.0 2022-03-08 15:57:56 +01:00
0a37323cef Merge remote-tracking branch 'origin/develop' into develop 2022-03-08 15:57:17 +01:00
b36b80eae0 -> v1.24.0 (268) 2022-03-08 15:57:07 +01:00
acb7727f3c Implementato flag allow empty destinatario 2022-03-08 15:57:07 +01:00
c16f5d2ddd -> v1.24.0 (268) 2022-03-08 15:56:50 +01:00
4ca449d557 Implementato flag allow empty cliente 2022-03-08 15:55:53 +01:00
da70d7c064 Implementata logica della posizione di default sull'articolo in caso di addExtraItem 2022-03-07 12:43:11 +01:00
0be1eac5fe Finish v1.23.12(267) 2022-03-02 18:29:20 +01:00
e0eabbcbda Finish v1.23.12(267) 2022-03-02 18:29:20 +01:00
bd7b561b28 -> v1.23.12 (267) 2022-03-02 18:29:11 +01:00
37c3a1ec76 Refactoring PVOrdiniAcquisto 2022-03-02 18:28:27 +01:00
62e69ad5bf Finish v1.23.11(266) 2022-03-01 12:00:02 +01:00
130 changed files with 3450 additions and 2794 deletions

558
.idea/dbnavigator.xml generated Normal file

File diff suppressed because one or more lines are too long

View File

@@ -15,6 +15,7 @@
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" /> <option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" /> <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" /> <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
@@ -45,7 +46,7 @@
<option name="ADVANCED_PROFILING_ENABLED" value="false" /> <option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" /> <option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" /> <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" /> <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Callstack Sample" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" /> <option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" /> <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers> </Profilers>

View File

@@ -15,6 +15,7 @@
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" /> <option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" /> <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" /> <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
@@ -45,7 +46,7 @@
<option name="ADVANCED_PROFILING_ENABLED" value="false" /> <option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" /> <option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" /> <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" /> <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Callstack Sample" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" /> <option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" /> <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers> </Profilers>

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 266 def appVersionCode = 277
def appVersionName = '1.23.11' def appVersionName = '1.25.0'
signingConfigs { signingConfigs {
release { release {
@@ -78,11 +78,11 @@ android {
} }
} }
lintOptions {
abortOnError false
}
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti"] dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti"]
lint {
abortOnError false
}
} }
@@ -113,6 +113,7 @@ dependencies {
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.preference:preference-ktx:1.2.0' implementation 'androidx.preference:preference-ktx:1.2.0'
implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0"
implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
@@ -138,7 +139,6 @@ dependencies {
implementation 'com.github.cachapa:ExpandableLayout:2.9.2' implementation 'com.github.cachapa:ExpandableLayout:2.9.2'
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
implementation 'com.github.fede87:StatusBarAlert:1.0.1' implementation 'com.github.fede87:StatusBarAlert:1.0.1'
testImplementation 'junit:junit:4.13.2'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3' implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'com.github.pedromassango:doubleClick:3.0' implementation 'com.github.pedromassango:doubleClick:3.0'
@@ -157,11 +157,22 @@ dependencies {
implementation project(':barcode_base_android_library') implementation project(':barcode_base_android_library')
implementation project(':honeywellscannerlibrary') implementation project(':honeywellscannerlibrary')
implementation project(':keyobardemulatorscannerlibrary') implementation project(':keyobardemulatorscannerlibrary')
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1'
androidTestImplementation 'org.testng:testng:7.4.0'
implementation 'com.github.RaviKoradiya:LiveAdapter:1.3.4' implementation 'com.github.RaviKoradiya:LiveAdapter:1.3.4'
// Required -- JUnit 4 framework
// testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.1"
// androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
// androidTestImplementation 'org.testng:testng:7.4.0'
//Bluetooth device manager
implementation 'com.github.harry1453:android-bluetooth-serial:v1.1'
// RxJava is also required.
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
} }
repositories { repositories {

View File

@@ -1,26 +0,0 @@
package it.integry.integrywmsnative;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumentation test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("it.integry.integrywmsnative", appContext.getPackageName());
}
}

View File

@@ -1,8 +0,0 @@
package it.integry.integrywmsnative.gest.spedizione;
class SpedizioneViewModelTest {
@org.junit.jupiter.api.Test
void createNewLU() {
}
}

View File

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

View File

@@ -7,6 +7,8 @@ import it.integry.integrywmsnative.core.context.AppContext;
import it.integry.integrywmsnative.core.data_store.db.RoomModule; import it.integry.integrywmsnative.core.data_store.db.RoomModule;
import it.integry.integrywmsnative.core.expansion.BaseActivityComponent; import it.integry.integrywmsnative.core.expansion.BaseActivityComponent;
import it.integry.integrywmsnative.core.expansion.BaseActivityModule; import it.integry.integrywmsnative.core.expansion.BaseActivityModule;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragmentComponent;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragmentModule;
import it.integry.integrywmsnative.core.expansion.BaseFragmentComponent; import it.integry.integrywmsnative.core.expansion.BaseFragmentComponent;
import it.integry.integrywmsnative.core.expansion.BaseFragmentModule; import it.integry.integrywmsnative.core.expansion.BaseFragmentModule;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneComponent; import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneComponent;
@@ -91,6 +93,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
MainApplicationModule.class, MainApplicationModule.class,
BaseActivityModule.class, BaseActivityModule.class,
BaseFragmentModule.class, BaseFragmentModule.class,
BaseDialogFragmentModule.class,
LoginModule.class, LoginModule.class,
MainActivityModule.class, MainActivityModule.class,
MainFragmentModule.class, MainFragmentModule.class,
@@ -133,6 +136,8 @@ public interface MainApplicationComponent {
BaseFragmentComponent.Factory baseFragmentComponent(); BaseFragmentComponent.Factory baseFragmentComponent();
BaseDialogFragmentComponent.Factory baseDialogFragmentComponent();
SplashActivityComponent.Factory splashActivityComponent(); SplashActivityComponent.Factory splashActivityComponent();
LoginComponent.Factory loginActivityComponent(); LoginComponent.Factory loginActivityComponent();

View File

@@ -42,7 +42,7 @@ public class ColliDataRecoverService {
} }
public boolean thereIsAnExistantSession() { public boolean thereIsAnExistantSession() {
return mtbColtsSessions.size() > 0; return mtbColtsSessions != null && mtbColtsSessions.size() > 0;
} }
public List<Integer> getAllSessionIDs() { public List<Integer> getAllSessionIDs() {

View File

@@ -4,6 +4,7 @@ import androidx.room.Database;
import androidx.room.RoomDatabase; import androidx.room.RoomDatabase;
import androidx.room.TypeConverters; import androidx.room.TypeConverters;
import it.integry.integrywmsnative.core.data_store.db.converter.BigDecimalConverter;
import it.integry.integrywmsnative.core.data_store.db.converter.DateConverter; import it.integry.integrywmsnative.core.data_store.db.converter.DateConverter;
import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao;
import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao;
@@ -18,9 +19,10 @@ 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.SqlMtbColr;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; 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 = 7, exportSchema = false) @Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 8, exportSchema = false)
@TypeConverters({ @TypeConverters({
DateConverter.class DateConverter.class,
BigDecimalConverter.class
}) })
public abstract class AppDatabase extends RoomDatabase { public abstract class AppDatabase extends RoomDatabase {

View File

@@ -0,0 +1,17 @@
package it.integry.integrywmsnative.core.data_store.db.converter;
import androidx.room.TypeConverter;
import java.math.BigDecimal;
public class BigDecimalConverter {
@TypeConverter
public static BigDecimal fromFloat(Float value) {
return value == null ? null : BigDecimal.valueOf(value.doubleValue());
}
@TypeConverter
public static Float dateToTimestamp(BigDecimal value) {
return value == null ? null : value.floatValue();
}
}

View File

@@ -4,7 +4,9 @@ import androidx.room.Dao;
import androidx.room.Delete; import androidx.room.Delete;
import androidx.room.Insert; import androidx.room.Insert;
import androidx.room.Query; import androidx.room.Query;
import androidx.room.RawQuery;
import androidx.room.Update; import androidx.room.Update;
import androidx.sqlite.db.SupportSQLiteQuery;
import java.util.List; import java.util.List;
@@ -45,6 +47,9 @@ public interface ArticoloGrigliaDao {
@Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode) AND id_griglia = :idGriglia LIMIT 1") @Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode) AND id_griglia = :idGriglia LIMIT 1")
Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart); Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart);
@RawQuery(observedEntities = ArticoloGriglia.class)
List<ArticoloGriglia> getArticoli(SupportSQLiteQuery query);
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId") @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId); List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);

View File

@@ -8,9 +8,8 @@ import androidx.room.Update;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.wrappers.ArticoloOrdineWrapper;
@Dao @Dao
public interface ArticoloOrdineDao { public interface ArticoloOrdineDao {
@@ -34,8 +33,17 @@ public interface ArticoloOrdineDao {
@Update @Update
void update(ArticoloOrdine articolo); void update(ArticoloOrdine articolo);
@Query("SELECT * FROM articoli_ordine where id_ordine = :ordineId") @Query("SELECT articoli_ordine.*," +
List<ArticoloOrdine> findArticoliByOrdine(int ordineId); "articoli_griglia.gg_scadenza," +
"articoli_griglia.giacenza," +
"articoli_griglia.qta_prevista_vendita," +
"articoli_griglia.qta_proposta " +
"FROM articoli_ordine " +
"INNER JOIN ordini on articoli_ordine.id_ordine = ordini.ordine_id " +
"LEFT OUTER JOIN articoli_griglia " +
"on articoli_ordine.cod_mart = articoli_griglia.cod_mart and ordini.id_griglia = articoli_griglia.id_griglia and articoli_ordine.bar_code = articoli_griglia.bar_code " +
"where id_ordine = :ordineId")
List<ArticoloOrdineWrapper> findArticoliByOrdine(int ordineId);
@Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1") @Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1")
ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart); ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart);

View File

@@ -27,7 +27,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
public class ArticoloGriglia { public class ArticoloGriglia {
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "articolo_griglia_id") @ColumnInfo(name = "articolo_griglia_id")
private int articoloGrigliaId; private Integer articoloGrigliaId;
@ColumnInfo(name = "cod_mart") @ColumnInfo(name = "cod_mart")
private String codMart; private String codMart;
@@ -74,11 +74,11 @@ public class ArticoloGriglia {
@ColumnInfo(name = "new_no_promo") @ColumnInfo(name = "new_no_promo")
private boolean newNoPromo = false; private boolean newNoPromo = false;
public int getArticoloGrigliaId() { public Integer getArticoloGrigliaId() {
return articoloGrigliaId; return articoloGrigliaId;
} }
public void setArticoloGrigliaId(int articoloGrigliaId) { public void setArticoloGrigliaId(Integer articoloGrigliaId) {
this.articoloGrigliaId = articoloGrigliaId; this.articoloGrigliaId = articoloGrigliaId;
} }

View File

@@ -82,12 +82,15 @@ public class ArticoloOrdine {
@Ignore @Ignore
private BigDecimal qtaProposta = BigDecimal.ZERO; private BigDecimal qtaProposta = BigDecimal.ZERO;
@Ignore
private int bgTint;
public Integer getArticoloOrdineId() { public Integer getArticoloOrdineId() {
return articoloOrdineId; return articoloOrdineId;
} }
public void setArticoloOrdineId(int articoloOrdineId) { public void setArticoloOrdineId(Integer articoloOrdineId) {
this.articoloOrdineId = articoloOrdineId; this.articoloOrdineId = articoloOrdineId;
} }
@@ -244,6 +247,23 @@ public class ArticoloOrdine {
} }
public float getCnfDaRic() { public float getCnfDaRic() {
return qtaCnf > 0.f ? merceDaRic / qtaCnf : 0; return qtaCnf > 0.f ? merceDaRic * qtaCnf : 0;
}
public int checkQtaProposta() {
int check = 0;
if (!qtaProposta.equals(BigDecimal.ZERO)) {
check = BigDecimal.valueOf(qtaOrd).compareTo(qtaProposta);
}
return check;
}
public int getBgTint() {
return bgTint;
}
public ArticoloOrdine setBgTint(int bgTint) {
this.bgTint = bgTint;
return this;
} }
} }

View File

@@ -5,7 +5,14 @@ import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject; import javax.inject.Inject;
@@ -24,27 +31,21 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri
this.mArticoloGrigliaDao = articoloGrigliaDao; this.mArticoloGrigliaDao = articoloGrigliaDao;
} }
public void saveArticoliToGriglia(List<ArticoloGriglia> articoli, Griglia griglia, Runnable onSuccess, RunnableArgs<Exception> onFail) { public void saveArticoliToGriglia(List<ArticoloGriglia> updatedArts, Griglia griglia, Runnable onSuccess, RunnableArgs<Exception> onFail) {
execute(() -> { execute(() -> {
try { try {
List<ArticoloGriglia> toUpdate = new ArrayList<>(); var tmp = calcItemsToInsertAndUpdate(updatedArts);
List<ArticoloGriglia> toInsert = new ArrayList<>(); var toInsert = (List<ArticoloGriglia>) tmp.get("toInsert");
List<String> codMarts = new ArrayList<>(); var toUpdate = (List<ArticoloGriglia>) tmp.get("toUpdate");
for (ArticoloGriglia art : articoli) { var codMarts = (List<String>) tmp.get("codMarts");
Integer id = mArticoloGrigliaDao.getIdArticoloByGrigliaAndBarcodeAndCodMart(griglia.getGrigliaId(), art.getBarCode(), art.getCodMart());
codMarts.add(art.getCodMart());
if (id != null) {
art.setArticoloGrigliaId(id);
toUpdate.add(art);
} else {
toInsert.add(art);
}
}
mArticoloGrigliaDao.insertAll(toInsert); mArticoloGrigliaDao.insertAll(toInsert);
mArticoloGrigliaDao.updateAll(toUpdate); mArticoloGrigliaDao.updateAll(toUpdate);
List<ArticoloGriglia> articoliGriglia = mArticoloGrigliaDao.getArticoliFromGriglia(griglia.getGrigliaId()); List<ArticoloGriglia> articoliGriglia = mArticoloGrigliaDao.getArticoliFromGriglia(griglia.getGrigliaId());
List<ArticoloGriglia> toDelete = Stream.of(articoliGriglia).filter(articolo -> !codMarts.contains(articolo.getCodMart())).toList(); List<ArticoloGriglia> toDelete = Stream.of(articoliGriglia).filter(articolo -> !codMarts.contains(articolo.getCodMart())).toList();
mArticoloGrigliaDao.deleteList(toDelete); mArticoloGrigliaDao.deleteList(toDelete);
onSuccess.run(); onSuccess.run();
} catch (Exception e) { } catch (Exception e) {
onFail.run(e); onFail.run(e);
@@ -52,6 +53,52 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri
}); });
} }
private HashMap<String, Object> calcItemsToInsertAndUpdate(List<ArticoloGriglia> updatedArts) throws InterruptedException, ExecutionException {
var toInsert = new ArrayList<ArticoloGriglia>();
var toUpdate = new ArrayList<ArticoloGriglia>();
var codMarts = new ArrayList<String>();
int cores = Runtime.getRuntime().availableProcessors();
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(cores);
List<Callable<ArticoloGriglia>> calls = new ArrayList<>();
for (int i = 0; i < updatedArts.size(); i++) {
int finalI = i;
Callable<ArticoloGriglia> callableTask = () -> {
var updatedArt = updatedArts.get(finalI);
Integer id = mArticoloGrigliaDao.getIdArticoloByGrigliaAndBarcodeAndCodMart(updatedArt.getIdGriglia(), updatedArt.getBarCode(), updatedArt.getCodMart());
if (id != null) {
updatedArt.setArticoloGrigliaId(id);
}
return updatedArt;
};
calls.add(callableTask);
}
List<Future<ArticoloGriglia>> futures = executor.invokeAll(calls, Long.MAX_VALUE, TimeUnit.MILLISECONDS);
for (Future<ArticoloGriglia> future : futures) {
if (future.isDone()) {
codMarts.add(future.get().getCodMart());
if (future.get().getArticoloGrigliaId() == null) toInsert.add(future.get());
else toUpdate.add(future.get());
} else {
future.cancel(true);
}
}
var tmp = new HashMap<String, Object>();
tmp.put("toInsert", toInsert);
tmp.put("toUpdate", toUpdate);
tmp.put("codMarts", codMarts);
return tmp;
}
public void findArticoloByBarcodeAndGriglia(String barcode, int idGriglia, RunnableArgs<ArticoloGriglia> onSuccess, RunnableArgs<Exception> onFail) { public void findArticoloByBarcodeAndGriglia(String barcode, int idGriglia, RunnableArgs<ArticoloGriglia> onSuccess, RunnableArgs<Exception> onFail) {
execute(() -> { execute(() -> {
try { try {

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.core.data_store.db.repository.implementations; package it.integry.integrywmsnative.core.data_store.db.repository.implementations;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
@@ -11,6 +13,7 @@ import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.wrappers.ArticoloOrdineWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class ArticoliOrdineDataSource extends Repository implements ArticoliOrdineRepository { public class ArticoliOrdineDataSource extends Repository implements ArticoliOrdineRepository {
@@ -95,7 +98,15 @@ public class ArticoliOrdineDataSource extends Repository implements ArticoliOrdi
public void findArticoliByOrdine(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad, RunnableArgs<Exception> onError) { public void findArticoliByOrdine(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad, RunnableArgs<Exception> onError) {
execute(() -> { execute(() -> {
try { try {
onLoad.run(mArticoloOrdineDao.findArticoliByOrdine(ordine.getOrdineId())); List<ArticoloOrdineWrapper> list = mArticoloOrdineDao.findArticoliByOrdine(ordine.getOrdineId());
onLoad.run(Stream.of(list).map(x -> {
ArticoloOrdine art = x.getArticoloOrdine();
art.setGgScadenza(x.getGgScadenza());
art.setGiacenza(x.getGiacenza());
art.setQtaProposta(x.getQtaProposta());
art.setQtaPrevistaVendita(x.getQtaPrevistaVendita());
return art;
}).toList());
} catch (Exception e) { } catch (Exception e) {
onError.run(e); onError.run(e);
} }

View File

@@ -0,0 +1,65 @@
package it.integry.integrywmsnative.core.data_store.db.wrappers;
import androidx.room.ColumnInfo;
import androidx.room.Embedded;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
public class ArticoloOrdineWrapper {
@Embedded
private ArticoloOrdine articoloOrdine;
@ColumnInfo(name = "gg_scadenza")
private int ggScadenza = 0;
@ColumnInfo(name = "giacenza")
private BigDecimal giacenza = BigDecimal.ZERO;
@ColumnInfo(name = "qta_prevista_vendita")
private BigDecimal qtaPrevistaVendita = BigDecimal.ZERO;
@ColumnInfo(name = "qta_proposta")
private BigDecimal qtaProposta = BigDecimal.ZERO;
public ArticoloOrdine getArticoloOrdine() {
return articoloOrdine;
}
public void setArticoloOrdine(ArticoloOrdine articoloOrdine) {
this.articoloOrdine = articoloOrdine;
}
public int getGgScadenza() {
return ggScadenza;
}
public void setGgScadenza(int ggScadenza) {
this.ggScadenza = ggScadenza;
}
public BigDecimal getGiacenza() {
return giacenza;
}
public void setGiacenza(BigDecimal giacenza) {
this.giacenza = giacenza;
}
public BigDecimal getQtaPrevistaVendita() {
return qtaPrevistaVendita;
}
public void setQtaPrevistaVendita(BigDecimal qtaPrevistaVendita) {
this.qtaPrevistaVendita = qtaPrevistaVendita;
}
public BigDecimal getQtaProposta() {
return qtaProposta;
}
public void setQtaProposta(BigDecimal qtaProposta) {
this.qtaProposta = qtaProposta;
}
}

View File

@@ -0,0 +1,10 @@
package it.integry.integrywmsnative.core.exception;
public class BluetoothConnectionException extends Exception {
public BluetoothConnectionException(String btDeviceName, String btDeviceMac, Throwable th) {
super("Impossibile collegarsi al dispositivo bluetooth: " + btDeviceName + " [" + btDeviceMac + "]. Riprovare.");
initCause(th);
}
}

View File

@@ -0,0 +1,8 @@
package it.integry.integrywmsnative.core.exception;
public class NotValidLicenseException extends Exception {
public NotValidLicenseException() {
super("Licenza non valida");
}
}

View File

@@ -36,6 +36,45 @@ public class BaseActivity extends AppCompatActivity {
return v; return v;
} }
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
public void onError(Exception ex) {
this.runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
BarcodeManager.enable();
});
}
private void openProgress() {
BarcodeManager.disable();
if (!progressOpened && !this.mCurrentProgress.isAdded()) {
this.progressOpened = true;
runOnUiThread(() -> {
this.mCurrentProgress.show(getSupportFragmentManager(), "tag");
});
}
}
private void closeProgress() {
BarcodeManager.enable();
if (progressOpened) {
this.progressOpened = false;
runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}
@Override @Override
public boolean dispatchKeyEvent(KeyEvent event) { public boolean dispatchKeyEvent(KeyEvent event) {
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) {
@@ -56,47 +95,4 @@ public class BaseActivity extends AppCompatActivity {
); );
} }
protected void openProgress() {
BarcodeManager.disable();
if (!progressOpened) {
this.progressOpened = true;
runOnUiThread(() -> {
this.mCurrentProgress.show(getSupportFragmentManager(), "tag");
});
}
}
protected void closeProgress() {
BarcodeManager.enable();
if (progressOpened) {
this.progressOpened = false;
runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}
public void onLoadingStarted() {
// new Thread(() -> {
BarcodeManager.disable();
this.openProgress();
// }).start();
}
public void onLoadingEnded() {
// new Thread(() -> {
this.closeProgress();
BarcodeManager.enable();
// }).start();
}
public void onError(Exception ex) {
this.runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
BarcodeManager.enable();
});
}
} }

View File

@@ -11,19 +11,21 @@ import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
public class BaseDialogFragment extends DialogFragment { public class BaseDialogFragment extends DialogFragment {
private boolean mBarcodeListener = false; @Inject
private DialogProgressView mCurrentProgress; public DialogProgressView mCurrentProgress;
private boolean progressOpened;
private boolean mBarcodeListener = false;
public BaseDialogFragment() {
super();
}
@Override @Override
@@ -41,6 +43,11 @@ public class BaseDialogFragment extends DialogFragment {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
MainApplication.appComponent
.baseDialogFragmentComponent()
.create()
.inject(this);
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) {
getDialog().setOnKeyListener((dialog, keyCode, event) -> { getDialog().setOnKeyListener((dialog, keyCode, event) -> {
if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) { if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) {
@@ -51,6 +58,42 @@ public class BaseDialogFragment extends DialogFragment {
} }
} }
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
private void openProgress() {
if (!progressOpened && !this.mCurrentProgress.isAdded()) {
this.progressOpened = true;
requireActivity().runOnUiThread(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
}
private void closeProgress() {
if (progressOpened) {
this.progressOpened = false;
requireActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}
public void onError(Exception ex) {
requireActivity().runOnUiThread(() -> {
this.onLoadingEnded();
UtilityExceptions.defaultException(requireActivity(), ex);
});
}
private boolean isControlKey(KeyEvent keyEvent) { private boolean isControlKey(KeyEvent keyEvent) {
int keyCode = keyEvent.getKeyCode(); int keyCode = keyEvent.getKeyCode();
return ( return (
@@ -65,45 +108,4 @@ public class BaseDialogFragment extends DialogFragment {
} }
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
protected void openProgress() {
// new Thread(() -> {
requireActivity().runOnUiThread(() -> {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(requireActivity());
}
});
// }).start();
}
protected void closeProgress() {
// new Thread(() -> {
requireActivity().runOnUiThread(() -> {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
});
// }).start();
}
public void onError(Exception ex) {
requireActivity().runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(requireActivity(), ex);
});
}
} }

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.core.expansion;
import dagger.Subcomponent;
@Subcomponent
public interface BaseDialogFragmentComponent {
@Subcomponent.Factory
interface Factory {
BaseDialogFragmentComponent create();
}
void inject(BaseDialogFragment baseDialogFragment);
}

View File

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

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.expansion; package it.integry.integrywmsnative.core.expansion;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -63,6 +64,30 @@ public abstract class BaseFragment extends Fragment {
BarcodeManager.enable(); BarcodeManager.enable();
} }
private void openProgress() {
Log.d("PROGRESS DIALOG", "OPENED");
new Thread(() -> {
if (!progressOpened && !this.mCurrentProgress.isAdded()) {
this.progressOpened = true;
requireActivity().runOnUiThread(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
}).start();
}
private void closeProgress() {
Log.d("PROGRESS DIALOG", "CLOSED");
new Thread(() -> {
if (progressOpened) {
this.progressOpened = false;
requireActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}).start();
}
public void onError(Exception ex) { public void onError(Exception ex) {
requireActivity().runOnUiThread(() -> { requireActivity().runOnUiThread(() -> {
this.closeProgress(); this.closeProgress();
@@ -81,24 +106,6 @@ public abstract class BaseFragment extends Fragment {
} }
} }
protected void openProgress() {
if (!progressOpened) {
this.progressOpened = true;
requireActivity().runOnUiThread(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
}
protected void closeProgress() {
if (progressOpened) {
this.progressOpened = false;
requireActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}
protected void popMe() { protected void popMe() {
requireActivity().runOnUiThread(() -> { requireActivity().runOnUiThread(() -> {
((IPoppableActivity) requireActivity()).pop(); ((IPoppableActivity) requireActivity()).pop();

View File

@@ -1,28 +1,28 @@
package it.integry.integrywmsnative.core.expansion; package it.integry.integrywmsnative.core.expansion;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import androidx.databinding.ObservableList.OnListChangedCallback;
public abstract class OnListGeneralChangedCallback extends ObservableList.OnListChangedCallback { public abstract class OnListGeneralChangedCallback<T> extends OnListChangedCallback<ObservableList<T>> {
@Override @Override
public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { public void onItemRangeChanged(ObservableList<T> sender, int positionStart, int itemCount) {
onChanged(sender); onChanged(sender);
} }
@Override @Override
public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { public void onItemRangeInserted(ObservableList<T> sender, int positionStart, int itemCount) {
onChanged(sender); onChanged(sender);
} }
@Override @Override
public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { public void onItemRangeMoved(ObservableList<T> sender, int fromPosition, int toPosition, int itemCount) {
onChanged(sender); onChanged(sender);
} }
@Override @Override
public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { public void onItemRangeRemoved(ObservableList<T> sender, int positionStart, int itemCount) {
onChanged(sender); onChanged(sender);
} }

View File

@@ -1,13 +1,20 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import android.text.TextUtils;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityDB;
@@ -105,11 +112,41 @@ public class MtbColt extends EntityBase {
} }
} }
public MtbColt initDefaultFields() { public MtbColt initDefaultFields(GestioneEnum gestioneEnum) {
setGestione(gestioneEnum);
setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep());
setPreparatoDa(SettingsManager.i().getUser().getFullname()); setPreparatoDa(SettingsManager.i().getUser().getFullname());
setOraInizPrep(UtilityDate.getDateInstance()); setOraInizPrep(UtilityDate.getDateInstance());
setCodAnag(SettingsManager.iDB().getDefaultCodAnag());
String codAnagToUse = null;
switch (gestioneEnum) {
case ACQUISTO:
case LAVORAZIONE:
case PRODUZIONE:
if (SettingsManager.iDB().getInternalCodAnags() == null) break;
Optional<InternalCodAnagsDTO> optCodAnagForn = Stream.of(SettingsManager.iDB().getInternalCodAnags())
.filter(InternalCodAnagsDTO::isFornitore)
.findFirst();
if (optCodAnagForn.isEmpty()) break;
codAnagToUse = optCodAnagForn.get().getCodAnag();
break;
case VENDITA:
if (SettingsManager.iDB().getInternalCodAnags() == null) break;
Optional<InternalCodAnagsDTO> optCodAnagClie = Stream.of(SettingsManager.iDB().getInternalCodAnags())
.filter(InternalCodAnagsDTO::isCliente)
.findFirst();
if (optCodAnagClie.isEmpty()) break;
codAnagToUse = optCodAnagClie.get().getCodAnag();
break;
}
setCodAnag(codAnagToUse);
return this; return this;
} }
@@ -540,9 +577,41 @@ public class MtbColt extends EntityBase {
String xmlPrefix = "{\"whereCond\": \""; String xmlPrefix = "{\"whereCond\": \"";
String xmlSuffix = "\"}"; String xmlSuffix = "\"}";
StringBuilder whereCond = new StringBuilder(); // StringBuilder whereCond = new StringBuilder();
String whereCond;
List<String> conditions = new ArrayList<>();
String existingFilter;
if (this.filtroOrdini != null) {
existingFilter = this.filtroOrdini;
existingFilter = existingFilter.replace(xmlPrefix, "").replace(xmlSuffix, "");
conditions.add(existingFilter);
} else {
existingFilter = "";
}
if (filtroOrdineDtos != null && filtroOrdineDtos.size() > 0) {
for (FiltroOrdineDTO filtroOrdineDTO : filtroOrdineDtos) {
try {
String condition = (String.format("(d.g = %s AND d.d = %s and d.n = %s",
UtilityDB.valueToString(filtroOrdineDTO.getGestioneOrd()),
UtilityDB.valueToString(UtilityDate.formatDate(filtroOrdineDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)),
UtilityDB.valueToString(filtroOrdineDTO.getNumOrd())));
if (!UtilityString.isNullOrEmpty(filtroOrdineDTO.getDataConsS())) {
condition += (String.format(" AND dr.dc = %s",
UtilityDB.valueToString(UtilityDate.formatDate(filtroOrdineDTO.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH))));
}
condition += ")";
if (!existingFilter.contains(condition)) {
conditions.add(condition);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*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); FiltroOrdineDTO x = filtroOrdineDtos.get(i);
@@ -568,7 +637,8 @@ public class MtbColt extends EntityBase {
} }
} }
} }*/
whereCond = TextUtils.join(" OR ", conditions);
this.filtroOrdini = xmlPrefix + whereCond + xmlSuffix; this.filtroOrdini = xmlPrefix + whereCond + xmlSuffix;
} }

View File

@@ -0,0 +1,35 @@
package it.integry.integrywmsnative.core.model.dto;
public class InternalCodAnagsDTO {
private String codAnag;
private boolean isCliente;
private boolean isFornitore;
public String getCodAnag() {
return codAnag;
}
public InternalCodAnagsDTO setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public boolean isCliente() {
return isCliente;
}
public InternalCodAnagsDTO setCliente(boolean cliente) {
isCliente = cliente;
return this;
}
public boolean isFornitore() {
return isFornitore;
}
public InternalCodAnagsDTO setFornitore(boolean fornitore) {
isFornitore = fornitore;
return this;
}
}

View File

@@ -104,10 +104,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
public void createColloLavorazione(int segno, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) { public void createColloLavorazione(int segno, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToCreate = new MtbColt() MtbColt mtbColtToCreate = new MtbColt()
.setSegno(segno) .setSegno(segno);
.setGestione(GestioneEnum.LAVORAZIONE);
mtbColtToCreate.initDefaultFields(); mtbColtToCreate.initDefaultFields(GestioneEnum.LAVORAZIONE);
mtbColtToCreate mtbColtToCreate
.setOperation(CommonModelConsts.OPERATION.INSERT); .setOperation(CommonModelConsts.OPERATION.INSERT);
@@ -123,9 +122,8 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
public void createColloScaricoDaCarico(MtbColt sourceMtbColt, MtbDepoPosizione posizione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) { public void createColloScaricoDaCarico(MtbColt sourceMtbColt, MtbDepoPosizione posizione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt newMtbColt = new MtbColt() MtbColt newMtbColt = new MtbColt()
.initDefaultFields() .initDefaultFields(GestioneEnum.LAVORAZIONE)
.setCodAnag(null) .setCodAnag(null)
.setGestione(GestioneEnum.LAVORAZIONE)
.setSegno(-1) .setSegno(-1)
.setCodTcol(sourceMtbColt.getCodTcol()) .setCodTcol(sourceMtbColt.getCodTcol())
.setPesoKg(sourceMtbColt.getPesoKg()) .setPesoKg(sourceMtbColt.getPesoKg())
@@ -176,9 +174,8 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
public void createColliScaricoDaOrdineLavorazione(MtbColt sourceMtbColt, MtbColr sourceMtbColr, MtbDepoPosizione posizione, List<OrdineLavorazioneDTO> ordini, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) { public void createColliScaricoDaOrdineLavorazione(MtbColt sourceMtbColt, MtbColr sourceMtbColr, MtbDepoPosizione posizione, List<OrdineLavorazioneDTO> ordini, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt newMtbColt = new MtbColt() MtbColt newMtbColt = new MtbColt()
.initDefaultFields() .initDefaultFields(GestioneEnum.LAVORAZIONE)
.setCodAnag(null) .setCodAnag(null)
.setGestione(GestioneEnum.LAVORAZIONE)
.setSegno(-1) .setSegno(-1)
.setCodTcol(sourceMtbColt.getCodTcol()) .setCodTcol(sourceMtbColt.getCodTcol())
// .setPesoKg(sourceMtbColt.getPesoKg()) // .setPesoKg(sourceMtbColt.getPesoKg())
@@ -246,9 +243,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
public void createColloFromEtichettaAnonima(String barcode, GestioneEnum gestione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) { public void createColloFromEtichettaAnonima(String barcode, GestioneEnum gestione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToCreate = new MtbColt() MtbColt mtbColtToCreate = new MtbColt()
.setGestione(gestione); .initDefaultFields(gestione);
mtbColtToCreate.initDefaultFields();
Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcode); Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcode);
String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE; String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE;
@@ -587,35 +582,37 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
} }
public void spostaArtsTraUL(MtbColt sourceMtbColt, MtbColt destMtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) { public void spostaArtsTraUL(MtbColt sourceMtbColt, MtbColt destMtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToMoveClone = (MtbColt) sourceMtbColt.clone(); new Thread(() -> {
MtbColt mtbColtDestClone = (MtbColt) destMtbColt.clone(); MtbColt mtbColtToMoveClone = (MtbColt) sourceMtbColt.clone();
MtbColt mtbColtDestClone = (MtbColt) destMtbColt.clone();
for (int i = 0; i < mtbColtToMoveClone.getMtbColr().size(); i++) { for (int i = 0; i < mtbColtToMoveClone.getMtbColr().size(); i++) {
mtbColtToMoveClone.getMtbColr().get(i) mtbColtToMoveClone.getMtbColr().get(i)
.setMtbAart(null) .setMtbAart(null)
.setMtbPartitaMag(null); .setMtbPartitaMag(null);
}
mtbColtDestClone.setMtbColr(null);
SpostaArtsTraULRequestDTO spostaArtsTraULRequestDTO = new SpostaArtsTraULRequestDTO()
.setSourceMtbColt(mtbColtToMoveClone)
.setDestinationMtbColt(mtbColtDestClone);
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService.spostaArtsTraUL(spostaArtsTraULRequestDTO).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "spostaArtsTraUL", data -> {
onComplete.run();
}, onFailed);
} }
@Override mtbColtDestClone.setMtbColr(null);
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if (onFailed != null) onFailed.run(new Exception(t)); SpostaArtsTraULRequestDTO spostaArtsTraULRequestDTO = new SpostaArtsTraULRequestDTO()
} .setSourceMtbColt(mtbColtToMoveClone)
}); .setDestinationMtbColt(mtbColtDestClone);
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService.spostaArtsTraUL(spostaArtsTraULRequestDTO).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "spostaArtsTraUL", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}).start();
} }
public void assegnaLottoSuColloScarico(MtbColt sourceMtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) { public void assegnaLottoSuColloScarico(MtbColt sourceMtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) {

View File

@@ -93,7 +93,8 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
&& (!UtilityString.isNullOrEmpty(x.getPartitaMag()) && x.getPartitaMag().equalsIgnoreCase(mtbColr.getPartitaMag()))) && (!UtilityString.isNullOrEmpty(x.getPartitaMag()) && x.getPartitaMag().equalsIgnoreCase(mtbColr.getPartitaMag())))
.findFirst(); .findFirst();
if (optionalMtbPartitaMag.isPresent()) mtbColr.setMtbPartitaMag(optionalMtbPartitaMag.get()); if (optionalMtbPartitaMag.isPresent())
mtbColr.setMtbPartitaMag(optionalMtbPartitaMag.get());
} }
} }
} }
@@ -160,7 +161,15 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() { service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) { public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) {
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", onComplete, onFailed); analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", sitArtOrds -> {
if (sitArtOrds != null) {
for (SitArtOrdDTO sitArtOrd : sitArtOrds) {
sitArtOrd.setCodMart(sitArtOrd.getCodMart().trim());
}
}
onComplete.run(sitArtOrds);
}, onFailed);
} }
@Override @Override
@@ -182,13 +191,13 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
} }
String baseSql = "SELECT DISTINCT mtb_colt.* " + String baseSql = "SELECT DISTINCT mtb_colt.* " +
"FROM mtb_colt, " + "FROM mtb_colt " +
" mtb_colr " + " INNER JOIN mtb_colr ON " +
"WHERE mtb_colt.gestione = mtb_colr.gestione " + " mtb_colt.gestione = mtb_colr.gestione " +
" AND mtb_colt.ser_collo = mtb_colr.ser_collo " + " AND mtb_colt.ser_collo = mtb_colr.ser_collo " +
" AND mtb_colt.data_collo = mtb_colr.data_collo " + " AND mtb_colt.data_collo = mtb_colr.data_collo " +
" AND mtb_colt.num_collo = mtb_colr.num_collo " + " AND mtb_colt.num_collo = mtb_colr.num_collo " +
" AND " + whereCondGestione + " WHERE " + whereCondGestione +
" AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " + " AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " +
" AND mtb_colt.data_doc IS NULL AND "; " AND mtb_colt.data_doc IS NULL AND ";

View File

@@ -6,6 +6,7 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -41,32 +42,35 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class); PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class);
ordiniARestService ordiniARestService
.getArticoliListino(codAlis) .getArticoliListino(codAlis)
.enqueue(new Callback<ServiceRESTResponse<GrigliaDTO>>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<GrigliaDTO>> call, Response<ServiceRESTResponse<GrigliaDTO>> response) { public void onResponse(Call<ServiceRESTResponse<GrigliaDTO>> call, Response<ServiceRESTResponse<GrigliaDTO>> response) {
analyzeAnswer(response, "getArticoliListino", griglia -> { analyzeAnswer(response, "getArticoliListino", griglia -> {
UtilityThread.executeParallel(() -> { UtilityThread.executeParallel(() -> {
var startTime = new Date().getTime();
List<ArticoloDTO> listaArticoli = new ArrayList<>(); List<ArticoloDTO> listaArticoli = new ArrayList<>();
Stream.of(griglia.getGrigliaAcquistiChild()) Stream.of(griglia.getGrigliaAcquistiChild())
.map(ArticoloDTO::getCodMart) .groupBy(ArticoloDTO::getCodMart)
.distinct() .forEach(entry -> {
.withoutNulls()
.forEach(art -> { if(entry.getValue().size() == 1) {
List<ArticoloDTO> inList = Stream.of(griglia.getGrigliaAcquistiChild()) listaArticoli.add(entry.getValue().get(0));
.filter(x -> x.getCodMart().equalsIgnoreCase(art)) } else {
.toList(); for (ArticoloDTO articolo : entry.getValue()) {
if (inList.size() > 1) {
for (ArticoloDTO articolo : inList) {
if (!articolo.getBarCode().endsWith(articolo.getCodMart())) { if (!articolo.getBarCode().endsWith(articolo.getCodMart())) {
listaArticoli.add(articolo); listaArticoli.add(articolo);
} }
} }
} else {
listaArticoli.add(inList.get(0));
} }
}); });
griglia.setGrigliaAcquistiChild(listaArticoli); griglia.setGrigliaAcquistiChild(listaArticoli);
Log.d("LOADING TIME 1", "MS: " + (new Date().getTime() - startTime));
onSuccess.run(griglia); onSuccess.run(griglia);
}, false); }, false);
}, onFailed); }, onFailed);

View File

@@ -53,7 +53,7 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{
String codMdep = null; String codMdep = null;
PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class); PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class);
posizioniRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback<ServiceRESTResponse<List<MtbDepoPosizione>>>() { posizioniRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<MtbDepoPosizione>>> call, Response<ServiceRESTResponse<List<MtbDepoPosizione>>> response) { public void onResponse(Call<ServiceRESTResponse<List<MtbDepoPosizione>>> call, Response<ServiceRESTResponse<List<MtbDepoPosizione>>> response) {
analyzeAnswer(response, "getAvailablePosizioni", (m) -> { analyzeAnswer(response, "getAvailablePosizioni", (m) -> {

View File

@@ -9,7 +9,6 @@ import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
@@ -55,7 +54,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void printCollo(Type printerType, MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) { public void printCollo(MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
// if (BuildConfig.DEBUG) { // if (BuildConfig.DEBUG) {
// onComplete.run(); // onComplete.run();
@@ -64,9 +63,6 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class);
Call<ServiceRESTResponse<Object>> callable = null; Call<ServiceRESTResponse<Object>> callable = null;
if (printerType != null)
callable = printerService.printCollo(printerType.toString(), testataColloToPrint);
else
callable = printerService.printCollo(testataColloToPrint); callable = printerService.printCollo(testataColloToPrint);
callable.enqueue(new Callback<>() { callable.enqueue(new Callback<>() {

View File

@@ -26,13 +26,6 @@ public interface PrinterRESTConsumerService {
@Body JasperDTO jasperDTO @Body JasperDTO jasperDTO
); );
@POST("wms/printEtichettaSSCC")
Call<ServiceRESTResponse<Object>> printCollo(
@Query("printerType") String printerType,
@Body MtbColt mtbColtToPrint
);
@POST("wms/printEtichettaSSCC") @POST("wms/printEtichettaSSCC")
Call<ServiceRESTResponse<Object>> printCollo( Call<ServiceRESTResponse<Object>> printCollo(
@Body MtbColt mtbColtToPrint @Body MtbColt mtbColtToPrint

View File

@@ -5,6 +5,7 @@ import android.util.Log;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.exception.NotValidLicenseException;
import it.integry.integrywmsnative.core.rest.CommonRESTException; import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.core.rest.model.EsitoType; import it.integry.integrywmsnative.core.rest.model.EsitoType;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@@ -41,7 +42,9 @@ public class _BaseRESTConsumer {
if (response.code() == 404) { if (response.code() == 404) {
Log.e(logTitle, "Errore " + response.code() + ": risorsa non trovata (" + response.raw().request().url().toString() + ")"); Log.e(logTitle, "Errore " + response.code() + ": risorsa non trovata (" + response.raw().request().url().toString() + ")");
onFailed.run(new Exception("Errore " + response.code() + ": risorsa non trovata (" + logTitle + ")")); onFailed.run(new Exception("Errore " + response.code() + ": risorsa non trovata (" + logTitle + ")"));
} else { } else if (response.code() == 550)
onFailed.run(new NotValidLicenseException());
else {
Log.e(logTitle, "Status " + response.code() + ": " + response.message()); Log.e(logTitle, "Status " + response.code() + ": " + response.message());
onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
} }

View File

@@ -30,23 +30,27 @@ public class ServerStatusChecker {
private Runnable runnableCode = new Runnable() { private Runnable runnableCode = new Runnable() {
@Override @Override
public void run() { public void run() {
if(shouldExecute && !UtilityString.isNullOrEmpty(SettingsManager.i().getServer().getHost())) { if (shouldExecute && !UtilityString.isNullOrEmpty(SettingsManager.i().getServer().getHost())) {
UtilityServer.isEmsApiAvailable(SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), mInternalCallback); UtilityServer.isEmsApiAvailable(
SettingsManager.i().getServer().getHost(),
SettingsManager.i().getServer().getPort(),
() -> mInternalCallback.run(true),
ex -> mInternalCallback.run(false));
handler.postDelayed(this, MILLIS_DELAY); handler.postDelayed(this, MILLIS_DELAY);
} }
} }
}; };
public void addCallback(RunnableArgs<Boolean> callback){ public void addCallback(RunnableArgs<Boolean> callback) {
this.mCallback.add(callback); this.mCallback.add(callback);
} }
public void removeCallback(RunnableArgs<Boolean> callback){ public void removeCallback(RunnableArgs<Boolean> callback) {
this.mCallback.remove(callback); this.mCallback.remove(callback);
} }
public static void init(){ public static void init() {
instance.shouldExecute = true; instance.shouldExecute = true;
instance.handler.post(instance.runnableCode); instance.handler.post(instance.runnableCode);

View File

@@ -5,6 +5,7 @@ import java.util.List;
import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.model.Azienda;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO;
@@ -15,14 +16,15 @@ public class DBSettingsModel {
private List<MtbDepoPosizione> availablePosizioni = null; private List<MtbDepoPosizione> availablePosizioni = null;
private Azienda datiAzienda = null; private Azienda datiAzienda = null;
private List<InternalCodAnagsDTO> internalCodAnags = null;
private boolean enableCheckPartitaMagCheckPickingV; private boolean enableCheckPartitaMagCheckPickingV;
private boolean flagMultiClienteOrdV; private boolean flagMultiClienteOrdV;
private String defaultCodAnag; private boolean flagUseCodAnagAziendale;
private String defaultCausaleRettificaGiacenze; private String defaultCausaleRettificaGiacenze;
private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione; private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione;
private boolean flagAskClienteInPickingLibero; private boolean flagAskClienteInPickingLibero;
private boolean flagAllowEmptyClienteInPickingLibero; private boolean flagPickLiberoAllowEmptyCliente;
private boolean flagCanAddExtraItemSpedizione; private boolean flagCanAddExtraItemSpedizione;
private boolean flagCanAutoOpenNewULAccettazione; private boolean flagCanAutoOpenNewULAccettazione;
@@ -37,11 +39,13 @@ public class DBSettingsModel {
private List<String> notePerditaDocInterni = new ArrayList<>(); private List<String> notePerditaDocInterni = new ArrayList<>();
private boolean flagSpedizioneUseQtaOrd; private boolean flagSpedizioneUseQtaOrd;
private boolean flagOrdinaNuoviArticoliInGriglia; private boolean flagOrdinaNuoviArticoliInGriglia;
private boolean flagOrdinaArticoliOnScan;
private String docInterniCheckFornitore; private String docInterniCheckFornitore;
private String produzioneDefaultCodAnag; private String produzioneDefaultCodAnag;
private String reportNameSpedizionChiudiOrdine; private String reportNameSpedizionChiudiOrdine;
private int onNumCnfInputChanged = 1; private int onNumCnfInputChanged = 1;
private boolean flagAccettazioneUseQtaOrd = false; private boolean flagAccettazioneUseQtaOrd = false;
private boolean flagPickLiberoAllowEmptyDest = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@@ -79,6 +83,15 @@ public class DBSettingsModel {
return this; return this;
} }
public List<InternalCodAnagsDTO> getInternalCodAnags() {
return internalCodAnags;
}
public DBSettingsModel setInternalCodAnags(List<InternalCodAnagsDTO> internalCodAnags) {
this.internalCodAnags = internalCodAnags;
return this;
}
public List<AvailableCodMdepsDTO> getAvailableCodMdep() { public List<AvailableCodMdepsDTO> getAvailableCodMdep() {
return availableCodMdep; return availableCodMdep;
} }
@@ -105,12 +118,12 @@ public class DBSettingsModel {
return this; return this;
} }
public String getDefaultCodAnag() { public boolean isFlagUseCodAnagAziendale() {
return defaultCodAnag; return flagUseCodAnagAziendale;
} }
public DBSettingsModel setDefaultCodAnag(String defaultCodAnag) { public DBSettingsModel setFlagUseCodAnagAziendale(boolean flagUseCodAnagAziendale) {
this.defaultCodAnag = defaultCodAnag; this.flagUseCodAnagAziendale = flagUseCodAnagAziendale;
return this; return this;
} }
@@ -141,12 +154,12 @@ public class DBSettingsModel {
return this; return this;
} }
public boolean isFlagAllowEmptyClienteInPickingLibero() { public boolean isFlagPickLiberoAllowEmptyCliente() {
return flagAllowEmptyClienteInPickingLibero; return flagPickLiberoAllowEmptyCliente;
} }
public DBSettingsModel setFlagAllowEmptyClienteInPickingLibero(boolean flagAllowEmptyClienteInPickingLibero) { public DBSettingsModel setFlagPickLiberoAllowEmptyCliente(boolean flagPickLiberoAllowEmptyCliente) {
this.flagAllowEmptyClienteInPickingLibero = flagAllowEmptyClienteInPickingLibero; this.flagPickLiberoAllowEmptyCliente = flagPickLiberoAllowEmptyCliente;
return this; return this;
} }
@@ -312,4 +325,23 @@ public class DBSettingsModel {
this.flagAccettazioneUseQtaOrd = flagAccettazioneUseQtaOrd; this.flagAccettazioneUseQtaOrd = flagAccettazioneUseQtaOrd;
return this; return this;
} }
public boolean isFlagPickLiberoAllowEmptyDest() {
return flagPickLiberoAllowEmptyDest;
}
public DBSettingsModel setFlagPickLiberoAllowEmptyDest(boolean flagPickLiberoAllowEmptyDest) {
this.flagPickLiberoAllowEmptyDest = flagPickLiberoAllowEmptyDest;
return this;
}
public boolean getFlagOrdinaArticoliOnScan() {
return flagOrdinaArticoliOnScan;
}
public DBSettingsModel setFlagOrdinaArticoliOnScan(boolean flagOrdinaArticoliOnScan) {
this.flagOrdinaArticoliOnScan = flagOrdinaArticoliOnScan;
return this;
}
} }

View File

@@ -4,7 +4,9 @@ import android.content.Context;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.firebase.perf.metrics.Trace; import com.google.firebase.perf.metrics.Trace;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -13,6 +15,7 @@ import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.StbGestSetup; import it.integry.integrywmsnative.core.model.StbGestSetup;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
@@ -88,21 +91,18 @@ public class SettingsManager {
onFailed.run(new Exception("Errore durante il caricamento dei dati. Riavviare l'applicazione!")); onFailed.run(new Exception("Errore durante il caricamento dei dati. Riavviare l'applicazione!"));
}; };
onProgress.run("dati azienda");
loadDatiAzienda(() -> {
onProgress.run("profili"); onProgress.run("depositi");
loadAvailableProfiles(() -> { loadAvailableCodMdeps(() -> {
onProgress.run("depositi"); onProgress.run("posizioni");
loadAvailableCodMdeps(() -> { loadAvailablePosizioni(() -> {
onProgress.run("posizioni"); onProgress.run("impostazioni");
loadAvailablePosizioni(() -> { loadGestSetupValues(() -> {
onProgress.run("impostazioni"); onProgress.run("dati azienda");
loadGestSetupValues(tmpOnComplete, tmpOnFailed); loadDatiAzienda(tmpOnComplete, tmpOnFailed);
}, tmpOnFailed);
}, tmpOnFailed); }, tmpOnFailed);
}, tmpOnFailed); }, tmpOnFailed);
}, tmpOnFailed); }, tmpOnFailed);
@@ -113,7 +113,27 @@ public class SettingsManager {
SystemRESTConsumer.getAzienda(datiAzienda -> { SystemRESTConsumer.getAzienda(datiAzienda -> {
SettingsManager.iDB().setDatiAzienda(datiAzienda); SettingsManager.iDB().setDatiAzienda(datiAzienda);
if (onComplete != null) onComplete.run(); if (!SettingsManager.iDB().isFlagUseCodAnagAziendale()) {
onComplete.run();
return;
}
String internalCodAnagsQuery = "SELECT ga.cod_anag,\n" +
" CAST(CASE WHEN vc.cod_anag IS NOT NULL THEN 1 ELSE 0 END AS BIT) AS is_cliente,\n" +
" CAST(CASE WHEN af.cod_anag IS NOT NULL THEN 1 ELSE 0 END AS BIT) AS is_fornitore\n" +
"FROM azienda\n" +
"INNER JOIN gtb_anag ga on azienda.part_iva = ga.part_iva\n" +
"LEFT OUTER JOIN vtb_clie vc on ga.cod_anag = vc.cod_anag AND vc.flag_stato = 'A'\n" +
"LEFT OUTER JOIN atb_forn af on ga.cod_anag = af.cod_anag AND af.flag_stato = 'A'";
Type type = new TypeToken<List<InternalCodAnagsDTO>>() {
}.getType();
SystemRESTConsumer.<List<InternalCodAnagsDTO>>processSqlStatic(internalCodAnagsQuery, type, internalCodAnagsList -> {
SettingsManager.iDB().setInternalCodAnags(internalCodAnagsList);
if (onComplete != null) onComplete.run();
}, onFailed);
}, onFailed); }, onFailed);
} }
@@ -193,7 +213,7 @@ public class SettingsManager {
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SETUP") .setSection("SETUP")
.setKeySection("COD_ANAG_DEFAULT")); .setKeySection("FLAG_USE_COD_ANAG_AZIENDALE"));
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SETUP") .setSection("SETUP")
@@ -238,10 +258,6 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("PRODUZIONE") .setSection("PRODUZIONE")
.setKeySection("FLAG_VERSAMENTO_DIRETTO")); .setKeySection("FLAG_VERSAMENTO_DIRETTO"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("DEFAULT_COD_ANAG"));
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
@@ -274,6 +290,10 @@ public class SettingsManager {
.setGestName("PVM") .setGestName("PVM")
.setSection("ORDINI_A") .setSection("ORDINI_A")
.setKeySection("ORDINA_NUOVI_ARTICOLI")); .setKeySection("ORDINA_NUOVI_ARTICOLI"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM")
.setSection("ORDINI_A")
.setKeySection("ORDINA_ARTICOLI_ON_SCAN"));
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM") .setGestName("PVM")
.setSection("DOC_INTERNI") .setSection("DOC_INTERNI")
@@ -282,16 +302,20 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("ACCETTAZIONE") .setSection("ACCETTAZIONE")
.setKeySection("FLAG_USE_QTA_ORD")); .setKeySection("FLAG_USE_QTA_ORD"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("PICKING_LIBERO")
.setKeySection("FLAG_ALLOW_EMPTY_DEST"));
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(getValueFromList(list, "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", String.class)); dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(getValueFromList(list, "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", String.class));
dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(getValueFromList(list, "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", Boolean.class)); dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(getValueFromList(list, "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", Boolean.class));
dbSettingsModelIstance.setFlagMultiClienteOrdV(getValueFromList(list, "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", Boolean.class)); dbSettingsModelIstance.setFlagMultiClienteOrdV(getValueFromList(list, "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", Boolean.class));
dbSettingsModelIstance.setDefaultCodAnag(getValueFromList(list, "SETUP", "COD_ANAG_DEFAULT", String.class)); dbSettingsModelIstance.setFlagUseCodAnagAziendale(getValueFromList(list, "SETUP", "FLAG_USE_COD_ANAG_AZIENDALE", Boolean.class));
dbSettingsModelIstance.setDefaultCriterioDistribuzione(getValueFromList(list, "SETUP", "DEFAULT_CRITERIO_DISTRIBUZIONE", String.class)); dbSettingsModelIstance.setDefaultCriterioDistribuzione(getValueFromList(list, "SETUP", "DEFAULT_CRITERIO_DISTRIBUZIONE", String.class));
dbSettingsModelIstance.setFlagAskClienteInPickingLibero(getValueFromList(list, "PICKING_LIBERO", "FLAG_ASK_CLIENTE", Boolean.class)); dbSettingsModelIstance.setFlagAskClienteInPickingLibero(getValueFromList(list, "PICKING_LIBERO", "FLAG_ASK_CLIENTE", Boolean.class));
dbSettingsModelIstance.setFlagAllowEmptyClienteInPickingLibero(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_CLIENTE", Boolean.class)); dbSettingsModelIstance.setFlagPickLiberoAllowEmptyCliente(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_CLIENTE", Boolean.class));
dbSettingsModelIstance.setFlagCanAddExtraItemSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_ITEMS", Boolean.class)); dbSettingsModelIstance.setFlagCanAddExtraItemSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_ITEMS", Boolean.class));
dbSettingsModelIstance.setFlagCanAutoOpenNewULAccettazione(getValueFromList(list, "ACCETTAZIONE", "FLAG_AUTO_OPEN_NEW_UL", Boolean.class)); dbSettingsModelIstance.setFlagCanAutoOpenNewULAccettazione(getValueFromList(list, "ACCETTAZIONE", "FLAG_AUTO_OPEN_NEW_UL", Boolean.class));
dbSettingsModelIstance.setFlagCanAddExtraQuantitySpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_QUANTITY", Boolean.class)); dbSettingsModelIstance.setFlagCanAddExtraQuantitySpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_QUANTITY", Boolean.class));
@@ -300,7 +324,6 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagAskPesoColloSpedizione(getValueFromList(list, "SETUP", "FLAG_ASK_PESO_COLLO", Boolean.class)); dbSettingsModelIstance.setFlagAskPesoColloSpedizione(getValueFromList(list, "SETUP", "FLAG_ASK_PESO_COLLO", Boolean.class));
dbSettingsModelIstance.setFlagUseNewPickingListSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_NEW_PICKING_LIST", Boolean.class)); dbSettingsModelIstance.setFlagUseNewPickingListSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_NEW_PICKING_LIST", Boolean.class));
dbSettingsModelIstance.setFlagVersamentoDirettoProduzione(getValueFromList(list, "PRODUZIONE", "FLAG_VERSAMENTO_DIRETTO", Boolean.class)); dbSettingsModelIstance.setFlagVersamentoDirettoProduzione(getValueFromList(list, "PRODUZIONE", "FLAG_VERSAMENTO_DIRETTO", Boolean.class));
dbSettingsModelIstance.setProduzioneDefaultCodAnag(getValueFromList(list, "PRODUZIONE", "DEFAULT_COD_ANAG", String.class));
dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
@@ -309,6 +332,8 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class)); dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class));
dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class)); dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class));
dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagPickLiberoAllowEmptyDest(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_DEST", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaArticoliOnScan(getValueFromList(list, "ORDINI_A", "ORDINA_ARTICOLI_ON_SCAN", Boolean.class));
String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class);
if (notePerdita != null) { if (notePerdita != null) {

View File

@@ -3,16 +3,15 @@ package it.integry.integrywmsnative.core.utility;
import android.Manifest; import android.Manifest;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import it.integry.integrywmsnative.SplashActivity; import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -31,6 +30,11 @@ public class PermissionsHelper {
if(Build.VERSION.SDK_INT >= 23) { if(Build.VERSION.SDK_INT >= 23) {
//permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES); //permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES);
} }
if(Build.VERSION.SDK_INT >= 31) {
permissionsToAsk.add(Manifest.permission.BLUETOOTH_CONNECT);
}
String[] permissionArray = new String[permissionsToAsk.size()]; String[] permissionArray = new String[permissionsToAsk.size()];
permissionsToAsk.toArray(permissionArray); permissionsToAsk.toArray(permissionArray);

View File

@@ -1,6 +1,5 @@
package it.integry.integrywmsnative.core.utility; package it.integry.integrywmsnative.core.utility;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
@@ -13,10 +12,5 @@ public class UtilityProgress {
return progress; return progress;
} }
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

@@ -5,14 +5,16 @@ import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.net.SocketAddress; import java.net.SocketAddress;
import it.integry.integrywmsnative.core.exception.NotValidLicenseException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.gest.login.exception.ServerNotReachableException;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
public class UtilityServer { public class UtilityServer {
public static void isHostReachable(final String serverAddress, final int serverTCPport, final RunnableArgs<Boolean> callback){ public static void isHostReachable(final String serverAddress, final int serverTCPport, final RunnableArgs<Boolean> callback) {
new Thread(() -> { new Thread(() -> {
boolean connected = false; boolean connected = false;
@@ -36,7 +38,7 @@ public class UtilityServer {
}).start(); }).start();
} }
public static void isEmsApiAvailable(final String serverAddress, final int serverTCPport, final RunnableArgs<Boolean> callback) { public static void isEmsApiAvailable(final String serverAddress, final int serverTCPport, final Runnable onComplete, final RunnableArgs<Exception> onFailed) {
new Thread(() -> { new Thread(() -> {
OkHttpClient client = new OkHttpClient(); OkHttpClient client = new OkHttpClient();
@@ -46,11 +48,16 @@ public class UtilityServer {
try { try {
Response response = client.newCall(request).execute(); Response response = client.newCall(request).execute();
boolean status = response.isSuccessful();
response.close(); response.close();
callback.run(status);
if (response.code() == 200) onComplete.run();
else if (response.code() == 404)
onFailed.run(new ServerNotReachableException(serverAddress, serverTCPport, null));
else if (response.code() == 550)
onFailed.run(new NotValidLicenseException());
else onFailed.run(new Exception("Errore non identificato (STATUS: " + response.code() + ")"));
} catch (IOException e) { } catch (IOException e) {
callback.run(false); onFailed.run(new ServerNotReachableException(serverAddress, serverTCPport, e));
} }
}).start(); }).start();

View File

@@ -9,6 +9,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
@@ -76,10 +77,23 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
mAppBarTitle.setText(context.getText(R.string.accettazione_title_fragment).toString()); mAppBarTitle.setText(context.getText(R.string.accettazione_title_fragment).toString());
} }
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
onLoadingEnded();
outState.putString("mToolbar", DataCache.addItem(mToolbar));
super.onSaveInstanceState(outState);
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
if(savedInstanceState != null && savedInstanceState.containsKey("mToolbar"))
mToolbar = DataCache.retrieveItem(savedInstanceState.getString("mToolbar"));
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_accettazione, container, false); mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_accettazione, container, false);
MainApplication.appComponent MainApplication.appComponent

View File

@@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@@ -688,13 +687,10 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };
@@ -705,11 +701,10 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
public void createNewLU() { public void createNewLU() {
this.mBindings.accettazioneOrdineInevasoFab.close(true); this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.onLoadingStarted();
this.openProgress();
this.mViewModel.createNewLU(null, null, false, () -> { this.mViewModel.createNewLU(null, null, false, () -> {
this.closeProgress(); this.onLoadingEnded();
}); });
} }
@@ -736,7 +731,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
Intent myIntent = ListaBancaliActivity.createIntent(this, Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(x -> (MtbColt) x).toList(), Stream.of(mtbColts).map(x -> (MtbColt) x).toList(),
input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(), input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(),
PrinterRESTConsumer.Type.SECONDARIA,
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO)); ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
this.startActivityForResult(myIntent, PICK_UL_REQUEST); this.startActivityForResult(myIntent, PICK_UL_REQUEST);
} }
@@ -756,7 +750,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override @Override
public void onLUPrintError(Exception ex, Runnable onComplete) { public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress(); this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog( DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()), new SpannableString(ex.getMessage()),
null, null,
@@ -766,16 +760,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
@Override @Override
public void onMtbColrEdit(MtbColr mtbColr) { public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewModel.dispatchRowEdit(mtbColr); this.mViewModel.dispatchRowEdit(mtbColr);
@@ -808,7 +792,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
this.closeProgress(); this.onLoadingEnded();
if (ex instanceof InvalidPesoKGException) { if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage()); UtilityToast.showToast(ex.getMessage());

View File

@@ -373,8 +373,7 @@ public class AccettazionePickingViewModel {
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt mtbColt
.initDefaultFields() .initDefaultFields(defaultGestioneOfUL)
.setGestione(defaultGestioneOfUL)
.setAnnotazioni(additionalNotes) .setAnnotazioni(additionalNotes)
.setPosizione(defaultPosAccettazione) .setPosizione(defaultPosAccettazione)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
@@ -838,7 +837,6 @@ public class AccettazionePickingViewModel {
cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum()); cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum());
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.SECONDARIA,
cloneMtbColt, cloneMtbColt,
() -> { () -> {
this.sendLUSuccessfullyPrinted(); this.sendLUSuccessfullyPrinted();

View File

@@ -45,16 +45,14 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false); public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false);
private String mReportName; private String mReportName;
private PrinterRESTConsumer.Type mPrinterType;
private static class Key { private static class Key {
private static final String MtbColtKey = "mtbColtKey"; private static final String MtbColtKey = "mtbColtKey";
private static final String CanRecoverUL = "canRecoverUL"; private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName"; private static final String ReportName = "reportName";
} }
public static Intent createIntent(Context context, MtbColt item, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, String reportName) { public static Intent createIntent(Context context, MtbColt item, boolean canRecoverUl, String reportName) {
Intent myIntent = new Intent(context, ContenutoBancaleActivity.class); Intent myIntent = new Intent(context, ContenutoBancaleActivity.class);
String keyMtbColt = DataCache.addItem(item); String keyMtbColt = DataCache.addItem(item);
@@ -63,9 +61,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
String keyCanRecoverUL = DataCache.addItem(canRecoverUl); String keyCanRecoverUL = DataCache.addItem(canRecoverUl);
myIntent.putExtra(Key.CanRecoverUL, keyCanRecoverUL); myIntent.putExtra(Key.CanRecoverUL, keyCanRecoverUL);
String keyPrinterType = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, keyPrinterType);
String keyReportName = DataCache.addItem(reportName); String keyReportName = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, keyReportName); myIntent.putExtra(Key.ReportName, keyReportName);
@@ -79,7 +74,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey))); mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey)));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale); bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale);
@@ -97,7 +91,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mViewModel.setListener(this); mViewModel.setListener(this);
mViewModel.init(mtbColt.get(), mPrinterType, mReportName); mViewModel.init(mtbColt.get(), mReportName);
recoverFabMenuVisible.set(canRecoverUL); recoverFabMenuVisible.set(canRecoverUL);
@@ -143,7 +137,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
this.bindings.contenutoBancaleFab.close(true); this.bindings.contenutoBancaleFab.close(true);
this.onLoadingStarted(); this.onLoadingStarted();
try { try {
this.mPrinterRESTConsumer.printCollo(mPrinterType, mtbColt.get(), this.mPrinterRESTConsumer.printCollo(mtbColt.get(),
() -> { () -> {
this.onLoadingEnded(); this.onLoadingEnded();

View File

@@ -5,7 +5,6 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
public class ContenutoBancaleViewModel { public class ContenutoBancaleViewModel {
@@ -19,7 +18,7 @@ public class ContenutoBancaleViewModel {
this.mDepositoRESTConsumer = depositoRESTConsumer; this.mDepositoRESTConsumer = depositoRESTConsumer;
} }
public void init(MtbColt mtbColt, PrinterRESTConsumer.Type printerType, String defaultReportName) { public void init(MtbColt mtbColt, String defaultReportName) {
} }

View File

@@ -19,7 +19,6 @@ import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding; import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter; import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter;
@@ -30,7 +29,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
private static class Key { private static class Key {
private static final String MtbColtsKey = "mtbColtsKey"; private static final String MtbColtsKey = "mtbColtsKey";
private static final String CanRecoverUL = "canRecoverUL"; private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName"; private static final String ReportName = "reportName";
private static final String FlagOnlyResiduo = "flagOnlyResiduo"; private static final String FlagOnlyResiduo = "flagOnlyResiduo";
} }
@@ -43,7 +41,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
private final ObservableArrayList<MtbColt> mtbColts = new ObservableArrayList<>(); private final ObservableArrayList<MtbColt> mtbColts = new ObservableArrayList<>();
private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl; private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName; private String mReportName;
private boolean mFlagOnlyResiduo; private boolean mFlagOnlyResiduo;
@@ -51,19 +48,19 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, String reportName) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, String reportName) {
return createIntent(context, items, canRecoverUlAction, printerType, true, reportName); return createIntent(context, items, canRecoverUlAction, true, reportName);
} }
public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, boolean onlyResiduo) {
return createIntent(context, items, input -> canRecoverUl, printerType, onlyResiduo); return createIntent(context, items, input -> canRecoverUl, onlyResiduo);
} }
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, boolean onlyResiduo) {
return createIntent(context, items, canRecoverUlAction, printerType, onlyResiduo, null); return createIntent(context, items, canRecoverUlAction, onlyResiduo, null);
} }
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo, String reportName) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, boolean onlyResiduo, String reportName) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class); Intent myIntent = new Intent(context, ListaBancaliActivity.class);
String mtbColtsKey = DataCache.addItem(items); String mtbColtsKey = DataCache.addItem(items);
@@ -72,9 +69,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
String canRecoverULKey = DataCache.addItem(canRecoverUlAction); String canRecoverULKey = DataCache.addItem(canRecoverUlAction);
myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey); myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey);
String printerTypeKey = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, printerTypeKey);
String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo); String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey); myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
@@ -97,7 +91,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo)); mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo));
@@ -138,7 +131,7 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
} }
public void startContenutoBancaleActivity(MtbColt item){ public void startContenutoBancaleActivity(MtbColt item){
Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mPrinterType, mReportName); Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mReportName);
startActivityForResult(myIntent, PICK_UL_REQUEST); startActivityForResult(myIntent, PICK_UL_REQUEST);
} }

View File

@@ -15,7 +15,6 @@ import it.integry.integrywmsnative.core.utility.UtilityServer;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.login.exception.InvalidServerCodAziendaException; import it.integry.integrywmsnative.gest.login.exception.InvalidServerCodAziendaException;
import it.integry.integrywmsnative.gest.login.exception.InvalidUserDepositException; import it.integry.integrywmsnative.gest.login.exception.InvalidUserDepositException;
import it.integry.integrywmsnative.gest.login.exception.ServerNotReachableException;
import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumer; import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumer;
public class LoginViewModel { public class LoginViewModel {
@@ -52,13 +51,10 @@ public class LoginViewModel {
final String host = u.getHost(); final String host = u.getHost();
final int port = u.getPort(); final int port = u.getPort();
UtilityServer.isEmsApiAvailable(host, port, value1 -> { UtilityServer.isEmsApiAvailable(host, port, () -> {
if (value1) { //Is online
mLoginRESTConsumer.authenticate(host, port, username, password, loginDTO -> { mLoginRESTConsumer.authenticate(host, port, username, password, loginDTO -> {
SettingsManager.iDB().setAvailableProfiles(loginDTO.getAvailableProfiles());
SettingsManager.i().createUserSession(); SettingsManager.i().createUserSession();
SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.getFull_name()) ? loginDTO.getFull_name() : username); SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.getFull_name()) ? loginDTO.getFull_name() : username);
@@ -73,11 +69,7 @@ public class LoginViewModel {
}, this::sendError); }, this::sendError);
} else { //Is not online }, this::sendError);
this.sendError(new ServerNotReachableException(host, port, null));
}
});
}, ex -> { }, ex -> {
this.sendError(new InvalidServerCodAziendaException(codAzienda, ex)); this.sendError(new InvalidServerCodAziendaException(codAzienda, ex));
}); });

View File

@@ -687,21 +687,14 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };
private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) { private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) {
// new Thread(() -> {
// requireActivity().runOnUiThread(() -> {
// this.onLoadingStarted();
List<OrdiniUscitaElencoDTO> tmpList; List<OrdiniUscitaElencoDTO> tmpList;
if (filteredList != null) { if (filteredList != null) {
@@ -720,12 +713,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
fabVisible.set(Stream.of(mOrdiniInevasiMutableData) fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get())); .anyMatch(y -> y.getSelectedObservable().get()));
// this.onLoadingEnded();
// });
// }).start();
} }
private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) { private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) {

View File

@@ -266,13 +266,13 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
null, null,
() -> onComplete.run(true), () -> onComplete.run(true),
() -> onComplete.run(false) () -> onComplete.run(false)
).show(getActivity().getSupportFragmentManager(), "tag"); ).show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
getActivity().runOnUiThread(() -> { requireActivity().runOnUiThread(() -> {
this.closeProgress(); this.onLoadingEnded();
if (ex instanceof InvalidPesoKGException) { if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage()); UtilityToast.showToast(ex.getMessage());
@@ -287,7 +287,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override @Override
public void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort) { public void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort) {
DialogAskClienteView.newInstance(onComplete, onAbort) DialogAskClienteView.newInstance(onComplete, onAbort)
.show(getActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
@@ -346,10 +346,10 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
.setPartitaMag(resultDTO.getPartitaMag()) .setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad()); .setDataScad(resultDTO.getDataScad());
this.openProgress(); this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}) })
.setOnAbort(this::closeProgress) .setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@@ -244,10 +244,9 @@ public class PickingLiberoViewModel {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields(); mtbColt.initDefaultFields(mDefaultGestione)
mtbColt.setGestione(mDefaultGestione)
.setRifOrd(mDefaultGestione == GestioneEnum.LAVORAZIONE ? "PICKING LIBERO" : null) .setRifOrd(mDefaultGestione == GestioneEnum.LAVORAZIONE ? "PICKING LIBERO" : null)
.setCodAnag(SettingsManager.iDB().getProduzioneDefaultCodAnag()) // .setCodAnag(SettingsManager.iDB().getProduzioneDefaultCodAnag())
.setSegno(-1) .setSegno(-1)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);

View File

@@ -239,24 +239,20 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
return pickingResiListModels; return pickingResiListModels;
} }
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewmodel.processBarcodeDTO(data, () -> { this.mViewmodel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };
public void createNewLU() { public void createNewLU() {
this.mBindings.mainFab.close(true); this.mBindings.mainFab.close(true);
this.onLoadingStarted();
this.openProgress();
this.mViewmodel.createNewLU(null, null, () -> { this.mViewmodel.createNewLU(null, null, () -> {
this.closeProgress(); this.onLoadingEnded();
}); });
} }
@@ -286,7 +282,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
this.closeProgress(); this.onLoadingEnded();
if (ex instanceof InvalidPesoKGException) { if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage()); UtilityToast.showToast(ex.getMessage());
@@ -332,7 +328,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
.setPartitaMag(resultDTO.getPartitaMag()) .setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad()); .setDataScad(resultDTO.getDataScad());
this.openProgress(); this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}) })
.setOnAbort(() -> { .setOnAbort(() -> {
@@ -400,7 +396,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override @Override
public void onLUPrintError(Exception ex, Runnable onComplete) { public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress(); this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog( DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()), new SpannableString(ex.getMessage()),
null, null,
@@ -409,14 +405,4 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
onComplete) onComplete)
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
} }

View File

@@ -30,6 +30,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO; 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.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
@@ -125,8 +126,7 @@ public class PickingResiViewModel {
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields(); mtbColt.initDefaultFields(GestioneEnum.fromString(mDefaultGestioneOfLU))
mtbColt.setGestione(mDefaultGestioneOfLU)
.setSegno(mDefaultSegnoOfLU) .setSegno(mDefaultSegnoOfLU)
.setCodAnag(mDefaultCodAnagOfLU) .setCodAnag(mDefaultCodAnagOfLU)
.setCodMdep(mDefaultCodMdepOfLU) .setCodMdep(mDefaultCodMdepOfLU)
@@ -218,7 +218,6 @@ public class PickingResiViewModel {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.PRIMARIA,
mtbColtToPrint, mtbColtToPrint,
onComplete, onFailed); onComplete, onFailed);

View File

@@ -26,7 +26,6 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding; import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaView; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaView;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
@@ -112,24 +111,6 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
titleText.setText(context.getText(R.string.prod_fabbisogno_linee_prod_title).toString()); titleText.setText(context.getText(R.string.prod_fabbisogno_linee_prod_title).toString());
} }
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex);
}
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
private void startPickingActivity(List<ProdFabbisognoLineeProdDTO> fabbisognoList) { private void startPickingActivity(List<ProdFabbisognoLineeProdDTO> fabbisognoList) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();

View File

@@ -22,14 +22,12 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss; import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.model.JtbFasi; import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.DialogAskMagazzinoProssimitaBinding; import it.integry.integrywmsnative.databinding.DialogAskMagazzinoProssimitaBinding;
public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment implements DialogAskMagazzinoProssimitaViewModel.Listener { public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment implements DialogAskMagazzinoProssimitaViewModel.Listener {
@@ -178,20 +176,4 @@ public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment impleme
// }); // });
// } // }
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(mContext, ex);
BarcodeManager.enable();
}
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
} }

View File

@@ -116,9 +116,7 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
} }
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data); this.mViewModel.processBarcodeDTO(data);
}; };
@@ -228,7 +226,7 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
@Override @Override
public void onLUPrintError(Exception ex, Runnable onComplete) { public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress(); this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog( DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()), new SpannableString(ex.getMessage()),
null, null,

View File

@@ -291,7 +291,6 @@ public class ProdRecuperoMaterialeViewModel {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onAbort) { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onAbort) {
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.PRIMARIA,
mtbColtToPrint, mtbColtToPrint,
onComplete, onAbort); onComplete, onAbort);

View File

@@ -117,10 +117,12 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
for (Runnable onPreDestroy : for (Runnable onPreDestroy : mOnPreDestroyList) {
mOnPreDestroyList) {
onPreDestroy.run(); onPreDestroy.run();
} }
mProdRientroMerceOrderDetailFragment.onDetach();
mProdRientroMerceOrderListFragment.onDetach();
} }
@Override @Override

View File

@@ -8,8 +8,8 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
public class ProdRientroMerceViewModel { public class ProdRientroMerceViewModel {
@@ -31,7 +31,7 @@ public class ProdRientroMerceViewModel {
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> { this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList); this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex))); }, ex -> this.sendError(new OrdersLoadException(ex)));
} }
public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() { public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() {

View File

@@ -1,10 +1,13 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail; package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.bluetooth.BluetoothDevice;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
@@ -12,10 +15,13 @@ import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import com.harrysoft.androidbluetoothserial.BluetoothSerialDevice;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
@@ -23,8 +29,11 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.exception.BluetoothConnectionException;
import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal; import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal;
import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -36,6 +45,7 @@ import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding; import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView;
@@ -64,6 +74,9 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
private RunnableArgs<MtbColt> onMtbColtClicked; private RunnableArgs<MtbColt> onMtbColtClicked;
private BluetoothManager bluetoothManager;
private BluetoothSerialDevice mConnectedBluetoothDevice;
public ObservableField<BigDecimal> sumLUNumber = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumLUNumber = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO);
@@ -103,6 +116,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList); this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView(); this.initRecyclerView();
this.initULScaleBluetoothConnection();
return mBindings.getRoot(); return mBindings.getRoot();
} }
@@ -110,10 +124,10 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
private void initRecyclerView() { private void initRecyclerView() {
mBindings.mainList.setNestedScrollingEnabled(false); mBindings.mainList.setNestedScrollingEnabled(false);
mBindings.mainList.setHasFixedSize(true); mBindings.mainList.setHasFixedSize(true);
mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity())); mBindings.mainList.setLayoutManager(new LinearLayoutManager(requireActivity()));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); itemDecorator.setDrawable(ContextCompat.getDrawable(requireActivity(), R.drawable.divider));
mBindings.mainList.addItemDecoration(itemDecorator); mBindings.mainList.addItemDecoration(itemDecorator);
mAdapter = new ProdRientroMerceOrderDetailMtbColtListAdapter(new ObservableArrayList<>()); mAdapter = new ProdRientroMerceOrderDetailMtbColtListAdapter(new ObservableArrayList<>());
@@ -121,10 +135,52 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
mBindings.mainList.setAdapter(mAdapter); mBindings.mainList.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(item -> { mAdapter.setOnItemClickListener(item -> {
if(this.onMtbColtClicked != null) this.onMtbColtClicked.run(item); if (this.onMtbColtClicked != null) this.onMtbColtClicked.run(item);
}); });
} }
private void initULScaleBluetoothConnection() {
bluetoothManager = BluetoothManager.getInstance();
if (bluetoothManager == null) {
// Bluetooth unavailable on this device :( tell the user
Toast.makeText(requireActivity(), "Bluetooth not available.", Toast.LENGTH_LONG).show(); // Replace context with your context instance.
return;
}
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
var btMacAddress = sharedPreferences.getString(MainSettingsFragment.KEY_PALLET_BT_DEVICE, null);
if (btMacAddress == null) {
Toast.makeText(requireActivity(), "Nessun dispositivo BLUETOOTH configurato nelle impostazioni.", Toast.LENGTH_LONG).show(); // Replace context with your context instance.
return;
}
var btName = Stream.of(bluetoothManager.getPairedDevicesList())
.filter(x -> x.getAddress().equalsIgnoreCase(btMacAddress))
.map(BluetoothDevice::getName)
.findFirstOrElse(null);
var disposableBluetooth = bluetoothManager.openSerialDevice(btMacAddress)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onConnected, x -> this.onError(new BluetoothConnectionException(btName, btMacAddress, x)));
}
private void onConnected(BluetoothSerialDevice connectedDevice) {
Toast.makeText(requireActivity(), "Connesso a: " + connectedDevice.getMac(), Toast.LENGTH_LONG).show();
mConnectedBluetoothDevice = connectedDevice;
}
@Override
public void onDetach() {
if (mConnectedBluetoothDevice != null)
bluetoothManager.close();
super.onDetach();
}
public void setOrder(OrdineLavorazioneDTO order) { public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order); currentOrder.postValue(order);
mBindings.invalidateAll(); mBindings.invalidateAll();
@@ -134,7 +190,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
} }
private void refreshList(List<MtbColt> mtbColts) { private void refreshList(List<MtbColt> mtbColts) {
if(mtbColts != null) { if (mtbColts != null) {
sumLUNumber.set(new BigDecimal(mtbColts.size())); sumLUNumber.set(new BigDecimal(mtbColts.size()));
AtomicBigDecimal sumColli = new AtomicBigDecimal(BigDecimal.ZERO); AtomicBigDecimal sumColli = new AtomicBigDecimal(BigDecimal.ZERO);
@@ -167,7 +223,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
public void addULButtonClick() { public void addULButtonClick() {
this.openProgress(); this.onLoadingStarted();
String codProd = this.currentOrder.getValue().getCodProd(); String codProd = this.currentOrder.getValue().getCodProd();
mArticoloRESTConsumer.getByCodMart(codProd, mtbAart -> { mArticoloRESTConsumer.getByCodMart(codProd, mtbAart -> {
@@ -186,9 +242,10 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
" AND (data_fine IS NULL OR last_step = id_step) " + " AND (data_fine IS NULL OR last_step = id_step) " +
"ORDER BY id_step DESC"; "ORDER BY id_step DESC";
mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {}.getType(), dtbOrdStep -> { mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {
}.getType(), dtbOrdStep -> {
this.closeProgress(); this.onLoadingEnded();
DialogInputLUProdDTO dialogInputLUProdDTO = new DialogInputLUProdDTO() DialogInputLUProdDTO dialogInputLUProdDTO = new DialogInputLUProdDTO()
.setMtbAart(mtbAart) .setMtbAart(mtbAart)
@@ -203,7 +260,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
DialogInputLUProdView DialogInputLUProdView
.newInstance(dialogInputLUProdDTO, resultDTO -> { .newInstance(mConnectedBluetoothDevice.toSimpleDeviceInterface(), dialogInputLUProdDTO, resultDTO -> {
ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO() ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setPesoCollo(resultDTO.getPesoCollo()) .setPesoCollo(resultDTO.getPesoCollo())
@@ -216,9 +273,9 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
this.mViewModel.createLU(pickedQuantityDTO); this.mViewModel.createLU(pickedQuantityDTO);
}, () -> { }, () -> {
this.closeProgress(); this.onLoadingEnded();
}) })
.show(getActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
}, this::onError); }, this::onError);
@@ -248,63 +305,59 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
if (currentOrder.getValue() != null) { if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) { switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO: case IN_CORSO:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_play_circle_filled_24dp); return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_play_circle_filled_24dp);
case PAUSA: case PAUSA:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_circle_filled_24dp); return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_pause_circle_filled_24dp);
case PROGRAMMATO: case PROGRAMMATO:
default: default:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_clock_circle_outline_24dp); return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp);
} }
} } else
else return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp);
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_clock_circle_outline_24dp);
} }
public Integer getOrderStatusIconTintColor() { public Integer getOrderStatusIconTintColor() {
if (currentOrder.getValue() != null) { if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) { switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO: case IN_CORSO:
return ContextCompat.getColor(getActivity(), R.color.green_800); return ContextCompat.getColor(requireActivity(), R.color.green_800);
case PAUSA: case PAUSA:
return ContextCompat.getColor(getActivity(), R.color.yellow_800); return ContextCompat.getColor(requireActivity(), R.color.yellow_800);
case PROGRAMMATO: case PROGRAMMATO:
default: default:
return ContextCompat.getColor(getActivity(), R.color.blue_800); return ContextCompat.getColor(requireActivity(), R.color.blue_800);
} }
} } else
else return ContextCompat.getColor(requireActivity(), R.color.blue_800);
return ContextCompat.getColor(getActivity(), R.color.blue_800);
} }
public Drawable getOrderStatusLabelBackgroud() { public Drawable getOrderStatusLabelBackgroud() {
if (currentOrder.getValue() != null) { if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) { switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO: case IN_CORSO:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_success_text); return ContextCompat.getDrawable(requireActivity(), R.drawable.label_success_text);
case PAUSA: case PAUSA:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_warning_text); return ContextCompat.getDrawable(requireActivity(), R.drawable.label_warning_text);
case PROGRAMMATO: case PROGRAMMATO:
default: default:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_primary_text); return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text);
} }
} } else
else return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text);
return ContextCompat.getDrawable(getActivity(), R.drawable.label_primary_text);
} }
public Integer getOrderStatusLabelTextColor() { public Integer getOrderStatusLabelTextColor() {
if (currentOrder.getValue() != null) { if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) { switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO: case IN_CORSO:
return ContextCompat.getColor(getActivity(), R.color.green_800); return ContextCompat.getColor(requireActivity(), R.color.green_800);
case PAUSA: case PAUSA:
return ContextCompat.getColor(getActivity(), R.color.yellow_800); return ContextCompat.getColor(requireActivity(), R.color.yellow_800);
case PROGRAMMATO: case PROGRAMMATO:
default: default:
return ContextCompat.getColor(getActivity(), R.color.blue_800); return ContextCompat.getColor(requireActivity(), R.color.blue_800);
} }
} } else
else return ContextCompat.getColor(requireActivity(), R.color.blue_800);
return ContextCompat.getColor(getActivity(), R.color.blue_800);
} }
} }

View File

@@ -334,7 +334,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
@Override @Override
public void onWarning(String warningText, Runnable action) { public void onWarning(String warningText, Runnable action) {
this.requireActivity().runOnUiThread(() -> { this.requireActivity().runOnUiThread(() -> {
this.closeProgress(); this.onLoadingEnded();
DialogSimpleMessageView DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action) .makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action)
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");

View File

@@ -13,14 +13,13 @@ import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.math.BigDecimal;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
@@ -33,8 +32,8 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding; import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding;
import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListAdapter;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListModel; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListModel;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
@@ -133,16 +132,17 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
} }
private void initRecyclerView() { private void initRecyclerView() {
this.mViewModel.getArticoli().observe(this, updatedData -> {
this.mArticoliMutableData.clear(); var itemType = new Type<ArticoloOrdine, FragmentPvArticoliOrdineAcquistoListSingleItemBinding>(R.layout.fragment_pv_articoli_ordine_acquisto__list_single_item, BR.articolo);
this.mArticoliMutableData.addAll(convertDataModelToListModel(updatedData)); itemType.onClick(x -> {
// this.noItemsToPick.set(!isThereAnyItemToPick(updatedData)); this.selectAction(x.getBinding().getArticolo());
return null;
}); });
var mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoliMutableData) new LiveAdapter(this.mViewModel.getArticoli(), this)
.setOnItemClicked(this::selectAction); .map(ArticoloOrdine.class, itemType)
.into(mBinding.articoliOrdineList);
mBinding.articoliOrdineList.setAdapter(mAdapter);
mBinding.articoliOrdineList.setHasFixedSize(true); mBinding.articoliOrdineList.setHasFixedSize(true);
mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this)); mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this));
@@ -151,20 +151,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding.articoliOrdineList.addItemDecoration(itemDecorator); mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
} }
private List<OrdineAcquistoArtListModel> convertDataModelToListModel
(List<ArticoloOrdine> dataList) {
return Stream.of(dataList)
.distinctBy(ArticoloOrdine::getArticoloOrdineId)
.sortBy(x -> x.getDataIns().getTime())
.map(x -> new OrdineAcquistoArtListModel()
.setBadge1(x.getCodMart())
.setDescription(x.getDescrizione())
.setQuantity(BigDecimal.valueOf(x.getQtaOrd()))
.setUntMis(x.getUntMis())
.setOriginalModel(x))
.toList();
}
private void selectAction(ArticoloOrdine articoloOrdine) { private void selectAction(ArticoloOrdine articoloOrdine) {
mBinding.closeActivityFab.close(false); mBinding.closeActivityFab.close(false);
@@ -174,7 +160,12 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
articoloOrdine.getDescrizione(), articoloOrdine.getDescrizione(),
articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(), articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(),
() -> { () -> {
this.onItemDispatched(articoloOrdine); this.mViewModel.checkArticolo(mOrdine, articoloOrdine.getCodMart(),
artOrd -> {
this.onItemDispatched(artOrd);
BarcodeManager.enable();
},
this::onError);
BarcodeManager.enable(); BarcodeManager.enable();
}, },
() -> { () -> {
@@ -199,9 +190,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding.closeActivityFab.close(false); mBinding.closeActivityFab.close(false);
this.onLoadingStarted(); this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
this.onLoadingEnded();
});
}; };
@@ -222,6 +211,11 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
}).show(this.getSupportFragmentManager(), "tag"); }).show(this.getSupportFragmentManager(), "tag");
} }
@Override
public int getColorFromResource(int resId) {
return getResources().getColor(resId);
}
public void exportOrdine() { public void exportOrdine() {
this.mViewModel.exportOrdine(() -> { this.mViewModel.exportOrdine(() -> {
@@ -247,11 +241,13 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
BarcodeManager.disable(); 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.onLoadingStarted(); this.onLoadingStarted();
this.mViewModel.loadArticolo(codice, this.mViewModel.checkArticolo(mOrdine, codice,
() -> { articoloOrdine -> {
this.onItemDispatched(articoloOrdine);
this.onLoadingEnded(); this.onLoadingEnded();
BarcodeManager.enable(); BarcodeManager.enable();
} },
this::onError
); );
}, BarcodeManager::enable).show(); }, BarcodeManager::enable).show();
} }

View File

@@ -22,7 +22,6 @@ public class PVOrdineAcquistoEditModule {
} }
@Provides @Provides
@Singleton
PVOrdineAcquistoEditViewModel providesPvOrdineAcquistoEditViewModel(OrdineRepository ordineRepository, PVOrdineAcquistoEditViewModel providesPvOrdineAcquistoEditViewModel(OrdineRepository ordineRepository,
GrigliaRepository grigliaRepository, GrigliaRepository grigliaRepository,
ArticoliOrdineRepository articoliOrdineRepository, ArticoliOrdineRepository articoliOrdineRepository,

View File

@@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -11,6 +12,7 @@ import java.util.Objects;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; 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.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
@@ -22,6 +24,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepositor
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
public class PVOrdineAcquistoEditViewModel { public class PVOrdineAcquistoEditViewModel {
@@ -69,15 +72,29 @@ public class PVOrdineAcquistoEditViewModel {
this.loadGriglia(ordine.getIdGriglia(), griglia -> { this.loadGriglia(ordine.getIdGriglia(), griglia -> {
mCurrentGriglia.postValue(griglia); mCurrentGriglia.postValue(griglia);
this.loadArticoli(mCurrentOrdine, articoli -> { this.loadArticoli(mCurrentOrdine, articoli -> {
articoli = Stream.of(articoli).map(this::setBgTint).toList();
this.mArticoli.postValue(articoli); this.mArticoli.postValue(articoli);
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
}); });
}); });
} }
private ArticoloOrdine setBgTint(ArticoloOrdine art) {
int chk = art.checkQtaProposta();
switch (chk) {
case -1:
art.setBgTint(this.mListener.getColorFromResource(R.color.red_600));
break;
case 1:
art.setBgTint(this.mListener.getColorFromResource(R.color.orange_600));
break;
default:
art.setBgTint(this.mListener.getColorFromResource(R.color.colorPrimary));
}
return art;
}
public MutableLiveData<Griglia> getCurrentGriglia() { public MutableLiveData<Griglia> getCurrentGriglia() {
return mCurrentGriglia; return mCurrentGriglia;
} }
@@ -87,42 +104,20 @@ public class PVOrdineAcquistoEditViewModel {
} }
public void saveArticolo(ArticoloOrdine articolo) { public void saveArticolo(ArticoloOrdine articolo) {
setBgTint(articolo);
var newList = this.mArticoli.getValue(); var newList = this.mArticoli.getValue();
var alreadySavedItem = Stream.of(newList) var alreadySavedItem = Stream.of(newList)
.filter(x -> Objects.equals(x.getArticoloOrdineId(), articolo.getArticoloOrdineId())) .filter(x -> Objects.equals(x.getCodMart(), articolo.getCodMart()))
.findFirst(); .findFirst();
if(alreadySavedItem.isPresent()) newList.remove(alreadySavedItem.get()); if (alreadySavedItem.isPresent()) newList.remove(alreadySavedItem.get());
newList.add(articolo); newList.add(articolo);
this.mArticoli.postValue(newList); this.mArticoli.postValue(newList);
} }
public void loadArticolo(String barcode, Runnable onSuccess) {
try {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, barcode, (articolo) -> {
if (articolo != null) {
onSuccess.run();
this.sendOnItemDispatched(articolo);
} else {
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, mCurrentOrdine.getIdGriglia(), artGrid -> {
if (artGrid != null) {
onSuccess.run();
this.sendOnItemDispatched(artGrid.convertToArticoloOrdine(mCurrentOrdine));
} else {
this.sendError(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
}
}, this::sendError);
}
}, this::sendError);
} catch (Exception e) {
this.sendError(e);
}
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.checkArticolo( this.checkArticolo(
mCurrentOrdine, mCurrentOrdine,
@@ -152,27 +147,54 @@ public class PVOrdineAcquistoEditViewModel {
} }
} }
private void checkArticolo(Ordine ordine, String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> onFail) { public void checkArticolo(Ordine ordine, String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> onFail) {
try { try {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> { mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> {
if (articolo != null) { if (artGrid != null) {
onSuccess.run(articolo); mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> {
} else { if (articolo != null) {
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> { articolo
if (artGrid != null) { .setQtaPrevistaVendita(BigDecimal.valueOf(artGrid.getQtaPrevistaVendita()))
onSuccess.run(artGrid.convertToArticoloOrdine(ordine)); .setQtaProposta(BigDecimal.valueOf(artGrid.getQtaProposta()))
.setGiacenza(BigDecimal.valueOf(artGrid.getGiacenza()))
.setMediaSett(artGrid.getMediaSett());
articolo.setQtaMinOrdinabile(artGrid.getQtaMinOrdinabile());
articolo.setMerceDaRic(artGrid.getMerceDaRic());
articolo.setNewNoPromo(artGrid.isNewNoPromo());
articolo.setFlagQtaMultipla(artGrid.getFlagQtaMultipla());
onSuccess.run(articolo);
} else { } else {
onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia")); ArticoloOrdine art = artGrid.convertToArticoloOrdine(ordine);
if (isAutoOrderOnScan()) {
art.setQtaOrd(art.getQtaCnf());
mArticoliOrdineRepository.saveArticoloToOrdine(art, () -> {
saveArticolo(art);
this.sendOnLoadingEnded();
}, this::sendError);
} else {
onSuccess.run(art);
}
} }
}, onFail); }, onFail);
} else {
onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
} }
}, onFail); }, onFail);
} catch (Exception e) { } catch (Exception e) {
onFail.run(e); onFail.run(e);
} }
} }
private boolean isAutoOrderOnScan() {
return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia();
}
private void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) { private void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {
mArticoloGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError); mArticoloGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError);
} }
@@ -252,6 +274,8 @@ public class PVOrdineAcquistoEditViewModel {
public interface Listener extends ILoadingListener { public interface Listener extends ILoadingListener {
void onItemDispatched(ArticoloOrdine articoloOrdine); void onItemDispatched(ArticoloOrdine articoloOrdine);
int getColorFromResource(int resId);
void onError(Exception ex); void onError(Exception ex);
} }

View File

@@ -66,7 +66,7 @@ public class DialogEditArticoloViewModel {
public void setQtaTot(BigDecimal newValue) { public void setQtaTot(BigDecimal newValue) {
this.internalQtaTot = newValue; this.internalQtaTot = newValue;
if (newValue == null) return;
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf) this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf)
.setScale(0, RoundingMode.CEILING); .setScale(0, RoundingMode.CEILING);
@@ -104,7 +104,7 @@ public class DialogEditArticoloViewModel {
public void save(RunnableArgs<ArticoloOrdine> onComplete) { public void save(RunnableArgs<ArticoloOrdine> onComplete) {
if(UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO)) { if (UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO)) {
this.mListener.onError(new Exception("La quantità ordinata deve essere maggiore di 0")); this.mListener.onError(new Exception("La quantità ordinata deve essere maggiore di 0"));
return; return;
} }

View File

@@ -40,7 +40,7 @@ public class OrdineAcquistoPvHelper {
updateGriglia(griglia, onSave, onFail); updateGriglia(griglia, onSave, onFail);
} }
public void updateGriglia(Griglia griglia, RunnableArgs<Griglia> onSave, RunnableArgs<Exception> onFail) { public void updateGriglia(Griglia griglia, RunnableArgs<Griglia> onSaved, RunnableArgs<Exception> onFail) {
PVOrdiniAcquistoRESTConsumer.getArticoliListinoStatic(griglia.getCodAlis(), dto -> { PVOrdiniAcquistoRESTConsumer.getArticoliListinoStatic(griglia.getCodAlis(), dto -> {
mContext.runOnUiThread(() -> { mContext.runOnUiThread(() -> {
if (dto.getGrigliaAcquistiChild().size() <= 0) { if (dto.getGrigliaAcquistiChild().size() <= 0) {
@@ -50,7 +50,13 @@ public class OrdineAcquistoPvHelper {
griglia.setDescrLisa(dto.getDescrLisa()); griglia.setDescrLisa(dto.getDescrLisa());
griglia.setDescrDepo(dto.getDescrDepo()); griglia.setDescrDepo(dto.getDescrDepo());
griglia.setCountArticoli(dto.getGrigliaAcquistiChild().size()); griglia.setCountArticoli(dto.getGrigliaAcquistiChild().size());
mGrigliaRepository.saveGriglia(griglia, id -> saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, onSave, onFail), onFail);
mGrigliaRepository.saveGriglia(griglia, id -> {
saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, grigliaResult -> {
onSaved.run(grigliaResult);
}, onFail);
}, onFail);
}); });
}, onFail); }, onFail);
} }

View File

@@ -214,13 +214,10 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };
@@ -334,12 +331,12 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
() -> onComplete.run(true), () -> onComplete.run(true),
() -> onComplete.run(false) () -> onComplete.run(false)
) )
.show(getActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
this.closeProgress(); this.onLoadingEnded();
if (ex instanceof InvalidPesoKGException) { if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage()); UtilityToast.showToast(ex.getMessage());
@@ -391,11 +388,11 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
.setPartitaMag(resultDTO.getPartitaMag()) .setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad()); .setDataScad(resultDTO.getDataScad());
this.openProgress(); this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}) })
.setOnAbort(() -> { .setOnAbort(() -> {
this.closeProgress(); this.onLoadingEnded();
}) })
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@@ -494,7 +494,7 @@ public class RettificaGiacenzeViewModel {
onComplete.run(); onComplete.run();
} else { } else {
this.mPrinterRESTConsumer.printCollo(null, mCurrentMtbColt, () -> { this.mPrinterRESTConsumer.printCollo(mCurrentMtbColt, () -> {
this.sendLUSuccessfullyPrinted(); this.sendLUSuccessfullyPrinted();
onComplete.run(); onComplete.run();
}, ex -> this.sendLUPrintError(ex, onComplete)); }, ex -> this.sendLUPrintError(ex, onComplete));

View File

@@ -1,20 +1,34 @@
package it.integry.integrywmsnative.gest.settings; package it.integry.integrywmsnative.gest.settings;
import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import com.annimon.stream.Stream;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment { public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment, Preference.OnPreferenceChangeListener {
private final ArrayList<Runnable> onPreDestroyList = new ArrayList<>(); private final ArrayList<Runnable> onPreDestroyList = new ArrayList<>();
public static final String KEY_PALLET_BT_DEVICE = "pallet_scale_bt_device";
private Collection<BluetoothDevice> btPairedDevices;
@Override @Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) { public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.settings_category).toString()); titleText.setText(context.getText(R.string.settings_category).toString());
@@ -23,8 +37,52 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.app_preferences, rootKey); setPreferencesFromResource(R.xml.app_preferences, rootKey);
var palletScaleBtDeviceListPref = (ListPreference) findPreference(KEY_PALLET_BT_DEVICE);
setListPreferenceData(palletScaleBtDeviceListPref);
palletScaleBtDeviceListPref.setOnPreferenceChangeListener(this);
} }
protected void setListPreferenceData(ListPreference lp) {
BluetoothManager bluetoothManager = BluetoothManager.getInstance();
if (bluetoothManager == null) {
// Bluetooth unavailable on this device :( tell the user
Toast.makeText(requireActivity(), "Bluetooth not available", Toast.LENGTH_LONG).show(); // Replace context with your context instance.
return;
}
btPairedDevices = bluetoothManager.getPairedDevicesList();
if(!Stream.of(btPairedDevices).anyMatch(x -> x.getAddress().equalsIgnoreCase(lp.getValue()))) {
lp.setValue(null);
}
updatePalletBtDeviceSummary(lp, lp.getValue());
if (!btPairedDevices.isEmpty()) {
CharSequence[] entries = new CharSequence[btPairedDevices.size()];
Stream.of(btPairedDevices)
.map(BluetoothDevice::getName)
.toList()
.toArray(entries);
CharSequence[] entryValues = new CharSequence[btPairedDevices.size()];
Stream.of(btPairedDevices)
.map(BluetoothDevice::getAddress)
.toList()
.toArray(entryValues);
lp.setEntries(entries);
lp.setEntryValues(entryValues);
} else {
lp.setEntries(new CharSequence[0]);
lp.setEntryValues(new CharSequence[0]);
lp.setDialogMessage("Nessun dispositivo bluetooth associato. Associane uno dalle impostazioni bluetooth prima di procedere.");
}
}
@Override @Override
public void addOnPreDestroy(Runnable onPreDestroy) { public void addOnPreDestroy(Runnable onPreDestroy) {
onPreDestroyList.add(onPreDestroy); onPreDestroyList.add(onPreDestroy);
@@ -34,9 +92,34 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
for (Runnable onPreDestroy : for (Runnable onPreDestroy : onPreDestroyList) {
onPreDestroyList) {
onPreDestroy.run(); onPreDestroy.run();
} }
} }
@Override
public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
final int idx;
switch (preference.getKey()) {
case KEY_PALLET_BT_DEVICE:
final var palletScaleBtDeviceListPref = (ListPreference) preference;
updatePalletBtDeviceSummary(palletScaleBtDeviceListPref, (String) newValue);
break;
}
// Set result so knows to refresh itself
// getActivity().setResult(RESULT_OK);
return true;
}
private void updatePalletBtDeviceSummary(ListPreference listPref, String btDeviceAddress) {
String btDeviceName = Stream.of(btPairedDevices)
.filter(x -> x.getAddress().equalsIgnoreCase(btDeviceAddress))
.map(BluetoothDevice::getName)
.findFirstOrElse(UtilityResources.getString(R.string.pallet_scale_bt_device_selection_info));
listPref.setSummary(btDeviceName);
}
} }

View File

@@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
@@ -56,12 +55,12 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding; import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; 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.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
@@ -204,7 +203,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione(); boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd(); boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd();
if (!mEnableFakeGiacenza) this.openProgress(); if (!mEnableFakeGiacenza) this.onLoadingStarted();
mViewmodel.init( mViewmodel.init(
codMdep, codMdep,
!mEnableFakeGiacenza, !mEnableFakeGiacenza,
@@ -622,13 +621,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewmodel.processBarcodeDTO(data, () -> { this.mViewmodel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };
@@ -660,10 +656,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void createNewUL() { public void createNewUL() {
this.mBindings.spedizioneFab.close(true); this.mBindings.spedizioneFab.close(true);
this.openProgress(); this.onLoadingStarted();
this.mViewmodel.createNewLU(null, null, () -> { this.mViewmodel.createNewLU(null, null, () -> {
this.closeProgress(); this.onLoadingEnded();
}); });
} }
@@ -672,7 +668,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts(); ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts();
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA, false); Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, false);
this.startActivityForResult(myIntent, PICK_UL_REQUEST); this.startActivityForResult(myIntent, PICK_UL_REQUEST);
} }
@@ -683,16 +679,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.mViewmodel.closeOrder(); this.mViewmodel.closeOrder();
} }
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
@Override @Override
public void onLUOpened(MtbColt mtbColt) { public void onLUOpened(MtbColt mtbColt) {
this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione()); this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione());
@@ -737,7 +723,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override @Override
public void onLUPrintError(Exception ex, Runnable onComplete) { public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress(); this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog( DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()), new SpannableString(ex.getMessage()),
null, null,
@@ -773,7 +759,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override @Override
public void onError(Exception ex) { public void onError(Exception ex) {
this.closeProgress(); this.onLoadingEnded();
if (ex instanceof InvalidPesoKGException) { if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage()); UtilityToast.showToast(ex.getMessage());
@@ -834,7 +820,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setPartitaMag(resultDTO.getPartitaMag()) .setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad()); .setDataScad(resultDTO.getDataScad());
this.openProgress(); this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}) })
.setOnAbort(() -> { .setOnAbort(() -> {

View File

@@ -78,7 +78,7 @@ public class SpedizioneViewModel {
private GestioneEnum mDefaultGestioneOfUL = null; private GestioneEnum mDefaultGestioneOfUL = null;
private int mDefaultSegnoCol = -1; private int mDefaultSegnoCol = -1;
private String mDefaultCodMdep = null; private String mDefaultCodMdep = null;
private List<FiltroOrdineDTO> mDefaultFiltroOrdine = new ArrayList<>(); private final List<FiltroOrdineDTO> mDefaultFiltroOrdine = new ArrayList<>();
private String mDefaultCodAnagOfUL = null; private String mDefaultCodAnagOfUL = null;
private String mDefaultRagSocOfUL = null; private String mDefaultRagSocOfUL = null;
private String mDefaultRifOrdOfUL = null; private String mDefaultRifOrdOfUL = null;
@@ -1319,8 +1319,7 @@ public class SpedizioneViewModel {
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields(); mtbColt.initDefaultFields(mDefaultGestioneOfUL)
mtbColt.setGestione(mDefaultGestioneOfUL)
.setSegno(mDefaultSegnoCol) .setSegno(mDefaultSegnoCol)
.setRifOrd(mDefaultRifOrdOfUL) .setRifOrd(mDefaultRifOrdOfUL)
.setNumOrd(mDefaultNumOrdOfUL) .setNumOrd(mDefaultNumOrdOfUL)
@@ -1723,26 +1722,25 @@ public class SpedizioneViewModel {
if (!shouldPrint) { if (!shouldPrint) {
onComplete.run(); onComplete.run();
} else { } else {
cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); cyclicPrint(mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete));
} }
}); });
} }
private void cyclicPrint(PrinterRESTConsumer.Type printerType, @NotNull Iterator<MtbColt> sourceMtbColts, Runnable onComplete, RunnableArgs<Exception> onAbort) { private void cyclicPrint(@NotNull Iterator<MtbColt> sourceMtbColts, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceMtbColts.hasNext()) { if (sourceMtbColts.hasNext()) {
singlePrint(printerType, sourceMtbColts.next(), () -> { singlePrint(sourceMtbColts.next(), () -> {
cyclicPrint(printerType, sourceMtbColts, onComplete, onAbort); cyclicPrint(sourceMtbColts, onComplete, onAbort);
}, onAbort); }, onAbort);
} else { } else {
onComplete.run(); onComplete.run();
} }
} }
private void singlePrint(PrinterRESTConsumer.Type printerType, MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
printerType,
mtbColtToPrint, mtbColtToPrint,
onComplete, onComplete,
onFailed); onFailed);
@@ -1750,13 +1748,17 @@ public class SpedizioneViewModel {
public void recoverLU(MtbColt mtbColt) { public void recoverLU(MtbColt mtbColt) {
this.sendOnLoadingStarted();
this.mCurrentMtbColt = mtbColt; this.mCurrentMtbColt = mtbColt;
mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini); mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini);
this.mCurrentMtbColt.generaFiltroOrdineFromDTO(mDefaultFiltroOrdine); this.mCurrentMtbColt.generaFiltroOrdineFromDTO(mDefaultFiltroOrdine);
this.resetMatchedRows(); this.mColliMagazzinoRESTConsumer.saveCollo(this.mCurrentMtbColt, savedMtbColt -> {
this.sendLUOpened(this.mCurrentMtbColt); this.resetMatchedRows();
this.sendLUOpened(this.mCurrentMtbColt);
this.sendOnLoadingEnded();
}, this::sendError);
} }
private void postCloseOperations(List<MtbColt> mtbColtList) { private void postCloseOperations(List<MtbColt> mtbColtList) {

View File

@@ -125,6 +125,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1); holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingObjectDTO.isActive() ? R.drawable.badge_round_corner : R.drawable.badge1_round_corner, null)); holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingObjectDTO.isActive() ? R.drawable.badge_round_corner : R.drawable.badge1_round_corner, null));
holder.mBinding.badge1.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.white, null));
holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700, null)); holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700, null));
holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione()); holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione());

View File

@@ -158,7 +158,7 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
} }
private void refreshItems() { private void refreshItems() {
this.openProgress(); this.onLoadingStarted();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null; String currentCodAnagFilter = null;
@@ -247,22 +247,4 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
this.mOnPreDestroyList.add(onPreDestroy); this.mOnPreDestroyList.add(onPreDestroy);
} }
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
} }

View File

@@ -163,7 +163,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
} }
private void filterItems(List<MtbAart> filteredMtbAarts) { private void filterItems(List<MtbAart> filteredMtbAarts) {
this.openProgress(); this.onLoadingStarted();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null; String currentCodAnagFilter = null;
@@ -252,25 +252,6 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
this.mOnPreDestroyList.add(onPreDestroy); this.mOnPreDestroyList.add(onPreDestroy);
} }
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
@Override @Override
public void onMtbColtScanned(MtbColt scannedMtbColt) { public void onMtbColtScanned(MtbColt scannedMtbColt) {

View File

@@ -117,7 +117,7 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
null, this::openLU) null, this::openLU)
.show(getActivity().getSupportFragmentManager(), "tag"); .show(getActivity().getSupportFragmentManager(), "tag");
} }
}).show(getActivity().getSupportFragmentManager(), "tag"); }).show(requireActivity().getSupportFragmentManager(), "tag");
} }
@@ -130,12 +130,10 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
} }
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };

View File

@@ -54,20 +54,15 @@ public class VersamentoMerceViewModel {
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO, false)) {
new Thread(() -> { this.executeEtichettaPosizione(barcodeScanDTO, onComplete);
if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO, false)) { } else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaPosizione(barcodeScanDTO, onComplete); this.executeEtichettaLU(barcodeScanDTO.getStringValue(), true, onComplete);
} else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), true, onComplete); this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { } else {
this.executeEtichettaEan128(barcodeScanDTO, onComplete); onComplete.run();
} else { }
onComplete.run();
}
}).start();
} }
@@ -84,9 +79,8 @@ public class VersamentoMerceViewModel {
} else if (mtbColtList.size() == 1) { } else if (mtbColtList.size() == 1) {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
onComplete.run();
//TAKE HERE //TAKE HERE
pickMerceULtoUL(mtbColt); pickMerceULtoUL(mtbColt, onComplete);
}, this::sendError); }, this::sendError);
} else { } else {
@@ -97,14 +91,22 @@ public class VersamentoMerceViewModel {
if (!UtilityString.equalsIgnoreCase(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep())) { if (!UtilityString.equalsIgnoreCase(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep())) {
this.sendOnSpostamentoTraDepConfirmRequired(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep(), canContinue -> { this.sendOnSpostamentoTraDepConfirmRequired(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep(), canContinue -> {
onComplete.run();
if (canContinue) { if (canContinue) {
updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione)); if (UtilityPosizione.isPosizioneWithLivello(foundPosizione)) {
} else { askLivelloPosizione(foundPosizione);
onComplete.run(); } else {
updatePosizione(foundPosizione);
}
} }
}); });
} else { } else {
updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione)); onComplete.run();
if (UtilityPosizione.isPosizioneWithLivello(foundPosizione)) {
askLivelloPosizione(foundPosizione);
} else {
updatePosizione(foundPosizione);
}
} }
} }
@@ -150,12 +152,11 @@ public class VersamentoMerceViewModel {
if (mtbColt == null) { if (mtbColt == null) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> { this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
onComplete.run(); onComplete.run();
pickMerceULtoUL(mtbColtAnonimo); pickMerceULtoUL(mtbColtAnonimo, onComplete);
}, this::sendError); }, this::sendError);
} else { } else {
onComplete.run(); pickMerceULtoUL(mtbColt, onComplete);
pickMerceULtoUL(mtbColt);
} }
} }
@@ -164,7 +165,8 @@ public class VersamentoMerceViewModel {
} }
private void pickMerceULtoUL(MtbColt destMtbColt) { private void pickMerceULtoUL(MtbColt destMtbColt, Runnable onComplete) {
this.sendOnLoadingStarted();
MtbColt sourceMtbColt = mCurrentMtbColt.getValue(); MtbColt sourceMtbColt = mCurrentMtbColt.getValue();
if (!UtilityString.equalsIgnoreCase(sourceMtbColt.getCodMdep(), destMtbColt.getCodMdep())) { if (!UtilityString.equalsIgnoreCase(sourceMtbColt.getCodMdep(), destMtbColt.getCodMdep())) {
@@ -181,21 +183,24 @@ public class VersamentoMerceViewModel {
return; return;
} }
this.sendOnLoadingEnded();
this.sendOnArtsChooseRequired(mtbColrsToPick, pickedAarts -> { this.sendOnArtsChooseRequired(mtbColrsToPick, pickedAarts -> {
List<MtbColr> destNewMtbColr = new ArrayList<>(); List<MtbColr> destNewMtbColr = new ArrayList<>();
askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> { askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> {
this.sendOnLoadingStarted();
MtbColt clonedSourceTestata = (MtbColt) sourceMtbColt.clone(); MtbColt clonedSourceTestata = (MtbColt) sourceMtbColt.clone();
clonedSourceTestata.setMtbColr(new ObservableArrayList<>()); clonedSourceTestata.setMtbColr(new ObservableArrayList<>());
clonedSourceTestata.getMtbColr().addAll(destNewMtbColr); clonedSourceTestata.getMtbColr().addAll(destNewMtbColr);
this.sendOnLoadingStarted();
this.mColliMagazzinoRESTConsumer.spostaArtsTraUL( this.mColliMagazzinoRESTConsumer.spostaArtsTraUL(
clonedSourceTestata, clonedSourceTestata,
destMtbColt, destMtbColt,
this::sendOnDataSaved, () -> {
this.sendOnDataSaved();
onComplete.run();
},
this::sendError this::sendError
); );
@@ -242,26 +247,23 @@ public class VersamentoMerceViewModel {
} }
public void updatePosizione(MtbDepoPosizione mtbDepoPosizione, boolean shouldAskLivello) { public void askLivelloPosizione(MtbDepoPosizione mtbDepoPosizione) {
this.sendOnLivelloPosizioneRequired(mtbDepoPosizione, newPosizione -> {
if (newPosizione == null) {
askLivelloPosizione(mtbDepoPosizione);
} else {
updatePosizione(newPosizione);
}
if (shouldAskLivello) { });
this.sendOnLivelloPosizioneRequired(mtbDepoPosizione, newPosizione -> { }
if (newPosizione == null) {
updatePosizione(mtbDepoPosizione, shouldAskLivello);
} else {
updatePosizione(newPosizione, false);
}
});
} else {
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.changePosizione(mCurrentMtbColt.getValue(), mtbDepoPosizione, () -> {
this.sendOnLoadingEnded();
this.sendOnDataSaved();
}, this::sendError);
}
public void updatePosizione(MtbDepoPosizione mtbDepoPosizione) {
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.changePosizione(mCurrentMtbColt.getValue(), mtbDepoPosizione, () -> {
this.sendOnLoadingEnded();
this.sendOnDataSaved();
}, this::sendError);
} }

View File

@@ -94,7 +94,7 @@ public class DialogAskClienteDestinatarioDTO {
@Override @Override
public String toString() { public String toString() {
return String.format("%s (%s)", getDestinatario(), getCodVdes()); return getDestinatario() + (getCodVdes() != null ? (" (" + getCodVdes() + ")") : "");
} }
public VtbDest toVtbDestModel() { public VtbDest toVtbDestModel() {

View File

@@ -145,7 +145,12 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
private void initializeAdapter(ArrayList<DialogAskClienteClienteDTO> items) { private void initializeAdapter(ArrayList<DialogAskClienteClienteDTO> items) {
DialogAskCliente_Page1_Cliente_ArrayAdapter adapter = new DialogAskCliente_Page1_Cliente_ArrayAdapter(mContext, items);
var orderedList = Stream.of(items)
.sortBy(x -> x.getRagSoc() != null ? x.getRagSoc() : "")
.toList();
DialogAskCliente_Page1_Cliente_ArrayAdapter adapter = new DialogAskCliente_Page1_Cliente_ArrayAdapter(mContext, orderedList);
AutoCompleteTextView editTextDropdownCliente = mBinding.dropdownCliente; AutoCompleteTextView editTextDropdownCliente = mBinding.dropdownCliente;
editTextDropdownCliente.setThreshold(0); editTextDropdownCliente.setThreshold(0);
@@ -177,7 +182,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
private boolean validateCliente() { private boolean validateCliente() {
if (SettingsManager.iDB().isFlagAllowEmptyClienteInPickingLibero() && mBinding.inputCliente.getEditText().getText().toString().trim().length() == 0) { if (SettingsManager.iDB().isFlagPickLiberoAllowEmptyCliente() && mBinding.inputCliente.getEditText().getText().toString().trim().length() == 0) {
return true; return true;
} else return getCurrentCliente() != null; } else return getCurrentCliente() != null;
} }

View File

@@ -20,13 +20,13 @@ import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskCliente
public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter<DialogAskClienteClienteDTO> implements Filterable { public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter<DialogAskClienteClienteDTO> implements Filterable {
private Context mContext; private final Context mContext;
private List<DialogAskClienteClienteDTO> mDataset; private final List<DialogAskClienteClienteDTO> mDataset;
private List<DialogAskClienteClienteDTO> mDatasetAllItems; private List<DialogAskClienteClienteDTO> mDatasetAllItems;
private ListFilter listFilter = new ListFilter(); private final ListFilter listFilter = new ListFilter();
public DialogAskCliente_Page1_Cliente_ArrayAdapter(@NonNull Context context, @NonNull ArrayList<DialogAskClienteClienteDTO> list) { public DialogAskCliente_Page1_Cliente_ArrayAdapter(@NonNull Context context, @NonNull List<DialogAskClienteClienteDTO> list) {
super(context, 0 , list); super(context, 0 , list);
mContext = context; mContext = context;
mDataset = list; mDataset = list;
@@ -37,13 +37,15 @@ public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter<Di
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItem = convertView; View listItem = convertView;
if(listItem == null) { if(listItem == null) {
listItem = LayoutInflater.from(mContext).inflate(R.layout.dropdown_simple_item, parent, false); listItem = LayoutInflater.from(mContext).inflate(R.layout.dropdown_simple_item_w_subtitle, parent, false);
} }
if(position < mDataset.size()) { if(position < mDataset.size()) {
AppCompatTextView textView = listItem.findViewById(R.id.text); AppCompatTextView textView = listItem.findViewById(R.id.title);
AppCompatTextView subTitle = listItem.findViewById(R.id.subtitle);
textView.setText(mDataset.get(position).getRagSoc()); textView.setText(mDataset.get(position).getRagSoc());
subTitle.setText(mDataset.get(position).getCodAnag());
return listItem; return listItem;
} }
@@ -59,7 +61,7 @@ public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter<Di
} }
public class ListFilter extends Filter { public class ListFilter extends Filter {
private Object lock = new Object(); private final Object lock = new Object();
@Override @Override
protected FilterResults performFiltering(CharSequence prefix) { protected FilterResults performFiltering(CharSequence prefix) {
@@ -81,7 +83,7 @@ public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter<Di
ArrayList<DialogAskClienteClienteDTO> matchValues = new ArrayList<>(); ArrayList<DialogAskClienteClienteDTO> matchValues = new ArrayList<>();
for (DialogAskClienteClienteDTO dataItem : mDatasetAllItems) { for (DialogAskClienteClienteDTO dataItem : mDatasetAllItems) {
if (dataItem.getRagSoc().toLowerCase().startsWith(searchStrLowerCase)) { if (dataItem.getRagSoc().toLowerCase().contains(searchStrLowerCase)) {
matchValues.add(dataItem); matchValues.add(dataItem);
} }
} }

View File

@@ -23,7 +23,7 @@ public class DialogAskCliente_Page1_Commessa_ArrayAdapter extends ArrayAdapter<S
private List<String> mDataset = new ArrayList<>(); private List<String> mDataset = new ArrayList<>();
private List<String> mDatasetAllItems; private List<String> mDatasetAllItems;
private DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter listFilter = new DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter(); private final DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter listFilter = new DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter();
public DialogAskCliente_Page1_Commessa_ArrayAdapter(@NonNull Context context) { public DialogAskCliente_Page1_Commessa_ArrayAdapter(@NonNull Context context) {
super(context, 0); super(context, 0);
@@ -56,7 +56,7 @@ public class DialogAskCliente_Page1_Commessa_ArrayAdapter extends ArrayAdapter<S
} }
public class ListFilter extends Filter { public class ListFilter extends Filter {
private Object lock = new Object(); private final Object lock = new Object();
@Override @Override
protected FilterResults performFiltering(CharSequence prefix) { protected FilterResults performFiltering(CharSequence prefix) {
@@ -78,7 +78,7 @@ public class DialogAskCliente_Page1_Commessa_ArrayAdapter extends ArrayAdapter<S
ArrayList<String> matchValues = new ArrayList<>(); ArrayList<String> matchValues = new ArrayList<>();
for (String dataItem : mDatasetAllItems) { for (String dataItem : mDatasetAllItems) {
if (dataItem.toLowerCase().startsWith(searchStrLowerCase)) { if (dataItem.toLowerCase().contains(searchStrLowerCase)) {
matchValues.add(dataItem); matchValues.add(dataItem);
} }
} }

View File

@@ -11,6 +11,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.databinding.DialogAskClientePage2Binding; import it.integry.integrywmsnative.databinding.DialogAskClientePage2Binding;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO;
@@ -57,6 +58,12 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
return; return;
} }
if(SettingsManager.iDB().isFlagPickLiberoAllowEmptyDest()) {
filteredDestinatari.add(new DialogAskClienteDestinatarioDTO()
.setCodAnag(null)
.setDestinatario("Nessuno"));
}
initializeAdapter(filteredDestinatari); initializeAdapter(filteredDestinatari);
@@ -95,7 +102,11 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
private void initializeAdapter(List<DialogAskClienteDestinatarioDTO> items) { private void initializeAdapter(List<DialogAskClienteDestinatarioDTO> items) {
DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items); var orderedList = Stream.of(items)
.sortBy(x -> x.getCodAnag() != null ? x.getCodAnag() : "")
.toList();
DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, orderedList);
AutoCompleteTextView editTextFilledExposedDropdown = mBinding.dropdownDestinatario; AutoCompleteTextView editTextFilledExposedDropdown = mBinding.dropdownDestinatario;
@@ -105,7 +116,9 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
private boolean validateDestinatario() { private boolean validateDestinatario() {
return getCurrentDestinatario() != null; if (SettingsManager.iDB().isFlagPickLiberoAllowEmptyDest() && getCurrentDestinatario() == null) {
return true;
} else return getCurrentDestinatario() != null;
} }
public DialogAskClienteDestinatarioDTO getCurrentDestinatario() { public DialogAskClienteDestinatarioDTO getCurrentDestinatario() {

View File

@@ -11,6 +11,7 @@ import android.widget.Filterable;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -21,14 +22,15 @@ import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskCliente
public class DialogAskCliente_Page2_ArrayAdapter extends ArrayAdapter<DialogAskClienteDestinatarioDTO> implements Filterable { public class DialogAskCliente_Page2_ArrayAdapter extends ArrayAdapter<DialogAskClienteDestinatarioDTO> implements Filterable {
private Context mContext; private final Context mContext;
private List<DialogAskClienteDestinatarioDTO> mDataset; private final List<DialogAskClienteDestinatarioDTO> mDataset;
private List<DialogAskClienteDestinatarioDTO> mDatasetAllItems; private List<DialogAskClienteDestinatarioDTO> mDatasetAllItems;
private ListFilter listFilter = new ListFilter(); private final ListFilter listFilter = new ListFilter();
public DialogAskCliente_Page2_ArrayAdapter(@NonNull Context context, @NonNull List<DialogAskClienteDestinatarioDTO> list) { public DialogAskCliente_Page2_ArrayAdapter(@NonNull Context context, @NonNull List<DialogAskClienteDestinatarioDTO> list) {
super(context, 0 , list); super(context, 0 , list);
mContext = context; mContext = context;
mDataset = list; mDataset = list;
} }
@@ -43,18 +45,21 @@ public class DialogAskCliente_Page2_ArrayAdapter extends ArrayAdapter<DialogAskC
if(position < mDataset.size()) { if(position < mDataset.size()) {
var item = mDataset.get(position);
AppCompatTextView destinatario = listItem.findViewById(R.id.destinatario); AppCompatTextView destinatario = listItem.findViewById(R.id.destinatario);
destinatario.setText(UtilityString.capitalizeWords(mDataset.get(position).toString())); destinatario.setText(UtilityString.capitalizeWords(item.getDestinatario() + (item.getCodVdes() != null ? ("(" + item.getCodVdes() + ")") : "")));
if(item.getCodVdes() == null) destinatario.setTextColor(ContextCompat.getColor(mContext, R.color.gray_800));
AppCompatTextView subtitle = listItem.findViewById(R.id.subtitle); AppCompatTextView subtitle = listItem.findViewById(R.id.subtitle);
StringBuilder subtitleStr = new StringBuilder(); StringBuilder subtitleStr = new StringBuilder();
if(!UtilityString.isNullOrEmpty(mDataset.get(position).getCitta())) { if(!UtilityString.isNullOrEmpty(mDataset.get(position).getCitta())) {
subtitleStr.append(UtilityString.capitalizeWords(mDataset.get(position).getCitta()) + " - "); subtitleStr.append(UtilityString.capitalizeWords(item.getCitta())).append(" - ");
} }
if(!UtilityString.isNullOrEmpty(mDataset.get(position).getIndirizzo())) { if(!UtilityString.isNullOrEmpty(mDataset.get(position).getIndirizzo())) {
subtitleStr.append(UtilityString.capitalizeWords(mDataset.get(position).getIndirizzo())); subtitleStr.append(UtilityString.capitalizeWords(item.getIndirizzo()));
} }
subtitle.setText(subtitleStr); subtitle.setText(subtitleStr);
@@ -95,7 +100,7 @@ public class DialogAskCliente_Page2_ArrayAdapter extends ArrayAdapter<DialogAskC
ArrayList<DialogAskClienteDestinatarioDTO> matchValues = new ArrayList<>(); ArrayList<DialogAskClienteDestinatarioDTO> matchValues = new ArrayList<>();
for (DialogAskClienteDestinatarioDTO dataItem : mDatasetAllItems) { for (DialogAskClienteDestinatarioDTO dataItem : mDatasetAllItems) {
if (dataItem.toString().toLowerCase().startsWith(searchStrLowerCase)) { if (dataItem.toString().toLowerCase().contains(searchStrLowerCase)) {
matchValues.add(dataItem); matchValues.add(dataItem);
} }
} }

View File

@@ -37,11 +37,9 @@ import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsLayoutBinding; import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsLayoutBinding;
import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
public class DialogChooseArtsFromListaArts extends BaseDialogFragment { public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
@@ -62,7 +60,6 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
private final List<DialogChooseArtsFromListaArtsItemModel> mDataset; private final List<DialogChooseArtsFromListaArtsItemModel> mDataset;
private int mBarcodeScannerIstanceID; private int mBarcodeScannerIstanceID;
private DialogProgressView mCurrentProgress;
private MtbAart selectedArt; private MtbAart selectedArt;
public static DialogChooseArtsFromListaArts newInstance(List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) { public static DialogChooseArtsFromListaArts newInstance(List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) {
@@ -258,9 +255,7 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable(); onLoadingStarted();
openProgress();
if (UtilityBarcode.isEan13(data)) { if (UtilityBarcode.isEan13(data)) {
@@ -268,8 +263,7 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
} else if (UtilityBarcode.isEtichetta128(data)) { } else if (UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaEan128(data); this.executeEtichettaEan128(data);
} else { } else {
closeProgress(); onLoadingEnded();
BarcodeManager.enable();
} }
@@ -293,8 +287,7 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
this.loadArticolo(barcodeProd, ean128Model); this.loadArticolo(barcodeProd, ean128Model);
} else { } else {
DialogCommon.showNoArtFoundDialog(context, () -> { DialogCommon.showNoArtFoundDialog(context, () -> {
BarcodeManager.enable(); onLoadingEnded();
closeProgress();
}); });
} }
@@ -303,16 +296,11 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
} else { } else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto //EAN 128 non completo o comunque mancano i riferimenti al prodotto
DialogCommon.showNoArtFoundDialog(context, () -> { DialogCommon.showNoArtFoundDialog(context, () -> {
BarcodeManager.enable(); onLoadingEnded();
closeProgress();
}); });
} }
}, ex -> { }, this::onError);
closeProgress();
UtilityExceptions.defaultException(context, ex);
BarcodeManager.enable();
});
} }
@@ -329,22 +317,16 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
this.searchArtInList(mtbAartList.get(0), ean128Model); this.searchArtInList(mtbAartList.get(0), ean128Model);
BarcodeManager.enable(); onLoadingEnded();
closeProgress();
} else { } else {
DialogCommon.showNoArtFoundDialog(context, () -> { DialogCommon.showNoArtFoundDialog(context, () -> {
BarcodeManager.enable(); onLoadingEnded();
closeProgress();
}); });
} }
}, ex -> { }, this::onError);
closeProgress();
BarcodeManager.enable();
UtilityExceptions.defaultException(context, ex);
});
} }
@@ -385,20 +367,4 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
this.dismiss(); 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

@@ -22,6 +22,7 @@ import androidx.fragment.app.DialogFragment;
import com.annimon.stream.Optional; import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import com.harrysoft.androidbluetoothserial.SimpleBluetoothDeviceInterface;
import com.pedromassango.doubleclick.DoubleClick; import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener; import com.pedromassango.doubleclick.DoubleClickListener;
@@ -52,10 +53,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
@Inject @Inject
DialogInputLUProdViewModel mViewModel; DialogInputLUProdViewModel mViewModel;
private final SimpleBluetoothDeviceInterface mBluetoothDeviceInterface;
private final DialogInputLUProdDTO mDialogInputLUProdDTO; private final DialogInputLUProdDTO mDialogInputLUProdDTO;
private final RunnableArgs<DialogInputLUProdResultDTO> mOnComplete; private final RunnableArgs<DialogInputLUProdResultDTO> mOnComplete;
private final Runnable mOnAbort; private final Runnable mOnAbort;
public ObservableField<Boolean> enabledBluetoothDevice = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>(); public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>(); public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
@@ -87,13 +91,14 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null; private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null; private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null;
public static DialogInputLUProdView newInstance(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) { public static DialogInputLUProdView newInstance(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
return new DialogInputLUProdView(dialogInputLUProdDTO, onComplete, onAbort); return new DialogInputLUProdView(bluetoothDeviceInterface, dialogInputLUProdDTO, onComplete, onAbort);
} }
private DialogInputLUProdView(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) { private DialogInputLUProdView(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
super(); super();
this.mBluetoothDeviceInterface = bluetoothDeviceInterface;
this.mDialogInputLUProdDTO = dialogInputLUProdDTO; this.mDialogInputLUProdDTO = dialogInputLUProdDTO;
this.mOnComplete = onComplete; this.mOnComplete = onComplete;
this.mOnAbort = onAbort; this.mOnAbort = onAbort;
@@ -104,7 +109,6 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
} }
@@ -142,6 +146,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
super.onStart(); super.onStart();
this.init(); this.init();
if(mBluetoothDeviceInterface != null) {
// Listen to bluetooth events
mBluetoothDeviceInterface.setListeners(this::onMessageReceived, this::onMessageSent, x -> this.onError(new Exception(x)));
enabledBluetoothDevice.set(true);
}
this.mViewModel.setListener(this); this.mViewModel.setListener(this);
this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent()); this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent());
} }
@@ -385,10 +396,37 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
this.onDataChanged(); this.onDataChanged();
} }
public void readWeightFromDevice() {
// Toast.makeText(requireActivity(), "Leggo peso uaglio", Toast.LENGTH_SHORT).show();
// Let's send a message:
mBluetoothDeviceInterface.sendMessage("GW\r");
}
private void onMessageSent(String request) {
// Toast.makeText(requireActivity(), "Aspitt nu mument", Toast.LENGTH_SHORT).show();
}
private void onMessageReceived(String response) {
// Toast.makeText(requireActivity(), "Ne awa: " + response, Toast.LENGTH_SHORT).show();
String tmpResp = response.replace(".", "");
BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2,7));
BigDecimal netWeight = new BigDecimal(tmpResp.substring(8,13));
mViewModel.setPesoNetto(netWeight);
mViewModel.setPesoLordo(grossWeight);
}
public void save() { public void save() {
if (this.mViewModel.validate()) { if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult()); this.mOnComplete.run(this.mViewModel.getResult());
if(mBluetoothDeviceInterface != null)
mBluetoothDeviceInterface.setListeners(null, null, null);
dismiss(); dismiss();
} }
} }

View File

@@ -158,8 +158,8 @@ public class DialogInputLUProdViewModel {
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }
public void setPesoNetto(BigDecimal qtaTot) { public void setPesoNetto(BigDecimal pesoNetto) {
this.internalPesoNetto = qtaTot; this.internalPesoNetto = pesoNetto;
} }
public void setTaraPed(BigDecimal taraPed) { public void setTaraPed(BigDecimal taraPed) {

View File

@@ -87,6 +87,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private int mBarcodeScannerIstanceID; private int mBarcodeScannerIstanceID;
private boolean mFirstStart = true; private boolean mFirstStart = true;
private boolean mAbort = true;
public DialogInputQuantityV2View setDialogInputQuantityV2DTO(DialogInputQuantityV2DTO mDialogInputQuantityV2DTO) { public DialogInputQuantityV2View setDialogInputQuantityV2DTO(DialogInputQuantityV2DTO mDialogInputQuantityV2DTO) {
@@ -165,6 +166,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}); });
} }
this.onLoadingEnded(); this.onLoadingEnded();
mBindings.inputNumCnfText.requestFocus();
return mBindings.getRoot(); return mBindings.getRoot();
} }
@@ -175,33 +177,34 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
} }
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, () -> {
this.closeProgress(); this.onLoadingEnded();
BarcodeManager.enable();
}); });
}; };
public void save() { public void save() {
if (this.mViewModel.validate()) { if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult(), false); this.mAbort = false;
dismiss(); dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false);
} }
} }
public void saveAndCloseLU() { public void saveAndCloseLU() {
if (this.mViewModel.validate()) { if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult(), true); this.mAbort = false;
dismiss(); dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), true);
} }
} }
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID); BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
this.mOnAbort.run(); if (mAbort) this.mOnAbort.run();
super.onDismiss(dialog); super.onDismiss(dialog);
} }
@@ -210,7 +213,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
super.onStart(); super.onStart();
// if(!mFirstStart) { // if(!mFirstStart) {
this.init(); this.init();
// mFirstStart = false; // mFirstStart = false;
// } // }

View File

@@ -5,13 +5,17 @@ import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
@Module(subcomponents = DialogScanArtComponent.class) @Module(subcomponents = DialogScanArtComponent.class)
public class DialogScanArtModule { public class DialogScanArtModule {
@Provides @Provides
DialogScanArtViewModel providesDialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { DialogScanArtViewModel providesDialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer,
return new DialogScanArtViewModel(barcodeRESTConsumer, colliMagazzinoRESTConsumer, articoloRESTConsumer); ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer,
PosizioniRESTConsumer posizioniRESTConsumer) {
return new DialogScanArtViewModel(barcodeRESTConsumer, colliMagazzinoRESTConsumer, articoloRESTConsumer, posizioniRESTConsumer);
} }
} }

View File

@@ -12,6 +12,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import com.annimon.stream.Stream;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.inject.Inject; import javax.inject.Inject;
@@ -84,7 +86,6 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
} }
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID); BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
@@ -103,20 +104,32 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, (status, mtbAart, ean128Model, mtbColrList) -> { this.mViewModel.processBarcodeDTO(data, (status, mtbAart, ean128Model, mtbColrList) -> {
if(mtbColrList != null && mtbColrList.size() > 0) {
DialogChooseArtFromListaMtbColrView.make(getActivity(), mtbColrList, mtbColrChose -> { var filteredMtbColrList = mtbColrList;
if (mtbAart != null) {
filteredMtbColrList = Stream.of(filteredMtbColrList)
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()))
.toList();
}
if (filteredMtbColrList != null && filteredMtbColrList.size() > 1) {
DialogChooseArtFromListaMtbColrView.make(getActivity(), filteredMtbColrList, mtbColrChose -> {
mOnItemChoosed.run(status, mtbAart, ean128Model, mtbColrChose); mOnItemChoosed.run(status, mtbAart, ean128Model, mtbColrChose);
}).show(); }).show();
} else if (filteredMtbColrList != null && filteredMtbColrList.size() == 1) {
mOnItemChoosed.run(status, mtbAart, ean128Model, filteredMtbColrList.get(0));
} else { } else {
mOnItemChoosed.run(status, mtbAart, ean128Model, null); mOnItemChoosed.run(status, mtbAart, ean128Model, null);
} }
BarcodeManager.enable();
this.closeProgress(); this.onLoadingEnded();
dismiss(); dismiss();
}); });

View File

@@ -7,16 +7,21 @@ import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidLUException; import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException; import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.expansion.RunnableArgssss;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; 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.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
@@ -25,15 +30,20 @@ public class DialogScanArtViewModel {
private final BarcodeRESTConsumer mBarcodeRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final ArticoloRESTConsumer mArticoloRESTConsumer; private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final PosizioniRESTConsumer mPosizioniRESTConsumer;
private boolean mForceOnlyUL; private boolean mForceOnlyUL;
private Listener mListener; private Listener mListener;
public DialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { public DialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer,
PosizioniRESTConsumer posizioniRESTConsumer) {
this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mArticoloRESTConsumer = articoloRESTConsumer; this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mPosizioniRESTConsumer = posizioniRESTConsumer;
} }
public DialogScanArtViewModel setForceOnlyUL(boolean forceOnlyUL) { public DialogScanArtViewModel setForceOnlyUL(boolean forceOnlyUL) {
@@ -50,15 +60,19 @@ public class DialogScanArtViewModel {
//Cerco l'UL presente all'interno della posizione //Cerco l'UL presente all'interno della posizione
// this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onComplete); // this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onComplete);
} else if(UtilityBarcode.isEtichetta128(barcodeScanDTO)) { } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onComplete); this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else if(UtilityBarcode.isEanPeso(barcodeScanDTO) && !mForceOnlyUL){
} else if (UtilityBarcode.isEanPeso(barcodeScanDTO) && !mForceOnlyUL) {
this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); this.executeEtichettaEanPeso(barcodeScanDTO, onComplete);
} else if (!mForceOnlyUL){
this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete);
} else { } else {
this.sendError(new Exception("Barcode non valido")); this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete);
} }
// else {
// this.sendError(new Exception("Barcode non valido"));
// }
} }
@@ -67,15 +81,15 @@ public class DialogScanArtViewModel {
String barcodeProd = null; String barcodeProd = null;
if(ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc; if (ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc;
if(ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin; if (ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin;
if(ean128Model.Content != null) barcodeProd = ean128Model.Content; if (ean128Model.Content != null) barcodeProd = ean128Model.Content;
if(!UtilityString.isNullOrEmpty(barcodeProd)) { if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete); this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else if(!mForceOnlyUL) { } else if (!mForceOnlyUL) {
if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) { if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) {
barcodeProd = barcodeProd.substring(1); barcodeProd = barcodeProd.substring(1);
} }
@@ -117,17 +131,43 @@ public class DialogScanArtViewModel {
}, this::sendError); }, this::sendError);
} }
private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) {
this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> {
if (mtbColtList == null || mtbColtList.size() == 0) {
this.sendError(new NoLUFoundException());
} else if (mtbColtList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
onComplete.run(DialogConsts.Results.YES, articolo, null, mtbColt.getMtbColr());
}, this::sendError);
} else {
this.sendError(new TooManyLUFoundInMonoLUPositionException());
}
}, this::sendError);
}
private void loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) { private void loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, List<MtbColr>> onComplete) {
if(barcodeProd.length() == 14) { if (barcodeProd.length() == 14) {
// barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd);
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
} }
String finalBarcodeProd = barcodeProd; String finalBarcodeProd = barcodeProd;
this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if(mtbAartList != null && mtbAartList.size() > 0) { if (mtbAartList != null && mtbAartList.size() > 0) {
onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null);
MtbAart firstArt = mtbAartList.get(0);
MtbDepoPosizione firstArtPosition = UtilityPosizione.getFromCache(firstArt.getPosizione());
if (firstArtPosition != null && firstArtPosition.isFlagMonoCollo() && mForceOnlyUL) {
this.executePosizione(firstArtPosition, firstArt, onComplete);
} else if (!mForceOnlyUL) {
onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null);
} else {
this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
}
} else { } else {
this.sendError(new NoResultFromBarcodeException(finalBarcodeProd)); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
@@ -135,8 +175,6 @@ public class DialogScanArtViewModel {
} }
private void sendError(Exception ex) { private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex); if (this.mListener != null) mListener.onError(ex);
} }

View File

@@ -11,7 +11,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -28,7 +27,6 @@ import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLU; import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLU;
@@ -133,12 +131,10 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
} }
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> { private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable(); this.onLoadingStarted();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> { this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable(); this.onLoadingEnded();
this.closeProgress();
}); });
}; };
@@ -159,7 +155,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
}, () -> { }, () -> {
onConfirm.run(false); onConfirm.run(false);
}) })
.show(((AppCompatActivity) getActivity()).getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
@@ -169,21 +165,4 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
dismiss(); dismiss();
} }
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex);
BarcodeManager.enable();
}
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 889 B

View File

@@ -65,6 +65,18 @@
android:src="@drawable/ic_erase_96" android:src="@drawable/ic_erase_96"
android:tint="@android:color/white" /> android:tint="@android:color/white" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/read_weight_form_device"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.readWeightFromDevice()}"
android:scaleType="fitCenter"
android:src="@drawable/ic_scale"
android:tint="@android:color/white" />
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

File diff suppressed because it is too large Load Diff

View File

@@ -155,7 +155,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:paddingStart="2dp" android:paddingStart="2dp"
android:paddingEnd="2dp" android:paddingEnd="2dp"
android:clipToPadding="false" android:clipToPadding="false"
@@ -163,7 +162,8 @@
android:scrollbars="vertical" android:scrollbars="vertical"
app:layout_constraintTop_toBottomOf="@id/header_content" app:layout_constraintTop_toBottomOf="@id/header_content"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/scan_art_spinner" android:id="@+id/scan_art_spinner"

View File

@@ -1,38 +1,33 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="8dp" android:paddingTop="8dp"
android:paddingEnd="16dp"
android:paddingBottom="8dp"> android:paddingBottom="8dp">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/destinatario" android:id="@+id/destinatario"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:textAppearance="?attr/textAppearanceSubtitle1" android:textAppearance="?attr/textAppearanceSubtitle1"
tools:text="Destinatario" tools:text="Destinatario" />
style="@style/AppTheme.NewMaterial.Text"/>
<LinearLayout
android:layout_width="match_parent" <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/subtitle"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:maxLines="1"
android:textAppearance="?attr/textAppearanceSubtitle1"
android:textColor="@color/gray_800"
tools:text="Città" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textAppearance="?attr/textAppearanceSubtitle1"
tools:text="Città"
style="@style/AppTheme.NewMaterial.Text.Small"/>
</LinearLayout>
</LinearLayout>

View File

@@ -52,6 +52,18 @@
android:onClick="@{() -> view.resetValues()}" android:onClick="@{() -> view.resetValues()}"
android:tint="@android:color/white"/> android:tint="@android:color/white"/>
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/read_weight_form_device"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.readWeightFromDevice()}"
android:scaleType="fitCenter"
android:src="@drawable/ic_scale"
android:tint="@android:color/white" />
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

File diff suppressed because it is too large Load Diff

View File

@@ -250,7 +250,7 @@
style="@style/AppTheme.NewMaterial.Text.Medium" style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(view.articolo.getCnfDaRic())}" android:text="@{UtilityNumber.decimalToString(view.articolo.merceDaRic)}"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textStyle="bold" android:textStyle="bold"
tools:text="1" /> tools:text="1" />
@@ -281,7 +281,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="0dp" android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(view.articolo.merceDaRic)}" android:text="@{UtilityNumber.decimalToString(view.articolo.getCnfDaRic())}"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textStyle="bold" /> android:textStyle="bold" />

View File

@@ -4,9 +4,10 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:orientation="vertical" android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp" app:cardCornerRadius="12dp"
app:cardElevation="0dp"> app:cardElevation="0dp">
@@ -21,17 +22,17 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingStart="24dp" android:paddingStart="24dp"
android:paddingEnd="24dp"
android:paddingTop="24dp" android:paddingTop="24dp"
android:paddingEnd="24dp"
android:paddingBottom="12dp"> android:paddingBottom="12dp">
<TextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.Dialog.HeadlineText" android:gravity="center_horizontal"
android:text="@string/extra_item" android:text="@string/extra_item" />
android:gravity="center_horizontal"/>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content" android:layout_width="wrap_content"
@@ -45,32 +46,31 @@
android:id="@+id/progressBar" android:id="@+id/progressBar"
style="?android:attr/progressBarStyle" style="?android:attr/progressBarStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="16sp" android:layout_gravity="center_vertical"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:layout_gravity="center_vertical"
android:gravity="center_horizontal" android:gravity="center_horizontal"
style="@style/AppTheme.NewMaterial.Text" android:text="@string/scan_item"
android:text="@string/scan_item"/> android:textSize="16sp" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/button_no" android:id="@+id/button_no"
style="@style/Button.DangerOutline"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
style="@style/Button.DangerOutline"
app:strokeColor="@color/red_400"
app:layout_constraintTop_toTopOf="parent"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:text="@string/abort"/> android:layout_marginTop="16dp"
android:text="@string/abort"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/red_400" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
@@ -78,5 +78,4 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
</layout> </layout>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingEnd="16dp"
android:paddingBottom="8dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="?attr/textAppearanceSubtitle1"
tools:text="Destinatario" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/subtitle"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textAppearance="?attr/textAppearanceSubtitle1"
android:textColor="@color/gray_800"
tools:text="Città" />
</androidx.appcompat.widget.LinearLayoutCompat>

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