Compare commits

...

84 Commits

Author SHA1 Message Date
61768fb2d0 Finish v1.17.6(226) 2021-07-20 13:07:06 +02:00
d782e8667a -> v1.17.6 (226) 2021-07-20 13:07:01 +02:00
e3d366b7a5 Fix su rendering in Rientro Merce da produzione 2021-07-20 13:06:17 +02:00
c64112835b Merge tag 'v.1.17.5(225)' into develop
Finish v.1.17.5(225)
2021-07-20 12:01:09 +02:00
7ebc5de620 Finish v.1.17.5(225) 2021-07-20 12:01:08 +02:00
aa93dc489e -> 1.17.5 (225) 2021-07-20 12:00:58 +02:00
6c1be3a7bc Finish v1.7.4(224) 2021-07-20 10:31:34 +02:00
18593c7fa0 Merge branch 'master' into develop 2021-07-20 10:31:34 +02:00
3a6b87ba47 -> v1.7.4 (224) 2021-07-20 10:31:28 +02:00
95ee04fc2a Finish v1.17.4(223) 2021-07-20 10:01:54 +02:00
1d3113ce2e Merge branch 'master' into develop 2021-07-20 10:01:54 +02:00
ef3bac3b0b Revert build gradle 2021-07-20 10:01:47 +02:00
d5f590bfda Finish v1.17.4(222) 2021-07-19 19:17:58 +02:00
1b0f9fb4de Finish v1.17.4(222) 2021-07-19 19:17:57 +02:00
b1e309dc1c -> v1.17.4 (222) 2021-07-19 19:17:52 +02:00
6da020c5cc Implementato rientro merce da produzione 2021-07-19 19:17:19 +02:00
da4d66ecfe Merge tag 'v1.17.3(221)' into develop
Finish v1.17.3(221)
2021-07-16 11:36:36 +02:00
18efcb31a0 Finish v1.17.3(221) 2021-07-16 11:36:35 +02:00
d31cb71f9e -> 1.17.3 (221) 2021-07-16 11:36:29 +02:00
86c99a99ca Merge tag 'zebra_tc210k' into develop
Finish zebra_tc210k
2021-07-16 11:34:21 +02:00
ba1a70e73e Finish zebra_tc210k 2021-07-16 11:34:20 +02:00
c822c3e0ef [SAPORIVERI]
Aggiunto alla libreria scanner zebra il modello TC210K
2021-07-16 11:34:14 +02:00
42746b3656 Finish v1.17.2(220) 2021-06-08 15:58:21 +02:00
2782c4b477 Finish v1.17.2(220) 2021-06-08 15:58:20 +02:00
5f13f7a634 -> v1.17.2 (220) 2021-06-08 15:58:13 +02:00
e811514764 Fix su thread in posizionamento merce 2021-06-08 15:57:39 +02:00
21137b1224 Finish v1.17.1(219) 2021-05-21 09:21:48 +02:00
7da0a5ade9 Finish v1.17.1(219) 2021-05-21 09:21:47 +02:00
86d92b947d -> v1.17.1 (219) 2021-05-21 09:21:35 +02:00
374127dfe9 Finish v1.17.0(218) 2021-05-20 15:11:00 +02:00
91b43d1974 Finish v1.17.0(218) 2021-05-20 15:10:59 +02:00
c167893544 -> v1.17.0 (218) 2021-05-20 15:10:55 +02:00
4c9a1bbaa9 Implementata barra di ricerca nel dialog di selezione articoli da prelevare 2021-05-20 15:09:51 +02:00
f970eb6cac Finish v1.16.35(217)#2 2021-05-19 11:32:42 +02:00
1e1163c04d Finish v1.16.35(217)#2 2021-05-19 11:32:41 +02:00
48f1307095 Revert "Aggiornati build.gradle"
This reverts commit 97bf8c291a.

# Conflicts:
#	dynamic_frudis/build.gradle
#	dynamic_ime/build.gradle
#	dynamic_saporiveri/build.gradle
#	dynamic_saporiveri_pv/build.gradle
#	dynamic_vgalimenti/build.gradle
2021-05-19 11:32:14 +02:00
64fdda43db Merge branch 'master' into develop 2021-05-19 09:49:58 +02:00
6611617a81 Finish Hotfix-Script 2021-05-19 09:49:57 +02:00
f488e6bad0 Fix scripts 2021-05-19 09:49:52 +02:00
266b3d707f Merge branch 'master' into develop 2021-05-18 17:48:36 +02:00
a726631925 Finish Hotfix-Script 2021-05-18 17:48:36 +02:00
0b634154e4 Fix scripts 2021-05-18 17:48:31 +02:00
3e4d4300f1 Merge branch 'master' into develop 2021-05-18 16:28:23 +02:00
fb527c443f Finish Hotfix-Script 2021-05-18 16:28:23 +02:00
259c719344 Fix scripts 2021-05-18 16:26:52 +02:00
178787d907 Merge branch 'master' into develop 2021-05-18 15:52:54 +02:00
a51cf2e899 Finish Hotfix-Script 2021-05-18 15:52:53 +02:00
9f587ac8b1 Fix scripts 2021-05-18 15:52:48 +02:00
df97d5c4a2 Merge branch 'master' into develop 2021-05-18 15:39:34 +02:00
697bd1e85e Finish Hotfix-Script 2021-05-18 15:39:33 +02:00
5ace80ba28 Fix scripts 2021-05-18 15:39:28 +02:00
1c8abcaa58 Merge branch 'master' into develop 2021-05-18 13:04:52 +02:00
96ab52821c Finish Hotfix-Script 2021-05-18 13:04:52 +02:00
ecd58dea14 Fix scripts 2021-05-18 13:04:46 +02:00
9cdc4f299e Merge branch 'master' into develop 2021-05-18 12:34:36 +02:00
39af233380 Finish Hotfix-Script 2021-05-18 12:34:35 +02:00
2576d423da Fix scripts 2021-05-18 12:34:30 +02:00
234c21c7a1 Finish v1.16.35(217) 2021-05-18 11:47:01 +02:00
6d5b6b0260 Finish v1.16.35(217) 2021-05-18 11:47:01 +02:00
f03976595c -> v1.16.35 (217) 2021-05-18 11:46:56 +02:00
54dbade661 Fix su thread in fase di apertura del dialog di caricamento 2021-05-18 11:46:25 +02:00
6d54bda9b4 Merge branch 'master' into develop 2021-05-17 18:41:51 +02:00
4c244c1927 Finish Hotfix-BuildGradle 2021-05-17 18:41:50 +02:00
ee3ee54e69 Aggiornati build.gradle 2021-05-17 18:41:45 +02:00
82d4607375 Merge branch 'master' into develop 2021-05-17 18:32:26 +02:00
7ecdbd1f11 Finish Hotfix-BuildGradle 2021-05-17 18:32:25 +02:00
a4c30b7fdd Aggiornati build.gradle 2021-05-17 18:32:20 +02:00
3ca75ca11a Merge branch 'master' into develop 2021-05-17 17:59:53 +02:00
f2f8594a18 Finish Hotfix-BuildGradle 2021-05-17 17:59:52 +02:00
7b7b3e554b Aggiornati build.gradle 2021-05-17 17:59:47 +02:00
7913771b2a Merge branch 'master' into develop 2021-05-17 17:50:13 +02:00
ebcd8eea0a Finish Hotfix-GradleVersion 2021-05-17 17:50:13 +02:00
97bf8c291a Aggiornati build.gradle 2021-05-17 17:50:07 +02:00
e4f783862b Finish v1.16.34(216)#2 2021-05-17 17:35:11 +02:00
653d4def4e Finish v1.16.34(216)#2 2021-05-17 17:35:10 +02:00
3cf63fc1f1 Rimossa libreria per la scansione dei barcode tramite fotocamera 2021-05-17 17:34:41 +02:00
45ddca1928 Finish v1.16.34(216) 2021-05-13 17:47:58 +02:00
f4ff33a942 Finish v1.16.34(216) 2021-05-13 17:47:54 +02:00
ca5b5d3151 -> v1.16.34 (216) 2021-05-13 17:47:47 +02:00
e22f7cf5c7 Riabilitato filtro paese 2021-05-13 17:45:52 +02:00
8ea38fd31c Sistemato ricaricamento ordini di uscita senza perdere l'istanza del filtro applicato. 2021-05-13 17:39:29 +02:00
ea7acf6053 Refactoring DialogFiltroVenditaAvanzato 2021-05-13 15:33:58 +02:00
3a0d4d290c Aggiornamenti vari.
Implementata gestione di partite multiple all'interno di una UL.
2021-05-13 09:44:43 +02:00
c8053831db Finish v1.16.33(215) 2021-05-07 13:04:51 +02:00
206 changed files with 8275 additions and 2635 deletions

View File

@@ -0,0 +1,60 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_agricoper" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="WMS_Native.app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Hybrid>
<Java />
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="true" />
<option name="STARTUP_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_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 215
def appVersionName = '1.16.33'
def appVersionCode = 226
def appVersionName = '1.17.6'
signingConfigs {
release {
@@ -15,6 +15,9 @@ android {
keyPassword 'inpmiy'
storeFile file('Integry.jks')
storePassword 'inpmiy'
enableV3Signing true
enableV4Signing true
}
}
@@ -24,12 +27,12 @@ android {
}
}
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
applicationId "it.integry.integrywmsnative"
minSdkVersion 21
targetSdkVersion 29
targetSdkVersion 30
versionCode appVersionCode
versionName appVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -50,8 +53,8 @@ android {
android.buildFeatures.dataBinding true
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
productFlavors {
}
@@ -74,7 +77,7 @@ android {
abortOnError false
}
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti", ":dynamic_ime", ":dynamic_frudis", ":dynamic_saporiveri_pv", ":dynamic_saporiveri", ':dynamic_gramm']
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti", ":dynamic_ime", ":dynamic_frudis", ":dynamic_saporiveri_pv", ":dynamic_saporiveri", ':dynamic_gramm', ':dynamic_agricoper']
}
@@ -104,15 +107,15 @@ dependencies {
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.2.0'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.annimon:stream:1.2.1'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0'
implementation 'com.annimon:stream:1.2.2'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.3.1'
implementation 'org.apache.commons:commons-text:1.9'
//MVVM
@@ -127,16 +130,16 @@ dependencies {
implementation 'com.github.clans:fab:1.6.4'
//CUSTOM VIEWS
implementation 'com.github.NaimishTrivedi:FBToast:1.0'
implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2'
implementation 'com.github.cachapa:ExpandableLayout:2.9.2'
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
implementation 'com.fede987:status-bar-alert:1.0.1'
implementation 'com.fxn769:stash:1.2'
testImplementation 'junit:junit:4.13.1'
implementation 'com.github.fede87:StatusBarAlert:1.0.1'
implementation 'com.github.akshay2211:Stash:master'
testImplementation 'junit:junit:4.13.2'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'com.github.pedromassango:doubleClick:3.0'
//SQLite ROOM
def room_version = "2.2.6"
def room_version = "2.3.0"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
@@ -150,11 +153,12 @@ dependencies {
implementation project(':barcode_base_android_library')
implementation project(':honeywellscannerlibrary')
implementation project(':keyobardemulatorscannerlibrary')
implementation project(':barcode_kaiteki')
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
androidTestImplementation 'org.testng:testng:7.3.0'
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1'
androidTestImplementation 'org.testng:testng:7.4.0'
}
repositories {
mavenCentral()
google()
maven { url 'https://jitpack.io' }
}

View File

@@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.READ_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.CAMERA" />
<application
android:name=".MainApplication"
@@ -24,16 +25,18 @@
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.picking_resi.PickingResiActivity"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustPan">
android:windowSoftInputMode="adjustNothing">
<intent-filter>
<action android:name="android.intent.action.CLIENTBARCODEACTIVITY" />
@@ -47,7 +50,6 @@
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.login.LoginActivity"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".gest.lista_bancali.ListaBancaliActivity"

View File

@@ -95,7 +95,7 @@ public class MainActivity extends BaseActivity
mBinding.appBarMain.mainSearch.setVisibility(View.GONE);
initGestMenu();
openMain();
if(savedInstanceState == null) openMain();
init();

View File

@@ -17,6 +17,8 @@ import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisogn
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaModule;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdineAcquistoGrigliaComponent;
@@ -33,6 +35,10 @@ import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviForn
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
@@ -57,11 +63,13 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
PickingResiModule.class,
OrdiniUscitaElencoModule.class,
DialogInputQuantityV2Module.class,
DialogInputLUProdModule.class,
DialogScanArtModule.class,
DialogScanOrCreateLUModule.class,
ProdFabbisognoLineeProdModule.class,
VersamentoMerceModule.class,
DialogAskMagazzinoProssimitaModule.class,
DialogChooseBatchLotModule.class,
DialogRowInfoProdFabbisognoLineeProdModule.class})
public interface MainApplicationComponent {
@@ -77,12 +85,16 @@ public interface MainApplicationComponent {
PickingResiComponent.Factory pickingResiComponent();
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
DialogInputLUProdComponent.Factory dialogInputLUProdComponent();
DialogScanArtComponent.Factory dialogScanArtComponent();
DialogScanOrCreateLUComponent.Factory dialogScanOrCreateLUComponent();
ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent();
VersamentoMerceComponent.Factory versamentoMerceComponent();
DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent();
DialogChooseBatchLotComponent.Factory dialogChooseBatchLotComponent();
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
ProdRientroMerceComponent.Factory prodRientroMerceComponent();
ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
void inject(AppContext appContext);

View File

@@ -12,6 +12,8 @@ import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
@@ -59,6 +61,18 @@ public class MainApplicationModule {
return new ArticoloRESTConsumer();
}
@Provides
@Singleton
MagazzinoRESTConsumer provideMagazzinoRESTConsumer() {
return new MagazzinoRESTConsumer();
}
@Provides
@Singleton
MesRESTConsumer provideMesRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new MesRESTConsumer(systemRESTConsumer);
}
@Provides
@Singleton
ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(ArticoloRESTConsumer articoloRESTConsumer) {

View File

@@ -94,6 +94,7 @@ public class SplashActivity extends BaseActivity {
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(this.onRequestPermissionResult != null) {
List<Integer> grantResultsList = new ArrayList<>();
for(int i = 0; i < grantResults.length; i++) {

View File

@@ -8,7 +8,6 @@ import androidx.room.Update;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper;
@@ -17,7 +16,7 @@ public interface GrigliaDao {
@Query("SELECT * from griglie")
List<Griglia> getAll();
@Query("SELECT *, COUNT(articoli_griglia.articolo_griglia_id) as countArticoli from griglie LEFT JOIN articoli_griglia ON (griglie.griglia_id = articoli_griglia.id_griglia) where cod_alis = :codAlis GROUP BY griglie.griglia_id")
@Query("SELECT griglie.*, COUNT(articoli_griglia.articolo_griglia_id) as countArticoli from griglie LEFT JOIN articoli_griglia ON (griglie.griglia_id = articoli_griglia.id_griglia) where cod_alis = :codAlis GROUP BY griglie.griglia_id")
GrigliaWrapper findByCodAlis(String codAlis);
@Insert

View File

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

View File

@@ -84,6 +84,28 @@ public class Converters {
}
}
@BindingAdapter("binding")
public static void bindEditText(AppCompatTextView view, final ObservableField<String> observableField) {
Pair<ObservableField<String>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableField) {
if (pair != null) {
view.removeTextChangedListener(pair.second);
}
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(observableField != null) observableField.set(s.toString());
}
};
view.setTag(R.id.bound_observable, new Pair<>(observableField, watcher));
view.addTextChangedListener(watcher);
}
String newValue = observableField.get();
if (!view.getText().toString().equals(newValue)) {
view.setText(newValue);
}
}
@BindingAdapter("binding")
public static void bindEditText(EditText view, final BindableString bindableString) {
Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
@@ -106,6 +128,28 @@ public class Converters {
}
}
@BindingAdapter("binding")
public static void bindEditText(EditText view, final ObservableField<String> observableString) {
Pair<ObservableField<String>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableString) {
if (pair != null) {
view.removeTextChangedListener(pair.second);
}
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
observableString.set(s.toString());
}
};
view.setTag(R.id.bound_observable, new Pair<>(observableString, watcher));
view.addTextChangedListener(watcher);
}
String newValue = observableString.get();
if (!view.getText().toString().equals(newValue)) {
view.setText(newValue);
}
}
@BindingAdapter("binding")
public static void bindTextInputEditText(TextInputEditText view, final BindableString bindableString) {
Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);

View File

@@ -0,0 +1,6 @@
package it.integry.integrywmsnative.core.di.binders;
public class AutoCompleteTextViewBinders {
}

View File

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

View File

@@ -49,16 +49,38 @@ public class BaseDialogFragment extends DialogFragment {
this.mBarcodeListener = listen;
}
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
protected void openProgress() {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
}
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
}
});
// }).start();
}
protected void closeProgress() {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
});
// }).start();
}
}

View File

@@ -4,6 +4,8 @@ import android.app.Dialog;
import androidx.fragment.app.Fragment;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
public class BaseFragment extends Fragment {
@@ -13,23 +15,42 @@ public class BaseFragment extends Fragment {
protected void openProgress() {
new Thread(() -> {
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
}
});
}).start();
// }).start();
}
protected void closeProgress() {
new Thread(() -> {
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
});
}).start();
// }).start();
}
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
public void onError(Exception ex) {
this.getActivity().runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
});
}
}

View File

@@ -7,6 +7,7 @@ import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
@@ -38,6 +39,28 @@ public abstract class ExtendedRecyclerView<T, VH extends RecyclerView.ViewHolder
return mDataset.size();
}
public void clearDataset() {
mDataset.clear();
notifyDataSetChanged();
}
public void updateDataset(List<T> updatedDataset) {
mDataset.clear();
if(updatedDataset != null && !updatedDataset.isEmpty()) {
mDataset.addAll(updatedDataset);
}
notifyDataSetChanged();
}
public void addDataset(List<T> insertDataset) {
if(insertDataset != null && !insertDataset.isEmpty()) {
mDataset.addAll(insertDataset);
notifyDataSetChanged();
}
}
public ExtendedRecyclerView<T, VH> setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();

View File

@@ -0,0 +1,348 @@
package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal;
public class DtbOrdSteps extends EntityBase {
private String dataOrd;
private String gestione;
private Integer idRiga;
private Integer idStep;
private Integer numOrd;
private String activityId;
private String codAnag;
private String codDtip;
private String codJfas;
private String codMdep;
private String codProdPri;
private String dataDoc;
private String dataFine;
private String dataIniz;
private String descrizioneAttivita;
private String flagTipoTempo;
private Integer hrNum;
private BigDecimal hrTime;
private String idRigaDoc;
private String note;
private String numDoc;
private Integer numFase;
private BigDecimal qtaAllocata;
private BigDecimal qtaDisp;
private BigDecimal qtaDispImmessa;
private BigDecimal qtaImmesse;
private BigDecimal qtaInProd;
private BigDecimal qtaLav;
private BigDecimal qtaProd;
private BigDecimal qtaScartate;
private BigDecimal qtaTrasferite;
private BigDecimal rapConvLav;
private String serDoc;
private String untMisLav;
public String getDataOrd() {
return dataOrd;
}
public DtbOrdSteps setDataOrd(String dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public String getGestione() {
return gestione;
}
public DtbOrdSteps setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public Integer getIdRiga() {
return idRiga;
}
public DtbOrdSteps setIdRiga(Integer idRiga) {
this.idRiga = idRiga;
return this;
}
public Integer getIdStep() {
return idStep;
}
public DtbOrdSteps setIdStep(Integer idStep) {
this.idStep = idStep;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public DtbOrdSteps setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
public String getActivityId() {
return activityId;
}
public DtbOrdSteps setActivityId(String activityId) {
this.activityId = activityId;
return this;
}
public String getCodAnag() {
return codAnag;
}
public DtbOrdSteps setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getCodDtip() {
return codDtip;
}
public DtbOrdSteps setCodDtip(String codDtip) {
this.codDtip = codDtip;
return this;
}
public String getCodJfas() {
return codJfas;
}
public DtbOrdSteps setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getCodMdep() {
return codMdep;
}
public DtbOrdSteps setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodProdPri() {
return codProdPri;
}
public DtbOrdSteps setCodProdPri(String codProdPri) {
this.codProdPri = codProdPri;
return this;
}
public String getDataDoc() {
return dataDoc;
}
public DtbOrdSteps setDataDoc(String dataDoc) {
this.dataDoc = dataDoc;
return this;
}
public String getDataFine() {
return dataFine;
}
public DtbOrdSteps setDataFine(String dataFine) {
this.dataFine = dataFine;
return this;
}
public String getDataIniz() {
return dataIniz;
}
public DtbOrdSteps setDataIniz(String dataIniz) {
this.dataIniz = dataIniz;
return this;
}
public String getDescrizioneAttivita() {
return descrizioneAttivita;
}
public DtbOrdSteps setDescrizioneAttivita(String descrizioneAttivita) {
this.descrizioneAttivita = descrizioneAttivita;
return this;
}
public String getFlagTipoTempo() {
return flagTipoTempo;
}
public DtbOrdSteps setFlagTipoTempo(String flagTipoTempo) {
this.flagTipoTempo = flagTipoTempo;
return this;
}
public Integer getHrNum() {
return hrNum;
}
public DtbOrdSteps setHrNum(Integer hrNum) {
this.hrNum = hrNum;
return this;
}
public BigDecimal getHrTime() {
return hrTime;
}
public DtbOrdSteps setHrTime(BigDecimal hrTime) {
this.hrTime = hrTime;
return this;
}
public String getIdRigaDoc() {
return idRigaDoc;
}
public DtbOrdSteps setIdRigaDoc(String idRigaDoc) {
this.idRigaDoc = idRigaDoc;
return this;
}
public String getNote() {
return note;
}
public DtbOrdSteps setNote(String note) {
this.note = note;
return this;
}
public String getNumDoc() {
return numDoc;
}
public DtbOrdSteps setNumDoc(String numDoc) {
this.numDoc = numDoc;
return this;
}
public Integer getNumFase() {
return numFase;
}
public DtbOrdSteps setNumFase(Integer numFase) {
this.numFase = numFase;
return this;
}
public BigDecimal getQtaAllocata() {
return qtaAllocata;
}
public DtbOrdSteps setQtaAllocata(BigDecimal qtaAllocata) {
this.qtaAllocata = qtaAllocata;
return this;
}
public BigDecimal getQtaDisp() {
return qtaDisp;
}
public DtbOrdSteps setQtaDisp(BigDecimal qtaDisp) {
this.qtaDisp = qtaDisp;
return this;
}
public BigDecimal getQtaDispImmessa() {
return qtaDispImmessa;
}
public DtbOrdSteps setQtaDispImmessa(BigDecimal qtaDispImmessa) {
this.qtaDispImmessa = qtaDispImmessa;
return this;
}
public BigDecimal getQtaImmesse() {
return qtaImmesse;
}
public DtbOrdSteps setQtaImmesse(BigDecimal qtaImmesse) {
this.qtaImmesse = qtaImmesse;
return this;
}
public BigDecimal getQtaInProd() {
return qtaInProd;
}
public DtbOrdSteps setQtaInProd(BigDecimal qtaInProd) {
this.qtaInProd = qtaInProd;
return this;
}
public BigDecimal getQtaLav() {
return qtaLav;
}
public DtbOrdSteps setQtaLav(BigDecimal qtaLav) {
this.qtaLav = qtaLav;
return this;
}
public BigDecimal getQtaProd() {
return qtaProd;
}
public DtbOrdSteps setQtaProd(BigDecimal qtaProd) {
this.qtaProd = qtaProd;
return this;
}
public BigDecimal getQtaScartate() {
return qtaScartate;
}
public DtbOrdSteps setQtaScartate(BigDecimal qtaScartate) {
this.qtaScartate = qtaScartate;
return this;
}
public BigDecimal getQtaTrasferite() {
return qtaTrasferite;
}
public DtbOrdSteps setQtaTrasferite(BigDecimal qtaTrasferite) {
this.qtaTrasferite = qtaTrasferite;
return this;
}
public BigDecimal getRapConvLav() {
return rapConvLav;
}
public DtbOrdSteps setRapConvLav(BigDecimal rapConvLav) {
this.rapConvLav = rapConvLav;
return this;
}
public String getSerDoc() {
return serDoc;
}
public DtbOrdSteps setSerDoc(String serDoc) {
this.serDoc = serDoc;
return this;
}
public String getUntMisLav() {
return untMisLav;
}
public DtbOrdSteps setUntMisLav(String untMisLav) {
this.untMisLav = untMisLav;
return this;
}
}

View File

@@ -105,4 +105,6 @@ public class MtbTCol {
this.circuito = circuito;
return this;
}
}

View File

@@ -3,10 +3,8 @@ package it.integry.integrywmsnative.core.rest;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.sql.Date;
import java.util.concurrent.TimeUnit;
import it.integry.integrywmsnative.core.rest.deserializer.DateDeserializer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
@@ -53,11 +51,12 @@ public class RESTBuilder {
String endpoint = "http://" + host + ":" + port + "/" + (addEmsApi ? "ems-api/" : "");
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateDeserializer())
.setDateFormat("dd/MM/yyyy HH:mm:ss")
.create();
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(endpoint)

View File

@@ -40,11 +40,11 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
public void getByCodMart(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
getByCodMartStatic(codMartToFind, onComplete, onFailed);
public void getByCodMarts(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
getByCodMartsStatic(codMartToFind, onComplete, onFailed);
}
public static void getByCodMartStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
public static void getByCodMartsStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
String joinedCods = Stream.of(codMartToFind)
.collect(Collectors.joining(","));
@@ -67,4 +67,26 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
public void getByCodMart(String codMartToFind, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed) {
ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer.getByCodMart(codMartToFind).enqueue(new Callback<ServiceRESTResponse<MtbAart>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByCodMart", (m) -> {
if(response.body().getEntityList() != null && !response.body().getEntityList().isEmpty()) {
onComplete.run(response.body().getEntityList().get(0));
} else onComplete.run(null);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbAart>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -418,7 +418,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> {
if (arts != null && arts.size() > 0) {
for (MtbColt mtbColt : mtbColts) {

View File

@@ -6,15 +6,18 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityDB;
@Singleton
public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
public static void getTipoCollo(String codTcol, RunnableArgs<MtbTCol> onComplete, RunnableArgs<Exception> onFailed) {
public void getTipoCollo(String codTcol, RunnableArgs<MtbTCol> onComplete, RunnableArgs<Exception> onFailed) {
String baseSql = "SELECT * " +
"FROM mtb_tcol " +
"WHERE cod_tcol = " + UtilityDB.valueToString(codTcol);
@@ -36,7 +39,11 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public static void getTipiCollo(RunnableArgs<List<MtbTCol>> onComplete, RunnableArgs<Exception> onFailed) {
public void getTipiCollo(RunnableArgs<List<MtbTCol>> onComplete, RunnableArgs<Exception> onFailed) {
getTipiColloStatic(onComplete, onFailed);
}
public static void getTipiColloStatic(RunnableArgs<List<MtbTCol>> onComplete, RunnableArgs<Exception> onFailed) {
String baseSql = "SELECT * " +
"FROM mtb_tcol ";

View File

@@ -1,31 +1,93 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class MesRESTConsumer extends _BaseRESTConsumer {
public static void getOrdiniLavorazioneMateriale(String codJfas, String idMateriale, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed){
private final SystemRESTConsumer mSystemRESTConsumer;
public MesRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.mSystemRESTConsumer = systemRESTConsumer;
}
public static void getOrdiniLavorazioneMateriale(String codJfas, String idMateriale, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazioneMateriale(codJfas,idMateriale).enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getAvailablePosizioni", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
mesRESTConsumerService.getOrdiniLavorazioneMateriale(codJfas, idMateriale)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazioneMateriale", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getOrdiniLavorazione(String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(flagEvaso, codJfas)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(UtilityDate.formatDate(dateStart, UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH), flagEvaso, codJfas)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) {
Type typeOfObjectsList = new TypeToken<ArrayList<JtbFasi>>() {}.getType();
this.mSystemRESTConsumer.processSql(
"SELECT * FROM jtb_fasi WHERE cod_jfas_parent = " + UtilityDB.valueToString(codJfasParent),
typeOfObjectsList,
onComplete,
onFailed);
}
}

View File

@@ -14,4 +14,12 @@ public interface MesRESTConsumerService {
@GET("mes_v2/getOrdiniLavorazioneMateriale")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazioneMateriale(@Query("codJfas") String codJfas, @Query("idMateriale") String idMateriale);
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas);
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas);
}

View File

@@ -9,6 +9,7 @@ import java.lang.reflect.Type;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
public class DateDeserializer implements JsonDeserializer<Date> {
@@ -16,6 +17,8 @@ public class DateDeserializer implements JsonDeserializer<Date> {
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
if (UtilityString.isNullOrEmpty(date)) return null;
return UtilityDate.recognizeDateWithExceptionHandler(date);
}
}

View File

@@ -0,0 +1,21 @@
package it.integry.integrywmsnative.core.rest.serializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class DateSerializer implements JsonSerializer<Date> {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
String dateString = UtilityDate.formatDate(src, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return src == null ? null : new JsonPrimitive(dateString);
}
}

View File

@@ -2,10 +2,8 @@ package it.integry.integrywmsnative.core.utility;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import it.integry.integrywmsnative.core.exception.DateNotRecognizedException;
import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException;
@@ -19,9 +17,15 @@ public class UtilityDate {
public static class COMMONS_DATE_FORMATS {
public static final String DMY_SLASH = "dd/MM/yyyy";
public static final String YMD_SLASH = "yyyy/MM/dd";
public static final String DM_SLASH = "dd/MM";
public static final String MD_SLASH = "MM/dd";
public static final String YMD_DASH = "yyyy-MM-dd";
public static final String DMY_TIME_SLASH = DMY_SLASH + " HH:mm:ss";
public static final String YMD_TIME_SLASH = YMD_SLASH + " HH:mm:ss";
public static final String DM_TIME_SLASH = DM_SLASH + " HH:mm";
public static final String MD_TIME_SLASH = MD_SLASH + " HH:mm";
public static final String TIME = "HH:mm";
public static final String TIME_W_SECS = "HH:mm:ss";
public static final String DM_HUMAN = "dd MMM";

View File

@@ -8,6 +8,14 @@ import androidx.fragment.app.DialogFragment;
public class UtilityDialog {
public static void setTo60PercentWidth(Context context, DialogFragment dialog) {
int width = (int)(context.getResources().getDisplayMetrics().widthPixels*0.60);
dialog.getDialog().getWindow().setLayout(width, LinearLayout.LayoutParams.MATCH_PARENT);
}
public static void setTo90PercentWidth(Context context, Dialog dialog) {
int width = (int)(context.getResources().getDisplayMetrics().widthPixels*0.90);

View File

@@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.utility;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
@@ -22,4 +23,14 @@ public class UtilityDimension {
return Math.round(px);
}
public static double getDisplayInchs(Activity activity) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
float yInches= metrics.heightPixels/metrics.ydpi;
float xInches= metrics.widthPixels/metrics.xdpi;
return Math.sqrt(xInches*xInches + yInches*yInches);
}
}

View File

@@ -23,7 +23,7 @@ public class UtilityString {
}
public static String empty2null(String stringToCheck) {
return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim();
return (stringToCheck == null || stringToCheck.trim().length() == 0) ? null : stringToCheck.trim();
}
public static String capitalizeWords(String capString){

View File

@@ -144,7 +144,7 @@ public class AccettazionePickingViewModel {
.map(SitArtOrdDTO::getCodMart)
.toList();
this.mArticoloRESTConsumer.getByCodMart(codMarts, listMtbAarts -> {
this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> {
MtbAart mtbAart = null;

View File

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

View File

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

View File

@@ -7,11 +7,15 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -34,6 +38,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDimension;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -68,7 +73,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
@@ -78,13 +83,19 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false);
return mBindings.getRoot();
}
@Override
public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mToolbar.setNestedScrollView(mBindings.fragmentMainScrollview);
init();
initGestMenu();
initVersion();
return mBindings.getRoot();
}
@Override
@@ -128,7 +139,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
List<Exception> generatedErrors = new ArrayList<>();
Iterator sessionsIterator = ColliDataRecover.getAllSessionIDs().iterator();
Iterator<Integer> sessionsIterator = ColliDataRecover.getAllSessionIDs().iterator();
cyclicRecover(sessionsIterator, () -> {
@@ -225,6 +236,10 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();
int menuSpanCount = 2;
if(UtilityDimension.getDisplayInchs(this.getActivity()) > 8) menuSpanCount = 4;
else if(UtilityDimension.getDisplayInchs(this.getActivity()) > 6.5) menuSpanCount = 3;
for (MenuConfiguration.MenuGroup menuGroup : menuGroups) {
FragmentMainMenuGroupLayoutBinding groupBinding = DataBindingUtil.inflate(mLayoutInflater, R.layout.fragment_main_menu_group_layout, null, false);
@@ -233,7 +248,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
MenuListAdapter menuListAdapter = new MenuListAdapter(getContext(), menuGroup.getItems());
groupBinding.mainList.setLayoutManager(new GridLayoutManager(getContext(), 2));
groupBinding.mainList.setLayoutManager(new GridLayoutManager(getContext(), menuSpanCount));
groupBinding.mainList.setAdapter(menuListAdapter);
groupBinding.mainList.setNestedScrollingEnabled(false);

View File

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

View File

@@ -1,838 +0,0 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs;
import android.app.DatePickerDialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.MultiAutoCompleteTextView;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.DataBindingUtil;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
public class DialogVenditaFiltroAvanzato {
private final AlertDialog currentAlert;
private final Context currentContext;
private final RunnableArgss<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone;
private final List<OrdiniUscitaElencoDTO> currentOrderList;
private List<OrdiniUscitaElencoDTO> currentFilteredOrderList;
private ArrayAdapter<String> arrayAdapterCodMdep;
private ArrayAdapter<String> arrayAdapterIdViaggio;
private ArrayAdapter<String> arrayAdapterNumOrds;
private ArrayAdapter<String> arrayAdapterCliente;
private ArrayAdapter<String> arrayAdapterTermCons;
private ArrayAdapter<String> arrayAdapterVettore;
private ArrayAdapter<String> arrayAdapterAgente;
private ArrayAdapter<String> arrayAdapterAutomezzo;
private ArrayAdapter<String> arrayAdapterPaese;
private Predicate<OrdiniUscitaElencoDTO> currentDepositoPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentIdViaggioPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentNumOrdsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentClientePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentDataConsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentTermConsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentVettorePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentAgentePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentAutomezzoPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentPaesePredicate = null;
private boolean firstInit = true;
public static AlertDialog make(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, RunnableArgss<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, null, onDismiss).currentAlert;
}
public static AlertDialog make(final Context context,
final List<OrdiniUscitaElencoDTO> ordersList,
DialogVenditaFiltroAvanzatoViewModel baseViewModel,
RunnableArgss<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert;
}
private DialogVenditaFiltroAvanzato(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss<List<OrdiniUscitaElencoDTO>, DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
currentContext = context;
currentOrderList = ordersList;
currentOnFilterDone = onDismiss;
DialogVenditaFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogVenditaFiltroAvanzatoViewModel();
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
DialogVenditaFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false);
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context)
.setView(binding.getRoot());
binding.setViewmodel(viewModel);
initViewModelNew(viewModel);
initView(binding, viewModel);
currentAlert = alertDialog.create();
currentAlert.setCanceledOnTouchOutside(false);
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
binding.positiveBtn.setOnClickListener(view -> {
currentAlert.dismiss();
});
binding.neutralBtn.setOnClickListener(view -> {
resetAll(viewModel);
});
currentAlert.setOnDismissListener(dialogInterface -> {
if(currentOnFilterDone != null) currentOnFilterDone.run(currentFilteredOrderList, viewModel);
});
refreshList();
}
private void resetAll(DialogVenditaFiltroAvanzatoViewModel viewModel) {
viewModel.deposito.set(null);
viewModel.idViaggio.set(null);
viewModel.numOrds.set(null);
viewModel.cliente.set(null);
viewModel.dataConsegna.set(null);
viewModel.terminiConsegna.set(null);
viewModel.vettore.set(null);
viewModel.automezzo.set(null);
viewModel.agente.set(null);
viewModel.paese.set(null);
}
private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) {
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> {
// bindings.filledExposedDropdownDataCons.callOnClick();
// });
bindings.filledExposedDropdownDataCons.setOnClickListener(view -> {
Calendar c = UtilityDate.getCalendarInstance();
if(viewModel.dataConsegnaDate != null) {
c.setTime(viewModel.dataConsegnaDate);
}
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(currentContext,
(view2, year, month, day) -> {
viewModel.dataConsegnaDate = new GregorianCalendar(year, month, day).getTime();
viewModel.dataConsegna.set(UtilityDate.formatDate(viewModel.dataConsegnaDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}, mYear, mMonth, mDay);
datePickerDialog.show();
});
arrayAdapterCodMdep = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(false));
bindings.inputCodMdepNew.setVisibility(filtroOrdiniVendita.shoudShowCodMdepFilter() ? View.VISIBLE : View.GONE);
bindings.filledExposedDropdownCodMdep.setAdapter(arrayAdapterCodMdep);
arrayAdapterIdViaggio = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(false));
bindings.inputIdViaggio.setVisibility(filtroOrdiniVendita.shoudShowIdViaggioFilter() ? View.VISIBLE : View.GONE);
bindings.filledExposedDropdownIdViaggio.setAdapter(arrayAdapterIdViaggio);
arrayAdapterAgente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterAgente.addAll(getAvailableAgente(false));
bindings.inputAgente.setVisibility(filtroOrdiniVendita.shoudShowAgenteFilter() ? View.VISIBLE : View.GONE);
bindings.filledExposedDropdownAgente.setAdapter(arrayAdapterAgente);
arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterNumOrds.addAll(getAvailableNumOrds(false));
bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds);
bindings.filledExposedDropdownNumOrds.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
arrayAdapterCliente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterCliente.addAll(getAvailableCliente(false));
bindings.filledExposedDropdownCliente.setAdapter(arrayAdapterCliente);
arrayAdapterTermCons = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterTermCons.addAll(getAvailableTermCons(false));
bindings.filledExposedDropdownTermCons.setAdapter(arrayAdapterTermCons);
arrayAdapterVettore = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterVettore.addAll(getAvailableVettori(false));
bindings.filledExposedDropdownVettore.setAdapter(arrayAdapterVettore);
arrayAdapterAutomezzo = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(false));
bindings.filledExposedDropdownAutomezzo.setAdapter(arrayAdapterAutomezzo);
arrayAdapterPaese = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterPaese.addAll(getAvailablePaesi(false));
bindings.filledExposedDropdownPaese.setAdapter(arrayAdapterPaese);
viewModel.deposito.refresh();
viewModel.idViaggio.refresh();
viewModel.numOrds.refresh();
viewModel.cliente.refresh();
viewModel.terminiConsegna.refresh();
viewModel.vettore.refresh();
viewModel.automezzo.refresh();
viewModel.dataConsegna.refresh();
viewModel.agente.refresh();
viewModel.paese.refresh();
}
private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel) {
BindableString.registerListener(viewModel.idViaggio, value -> {
if(UtilityString.isNullOrEmpty(value)) currentIdViaggioPredicate = null;
else {
String[] idViaggiSplitted = value.split("[,\\ ]");
try{
List<Integer> idViaggiInteger = Stream.of(idViaggiSplitted)
.filter(x -> !UtilityString.isNullOrEmpty(x))
.map(Integer::parseInt).toList();
currentIdViaggioPredicate = o -> idViaggiInteger.contains(o.getIdViaggio());
} catch (NumberFormatException ex) {
currentNumOrdsPredicate = null;
}
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.registerListener(viewModel.deposito, value -> {
if(UtilityString.isNullOrEmpty(value)) currentDepositoPredicate = null;
else {
currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().equalsIgnoreCase(value);
}
refreshList();
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.registerListener(viewModel.numOrds, value -> {
if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null;
else {
String[] numOrdsSplitted = value.split("[,\\ ]");
try{
List<Integer> numOrdsInteger = Stream.of(numOrdsSplitted)
.filter(x -> !UtilityString.isNullOrEmpty(x))
.map(Integer::parseInt).toList();
currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd());
} catch (NumberFormatException ex) {
currentNumOrdsPredicate = null;
}
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.registerListener(viewModel.cliente, value -> {
if(UtilityString.isNullOrEmpty(value)) currentClientePredicate = null;
else {
currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(value.toLowerCase());
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.registerListener(viewModel.terminiConsegna, value -> {
if(UtilityString.isNullOrEmpty(value)) currentTermConsPredicate = null;
else {
currentTermConsPredicate = o -> !UtilityString.isNullOrEmpty(o.getTermCons()) && o.getTermCons().equalsIgnoreCase(value);
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.registerListener(viewModel.vettore, value -> {
if(UtilityString.isNullOrEmpty(value)) currentVettorePredicate = null;
else {
currentVettorePredicate = o -> (o.getCodVvet() + " - " + o.getDescrizioneVettore()).equalsIgnoreCase(value);
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.registerListener(viewModel.automezzo, value -> {
if(UtilityString.isNullOrEmpty(value)) currentAutomezzoPredicate = null;
else {
currentAutomezzoPredicate = o -> !UtilityString.isNullOrEmpty(o.getDescrizioneAuto()) && (o.getDescrizioneAuto().toLowerCase().contains(value) || o.getDescrizioneAuto().equalsIgnoreCase(value));
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.resetListeners(viewModel.dataConsegna);
BindableString.registerListener(viewModel.dataConsegna, value -> {
if(UtilityString.isNullOrEmpty(value)) currentDataConsPredicate = null;
else {
currentDataConsPredicate = o -> o.getDataConsD().equals(viewModel.dataConsegnaDate);
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.resetListeners(viewModel.agente);
BindableString.registerListener(viewModel.agente, value -> {
if(UtilityString.isNullOrEmpty(value)) currentAgentePredicate = null;
else {
currentAgentePredicate = o -> !UtilityString.isNullOrEmpty(o.getNomeAgente()) && (o.getNomeAgente().toLowerCase().contains(value) || o.getNomeAgente().equalsIgnoreCase(value));
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterPaese.clear();
arrayAdapterPaese.addAll(getAvailablePaesi(true));
});
BindableString.resetListeners(viewModel.paese);
BindableString.registerListener(viewModel.paese, value -> {
if(UtilityString.isNullOrEmpty(value)) currentPaesePredicate = null;
else {
currentPaesePredicate = o -> !UtilityString.isNullOrEmpty(o.getCitta()) && (o.getCitta().toLowerCase().contains(value) || o.getCitta().equalsIgnoreCase(value));
}
refreshList();
arrayAdapterCodMdep.clear();
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true));
arrayAdapterIdViaggio.clear();
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true));
arrayAdapterNumOrds.clear();
arrayAdapterNumOrds.addAll(getAvailableNumOrds(true));
arrayAdapterCliente.clear();
arrayAdapterCliente.addAll(getAvailableCliente(true));
arrayAdapterTermCons.clear();
arrayAdapterTermCons.addAll(getAvailableTermCons(true));
arrayAdapterVettore.clear();
arrayAdapterVettore.addAll(getAvailableVettori(true));
arrayAdapterAutomezzo.clear();
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true));
arrayAdapterAgente.clear();
arrayAdapterAgente.addAll(getAvailableAgente(true));
});
}
private List<String> getAvailableIdViaggio(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentVettorePredicate == null &&
currentTermConsPredicate == null &&
currentDepositoPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream
.of(currentFilteredOrderList)
.filter(x -> x.getIdViaggio() != null)
.sortBy(x -> -x.getIdViaggio())
.map(x -> x.getIdViaggio() != null ? x.getIdViaggio().toString() : null)
.distinct()
.toList();
}
private List<String> getAvailableAgente(boolean skipRecalc) {
if(currentDepositoPredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentVettorePredicate == null &&
currentTermConsPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getNomeAgente).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailableCodMdeps(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentVettorePredicate == null &&
currentTermConsPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getCodMdep).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailableCliente(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentDepositoPredicate == null &&
currentDataConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentVettorePredicate == null &&
currentTermConsPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getRagSocOrd).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailableNumOrds(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentDepositoPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentVettorePredicate == null &&
currentTermConsPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(x -> x.getNumOrd().toString()).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailableTermCons(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentVettorePredicate == null &&
currentDepositoPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getTermCons).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailableVettori(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentTermConsPredicate == null &&
currentAutomezzoPredicate == null &&
currentDepositoPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate .test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).filter(x -> x.getCodVvet() != null).map(x -> x.getCodVvet() + " - " + x.getDescrizioneVettore()).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailableAutomezzi(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentTermConsPredicate == null &&
currentVettorePredicate == null &&
currentDepositoPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getDescrizioneAuto).distinct().withoutNulls().sorted().toList();
}
private List<String> getAvailablePaesi(boolean skipRecalc) {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentTermConsPredicate == null &&
currentVettorePredicate == null &&
currentDepositoPredicate == null &&
currentAutomezzoPredicate == null
){
currentFilteredOrderList = currentOrderList;
} else if(!skipRecalc){
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdiniUscitaElencoDTO::getCitta).withoutNulls().distinct().sorted().toList();
}
private void refreshList() {
if(currentAgentePredicate == null &&
currentIdViaggioPredicate == null &&
currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentTermConsPredicate == null &&
currentVettorePredicate == null &&
currentAutomezzoPredicate == null &&
currentDepositoPredicate == null &&
currentPaesePredicate == null
){
currentFilteredOrderList = currentOrderList;
} else {
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
}
}

View File

@@ -0,0 +1,465 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs;
import android.app.DatePickerDialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.MultiAutoCompleteTextView;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.DataBindingUtil;
import com.annimon.stream.Stream;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
public class DialogVenditaFiltroAvanzatoView {
private final AlertDialog currentAlert;
private final Context currentContext;
private final RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone;
public BindableString deposito = new BindableString();
public BindableString idViaggio = new BindableString();
public BindableString numOrds = new BindableString();
public BindableString cliente = new BindableString();
public BindableString dataConsegna = new BindableString();
public BindableString terminiConsegna = new BindableString();
public BindableString agente = new BindableString();
public BindableString vettore = new BindableString();
public BindableString automezzo = new BindableString();
public BindableString paese = new BindableString();
public Date dataConsegnaDate;
private ArrayAdapter<String> arrayAdapterCodMdep;
private ArrayAdapter<String> arrayAdapterIdViaggio;
private ArrayAdapter<String> arrayAdapterNumOrds;
private ArrayAdapter<String> arrayAdapterCliente;
private ArrayAdapter<String> arrayAdapterTermCons;
private ArrayAdapter<String> arrayAdapterVettore;
private ArrayAdapter<String> arrayAdapterAgente;
private ArrayAdapter<String> arrayAdapterAutomezzo;
private ArrayAdapter<String> arrayAdapterPaese;
private DialogVenditaFiltroAvanzatoViewModel viewModel;
public static AlertDialog make(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzatoView(context, ordersList, null, onDismiss).currentAlert;
}
public static AlertDialog make(final Context context,
final List<OrdiniUscitaElencoDTO> ordersList,
DialogVenditaFiltroAvanzatoViewModel baseViewModel,
RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
return new DialogVenditaFiltroAvanzatoView(context, ordersList, baseViewModel, onDismiss).currentAlert;
}
private DialogVenditaFiltroAvanzatoView(final Context context, final List<OrdiniUscitaElencoDTO> ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgs<DialogVenditaFiltroAvanzatoViewModel> onDismiss) {
currentContext = context;
currentOnFilterDone = onDismiss;
viewModel = baseViewModel != null ? baseViewModel : new DialogVenditaFiltroAvanzatoViewModel();
viewModel.init(ordersList);
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
DialogVenditaFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false);
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context)
.setView(binding.getRoot());
binding.setView(this);
binding.setViewmodel(viewModel);
initViewModelNew(viewModel);
initView(binding, viewModel);
currentAlert = alertDialog.create();
currentAlert.setCanceledOnTouchOutside(false);
currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
binding.positiveBtn.setOnClickListener(view -> {
currentAlert.dismiss();
});
binding.neutralBtn.setOnClickListener(view -> {
resetAll();
});
currentAlert.setOnDismissListener(dialogInterface -> {
if(currentOnFilterDone != null) currentOnFilterDone.run(viewModel);
});
}
private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) {
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getInstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
// bindings.filledExposedDropdownDataCons.setOnFocusChangeListener((v, hasFocus) -> {
// bindings.filledExposedDropdownDataCons.callOnClick();
// });
bindings.filledExposedDropdownDataCons.setOnClickListener(view -> {
Calendar c = UtilityDate.getCalendarInstance();
if(dataConsegnaDate != null) {
c.setTime(dataConsegnaDate);
}
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(currentContext,
(view2, year, month, day) -> {
dataConsegnaDate = new GregorianCalendar(year, month, day).getTime();
dataConsegna.set(UtilityDate.formatDate(dataConsegnaDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}, mYear, mMonth, mDay);
datePickerDialog.show();
});
arrayAdapterCodMdep = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterCodMdep.addAll(getAvailableCodMdeps(false));
bindings.inputCodMdepNew.setVisibility(filtroOrdiniVendita.shoudShowCodMdepFilter() ? View.VISIBLE : View.GONE);
bindings.filledExposedDropdownCodMdep.setAdapter(arrayAdapterCodMdep);
arrayAdapterIdViaggio = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(false));
bindings.inputIdViaggio.setVisibility(filtroOrdiniVendita.shoudShowIdViaggioFilter() ? View.VISIBLE : View.GONE);
bindings.filledExposedDropdownIdViaggio.setAdapter(arrayAdapterIdViaggio);
arrayAdapterAgente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterAgente.addAll(getAvailableAgente(false));
bindings.inputAgente.setVisibility(filtroOrdiniVendita.shoudShowAgenteFilter() ? View.VISIBLE : View.GONE);
bindings.filledExposedDropdownAgente.setAdapter(arrayAdapterAgente);
arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterNumOrds.addAll(getAvailableNumOrds(false));
bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds);
bindings.filledExposedDropdownNumOrds.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
arrayAdapterCliente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterCliente.addAll(getAvailableCliente(false));
bindings.filledExposedDropdownCliente.setAdapter(arrayAdapterCliente);
arrayAdapterTermCons = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterTermCons.addAll(getAvailableTermCons(false));
bindings.filledExposedDropdownTermCons.setAdapter(arrayAdapterTermCons);
arrayAdapterVettore = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterVettore.addAll(getAvailableVettori(false));
bindings.filledExposedDropdownVettore.setAdapter(arrayAdapterVettore);
arrayAdapterAutomezzo = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(false));
bindings.filledExposedDropdownAutomezzo.setAdapter(arrayAdapterAutomezzo);
arrayAdapterPaese = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterPaese.addAll(getAvailablePaesi(false));
bindings.filledExposedDropdownPaese.setAdapter(arrayAdapterPaese);
refreshAll();
}
private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel) {
viewModel.applyAllTests();
BindableString.registerListener(idViaggio, value -> {
viewModel.setIDViaggioFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.registerListener(deposito, value -> {
viewModel.setDepositoFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.registerListener(numOrds, value -> {
viewModel.setNumOrdFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.registerListener(cliente, value -> {
viewModel.setClienteFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.registerListener(terminiConsegna, value -> {
viewModel.setTerminiConsegnaFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.registerListener(vettore, value -> {
viewModel.setVettoreFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.registerListener(automezzo, value -> {
viewModel.setAutomezzoFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
});
BindableString.resetListeners(dataConsegna);
BindableString.registerListener(dataConsegna, value -> {
viewModel.setDataConsegnaFilter(dataConsegnaDate);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
});
BindableString.resetListeners(agente);
BindableString.registerListener(agente, value -> {
viewModel.setAgenteFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterPaese, getAvailablePaesi(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
});
BindableString.resetListeners(paese);
BindableString.registerListener(paese, value -> {
viewModel.setPaeseFilter(value);
viewModel.applyAllTests();
refreshArrayAdapter(arrayAdapterCodMdep, getAvailableCodMdeps(true));
refreshArrayAdapter(arrayAdapterIdViaggio, getAvailableIdViaggio(true));
refreshArrayAdapter(arrayAdapterNumOrds, getAvailableNumOrds(true));
refreshArrayAdapter(arrayAdapterCliente, getAvailableCliente(true));
refreshArrayAdapter(arrayAdapterTermCons, getAvailableTermCons(true));
refreshArrayAdapter(arrayAdapterVettore, getAvailableVettori(true));
refreshArrayAdapter(arrayAdapterAgente, getAvailableAgente(true));
refreshArrayAdapter(arrayAdapterAutomezzo, getAvailableAutomezzi(true));
});
}
private void refreshArrayAdapter(ArrayAdapter<String> arrayAdapter, List<String> inputList) {
arrayAdapter.clear();
arrayAdapter.addAll(inputList);
arrayAdapter.notifyDataSetChanged();
}
private List<String> getAvailableIdViaggio(boolean skipRecalc) {
return Stream
.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.filter(x -> x.getIdViaggio() != null)
.sortBy(x -> -x.getIdViaggio())
.map(x -> x.getIdViaggio() != null ? x.getIdViaggio().toString() : null)
.distinct()
.toList();
}
private List<String> getAvailableAgente(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getNomeAgente)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableCodMdeps(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getCodMdep)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableCliente(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getRagSocOrd)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableNumOrds(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(x -> x.getNumOrd().toString())
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableTermCons(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getTermCons)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableVettori(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.filter(x -> x.getCodVvet() != null)
.map(x -> x.getCodVvet() + " - " + x.getDescrizioneVettore())
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailableAutomezzi(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getDescrizioneAuto)
.distinct()
.withoutNulls()
.sorted()
.toList();
}
private List<String> getAvailablePaesi(boolean skipRecalc) {
return Stream.of(Objects.requireNonNull(viewModel.getMutableFilteredOrderList().getValue()))
.map(OrdiniUscitaElencoDTO::getCitta)
.withoutNulls()
.distinct()
.sorted()
.toList();
}
public void refreshAll() {
deposito.refresh();
idViaggio.refresh();
numOrds.refresh();
cliente.refresh();
terminiConsegna.refresh();
vettore.refresh();
automezzo.refresh();
dataConsegna.refresh();
agente.refresh();
paese.refresh();
}
public void resetAll() {
deposito.set(null);
idViaggio.set(null);
numOrds.set(null);
cliente.set(null);
dataConsegna.set(null);
terminiConsegna.set(null);
vettore.set(null);
automezzo.set(null);
agente.set(null);
paese.set(null);
}
}

View File

@@ -1,22 +1,167 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs;
import java.util.Date;
import androidx.lifecycle.MutableLiveData;
import it.integry.integrywmsnative.core.di.BindableString;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
public class DialogVenditaFiltroAvanzatoViewModel {
public BindableString deposito = new BindableString();
public BindableString idViaggio = new BindableString();
public BindableString numOrds = new BindableString();
public BindableString cliente = new BindableString();
public BindableString dataConsegna = new BindableString();
public BindableString terminiConsegna = new BindableString();
public BindableString agente = new BindableString();
public BindableString vettore = new BindableString();
public BindableString automezzo = new BindableString();
public BindableString paese = new BindableString();
private Predicate<OrdiniUscitaElencoDTO> currentDepositoPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentIdViaggioPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentNumOrdsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentClientePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentDataConsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentTermConsPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentVettorePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentAgentePredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentAutomezzoPredicate = null;
private Predicate<OrdiniUscitaElencoDTO> currentPaesePredicate = null;
public Date dataConsegnaDate;
private List<OrdiniUscitaElencoDTO> initialOrderList;
private MutableLiveData<List<OrdiniUscitaElencoDTO>> currentFilteredOrderList = new MutableLiveData<>();
public void init(List<OrdiniUscitaElencoDTO> initialList) {
this.initialOrderList = initialList;
this.currentFilteredOrderList.setValue(this.initialOrderList);
}
public MutableLiveData<List<OrdiniUscitaElencoDTO>> getMutableFilteredOrderList() {
return this.currentFilteredOrderList;
}
public void setIDViaggioFilter(String idViaggio) {
if(UtilityString.isNullOrEmpty(idViaggio)) currentIdViaggioPredicate = null;
else {
String[] idViaggiSplitted = idViaggio.split("[,\\ ]");
try{
List<Integer> idViaggiInteger = Stream.of(idViaggiSplitted)
.filter(x -> !UtilityString.isNullOrEmpty(x))
.map(Integer::parseInt).toList();
currentIdViaggioPredicate = o -> idViaggiInteger.contains(o.getIdViaggio());
} catch (NumberFormatException ex) {
currentIdViaggioPredicate = null;
}
}
}
public void setDepositoFilter(String deposito) {
if(UtilityString.isNullOrEmpty(deposito)) currentDepositoPredicate = null;
else {
currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().equalsIgnoreCase(deposito);
}
}
public void setNumOrdFilter(String numOrds) {
if(UtilityString.isNullOrEmpty(numOrds)) currentNumOrdsPredicate = null;
else {
String[] numOrdsSplitted = numOrds.split("[,\\ ]");
try{
List<Integer> numOrdsInteger = Stream.of(numOrdsSplitted)
.filter(x -> !UtilityString.isNullOrEmpty(x))
.map(Integer::parseInt).toList();
currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd());
} catch (NumberFormatException ex) {
currentNumOrdsPredicate = null;
}
}
}
public void setClienteFilter(String cliente) {
if(UtilityString.isNullOrEmpty(cliente)) currentClientePredicate = null;
else {
currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(cliente.toLowerCase());
}
}
public void setTerminiConsegnaFilter(String terminiConsegna) {
if(UtilityString.isNullOrEmpty(terminiConsegna)) currentTermConsPredicate = null;
else {
currentTermConsPredicate = o -> !UtilityString.isNullOrEmpty(o.getTermCons()) && o.getTermCons().equalsIgnoreCase(terminiConsegna);
}
}
public void setVettoreFilter(String vettore) {
if(UtilityString.isNullOrEmpty(vettore)) currentVettorePredicate = null;
else {
currentVettorePredicate = o -> (o.getCodVvet() + " - " + o.getDescrizioneVettore()).equalsIgnoreCase(vettore);
}
}
public void setAutomezzoFilter(String automezzo) {
if(UtilityString.isNullOrEmpty(automezzo)) currentAutomezzoPredicate = null;
else {
currentAutomezzoPredicate = o -> !UtilityString.isNullOrEmpty(o.getDescrizioneAuto()) && (o.getDescrizioneAuto().toLowerCase().contains(automezzo) || o.getDescrizioneAuto().equalsIgnoreCase(automezzo));
}
}
public void setDataConsegnaFilter(Date dataConsegna) {
if(dataConsegna == null) currentDataConsPredicate = null;
else {
currentDataConsPredicate = o -> o.getDataConsD().equals(dataConsegna);
}
}
public void setAgenteFilter(String agente) {
if(UtilityString.isNullOrEmpty(agente)) currentAgentePredicate = null;
else {
currentAgentePredicate = o -> !UtilityString.isNullOrEmpty(o.getNomeAgente()) && (o.getNomeAgente().toLowerCase().contains(agente) || o.getNomeAgente().equalsIgnoreCase(agente));
}
}
public void setPaeseFilter(String paese) {
if(UtilityString.isNullOrEmpty(paese)) currentPaesePredicate = null;
else {
currentPaesePredicate = o -> !UtilityString.isNullOrEmpty(o.getCitta()) && (o.getCitta().toLowerCase().contains(paese) || o.getCitta().equalsIgnoreCase(paese));
}
}
public void applyAllTests() {
List<OrdiniUscitaElencoDTO> returnList = null;
if (currentNumOrdsPredicate == null &&
currentClientePredicate == null &&
currentDataConsPredicate == null &&
currentTermConsPredicate == null &&
currentVettorePredicate == null &&
currentAutomezzoPredicate == null &&
currentDepositoPredicate == null &&
currentIdViaggioPredicate == null &&
currentAgentePredicate == null &&
currentPaesePredicate == null
) {
returnList = this.initialOrderList;
} else {
Stream<OrdiniUscitaElencoDTO> tmpStream = Stream.of(this.initialOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) &&
(currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) &&
(currentAgentePredicate == null || (currentAgentePredicate.test(x))) &&
(currentPaesePredicate == null || (currentPaesePredicate.test(x)))
);
returnList = tmpStream.toList();
}
this.currentFilteredOrderList.setValue(returnList);
}
}

View File

@@ -13,7 +13,6 @@ import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableList;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.tfb.fbtoast.FBToast;
@@ -52,6 +51,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGExcep
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@@ -168,7 +168,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
mBindings.pickingLiberoMainList.setHasFixedSize(true);
mBindings.pickingLiberoMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBindings.pickingLiberoMainList.addItemDecoration(itemDecorator);
}
@@ -190,7 +190,6 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> {
@@ -238,30 +237,34 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onLUOpened(MtbColt mtbColt) {
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
getActivity().runOnUiThread(() -> {
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
initAdapter();
initAdapter();
thereIsAnOpenedUL.set(true);
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
thereIsAnOpenedUL.set(true);
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
}
mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
}
});
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
});
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
@Override
public void onLUClosed() {
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
destroyAdapter();
getActivity().runOnUiThread(() -> {
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
destroyAdapter();
thereIsAnyRowInUL.set(false);
thereIsAnOpenedUL.set(false);
thereIsAnyRowInUL.set(false);
thereIsAnOpenedUL.set(false);
});
}
@Override
@@ -276,15 +279,17 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onError(Exception ex) {
this.closeProgress();
getActivity().runOnUiThread(() -> {
this.closeProgress();
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
}
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
}
BarcodeManager.enable();
BarcodeManager.enable();
});
}
@Override
@@ -298,8 +303,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
DialogChooseArtsFromListaArts.make(getActivity(), mtbColrsToPick, onComplete, () -> {
onAbort.run();
BarcodeManager.enable();
})
.show();
});
}
@Override
@@ -358,7 +362,9 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onRowSaved() {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
getActivity().runOnUiThread(() -> {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
});
}

View File

@@ -181,15 +181,18 @@ public class PickingLiberoViewModel {
if (this.mFlagAskCliente) {
this.sendOnLoadingEnded();
this.sendLUClienteRequired((vtbDest, codJcom) -> {
this.sendOnLoadingStarted();
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, codJcom, onComplete);
}, onComplete);
}, () -> {
});
} else {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, null, onComplete);
}
}
private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, String codJcom, Runnable onComplete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields();
mtbColt.setGestione(mDefaultGestione)
@@ -211,7 +214,7 @@ public class PickingLiberoViewModel {
mtbColt.setCodVdes(vtbDest.getCodVdes());
}
if(!UtilityString.isNullOrEmpty(codJcom)) {
if (!UtilityString.isNullOrEmpty(codJcom)) {
mtbColt.setCodJcom(codJcom);
}
@@ -378,38 +381,29 @@ public class PickingLiberoViewModel {
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> {
for (int i = 0; i < mtbColrObservableField.size(); i++) {
MtbColr initialMtbColr = mtbColrObservableField.get(i);
new Thread(() -> {
mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> {
for (int i = 0; i < mtbColrObservableField.size(); i++) {
MtbColr initialMtbColr = mtbColrObservableField.get(i);
initialMtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo());
initialMtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo());
initialMtbColr.setRiga(value.getMtbColr().get(i).getRiga());
initialMtbColr.setRiga(value.getMtbColr().get(i).getRiga());
mCurrentMtbColt.getMtbColr().add(mtbColrObservableField.get(i));
}
// for (int j = 0; j < value.getMtbColr().size(); j++) {
// MtbColr savedMtbColr = value.getMtbColr().get(j);
// if (savedMtbColr.getCodMart().equals(initialMtbColr.getCodMart()) &&
// UtilityString.equalsIgnoreCase(savedMtbColr.getPartitaMag(), initialMtbColr.getPartitaMag()) &&
// UtilityString.equalsIgnoreCase(savedMtbColr.getCodCol(), initialMtbColr.getCodCol()) &&
// UtilityString.equalsIgnoreCase(savedMtbColr.getCodTagl(), initialMtbColr.getCodTagl()) &&
// savedMtbColr.getQtaCol().equals(initialMtbColr.getQtaCol()) &&
// savedMtbColr.getNumCnf().equals(initialMtbColr.getNumCnf())) {
// initialMtbColr.setRiga(savedMtbColr.getRiga());
// }
// }
this.sendOnRowSaved();
this.sendOnLoadingEnded();
mCurrentMtbColt.getMtbColr().add(mtbColrObservableField.get(i));
}
onComplete.run();
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
onComplete.run();
}, this::sendError);
}).start();
}
}, onComplete);
} else {

View File

@@ -63,7 +63,7 @@ public class PickingResiRESTConsumer {
.distinct()
.toList();
mArticoloRESTConsumer.getByCodMart(codMarts, arts -> {
mArticoloRESTConsumer.getByCodMarts(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (DtbDocr value : values) {

View File

@@ -262,7 +262,7 @@ public class ProdRecuperoMaterialeHelper {
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (HistoryVersamentoProdULDTO value : newUlList) {

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import dagger.Subcomponent;
@Subcomponent
public interface ProdRientroMerceComponent {
@Subcomponent.Factory
interface Factory {
ProdRientroMerceComponent create();
}
void inject(ProdRientroMerceFragment prodRientroMerceFragment);
}

View File

@@ -0,0 +1,161 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import android.content.Context;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceBinding;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailFragment;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_list.ProdRientroMerceOrderListFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ProdRientroMerceFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdRientroMerceViewModel.Listener, BottomSheetFragmentLUContentView.Listener, BottomSheetMtbColrEditView.Listener {
@Inject
ProdRientroMerceViewModel mViewModel;
private AppCompatTextView mAppBarTitle;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private FragmentProdRientroMerceBinding mBindings;
private ProdRientroMerceOrderListFragment mProdRientroMerceOrderListFragment;
private ProdRientroMerceOrderDetailFragment mProdRientroMerceOrderDetailFragment;
private ElevatedToolbar mToolbar;
public static ProdRientroMerceFragment newInstance() {
return new ProdRientroMerceFragment();
}
@Override
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mProdRientroMerceOrderListFragment = ProdRientroMerceOrderListFragment.newInstance(mToolbar);
mProdRientroMerceOrderDetailFragment = ProdRientroMerceOrderDetailFragment.newInstance();
mProdRientroMerceOrderListFragment.setOnItemSelectedRunnable(mProdRientroMerceOrderDetailFragment::setOrder);
mProdRientroMerceOrderDetailFragment.setOnMtbColtClicked(item -> {
mBindings.bottomSheetMtbColrEdit.setMtbColr(item.getMtbColr().get(0));
mBindings.bottomSheetMtbColrEdit.expand();
});
getChildFragmentManager()
.beginTransaction()
.replace(R.id.order_list_fragment, mProdRientroMerceOrderListFragment)
.replace(R.id.order_detail_fragment, mProdRientroMerceOrderDetailFragment)
.commit();
MainApplication.appComponent
.prodRientroMerceComponent()
.create()
.inject(this);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce, container, false);
mBindings.setLifecycleOwner(this);
mViewModel.setListener(this);
this.initBottomSheet();
return mBindings.getRoot();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState == null) {
this.mViewModel.getOrdiniLavorazioneAperti().observe(this.getViewLifecycleOwner(), this::ordersUpdated);
mViewModel.init();
}
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mAppBarTitle = titleText;
mAppBarTitle.setText(context.getText(R.string.rientro_merce_fragment_title).toString());
}
@Override
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onDestroyView() {
super.onDestroyView();
for (Runnable onPreDestroy :
mOnPreDestroyList) {
onPreDestroy.run();
}
}
@Override
public void onDataSaved() {
}
private void ordersUpdated(List<OrdineLavorazioneDTO> ordiniLavorazioneList) {
this.mProdRientroMerceOrderListFragment.pushOrderList(ordiniLavorazioneList);
}
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar;
}
private void initBottomSheet() {
mBindings.bottomSheetMtbColrEdit.setListener(this);
mBindings.bottomSheetMtbColrEdit.disableEditButton();
mBindings.bottomSheetMtbColrEdit.init(mBindings.bottomSheetMtbColrEdit, mBindings.bottomSheetMtbColrEditBackground);
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
}
@Override
public void onMtbColrDelete(MtbColr mtbColr) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> mProdRientroMerceOrderDetailFragment.deleteMtbColr(mtbColr),
() -> {}
).show(getActivity().getSupportFragmentManager(), "tag");
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
@Module(subcomponents = ProdRientroMerceComponent.class)
public class ProdRientroMerceModule {
@Provides
ProdRientroMerceViewModel providesProdRientroMerceViewModel(MesRESTConsumer mesRESTConsumer) {
return new ProdRientroMerceViewModel(mesRESTConsumer);
}
}

View File

@@ -0,0 +1,68 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdRientroMerceViewModel {
private final MutableLiveData<List<OrdineLavorazioneDTO>> mOrdiniLavorazioneAperti = new MutableLiveData<>();
private Listener mListener;
private final MesRESTConsumer mMesRESTConsumer;
@Inject
public ProdRientroMerceViewModel(MesRESTConsumer mesRESTConsumer) {
this.mMesRESTConsumer = mesRESTConsumer;
}
public void init() {
new Thread(this::sendOnLoadingStarted).start();
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex)));
}
public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() {
return mOrdiniLavorazioneAperti;
}
public void setListener(Listener listener) {
this.mListener = listener;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onDataSaved();
void onError(Exception ex);
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import dagger.Subcomponent;
@Subcomponent
public interface ProdRientroMerceOrderDetailComponent {
@Subcomponent.Factory
interface Factory {
ProdRientroMerceOrderDetailComponent create();
}
void inject(ProdRientroMerceOrderDetailFragment prodRientroMerceOrderDetailFragment);
}

View File

@@ -0,0 +1,277 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.MutableLiveData;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdSteps;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
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.DialogInputLUProdView;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ProdRientroMerceOrderDetailFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements ProdRientroMerceOrderDetailViewModel.Listener {
public final MutableLiveData<OrdineLavorazioneDTO> currentOrder = new MutableLiveData<>();
@Inject
ArticoloRESTConsumer mArticoloRESTConsumer;
@Inject
SystemRESTConsumer mSystemRESTConsumer;
@Inject
ProdRientroMerceOrderDetailViewModel mViewModel;
private FragmentProdRientroMerceOrderDetailBinding mBindings;
private ProdRientroMerceOrderDetailMtbColtListAdapter mAdapter;
private RunnableArgs<MtbColt> onMtbColtClicked;
public ProdRientroMerceOrderDetailFragment() {
// Required empty public constructor
}
public static ProdRientroMerceOrderDetailFragment newInstance() {
return new ProdRientroMerceOrderDetailFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce_order_detail, container, false);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
MainApplication.appComponent
.prodRientroMerceOrderDetailComponent()
.create()
.inject(this);
mViewModel.setListener(this);
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView();
return mBindings.getRoot();
}
private void initRecyclerView() {
mBindings.mainList.setNestedScrollingEnabled(false);
mBindings.mainList.setHasFixedSize(true);
mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity()));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBindings.mainList.addItemDecoration(itemDecorator);
mAdapter = new ProdRientroMerceOrderDetailMtbColtListAdapter(new ObservableArrayList<>());
mAdapter.setEmptyView(mBindings.mtbColtEmptyView);
mBindings.mainList.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(item -> {
if(this.onMtbColtClicked != null) this.onMtbColtClicked.run(item);
});
}
public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order);
mBindings.invalidateAll();
mAdapter.clearDataset();
mViewModel.setOrder(order);
}
private void refreshList(List<MtbColt> mtbColts) {
mAdapter.updateDataset(mtbColts);
}
@Override
public void onDataSaved() {
}
public void addULButtonClick() {
this.openProgress();
String codProd = this.currentOrder.getValue().getCodProd();
mArticoloRESTConsumer.getByCodMart(codProd, mtbAart -> {
String sql = "SELECT TOP 1 * " +
"FROM ( " +
" SELECT MAX(id_step) OVER ( PARTITION BY gestione, num_ord, data_ord) as last_step, " +
" * " +
" FROM dtb_ord_steps " +
" WHERE cod_jfas IS NOT NULL " +
" AND gestione = " + UtilityDB.valueToString(this.currentOrder.getValue().getGestione()) +
" AND num_ord = " + UtilityDB.valueToString(this.currentOrder.getValue().getNumOrd()) +
" AND data_ord = " + UtilityDB.valueToString(this.currentOrder.getValue().getDataOrdD()) +
" ) tmp " +
"WHERE data_iniz IS NOT NULL " +
" AND (data_fine IS NULL OR last_step = id_step) " +
"ORDER BY id_step DESC";
mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {}.getType(), dtbOrdStep -> {
this.closeProgress();
DialogInputLUProdDTO dialogInputLUProdDTO = new DialogInputLUProdDTO()
.setMtbAart(mtbAart)
.setNumCnf(this.currentOrder.getValue().getColliPedana())
.setQtaCnf(mtbAart.getQtaCnf())
.setQtaTot(this.currentOrder.getValue().getColliPedana().multiply(mtbAart.getQtaCnf()))
.setPartitaMag(this.currentOrder.getValue().getPartitaMag())
.setDataScad(this.currentOrder.getValue().getDataScadD())
.setCodJfasParent(this.currentOrder.getValue().getCodJfas())
.setCodTcol(this.currentOrder.getValue().getCodTcolUl())
.setSuggestedCodJfas(dtbOrdStep != null && dtbOrdStep.size() > 0 ? dtbOrdStep.get(0).getCodJfas() : null);
DialogInputLUProdView
.newInstance(dialogInputLUProdDTO, resultDTO -> {
ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setPesoCollo(resultDTO.getPesoCollo())
.setPesoNetto(resultDTO.getPesoNetto())
.setTaraPed(resultDTO.getTaraPed())
.setTaraCol(resultDTO.getTaraCol())
.setPesoLordo(resultDTO.getPesoLordo())
.setMtbTCol(resultDTO.getMtbTCol())
.setJtbFasi(resultDTO.getJtbFasi());
this.mViewModel.createLU(pickedQuantityDTO);
}, () -> {
this.closeProgress();
})
.show(getActivity().getSupportFragmentManager(), "tag");
}, this::onError);
}, this::onError);
}
public ProdRientroMerceOrderDetailFragment setOnMtbColtClicked(RunnableArgs<MtbColt> onMtbColtClicked) {
this.onMtbColtClicked = onMtbColtClicked;
return this;
}
public void editMtbColr(MtbColr mtbColr) {
}
public void deleteMtbColr(MtbColr mtbColr) {
MtbColt mtbColt = new MtbColt()
.setGestione(mtbColr.getGestione())
.setDataCollo(mtbColr.getDataColloS())
.setSerCollo(mtbColr.getSerCollo())
.setNumCollo(mtbColr.getNumCollo());
this.mViewModel.deleteLU(mtbColt);
}
public Drawable getOrderStatusIcon() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_play_circle_filled_24dp);
case PAUSA:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_circle_filled_24dp);
case PROGRAMMATO:
default:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_clock_circle_outline_24dp);
}
}
else
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_clock_circle_outline_24dp);
}
public Integer getOrderStatusIconTintColor() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getColor(getActivity(), R.color.green_800);
case PAUSA:
return ContextCompat.getColor(getActivity(), R.color.yellow_800);
case PROGRAMMATO:
default:
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
}
else
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
public Drawable getOrderStatusLabelBackgroud() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_success_text);
case PAUSA:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_warning_text);
case PROGRAMMATO:
default:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_primary_text);
}
}
else
return ContextCompat.getDrawable(getActivity(), R.drawable.label_primary_text);
}
public Integer getOrderStatusLabelTextColor() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getColor(getActivity(), R.color.green_800);
case PAUSA:
return ContextCompat.getColor(getActivity(), R.color.yellow_800);
case PROGRAMMATO:
default:
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
}
else
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.ProdRientroMerceOrderDetailRESTConsumer;
@Module(subcomponents = ProdRientroMerceOrderDetailComponent.class)
public class ProdRientroMerceOrderDetailModule {
@Provides
ProdRientroMerceOrderDetailRESTConsumer provideProdRientroMerceOrderDetailRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new ProdRientroMerceOrderDetailRESTConsumer(systemRESTConsumer);
}
@Provides
ProdRientroMerceOrderDetailViewModel provideProdRientroMerceOrderDetailViewModel(
ProdRientroMerceOrderDetailRESTConsumer prodRientroMerceOrderDetailRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new ProdRientroMerceOrderDetailViewModel(prodRientroMerceOrderDetailRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@@ -0,0 +1,89 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding;
public class ProdRientroMerceOrderDetailMtbColtListAdapter extends ExtendedRecyclerView<MtbColt, ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder> {
private OnItemClickListener mOnItemClickListener;
public ProdRientroMerceOrderDetailMtbColtListAdapter(ObservableArrayList<MtbColt> myDataset) {
super(myDataset);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
protected FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding mViewDataBinding;
public ViewHolder(FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
public void bind(MtbColt mtbColt) {
mViewDataBinding.setMtbColt(mtbColt);
mViewDataBinding.executePendingBindings();
}
}
@Override
public ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.fragment_prod_rientro_merce_order_detail__mtb_colt_item_model, parent, false);
return new ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder(viewDataBinding);
}
@Override
public void onBindViewHolder(ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder holder, int position) {
MtbColt mtbColt = mDataset.get(position);
holder.bind(mtbColt);
//Setting qty with unt_mis
// if(!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())){
// String text = UtilityNumber.decimalToString(mtbColr.getQtaCol());
//
// if(mtbColr.getMtbAart() != null) {
// text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : "";
// }
//
// holder.mViewDataBinding.qtaTextview.setText(text);
// } else {
// holder.mViewDataBinding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col));
// }
holder.mViewDataBinding.getRoot().setOnClickListener(x -> {
if(mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(holder.mViewDataBinding.getMtbColt());
}
});
holder.mViewDataBinding.executePendingBindings();
}
public ProdRientroMerceOrderDetailMtbColtListAdapter setOnItemClickListener(ProdRientroMerceOrderDetailMtbColtListAdapter.OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
return this;
}
public interface OnItemClickListener {
void onItemClick(MtbColt item);
}
}

View File

@@ -0,0 +1,91 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.model.MtbTCol;
public class ProdRientroMerceOrderDetailPickedQuantityDTO {
private BigDecimal numCnf;
private BigDecimal pesoCollo;
private BigDecimal pesoNetto;
private BigDecimal taraPed;
private BigDecimal taraCol;
private BigDecimal pesoLordo;
private MtbTCol mtbTCol;
private JtbFasi jtbFasi;
public BigDecimal getNumCnf() {
return numCnf;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getPesoCollo() {
return pesoCollo;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setPesoCollo(BigDecimal pesoCollo) {
this.pesoCollo = pesoCollo;
return this;
}
public BigDecimal getPesoNetto() {
return pesoNetto;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setPesoNetto(BigDecimal pesoNetto) {
this.pesoNetto = pesoNetto;
return this;
}
public BigDecimal getTaraPed() {
return taraPed;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setTaraPed(BigDecimal taraPed) {
this.taraPed = taraPed;
return this;
}
public BigDecimal getTaraCol() {
return taraCol;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setTaraCol(BigDecimal taraCol) {
this.taraCol = taraCol;
return this;
}
public BigDecimal getPesoLordo() {
return pesoLordo;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setPesoLordo(BigDecimal pesoLordo) {
this.pesoLordo = pesoLordo;
return this;
}
public MtbTCol getMtbTCol() {
return mtbTCol;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setMtbTCol(MtbTCol mtbTCol) {
this.mtbTCol = mtbTCol;
return this;
}
public JtbFasi getJtbFasi() {
return jtbFasi;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setJtbFasi(JtbFasi jtbFasi) {
this.jtbFasi = jtbFasi;
return this;
}
}

View File

@@ -0,0 +1,144 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.ProdRientroMerceOrderDetailRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdRientroMerceOrderDetailViewModel {
public MutableLiveData<List<MtbColt>> mtbColtsOfOrder = new MutableLiveData<>();
private OrdineLavorazioneDTO currentOrder;
private final ProdRientroMerceOrderDetailRESTConsumer mProdRientroMerceOrderDetailRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private Listener mListener;
@Inject
public ProdRientroMerceOrderDetailViewModel(ProdRientroMerceOrderDetailRESTConsumer prodRientroMerceOrderDetailRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mProdRientroMerceOrderDetailRESTConsumer = prodRientroMerceOrderDetailRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
public void setOrder(OrdineLavorazioneDTO order) {
this.currentOrder = order;
refreshMtbColts();
}
private void refreshMtbColts() {
this.sendOnLoadingStarted();
this.mtbColtsOfOrder.postValue(null);
this.mProdRientroMerceOrderDetailRESTConsumer.getMtbColtsOfOrder(currentOrder, mtbColts -> {
for (MtbColt mtbColt : mtbColts) {
mtbColt.getMtbColr().get(0).setDescrizione(currentOrder.getDescrizioneProd());
}
this.mtbColtsOfOrder.postValue(mtbColts);
this.sendOnLoadingEnded();
}, this::sendError);
}
public void createLU(ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO) {
new Thread(this::sendOnLoadingStarted).start();
new Thread(() -> {
ImportColliDaProduzioneRequestDTO importColliDaProduzioneRequestDTO =
new ImportColliDaProduzioneRequestDTO()
.setColliBancale(pickedQuantityDTO.getNumCnf().intValue())
.setQtaCnf(pickedQuantityDTO.getPesoCollo())
.setQtaCol(pickedQuantityDTO.getPesoNetto())
.setCodJcom(currentOrder.getCodJcom())
.setCodJfas(pickedQuantityDTO.getJtbFasi().getCodJfas())
.setCodMart(currentOrder.getCodProd())
.setCodTcol(pickedQuantityDTO.getMtbTCol().getCodTcol())
.setDataCollo(new Date())
.setDataOrd(currentOrder.getDataOrdD())
.setNumOrd(currentOrder.getNumOrd())
.setGestione(currentOrder.getGestione())
.setPartitaMag(currentOrder.getPartitaMag())
.setFornitore(currentOrder.getRagSocAnag())
.setPesoLordo(pickedQuantityDTO.getPesoLordo())
.setPesoNetto(pickedQuantityDTO.getPesoNetto());
this.mProdRientroMerceOrderDetailRESTConsumer.importColloDaProduzione(importColliDaProduzioneRequestDTO, mtbColtSaved -> {
synchronized (this.mtbColtsOfOrder) {
refreshMtbColts();
}
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public void deleteLU(MtbColt mtbColt) {
new Thread(this::sendOnLoadingStarted).start();
new Thread(() -> {
this.mProdRientroMerceOrderDetailRESTConsumer.deleteColloDaProduzione(mtbColt, () -> {
synchronized (this.mtbColtsOfOrder) {
Optional<MtbColt> mtbColtToRemove = Stream.of(this.mtbColtsOfOrder.getValue())
.filter(x -> x.getNumCollo().equals(mtbColt.getNumCollo()) &&
x.getSerCollo().equalsIgnoreCase(mtbColt.getSerCollo()) &&
x.getDataColloD().compareTo(mtbColt.getDataColloD()) == 0 &&
x.getGestione().equalsIgnoreCase(mtbColt.getGestione()))
.findFirst();
if (mtbColtToRemove.isPresent()) {
this.mtbColtsOfOrder.getValue().remove(mtbColtToRemove.get());
this.mtbColtsOfOrder.postValue(this.mtbColtsOfOrder.getValue());
}
}
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public void setListener(Listener listener) {
this.mListener = listener;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onDataSaved();
void onError(Exception ex);
}
}

View File

@@ -0,0 +1,155 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest;
import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import com.orhanobut.logger.Logger;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class ProdRientroMerceOrderDetailRESTConsumer extends _BaseRESTConsumer {
private final SystemRESTConsumer systemRESTConsumer;
@Inject
public ProdRientroMerceOrderDetailRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.systemRESTConsumer = systemRESTConsumer;
}
public void getMtbColtsOfOrder(OrdineLavorazioneDTO ordineLavorazioneDTO, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT mtb_colr.* " +
" FROM mtb_colr " +
" INNER JOIN mtb_colt mc ON mtb_colr.gestione = mc.gestione AND mtb_colr.data_collo = mc.data_collo AND " +
" mtb_colr.ser_collo = mc.ser_collo AND mtb_colr.num_collo = mc.num_collo " +
" WHERE " +
" mtb_colr.num_ord = " + UtilityDB.valueToString(ordineLavorazioneDTO.getNumOrd()) + " AND" +
" mtb_colr.data_ord = " + UtilityDB.valueToString(ordineLavorazioneDTO.getDataOrdD()) + " AND" +
" mtb_colr.gestione = 'L' AND" +
" mc.segno = 1";
Type typeOfObjectsList = new TypeToken<ArrayList<MtbColr>>() {
}.getType();
systemRESTConsumer.<List<MtbColr>>processSql(sql, typeOfObjectsList, mtbColrList -> {
if (mtbColrList != null && !mtbColrList.isEmpty()) {
List<HashMap<String, Object>> params = new ArrayList<>();
for (MtbColr mtbcolr :
mtbColrList) {
HashMap<String, Object> parm = new HashMap<>();
parm.put("data_collo", mtbcolr.getDataColloD());
parm.put("gestione", mtbcolr.getGestione());
parm.put("ser_collo", mtbcolr.getSerCollo());
parm.put("num_collo", mtbcolr.getNumCollo());
params.add(parm);
}
String mtbColtSql = "SELECT * FROM mtb_colt WHERE " + UtilityQuery.concatFieldListInWhereCond(params) + "";
Type mtbColtTypeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {
}.getType();
systemRESTConsumer.<List<MtbColt>>processSql(mtbColtSql, mtbColtTypeOfObjectsList, mtbColtList -> {
if(mtbColtList == null) mtbColtList = new ArrayList<>();
for (MtbColt mtbColt : mtbColtList) {
ObservableArrayList<MtbColr> mtbColrsRoAdd = new ObservableArrayList<>();
mtbColrsRoAdd.addAll(Stream.of(mtbColrList)
.filter(x -> x.getNumCollo().equals(mtbColt.getNumCollo()) &&
x.getDataColloD().compareTo(mtbColt.getDataColloD()) == 0 &&
x.getGestione().equals(mtbColt.getGestione()) &&
x.getSerCollo().equals(mtbColt.getSerCollo()))
.toList());
mtbColt.setMtbColr(mtbColrsRoAdd);
}
onComplete.run(mtbColtList);
}, onFailed);
} else {
onComplete.run(new ArrayList<>());
}
}, onFailed);
}
public void importColloDaProduzione(ImportColliDaProduzioneRequestDTO importColliDaProduzioneRequestDTO, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
ProdRientroMerceOrderDetailRESTConsumerService service = RESTBuilder.getService(ProdRientroMerceOrderDetailRESTConsumerService.class);
service.importColloDaProduzione(importColliDaProduzioneRequestDTO).enqueue(new Callback<ServiceRESTResponse<MtbColt>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbColt>> call, Response<ServiceRESTResponse<MtbColt>> response) {
analyzeAnswer(response, "importColliDaProduzione", mtbColt -> {
onComplete.run(mtbColt);
}, ex -> {
if(onFailed != null) onFailed.run(ex);
});
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbColt>> call, Throwable t) {
Logger.e(t, "importColliDaProduzione");
onFailed.run(new Exception(t));
}
});
}
public void deleteColloDaProduzione(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProdRientroMerceOrderDetailRESTConsumerService service = RESTBuilder.getService(ProdRientroMerceOrderDetailRESTConsumerService.class);
service.deleteColloDaProduzione(mtbColtToDelete).enqueue(new Callback<ServiceRESTResponse<Object>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "deleteColloDaProduzione", mtbColt -> {
onComplete.run();
}, ex -> {
if(onFailed != null) onFailed.run(ex);
});
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
Logger.e(t, "deleteColloDaProduzione");
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface ProdRientroMerceOrderDetailRESTConsumerService {
@POST("importColliDaProduzioneJson")
Call<ServiceRESTResponse<MtbColt>> importColliDaProduzione(@Body List<ImportColliDaProduzioneRequestDTO> importColliDaProduzioneRequestDTO);
@POST("importColloDaProduzioneJson")
Call<ServiceRESTResponse<MtbColt>> importColloDaProduzione(@Body ImportColliDaProduzioneRequestDTO importColloDaProduzioneRequestDTO);
@POST("cancellaColloDaProduzione")
Call<ServiceRESTResponse<Object>> deleteColloDaProduzione(@Body MtbColt mtbColtToDelete);
}

View File

@@ -0,0 +1,190 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto;
import java.math.BigDecimal;
import java.util.Date;
public class ImportColliDaProduzioneRequestDTO {
private String codMart;
private String codJcom;
private String partitaMag;
private BigDecimal pesoLordo;
private BigDecimal pesoNetto;
private String codTcol;
private String fornitore;
private int colliBancale;
private BigDecimal qtaCnf;
private Date dataCollo;
private Date dataOrd;
private int numOrd;
private String codJfas;
private String gestione;
private BigDecimal qtaCol;
private Integer rigaOrd;
private Integer numRisorse;
private String annotazioni;
public String getCodMart() {
return codMart;
}
public ImportColliDaProduzioneRequestDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getCodJcom() {
return codJcom;
}
public ImportColliDaProduzioneRequestDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ImportColliDaProduzioneRequestDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public BigDecimal getPesoLordo() {
return pesoLordo;
}
public ImportColliDaProduzioneRequestDTO setPesoLordo(BigDecimal pesoLordo) {
this.pesoLordo = pesoLordo;
return this;
}
public BigDecimal getPesoNetto() {
return pesoNetto;
}
public ImportColliDaProduzioneRequestDTO setPesoNetto(BigDecimal pesoNetto) {
this.pesoNetto = pesoNetto;
return this;
}
public String getCodTcol() {
return codTcol;
}
public ImportColliDaProduzioneRequestDTO setCodTcol(String codTcol) {
this.codTcol = codTcol;
return this;
}
public String getFornitore() {
return fornitore;
}
public ImportColliDaProduzioneRequestDTO setFornitore(String fornitore) {
this.fornitore = fornitore;
return this;
}
public int getColliBancale() {
return colliBancale;
}
public ImportColliDaProduzioneRequestDTO setColliBancale(int colliBancale) {
this.colliBancale = colliBancale;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public ImportColliDaProduzioneRequestDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public Date getDataCollo() {
return dataCollo;
}
public ImportColliDaProduzioneRequestDTO setDataCollo(Date dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public Date getDataOrd() {
return dataOrd;
}
public ImportColliDaProduzioneRequestDTO setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public int getNumOrd() {
return numOrd;
}
public ImportColliDaProduzioneRequestDTO setNumOrd(int numOrd) {
this.numOrd = numOrd;
return this;
}
public String getCodJfas() {
return codJfas;
}
public ImportColliDaProduzioneRequestDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getGestione() {
return gestione;
}
public ImportColliDaProduzioneRequestDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public BigDecimal getQtaCol() {
return qtaCol;
}
public ImportColliDaProduzioneRequestDTO setQtaCol(BigDecimal qtaCol) {
this.qtaCol = qtaCol;
return this;
}
public Integer getRigaOrd() {
return rigaOrd;
}
public ImportColliDaProduzioneRequestDTO setRigaOrd(Integer rigaOrd) {
this.rigaOrd = rigaOrd;
return this;
}
public Integer getNumRisorse() {
return numRisorse;
}
public ImportColliDaProduzioneRequestDTO setNumRisorse(Integer numRisorse) {
this.numRisorse = numRisorse;
return this;
}
public String getAnnotazioni() {
return annotazioni;
}
public ImportColliDaProduzioneRequestDTO setAnnotazioni(String annotazioni) {
this.annotazioni = annotazioni;
return this;
}
}

View File

@@ -0,0 +1,197 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list;
import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListListGroupModelBinding;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListListModelBinding;
public class ProdRientroMerceOrderListAdapter extends SectionedRecyclerViewAdapter<ProdRientroMerceOrderListAdapter.SubheaderHolder, ProdRientroMerceOrderListAdapter.SingleItemViewHolder> {
private final Context mContext;
private final List<ProdRientroMerceOrderListModel> mDataset = new ArrayList<>();
private View mEmptyView;
private RunnableArgs<String> mOnGroupItemClicked;
private RunnableArgs<ProdRientroMerceOrderListModel> mOnItemChecked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
FragmentProdRientroMerceOrderListListModelBinding mBinding;
SubheaderHolder(FragmentProdRientroMerceOrderListListModelBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
FragmentProdRientroMerceOrderListListGroupModelBinding mBinding;
SingleItemViewHolder(FragmentProdRientroMerceOrderListListGroupModelBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
public ProdRientroMerceOrderListAdapter(Context context, ObservableArrayList<ProdRientroMerceOrderListModel> mutableDataSet) {
this.mContext = context;
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
checkIfEmpty();
}
});
}
public ProdRientroMerceOrderListAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
this.mOnGroupItemClicked = onGroupItemClicked;
return this;
}
public ProdRientroMerceOrderListAdapter setOnItemChecked(RunnableArgs<ProdRientroMerceOrderListModel> onItemChecked) {
this.mOnItemChecked = onItemChecked;
return this;
}
public ProdRientroMerceOrderListAdapter setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}
private void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
@Override
public ProdRientroMerceOrderListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
FragmentProdRientroMerceOrderListListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_rientro_merce_order_list__list_model, parent, false);
return new ProdRientroMerceOrderListAdapter.SubheaderHolder(binding);
}
@Override
public ProdRientroMerceOrderListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
FragmentProdRientroMerceOrderListListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_rientro_merce_order_list__list_group_model, parent, false);
return new ProdRientroMerceOrderListAdapter.SingleItemViewHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(ProdRientroMerceOrderListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
ProdRientroMerceOrderListModel pickingObjectDTO = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.groupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getGroupTitle()) ? View.GONE : View.VISIBLE);
subheaderHolder.mBinding.groupTitle.setText(Html.fromHtml(pickingObjectDTO.getGroupTitle()));
subheaderHolder.mBinding.getRoot().setOnClickListener(new OnSingleClickListener() {
@Override
public void onSingleClick(View v) {
if (mOnGroupItemClicked != null)
mOnGroupItemClicked.run(pickingObjectDTO.getGroupTitle());
}
});
}
@Override
public void onBindItemViewHolder(final ProdRientroMerceOrderListAdapter.SingleItemViewHolder holder, final int position) {
ProdRientroMerceOrderListModel listModel = this.mDataset.get(position);
switch (listModel.getIcon()) {
case START:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_play_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.green_800), android.graphics.PorterDuff.Mode.SRC_IN);
break;
case PAUSE:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_pause_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.yellow_800), android.graphics.PorterDuff.Mode.SRC_IN);
break;
case SCHEDULED:
default:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_clock_circle_outline_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.blue_700), android.graphics.PorterDuff.Mode.SRC_IN);
break;
}
if (!UtilityString.isNullOrEmpty(listModel.getPreDescription())) {
holder.mBinding.preFirstRow.setText(Html.fromHtml(listModel.getPreDescription()));
holder.mBinding.preFirstRow.setVisibility(View.VISIBLE);
} else holder.mBinding.preFirstRow.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getDescription())) {
holder.mBinding.descrizione.setText(Html.fromHtml(listModel.getDescription()));
holder.mBinding.descrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.descrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getSubDescription())) {
holder.mBinding.subDescrizione.setText(Html.fromHtml(listModel.getSubDescription()));
holder.mBinding.subDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.subDescrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getRightDescription())) {
holder.mBinding.rightDescrizione.setText(Html.fromHtml(listModel.getRightDescription()));
holder.mBinding.rightDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightDescrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getRightSubDescription())) {
holder.mBinding.rightSubDescrizione.setText(Html.fromHtml(listModel.getRightSubDescription()));
holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE);
holder.mBinding.executePendingBindings();
holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemChecked != null) this.mOnItemChecked.run(listModel);
});
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
ProdRientroMerceOrderListModel compare1 = this.mDataset.get(position);
ProdRientroMerceOrderListModel compare2 = this.mDataset.get(position + 1);
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
return true;
}
@Override
public int getItemSize() {
return mDataset.size();
}
}

View File

@@ -0,0 +1,167 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.ComparatorCompat;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ProdRientroMerceOrderListFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ProdRientroMerceOrderListFragment extends Fragment {
private final ObservableArrayList<ProdRientroMerceOrderListModel> mOrdiniApertiMutableData = new ObservableArrayList<>();
private FragmentProdRientroMerceOrderListBinding mBindings = null;
private RunnableArgs<OrdineLavorazioneDTO> mOnItemSelectedRunnable;
private ElevatedToolbar mToolbar;
public ProdRientroMerceOrderListFragment() {
// Required empty public constructor
}
public static ProdRientroMerceOrderListFragment newInstance(ElevatedToolbar elevatedToolbar) {
Bundle args = new Bundle();
args.putString("toolbarInstance", DataCache.addItem(elevatedToolbar));
final ProdRientroMerceOrderListFragment prodRientroMerceOrderListFragment = new ProdRientroMerceOrderListFragment();
prodRientroMerceOrderListFragment.setArguments(args);
return prodRientroMerceOrderListFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mToolbar = DataCache.retrieveItem(getArguments().getString("toolbarInstance"));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_rientro_merce_order_list, container, false);
mBindings.setLifecycleOwner(this);
if(savedInstanceState == null) this.initRecyclerView();
return mBindings.getRoot();
}
private void initRecyclerView() {
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
this.mBindings.mainList.addItemDecoration(itemDecorator);
ProdRientroMerceOrderListAdapter prodRientroMerceOrderListAdapter = new ProdRientroMerceOrderListAdapter(getActivity(), mOrdiniApertiMutableData)
.setEmptyView(this.mBindings.emptyView)
.setOnItemChecked(x -> {
if(mOnItemSelectedRunnable != null) mOnItemSelectedRunnable.run(x.getOriginalModel());
});
this.mBindings.mainList.setAdapter(prodRientroMerceOrderListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity()));
this.mToolbar.setRecyclerView(mBindings.mainList);
}
public void pushOrderList(List<OrdineLavorazioneDTO> orderList) {
this.mOrdiniApertiMutableData.clear();
this.mOrdiniApertiMutableData.addAll(convertDataModelToListModel(orderList));
}
private List<ProdRientroMerceOrderListModel> convertDataModelToListModel(List<OrdineLavorazioneDTO> dataList) {
ComparatorCompat<OrdineLavorazioneDTO> comparator = ComparatorCompat
.comparing(OrdineLavorazioneDTO::getCodJfas)
.thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataInizProd() != null ? ordineLavorazioneDTO.getDataInizProd() : "zzzzzzzz"))
.thenComparing(ComparatorCompat.comparing(OrdineLavorazioneDTO::getNumOrd));
if(dataList == null) return new ArrayList<>();
List<ProdRientroMerceOrderListModel> notHiddenElements = Stream.of(dataList)
.sorted(comparator)
.map(x -> {
ProdRientroMerceOrderListModel listModel = new ProdRientroMerceOrderListModel();
switch (x.getStatoEnum()) {
case IN_CORSO:
listModel.setIcon(ProdRientroMerceOrderListModel.StatoIconEnum.START);
break;
case PAUSA:
listModel.setIcon(ProdRientroMerceOrderListModel.StatoIconEnum.PAUSE);
break;
case PROGRAMMATO:
default:
listModel.setIcon(ProdRientroMerceOrderListModel.StatoIconEnum.SCHEDULED);
break;
}
listModel.setGroupTitle(x.getCodJfas());
if(!UtilityString.isNullOrEmpty(x.getRagSocAnag()))
listModel.setPreDescription("Provenienza: " + x.getRagSocAnag());
String testataOrdString = "" + x.getNumOrd();
listModel.setDescription(testataOrdString);
listModel.setSubDescription(x.getDescrizioneProd());
listModel.setRightDescription(x.getCodJcom() != null ? (x.getDescCommessa() + " (" + x.getCodJcom() + ")") : "");
try {
listModel.setRightSubDescription(UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} catch (Exception ex) {
}
listModel.setOriginalModel(x);
return listModel;
})
.toList();
return notHiddenElements;
}
public ProdRientroMerceOrderListFragment setOnItemSelectedRunnable(RunnableArgs<OrdineLavorazioneDTO> onItemSelectedRunnable) {
this.mOnItemSelectedRunnable = onItemSelectedRunnable;
return this;
}
public RecyclerView getList() {
return mBindings.mainList;
}
}

View File

@@ -0,0 +1,108 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdRientroMerceOrderListModel implements Cloneable {
private String groupTitle;
private StatoIconEnum icon;
private String preDescription;
private String description;
private String subDescription;
private String rightDescription;
private String rightSubDescription;
private boolean hidden;
private OrdineLavorazioneDTO originalModel;
public String getGroupTitle() {
return groupTitle;
}
public ProdRientroMerceOrderListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public StatoIconEnum getIcon() {
return icon;
}
public ProdRientroMerceOrderListModel setIcon(StatoIconEnum icon) {
this.icon = icon;
return this;
}
public String getPreDescription() {
return preDescription;
}
public ProdRientroMerceOrderListModel setPreDescription(String preDescription) {
this.preDescription = preDescription;
return this;
}
public String getDescription() {
return description;
}
public ProdRientroMerceOrderListModel setDescription(String description) {
this.description = description;
return this;
}
public String getSubDescription() {
return subDescription;
}
public ProdRientroMerceOrderListModel setSubDescription(String subDescription) {
this.subDescription = subDescription;
return this;
}
public String getRightDescription() {
return rightDescription;
}
public ProdRientroMerceOrderListModel setRightDescription(String rightDescription) {
this.rightDescription = rightDescription;
return this;
}
public String getRightSubDescription() {
return rightSubDescription;
}
public ProdRientroMerceOrderListModel setRightSubDescription(String rightSubDescription) {
this.rightSubDescription = rightSubDescription;
return this;
}
public boolean isHidden() {
return hidden;
}
public ProdRientroMerceOrderListModel setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
public OrdineLavorazioneDTO getOriginalModel() {
return originalModel;
}
public ProdRientroMerceOrderListModel setOriginalModel(OrdineLavorazioneDTO originalModel) {
this.originalModel = originalModel;
return this;
}
public static enum StatoIconEnum {
PAUSE,
START,
SCHEDULED
}
}

View File

@@ -152,7 +152,7 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter<ChooseOrd
OrdineLavorazioneDTO ordine = checkableOrdineLavoro.getItem().getOrdineLav();
checkableOrdineLavoro.setTestata(UtilityString.formatHtmlStringFromResId(R.string.ord_testata, String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDateOrd(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)).toString());
checkableOrdineLavoro.setTestata(UtilityString.formatHtmlStringFromResId(R.string.ord_testata, String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)).toString());
checkableOrdineLavoro.getChecked().resetOnPropertyChangedCallback();
checkableOrdineLavoro.getChecked().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {

View File

@@ -1,12 +1,9 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableFloat;
import it.integry.integrywmsnative.core.exception.DateNotRecognizedException;
import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class OrdineLavorazioneDTO {
@@ -77,6 +74,8 @@ public class OrdineLavorazioneDTO {
private String codAnag;
private String ragSocAnag;
private String rifOrd;
private String codVdes;
@@ -136,8 +135,8 @@ public class OrdineLavorazioneDTO {
public String getDataOrd() {
return dataOrd;
}
public Date getDateOrd() throws ParseException, TimeNotRecognizedException, DateNotRecognizedException {
return UtilityDate.recognizeDate(dataOrd);
public Date getDataOrdD() {
return UtilityDate.recognizeDateWithExceptionHandler(dataOrd);
}
public void setDataOrd(String dataOrd) {
@@ -196,6 +195,10 @@ public class OrdineLavorazioneDTO {
return dataIniz;
}
public Date getDataInizD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataIniz());
}
public void setDataIniz(String dataIniz) {
this.dataIniz = dataIniz;
}
@@ -204,6 +207,10 @@ public class OrdineLavorazioneDTO {
return dataFine;
}
public Date getDataFineD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataFine());
}
public void setDataFine(String dataFine) {
this.dataFine = dataFine;
}
@@ -276,6 +283,10 @@ public class OrdineLavorazioneDTO {
return dataScad;
}
public Date getDataScadD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataScad());
}
public void setDataScad(String dataScad) {
this.dataScad = dataScad;
}
@@ -308,6 +319,10 @@ public class OrdineLavorazioneDTO {
return dataInizProd;
}
public Date getDataInizProdD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataInizProd());
}
public void setDataInizProd(String dataInizProd) {
this.dataInizProd = dataInizProd;
}
@@ -328,6 +343,14 @@ public class OrdineLavorazioneDTO {
this.codAnag = codAnag;
}
public String getRagSocAnag() {
return ragSocAnag;
}
public void setRagSocAnag(String ragSocAnag) {
this.ragSocAnag = ragSocAnag;
}
public String getRifOrd() {
return rifOrd;
}
@@ -463,4 +486,8 @@ public class OrdineLavorazioneDTO {
public void setNumCnfVersamento(float numCnfVersamento) {
this.numCnfVersamento.set(numCnfVersamento);
}
public OrdineLavorazioneStatoEnum getStatoEnum() {
return OrdineLavorazioneStatoEnum.fromString(getStato());
}
}

View File

@@ -0,0 +1,26 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
public enum OrdineLavorazioneStatoEnum {
IN_CORSO("IN CORSO"),
PROGRAMMATO("PROGRAMMATO"),
PAUSA("IN PAUSA");
private String text;
OrdineLavorazioneStatoEnum(String text) {
this.text = text;
}
public String getText() {
return this.text;
}
public static OrdineLavorazioneStatoEnum fromString(String text) {
for (OrdineLavorazioneStatoEnum b : OrdineLavorazioneStatoEnum.values()) {
if (b.text.equalsIgnoreCase(text)) return b;
}
return null;
}
}

View File

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

View File

@@ -15,7 +15,6 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList;
@@ -46,6 +45,7 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.core.OrdineAcquistoPv
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLisA;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@@ -169,7 +169,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction);

View File

@@ -17,7 +17,6 @@ import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.android.material.textfield.TextInputLayout;
@@ -57,13 +56,14 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNo;
@@ -153,7 +153,7 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
mBinding.rettificaGiacenzeMainList.setHasFixedSize(true);
mBinding.rettificaGiacenzeMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator);
}

View File

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

View File

@@ -178,7 +178,7 @@ public class SpedizioneViewModel {
.map(SitArtOrdDTO::getCodMart)
.toList();
this.mArticoloRESTConsumer.getByCodMart(codMarts, listMtbAarts -> {
this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> {
MtbAart mtbAart = null;
@@ -395,6 +395,11 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onLUPositionChangeRequest(onComplete);
}
private void sendBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
if (this.mListener != null)
mListener.onBatchLotSelectionRequest(availableBatchLots, onComplete);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
//Se non c'è una UL aperta
@@ -758,6 +763,70 @@ public class SpedizioneViewModel {
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, boolean canPartitaMagBeChanged) {
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
if (pickingObjectDTO.getTempPickData() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null) {
List<MtbColr> scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr();
List<MtbPartitaMag> availableBatchLot = Stream.of(scannedMtbColrs)
.filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && (
x.getPartitaMag() == null || UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD())
))
.distinctBy(MtbColr::getPartitaMag)
.map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag())
.toList();
if(availableBatchLot.size() > 1) {
this.sendOnLoadingStarted();
List<MtbPartitaMag> tmp = new ArrayList<>();
if(Stream.of(availableBatchLot).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) {
tmp.addAll(
Stream.of(availableBatchLot)
.filter(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()) && UtilityDate.getDateInstance().before(x.getDataScadD()))
.sortBy(MtbPartitaMag::getDataScadD)
.toList());
}
if(Stream.of(availableBatchLot).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) {
tmp.addAll(
Stream.of(availableBatchLot)
.filter(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))
.sortBy(MtbPartitaMag::getPartitaMag)
.toList());
}
this.sendBatchLotSelectionRequest(tmp, selected -> {
this.sendOnLoadingEnded();
if(selected != null) {
MtbColr scannedMtbColr = Stream.of(pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr())
.filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) &&
((x.getPartitaMag() != null && selected.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(selected.getPartitaMag())) ||
(x.getPartitaMag() == null && selected.getPartitaMag() == null)))
.toList()
.get(0);
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, scannedMtbColr, canPartitaMagBeChanged);
}
});
} else {
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, scannedMtbColrs.get(0), canPartitaMagBeChanged);
}
} else {
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, null, canPartitaMagBeChanged);
}
}
private void dispatchOrdineRowOnPostBatchLotSelection(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, MtbColr scannedMtbColr, boolean canPartitaMagBeChanged) {
BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd();
@@ -791,21 +860,13 @@ public class SpedizioneViewModel {
Date dataScad = null;
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr scannedMtbColr = pickingObjectDTO.getTempPickData() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (refMtbColt == null && pickingObjectDTO.getMtbColts() != null && pickingObjectDTO.getMtbColts().size() == 1) {
refMtbColt = pickingObjectDTO.getMtbColts().get(0);
}
MtbColr refMtbColr = null;
if (refMtbColt != null && refMtbColt.getMtbColr().size() > 0) {
if (scannedMtbColr != null && refMtbColt != null && refMtbColt.getMtbColr().size() > 0) {
Optional<MtbColr> optionalMtbColr = Stream.of(refMtbColt.getMtbColr())
.filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) &&
@@ -933,7 +994,6 @@ public class SpedizioneViewModel {
});
}
public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) {
PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
@@ -1460,7 +1520,7 @@ public class SpedizioneViewModel {
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
if(mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
if (mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
} else {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
@@ -1540,7 +1600,7 @@ public class SpedizioneViewModel {
} else {
distribuisciLU(mtbColts -> {
if(this.mIsNewLU) {
if (this.mIsNewLU) {
this.sendLUPositionChangeRequest((shouldChangePosition, mtbDepoPosizione) -> {
if (shouldChangePosition) {
@@ -1702,7 +1762,7 @@ public class SpedizioneViewModel {
this.mCurrentMtbColt = null;
if(mEnableQuantityReset) {
if (mEnableQuantityReset) {
for (PickingObjectDTO pickingObjectDTO : mPickingList.getValue()) {
List<MtbColr> withdrawMtbColrList = pickingObjectDTO.getWithdrawMtbColrs();
@@ -1864,6 +1924,8 @@ public class SpedizioneViewModel {
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);
void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete);
}
}

View File

@@ -103,7 +103,7 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
dispatchConsegne();
});
this.mViewModel.getDocuments().observe(this, this::refreshList);
this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
openFilterDialog();
}

View File

@@ -188,7 +188,7 @@ public class UltimeConsegneClienteRESTConsumer {
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> {
if (arts != null && arts.size() > 0) {
for (DtbDocr value : values) {

View File

@@ -194,16 +194,15 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if(dto.isSelected()) {
if (dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
if (selectedOrders != null && selectedOrders.size() > 0) {
mBindings.mainFab.show();
}
else {
} else {
mBindings.mainFab.hide();
}
}
@@ -285,8 +284,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
filterItems(mtbAarts);
}, null)
.show();
}, null);
}
}

View File

@@ -60,7 +60,6 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -101,7 +100,6 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
}
public void openLU() {
DialogScanOrCreateLUView.newInstance(true, false, true, false, (mtbColt, created) -> {
if (mtbColt == null) {
@@ -149,36 +147,30 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskLivelloPosizione.make(getActivity(), posizione, false, onComplete, this::onError);
this.getActivity().runOnUiThread(() -> {
DialogAskLivelloPosizione.make(getActivity(), posizione, false, onComplete, this::onError);
});
}
@Override
public void onSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete) {
DialogSimpleMessageView.makeWarningDialog(Html.fromHtml("Stai spostando una UL dal deposito <b>" + sourceCodMdep + "</b> al deposito <b>" + destinationCodMdep + "</b>"),
null,
() -> onComplete.run(true),
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");
this.getActivity().runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(Html.fromHtml("Stai spostando una UL dal deposito <b>" + sourceCodMdep + "</b> al deposito <b>" + destinationCodMdep + "</b>"),
null,
() -> onComplete.run(true),
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");
});
}
@Override
public void onArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
DialogChooseArtsFromListaArts.make(getActivity(), mtbColrList, onComplete, onAbort).show();
this.getActivity().runOnUiThread(() -> {
DialogChooseArtsFromListaArts.make(getActivity(), mtbColrList, onComplete, onAbort);
});
}
@Override
@@ -208,33 +200,30 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
.setCanPartitaMagBeChanged(canBatchLotBeChanged)
.setCanLUBeClosed(false);
DialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
this.getActivity().runOnUiThread(() -> {
DialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
onComplete.run(pickedQuantityDTO);
onComplete.run(pickedQuantityDTO);
}, this::onLoadingEnded)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onDataSaved() {
DialogCommon.showDataSaved(getActivity(), () -> {
((IPoppableActivity) getActivity()).pop();
}, this::onLoadingEnded)
.show(getActivity().getSupportFragmentManager(), "tag");
});
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
public void onDataSaved() {
this.getActivity().runOnUiThread(() -> {
DialogCommon.showDataSaved(getActivity(), () -> {
((IPoppableActivity) getActivity()).pop();
});
});
}
}

View File

@@ -55,15 +55,17 @@ public class VersamentoMerceViewModel {
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO, false)) {
this.executeEtichettaPosizione(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), true, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else {
onComplete.run();
}
new Thread(() -> {
if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO, false)) {
this.executeEtichettaPosizione(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), true, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else {
onComplete.run();
}
}).start();
}

View File

@@ -1,19 +1,15 @@
package it.integry.integrywmsnative.ui;
import android.animation.ObjectAnimator;
import android.animation.StateListAnimator;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ScrollView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.cardview.widget.CardView;
import androidx.core.view.ViewCompat;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.RecyclerView;
@@ -73,12 +69,26 @@ public class ElevatedToolbar extends CardView {
}
};
View.OnScrollChangeListener recyclerViewScrollChangeListener = (view, i, i1, i2, i3) -> {
if(!view.canScrollVertically(-1)) {
resetElevation();
} else {
setCardElevation(CARD_ELEVATION);
}
};
public void setRecyclerView(RecyclerView recyclerView) {
this.mRecyclerView = recyclerView;
resetElevation();
if(mRecyclerView != null) {
mRecyclerView.setOnScrollListener(recyclerViewScrollListener);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// mRecyclerView.addOnScrollListener(recyclerViewScrollChangeListener);
// } else {
mRecyclerView.addOnScrollListener(recyclerViewScrollListener);
// }
} else {
Log.e("ElevatedToolbar", "RecyclerView is NULL");

View File

@@ -0,0 +1,165 @@
package it.integry.integrywmsnative.ui;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {
public static final int HORIZONTAL = LinearLayout.HORIZONTAL;
public static final int VERTICAL = LinearLayout.VERTICAL;
private static final String TAG = "DividerItem";
private static final int[] ATTRS = new int[]{ android.R.attr.listDivider };
private Drawable mDivider;
/**
* Current orientation. Either {@link #HORIZONTAL} or {@link #VERTICAL}.
*/
private int mOrientation;
private final Rect mBounds = new Rect();
/**
* Creates a divider {@link RecyclerView.ItemDecoration} that can be used with a
* {@link LinearLayoutManager}.
*
* @param context Current context, it will be used to access resources.
* @param orientation Divider orientation. Should be {@link #HORIZONTAL} or {@link #VERTICAL}.
*/
public SimpleDividerItemDecoration(Context context, int orientation) {
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
if (mDivider == null) {
Log.w(TAG, "@android:attr/listDivider was not set in the theme used for this "
+ "DividerItemDecoration. Please set that attribute all call setDrawable()");
}
a.recycle();
setOrientation(orientation);
}
/**
* Sets the orientation for this divider. This should be called if
* {@link RecyclerView.LayoutManager} changes orientation.
*
* @param orientation {@link #HORIZONTAL} or {@link #VERTICAL}
*/
public void setOrientation(int orientation) {
if (orientation != HORIZONTAL && orientation != VERTICAL) {
throw new IllegalArgumentException(
"Invalid orientation. It should be either HORIZONTAL or VERTICAL");
}
mOrientation = orientation;
}
/**
* Sets the {@link Drawable} for this divider.
*
* @param drawable Drawable that should be used as a divider.
*/
public void setDrawable(@NonNull Drawable drawable) {
if (drawable == null) {
throw new IllegalArgumentException("Drawable cannot be null.");
}
mDivider = drawable;
}
/**
* @return the {@link Drawable} for this divider.
*/
@Nullable
public Drawable getDrawable() {
return mDivider;
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
if (parent.getLayoutManager() == null || mDivider == null) {
return;
}
if (mOrientation == VERTICAL) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
}
private void drawVertical(Canvas canvas, RecyclerView parent) {
canvas.save();
final int left;
final int right;
//noinspection AndroidLintNewApi - NewApi lint fails to handle overrides.
if (parent.getClipToPadding()) {
left = parent.getPaddingLeft();
right = parent.getWidth() - parent.getPaddingRight();
canvas.clipRect(left, parent.getPaddingTop(), right,
parent.getHeight() - parent.getPaddingBottom());
} else {
left = 0;
right = parent.getWidth();
}
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
final View child = parent.getChildAt(i);
parent.getDecoratedBoundsWithMargins(child, mBounds);
final int bottom = mBounds.bottom + Math.round(child.getTranslationY());
final int top = bottom - mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
canvas.restore();
}
private void drawHorizontal(Canvas canvas, RecyclerView parent) {
canvas.save();
final int top;
final int bottom;
//noinspection AndroidLintNewApi - NewApi lint fails to handle overrides.
if (parent.getClipToPadding()) {
top = parent.getPaddingTop();
bottom = parent.getHeight() - parent.getPaddingBottom();
canvas.clipRect(parent.getPaddingLeft(), top,
parent.getWidth() - parent.getPaddingRight(), bottom);
} else {
top = 0;
bottom = parent.getHeight();
}
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
final View child = parent.getChildAt(i);
parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds);
final int right = mBounds.right + Math.round(child.getTranslationX());
final int left = right - mDivider.getIntrinsicWidth();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
canvas.restore();
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
if (mDivider == null) {
outRect.set(0, 0, 0, 0);
return;
}
if (mOrientation == VERTICAL) {
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
} else {
outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
}
}
}

View File

@@ -101,10 +101,6 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie
mBinding.textviewArtDescription.setText(mContext.getResources().getQuantityString(R.plurals.articles, mtbColrs.size()));
}
public void collapseMtbColrActionSheet(){
this.mBinding.bottomSheetMtbColrEdit.collapse();
}
public BottomSheetFragmentLUContentView setListener(Listener listener) {
this.mListener = listener;
return this;

View File

@@ -5,6 +5,7 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.MtbColr;
@@ -18,6 +19,8 @@ public class BottomSheetMtbColrEditView extends BottomSheetFragmentBaseView {
private BottomSheetMtbColrEditBinding mBinding;
private BottomSheetMtbColrEditViewModel mViewModel;
public ObservableField<Boolean> enabledEditButton = new ObservableField<>(true);
public ObservableField<Boolean> enabledDeleteButton = new ObservableField<>(true);
private Listener mListener;
@@ -75,6 +78,22 @@ public class BottomSheetMtbColrEditView extends BottomSheetFragmentBaseView {
}
public void enableEditButton() {
this.enabledEditButton.set(true);
}
public void disableEditButton() {
this.enabledEditButton.set(false);
}
public void enableDeleteButton() {
this.enabledDeleteButton.set(true);
}
public void disableDeleteButton() {
this.enabledDeleteButton.set(false);
}
public BottomSheetMtbColrEditViewModel getViewModelInstance() {
return this.mViewModel;

View File

@@ -11,6 +11,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.textfield.TextInputLayout;
import it.integry.integrywmsnative.R;
@@ -35,8 +37,10 @@ public class DialogAskLivelloPosizione {
private boolean completedFLow = false;
public static void make(Context context, MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
new DialogAskLivelloPosizione(context, mtbDepoPosizione, canAbort, onComplete, onFailed).mDialog.show();
public static void make(FragmentActivity activity, MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
activity.runOnUiThread(() -> {
new DialogAskLivelloPosizione(activity, mtbDepoPosizione, canAbort, onComplete, onFailed).mDialog.show();
});
}

View File

@@ -96,6 +96,7 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position != lastPage) {
if(lastPage != -1) mDatasetViews.get(lastPage).getValue().onDismiss();
viewPager.onPageChanged(mDatasetViews.get(position).getKey().getRoot());
mDatasetViews.get(position).getValue().onShow();
lastPage = position;
@@ -111,4 +112,8 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O
public void onPageScrollStateChanged(int state) {
}
public void onDismiss() {
if(lastPage != -1) mDatasetViews.get(lastPage).getValue().onDismiss();
}
}

View File

@@ -133,6 +133,7 @@ public class DialogAskClienteView extends BaseDialogFragment {
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
mAdapter.onDismiss();
if(!mIsClienteSelected) {
this.mOnAbort.run();
}

View File

@@ -66,8 +66,8 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
"WHERE vtb_clie.flag_stato = 'A' " +
"ORDER BY rag_soc";
Type typeOfObjectsList = new TypeToken<ArrayList<HashMap<String, Object>>>() {
}.getType();
Type typeOfObjectsList = new TypeToken<ArrayList<HashMap<String, Object>>>() { }.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<HashMap<String, Object>>>() {
@Override
public void onSuccess(ArrayList<HashMap<String, Object>> value) {
@@ -106,6 +106,11 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
}
@Override
public void onDismiss() {
BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
}
@Override
public void setOnConfirmClickListener(Runnable onConfirm) {
this.mBinding.buttonYes.setOnClickListener(v -> {

View File

@@ -71,6 +71,10 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
});
}
@Override
public void onDismiss() {
}
@Override
public void setOnConfirmClickListener(Runnable onConfirm) {
this.mOnConfirm = onConfirm;

View File

@@ -12,6 +12,8 @@ public interface IDialogAskClienteViewModel {
void onShow();
void onDismiss();
void setOnConfirmClickListener(Runnable onConfirm);
void setOnAbortClickListener(Runnable onAbort);

View File

@@ -161,7 +161,7 @@ public class DialogSimpleMessageView extends BaseDialogFragment {
String currentKey = mHashmapContent.keySet().toArray()[i].toString();
String currentValue = mHashmapContent.get(currentKey);
RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, null);
RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, hashMapContainer);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue);

View File

@@ -5,7 +5,6 @@ import android.view.View;
import androidx.core.content.ContextCompat;
import androidx.databinding.ViewDataBinding;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List;
@@ -14,9 +13,8 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogBasketLuBinding;
import it.integry.integrywmsnative.databinding.DialogBasketLuPage1Binding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.DialogBasketLU_BaseViewModel;
import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel;
@@ -82,7 +80,7 @@ public class DialogBasketLU_Page1_ViewModel extends DialogBasketLU_BaseViewModel
mBinding.dialogBasketLuMainList.setHasFixedSize(true);
mBinding.dialogBasketLuMainList.setLayoutManager(new LinearLayoutManager(mContext));
DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mBinding.dialogBasketLuMainList.addItemDecoration(itemDecorator);

View File

@@ -5,7 +5,6 @@ import android.view.View;
import androidx.core.content.ContextCompat;
import androidx.databinding.ViewDataBinding;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List;
@@ -15,6 +14,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.DialogBasketLuPage2Binding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.DialogBasketLU_BaseViewModel;
import it.integry.integrywmsnative.view.dialogs.basket_lu.interfaces.IDialogBasketLUViewModel;
@@ -79,7 +79,7 @@ public class DialogBasketLU_Page2_ViewModel extends DialogBasketLU_BaseViewModel
mBinding.dialogBasketLuMtbColrList.setHasFixedSize(true);
mBinding.dialogBasketLuMtbColrList.setLayoutManager(new LinearLayoutManager(mContext));
DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mBinding.dialogBasketLuMtbColrList.addItemDecoration(itemDecorator);

View File

@@ -1,146 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.camera_barcode_reader;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.DialogFragment;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.kroegerama.kaiteki.bcode.BarcodeResultListener;
import com.orhanobut.logger.Logger;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.barcode_base_android_library.model.BarcodeType;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogCameraBarcodeReaderBinding;
public class DialogCameraBarcodeReader extends DialogFragment implements BarcodeResultListener {
private Context mContext;
private DialogCameraBarcodeReaderBinding mBindings;
private final RunnableArgs<BarcodeScanDTO> onComplete;
public static DialogCameraBarcodeReader newInstance(@NonNull Context context, @NonNull final RunnableArgs<BarcodeScanDTO> onComplete) {
return new DialogCameraBarcodeReader(context, onComplete);
}
private DialogCameraBarcodeReader(@NonNull Context context, @NonNull final RunnableArgs<BarcodeScanDTO> onComplete){
this.mContext = context;
this.onComplete = onComplete;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_camera_barcode_reader, container, false);
getDialog().setCanceledOnTouchOutside(false);
getDialog().setCancelable(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
this.initBarcodeView();
mBindings.buttonConfirm.setOnClickListener(v -> {
dismiss();
});
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
UtilityDialog.setTo95PercentWidth(mContext, this);
}
@Override
public void onStop() {
super.onStop();
this.mBindings.bcode.unbind();
}
private void initBarcodeView() {
List<BarcodeFormat> availableBarcodeFormats = new ArrayList<>();
availableBarcodeFormats.add(BarcodeFormat.QR_CODE);
availableBarcodeFormats.add(BarcodeFormat.CODE_128);
availableBarcodeFormats.add(BarcodeFormat.UPC_E);
availableBarcodeFormats.add(BarcodeFormat.CODABAR);
availableBarcodeFormats.add(BarcodeFormat.EAN_8);
availableBarcodeFormats.add(BarcodeFormat.EAN_13);
availableBarcodeFormats.add(BarcodeFormat.ITF);
availableBarcodeFormats.add(BarcodeFormat.UPC_A);
mBindings.bcode.setFormats(availableBarcodeFormats);
mBindings.bcode.setBarcodeInverted(false);
mBindings.bcode.setBarcodeResultListener(this);
mBindings.bcode.bindToLifecycle(this);
}
@Override
public boolean onBarcodeResult(@NotNull Result result) {
BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO()
.setByteValue(result.getRawBytes())
.setStringValue(result.getText());
BarcodeType type = null;
switch (result.getBarcodeFormat()) {
case CODE_128:
type = BarcodeType.CODE128;
break;
case CODE_39:
type = BarcodeType.CODE39;
break;
case EAN_13:
type = BarcodeType.EAN13;
break;
case EAN_8:
type = BarcodeType.EAN8;
break;
case UPC_A:
type = BarcodeType.UPCA;
break;
case UPC_E:
type = BarcodeType.UPCE;
break;
default:
Logger.e("Barcode type " + result.getBarcodeFormat().toString() + " was not mapped in DialogCameraBarcodeReader.java");
type = null;
break;
}
barcodeScanDTO.setType(type);
this.dismiss();
this.onComplete.run(barcodeScanDTO);
return true;
}
@Override
public void onBarcodeScanCancelled() {
}
}

View File

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

View File

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

View File

@@ -2,30 +2,33 @@ package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts;
import android.app.Dialog;
import android.content.Context;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import androidx.appcompat.widget.SearchView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
@@ -33,23 +36,24 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsLayoutBinding;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
public class DialogChooseArtsFromListaArts {
private Context currentContext;
private Dialog mDialog;
private DialogChooseArtsFromListaArtsLayoutBinding mBindings;
private DialogChooseArtsFromListaArtsAdapter currentAdapter;
private RunnableArgs<List<MtbColr>> mOnItemsChoosed;
private Runnable mOnAbort;
private List<DialogChooseArtsFromListaArtsItemModel> mDataset;
private BindableBoolean filterStatus = new BindableBoolean(false);
public static Dialog make(final Context context, List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) {
return new DialogChooseArtsFromListaArts(context, listaMtbColr, onItemsChoosed, onAbort).mDialog;
public static void make(@NotNull final FragmentActivity activity, List<MtbColr> listaMtbColr, RunnableArgs<List<MtbColr>> onItemsChoosed, Runnable onAbort) {
activity.runOnUiThread(() -> {
new DialogChooseArtsFromListaArts(activity, listaMtbColr, onItemsChoosed, onAbort).mDialog.show();
});
}
@@ -60,9 +64,9 @@ public class DialogChooseArtsFromListaArts {
mDataset = new ArrayList<>();
if(listaMtbColr != null){
if (listaMtbColr != null) {
for (MtbColr mtbColr : listaMtbColr) {
if(UtilityString.isNullOrEmpty(mtbColr.getUntMis()) && mtbColr.getMtbAart() != null){
if (UtilityString.isNullOrEmpty(mtbColr.getUntMis()) && mtbColr.getMtbAart() != null) {
mtbColr.setUntMis(mtbColr.getMtbAart().getUntMis());
}
@@ -71,56 +75,131 @@ public class DialogChooseArtsFromListaArts {
}
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DialogChooseArtsFromListaArtsLayoutBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_lista_arts_layout, null, false);
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_lista_arts_layout, null, false);
binding.setFilterStatus(filterStatus);
binding.emptyView.setVisibility(listaMtbColr != null && listaMtbColr.size() > 0 ? View.GONE : View.VISIBLE);
mBindings.emptyView.setVisibility(listaMtbColr != null && listaMtbColr.size() > 0 ? View.GONE : View.VISIBLE);
mDialog = new Dialog(context);
mDialog.setContentView(binding.getRoot());
mDialog.setContentView(mBindings.getRoot());
mDialog.setCanceledOnTouchOutside(false);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mDialog.setOnCancelListener(dialog -> {
if(this.mOnAbort != null) this.mOnAbort.run();
if (this.mOnAbort != null) this.mOnAbort.run();
});
UtilityDialog.setTo90PercentWidth(context, mDialog);
initRecyclerView(binding);
initRecyclerView();
initRemoveFilterButton(binding);
initFilter();
setupBarcode();
binding.positiveButton.setOnClickListener(v -> {
mBindings.positiveButton.setOnClickListener(v -> {
mDialog.dismiss();
onPositiveClick();
});
binding.negativeButton.setOnClickListener(v -> {
mBindings.negativeButton.setOnClickListener(v -> {
mDialog.dismiss();
onNegativeClick();
});
}
private void initRecyclerView(DialogChooseArtsFromListaArtsLayoutBinding binding) {
binding.dialogChooseArtsFromListaArtMainList.setNestedScrollingEnabled(false);
private void initRecyclerView() {
mBindings.dialogChooseArtsFromListaArtMainList.setNestedScrollingEnabled(false);
binding.dialogChooseArtsFromListaArtMainList.setHasFixedSize(true);
mBindings.dialogChooseArtsFromListaArtMainList.setHasFixedSize(true);
binding.dialogChooseArtsFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext));
mBindings.dialogChooseArtsFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext));
currentAdapter = new DialogChooseArtsFromListaArtsAdapter(currentContext, mDataset);
binding.dialogChooseArtsFromListaArtMainList.setAdapter(currentAdapter);
mBindings.dialogChooseArtsFromListaArtMainList.setAdapter(currentAdapter);
}
private void initRemoveFilterButton(DialogChooseArtsFromListaArtsLayoutBinding binding) {
binding.buttonRemoveFilter.setOnClickListener(v -> {
removeListFilter();
private void initFilter() {
mBindings.mainSearch.setOnCloseListener(() -> {
this.removeListFilter();
return true;
});
mBindings.mainSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// removeListFilter();
//
// if (!UtilityString.isNullOrEmpty(query) && query.trim().length() > 3) {
// List<DialogChooseArtsFromListaArtsItemModel> foundRowsList = Stream.of(mDataset)
// .filter(x -> {
// String codMart = x.getMtbColr().getMtbAart().getCodMart();
// String descrizioneArt = x.getMtbColr().getMtbAart().getDescrizioneEstesa();
// String diacod = x.getMtbColr().getMtbAart().getDiacod();
//
// return ((codMart.startsWith(query) ||
// codMart.endsWith(query) ||
// codMart.contains(query) ||
// codMart.equalsIgnoreCase(query)) ||
// (descrizioneArt.startsWith(query) ||
// descrizioneArt.endsWith(query) ||
// descrizioneArt.contains(query) ||
// descrizioneArt.equalsIgnoreCase(query)) ||
// (diacod.startsWith(query) ||
// diacod.endsWith(query) ||
// diacod.contains(query) ||
// diacod.equalsIgnoreCase(query))) &&
// !x.isHidden();
// })
// .toList();
//
// for (int i = 0; i < mDataset.size(); i++) {
// mDataset.get(i).setHidden(!foundRowsList.contains(mDataset.get(i)));
// }
// }
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
removeListFilter();
newText = newText.toLowerCase();
if (!UtilityString.isNullOrEmpty(newText) && newText.trim().length() > 2) {
String finalNewText = newText;
List<DialogChooseArtsFromListaArtsItemModel> foundRowsList = Stream.of(mDataset)
.filter(x -> {
String codMart = x.getMtbColr().getMtbAart().getCodMart().toLowerCase();
String descrizioneArt = x.getMtbColr().getMtbAart().getDescrizioneEstesa().toLowerCase();
String diacod = x.getMtbColr().getMtbAart().getDiacod().toLowerCase();
return ((codMart.startsWith(finalNewText) ||
codMart.endsWith(finalNewText) ||
codMart.contains(finalNewText) ||
codMart.equalsIgnoreCase(finalNewText)) ||
(descrizioneArt.startsWith(finalNewText) ||
descrizioneArt.endsWith(finalNewText) ||
descrizioneArt.contains(finalNewText) ||
descrizioneArt.equalsIgnoreCase(finalNewText)) ||
(diacod.startsWith(finalNewText) ||
diacod.endsWith(finalNewText) ||
diacod.contains(finalNewText) ||
diacod.equalsIgnoreCase(finalNewText))) &&
!x.isHidden();
})
.toList();
for (int i = 0; i < mDataset.size(); i++) {
mDataset.get(i).setHidden(!foundRowsList.contains(mDataset.get(i)));
}
}
return true;
}
});
}
@@ -143,9 +222,9 @@ public class DialogChooseArtsFromListaArts {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext);
if(UtilityBarcode.isEan13(data)){
if (UtilityBarcode.isEan13(data)) {
this.loadArticolo(data.getStringValue(), null, progressDialog);
} else if(UtilityBarcode.isEtichetta128(data)) {
} else if (UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaEan128(data, progressDialog);
} else {
progressDialog.dismiss();
@@ -161,14 +240,15 @@ public class DialogChooseArtsFromListaArts {
String barcodeProd = null;
if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if(!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if(!UtilityString.isNullOrEmpty(ean128Model.Content)) barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if(!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if(!UtilityString.isNullOrEmpty(ean128Model.Gtin) || !UtilityString.isNullOrEmpty(ean128Model.Content)){
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin) || !UtilityString.isNullOrEmpty(ean128Model.Content)) {
this.loadArticolo(barcodeProd, ean128Model, progressDialog);
} else {
DialogCommon.showNoArtFoundDialog(currentContext, () -> {
@@ -187,22 +267,23 @@ public class DialogChooseArtsFromListaArts {
});
}
}, ex-> {
}, ex -> {
UtilityExceptions.defaultException(currentContext, ex, progressDialog);
BarcodeManager.enable();
});
}
private void loadArticolo(String barcodeProd, Ean128Model ean128Model, Dialog progressDialog) {
if(barcodeProd.length() == 14) {
if (barcodeProd.length() == 14) {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
}
String finalBarcodeProd = barcodeProd;
ArticoloRESTConsumer.getByBarcodeProdStatic(barcodeProd, mtbAartList -> {
if(mtbAartList != null && mtbAartList.size() > 0) {
if (mtbAartList != null && mtbAartList.size() > 0) {
this.mBindings.mainSearch.setQuery(finalBarcodeProd, false);
this.searchArtInList(mtbAartList.get(0), ean128Model);
@@ -232,42 +313,34 @@ public class DialogChooseArtsFromListaArts {
!x.isHidden())
.toList();
if(foundRowsList.size() == 0) {
if (foundRowsList.size() == 0) {
DialogCommon.showNoArtFoundDialog(currentContext, null);
} else {
for(int i = 0; i < mDataset.size(); i++) {
for (int i = 0; i < mDataset.size(); i++) {
mDataset.get(i).setHidden(!foundRowsList.contains(mDataset.get(i)));
}
filterStatus.set(true);
}
}
private void removeListFilter() {
filterStatus.set(false);
for (DialogChooseArtsFromListaArtsItemModel itemModel : mDataset) {
itemModel.setHidden(false);
}
}
private void onPositiveClick() {
if(mOnItemsChoosed != null) {
if (mOnItemsChoosed != null) {
mOnItemsChoosed.run(currentAdapter.getSelectedItems());
}
}
private void onNegativeClick() {
if(this.mOnAbort != null) mOnAbort.run();
if (this.mOnAbort != null) mOnAbort.run();
}
}

View File

@@ -0,0 +1,74 @@
package it.integry.integrywmsnative.view.dialogs.choose_batch_lot;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.databinding.DialogChooseBatchLotItemModelBinding;
public class DialogChooseBatchLotAdapter extends RecyclerView.Adapter<DialogChooseBatchLotAdapter.ViewHolder> {
protected Context mContext;
private final List<MtbPartitaMag> mDataset;
private final IRecyclerItemClicked<MtbPartitaMag> mOnItemClickListener;
public static class ViewHolder extends RecyclerView.ViewHolder {
protected DialogChooseBatchLotItemModelBinding mViewDataBinding;
public ViewHolder(DialogChooseBatchLotItemModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
public void bind(MtbPartitaMag mtbPartitaMag) {
mViewDataBinding.setMtbPartitaMag(mtbPartitaMag);
mViewDataBinding.executePendingBindings();
}
}
public DialogChooseBatchLotAdapter(List<MtbPartitaMag> myDataset, IRecyclerItemClicked<MtbPartitaMag> onItemClickListener) {
mDataset = myDataset;
mOnItemClickListener = onItemClickListener;
}
@Override
public DialogChooseBatchLotAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
DialogChooseBatchLotItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_batch_lot_item_model, parent, false);
return new DialogChooseBatchLotAdapter.ViewHolder(viewDataBinding);
}
@Override
public void onBindViewHolder(DialogChooseBatchLotAdapter.ViewHolder holder, int position) {
MtbPartitaMag item = mDataset.get(position);
holder.bind(item);
holder.mViewDataBinding.getRoot().setOnClickListener(x -> {
if(mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(item, position);
}
});
}
@Override
public void onViewRecycled(DialogChooseBatchLotAdapter.ViewHolder holder) {
super.onViewRecycled(holder);
}
@Override
public int getItemCount() {
return mDataset.size();
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.view.dialogs.choose_batch_lot;
import dagger.Subcomponent;
@Subcomponent
public interface DialogChooseBatchLotComponent {
@Subcomponent.Factory
interface Factory {
DialogChooseBatchLotComponent create();
}
void inject(DialogChooseBatchLotView dialogChooseBatchLotView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.choose_batch_lot;
import dagger.Module;
import dagger.Provides;
@Module
public class DialogChooseBatchLotModule {
@Provides
DialogChooseBatchLotViewModel providesDialogChooseBatchLotViewModel() {
return new DialogChooseBatchLotViewModel();
}
}

View File

@@ -0,0 +1,111 @@
package it.integry.integrywmsnative.view.dialogs.choose_batch_lot;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.databinding.DialogChooseBatchLotBinding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class DialogChooseBatchLotView extends BaseDialogFragment {
@Inject
DialogChooseBatchLotViewModel mViewModel;
private List<MtbPartitaMag> mAvailableBatchLot;
private RunnableArgs<MtbPartitaMag> mOnItemSelected;
private Context mContext;
private DialogChooseBatchLotBinding mBindings;
private DialogChooseBatchLotAdapter mAdapter;
private MtbPartitaMag mSelectedItem;
public static DialogChooseBatchLotView newInstance(List<MtbPartitaMag> availableBatchLot, RunnableArgs<MtbPartitaMag> onItemSelected) {
return new DialogChooseBatchLotView(availableBatchLot, onItemSelected);
}
private DialogChooseBatchLotView(List<MtbPartitaMag> availableBatchLot, RunnableArgs<MtbPartitaMag> onItemSelected) {
super();
this.mAvailableBatchLot = availableBatchLot;
this.mOnItemSelected = onItemSelected;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.mContext = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_batch_lot, container, false);
MainApplication.appComponent
.dialogChooseBatchLotComponent()
.create()
.inject(this);
mBindings.setView(this);
mBindings.setViewmodel(this.mViewModel);
getDialog().setCanceledOnTouchOutside(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
this.initRecyclerView();
}
@Override
public void dismiss() {
super.dismiss();
if(mOnItemSelected != null) {
this.mOnItemSelected.run(mSelectedItem);
}
}
private void initRecyclerView() {
mBindings.mainList.setNestedScrollingEnabled(false);
mBindings.mainList.setHasFixedSize(true);
mBindings.mainList.setLayoutManager(new LinearLayoutManager(mContext));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mBindings.mainList.addItemDecoration(itemDecorator);
mAdapter = new DialogChooseBatchLotAdapter(mAvailableBatchLot, onItemClicked);
mBindings.mainList.setAdapter(mAdapter);
}
private final IRecyclerItemClicked<MtbPartitaMag> onItemClicked = (item, position) -> {
mSelectedItem = item;
dismiss();
};
}

View File

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

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;

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