Compare commits

..

93 Commits

Author SHA1 Message Date
e50aa1f014 Finish v1.13.28(174) 2020-12-17 13:03:50 +01:00
ed55eb4279 -> v1.13.28(174) 2020-12-17 13:03:42 +01:00
9ac96ac8fd Risolta anomalia del filtro ordine quando si recupera una UL.
Risolta anomalia dello spazio nel campo del Lotto.
2020-12-17 13:03:00 +01:00
5be3fd9c25 Merge branch 'master' into develop 2020-12-10 16:26:34 +01:00
bab558252a Finish Hotfix-QtaDaEvadere 2020-12-10 16:26:33 +01:00
c256b39119 Fix su qta da evadere in Accettazione.
-> v1.13.27 (173)
2020-12-10 16:26:28 +01:00
af76627c50 Finish v1.13.26(172) 2020-11-27 11:11:15 +01:00
f9544566e9 Finish v1.13.26(172) 2020-11-27 11:11:14 +01:00
4f02c3a4bc -> v1.13.26 (172) 2020-11-27 11:11:09 +01:00
ea8d8835cd Sostituita query load doc rows con vista 2020-11-27 11:09:53 +01:00
61e07e8f76 Finish v1.13.25(171) 2020-11-23 13:01:16 +01:00
962e1f7fa4 Finish v1.13.25(171) 2020-11-23 13:01:15 +01:00
07d889bcd5 -> v1.13.25 (171) 2020-11-23 13:01:07 +01:00
170db3eb0a Fix su unt mis accettazione 2020-11-23 13:00:39 +01:00
856a807e3e Finish v1.13.24(170) 2020-11-17 18:30:00 +01:00
c56aa812ff Finish v1.13.24(170) 2020-11-17 18:30:00 +01:00
770f014a70 -> v1.13.24 (170) 2020-11-17 18:29:56 +01:00
f6ff7aa80d Aggiunto controllo su refMtbColt 2020-11-17 18:29:15 +01:00
4cd3e7e102 Finish v1.13.23(169) 2020-11-17 10:40:22 +01:00
69bf5e319e Finish v1.13.23(169) 2020-11-17 10:40:21 +01:00
88fe4d82cd -> v1.13.23 (169) 2020-11-17 10:40:16 +01:00
c8cd794cfc Risolto problema di refMtbColt nulla in alcuni casi particolari della spedizione 2020-11-17 10:39:37 +01:00
5dcc567eab Merge branch 'master' into develop 2020-11-16 15:13:16 +01:00
89eafaf6ca Finish Hotfix-QueryDoc 2020-11-16 15:13:15 +01:00
6fc7f80ed4 -> v1.13.22 (168) 2020-11-16 15:13:08 +01:00
2464d44222 Merge branch 'master' into develop 2020-11-13 11:50:31 +01:00
96d544f2ad Finish Hotfix-Docs 2020-11-13 11:50:31 +01:00
e85ddc6580 Fix sum num_cnf query load righe doc 2020-11-13 11:50:25 +01:00
89f6b9ce71 Finish v1.13.21(167) 2020-11-13 10:25:30 +01:00
c7d0ed1747 Finish v1.13.21(167) 2020-11-13 10:25:30 +01:00
b84b3c28f3 -> v1.13.21 (167) 2020-11-13 10:25:23 +01:00
3a3bf4c2dd Fix su scannedMtbColr nullo in spedizione. 2020-11-13 10:24:42 +01:00
4809a96e5b Finish v1.13.20(166) 2020-11-11 12:33:21 +01:00
5f206feb12 Finish v1.13.20(166) 2020-11-11 12:33:20 +01:00
575762da2f -> v1.13.20 (166) 2020-11-11 12:33:14 +01:00
a96078c9e6 Risolto problema di picking diverso dal collo suggerito. 2020-11-11 12:32:38 +01:00
b1941d5c34 Aggiornato Gradle.
Sistemati i testi dei bottoni in dialog base.
Implementato logout nel dialog di errore all'avvio dell'app.
2020-11-11 10:48:08 +01:00
4dc688af14 Finish v1.13.19(165) 2020-11-10 15:21:50 +01:00
6675757317 Finish v1.13.19(165) 2020-11-10 15:21:50 +01:00
1310b34a8d Aggiunto supporto a Zebra TC20.
Fix vari.
2020-11-10 15:20:50 +01:00
4e8fe26c6b Merge branch 'master' into develop 2020-11-09 15:24:02 +01:00
32ff7bfa39 Finish v1.13.18(164) 2020-11-09 15:24:01 +01:00
c8cfa486e1 -> v1.13.18 (164) 2020-11-09 15:23:38 +01:00
0356c912e6 Finish v1.13.17(163) 2020-11-09 13:21:38 +01:00
7f448bbbb3 Finish v1.13.17(163) 2020-11-09 13:21:37 +01:00
f940b6f239 -> v1.13.17 (163) 2020-11-09 13:21:32 +01:00
a3de73dc66 Implementato suggerimento data scad in base alla shelf life del prodotto 2020-11-09 13:20:49 +01:00
9fa1aa156e Finish Refactoring_PickingResi 2020-11-09 12:29:17 +01:00
03e1a186b8 Completato refactoring picking resi 2020-11-09 12:29:12 +01:00
598372675f Merge branch 'develop' into feature/Refactoring_PickingResi
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
2020-11-05 18:31:13 +01:00
ffccd2f3d3 Sistemata scansione barcode in DialogInputQuantityV2 2020-11-05 18:29:52 +01:00
4252e13323 Finish v1.13.16(162) 2020-11-05 12:52:26 +01:00
7c55cce6ae Finish v1.13.16(162) 2020-11-05 12:52:25 +01:00
45caece076 -> v1.13.16 (162) 2020-11-05 12:52:20 +01:00
79dc75fc89 Implementata visualizzazione dei colli di riferimento in contenuto LU. 2020-11-05 12:51:20 +01:00
f9483e14be Ricreato caricamento lista principale 2020-11-04 12:40:28 +01:00
d3396cdb63 Finish v1.13.15(161) 2020-10-28 11:06:30 +01:00
3c0d084c28 Finish v1.13.15(161) 2020-10-28 11:06:29 +01:00
ba220461db -> v1.13.15 (161) 2020-10-28 11:06:17 +01:00
0d9d0ff8b0 Fix su rettifica giacenza e nuova finestra input qta su versamento merce 2020-10-27 19:21:44 +01:00
74d0369cb5 Finish v1.13.14(160) 2020-10-22 11:17:56 +02:00
6fbdce86c7 Finish v1.13.14(160) 2020-10-22 11:17:55 +02:00
4bfd68b614 -> v1.13.14 (160) 2020-10-22 11:17:50 +02:00
b57c452648 Implementata gestione del codTcol in Spedizione 2020-10-22 11:17:13 +02:00
0fd4dc668a Finish v1.13.13(159) 2020-10-21 10:15:02 +02:00
726afed296 Finish v1.13.13(159) 2020-10-21 10:15:02 +02:00
5b04e99c33 -> v1.13.13 (159) 2020-10-21 10:14:55 +02:00
5632c6f7ab Aggiunto nuovo modello per Zebra (TC200J) 2020-10-21 10:13:50 +02:00
20a076e705 Finish v13.11.12(158) 2020-10-20 11:13:56 +02:00
fb85af8bbf Finish v13.11.12(158) 2020-10-20 11:13:56 +02:00
6a7f3ee2ed -> v13.11.12 (158) 2020-10-20 11:13:52 +02:00
de4a87658e Fix su click di bottom sheet dialog (contenuto LU).
Ripristinato pulsante Chiudi LU in dialogInputQuantity.
2020-10-20 11:13:19 +02:00
e87f248a12 Finish v1.13.11(157) 2020-10-16 15:34:30 +02:00
4f366a4f38 Finish v1.13.11(157) 2020-10-16 15:34:29 +02:00
41b1a0571e -> v1.13.11 (157) 2020-10-16 15:34:25 +02:00
641fb3964d Fix vari 2020-10-16 15:32:15 +02:00
6a39512e7b Finish v1.13.10(156) 2020-10-15 09:49:21 +02:00
06042908e7 Finish v1.13.10(156) 2020-10-15 09:49:20 +02:00
8b053be283 -> v1.13.10 (156) 2020-10-15 09:49:13 +02:00
16c0f54c46 Fix vari 2020-10-15 09:48:27 +02:00
664f92b26c Fix vari 2020-10-13 18:21:56 +02:00
c8dbbcf06a Fix & Updates 2020-10-13 16:27:16 +02:00
3d275bfe4f Finish RefactoringAccettazione 2020-10-13 11:12:16 +02:00
92b3de4ccd Completato refactoring Accettazione 2020-10-13 11:12:05 +02:00
b806c00f56 Finish v1.13.9(155) 2020-10-05 13:00:05 +02:00
36ed572100 Finish v1.13.9(155) 2020-10-05 13:00:05 +02:00
798b869f30 -> v1.13.9 (155) 2020-10-05 13:00:00 +02:00
eff50dce03 Fix: in caso di edit row do un collo recuperato, in Spedizione, l'applicazione si bloccava. 2020-10-05 12:57:04 +02:00
507a38f3a7 Fix della UI in Spedizione quando veniva evasa completamente una riga (rimaneva a video la riga con qta 0). 2020-10-05 12:31:08 +02:00
e9cb9954f6 Fix su update posizione di Rettifica Giacenze 2020-10-05 12:21:16 +02:00
168002316b Resi privati i field di SettingsModel 2020-10-02 17:55:18 +02:00
3a52424ccd Modificata chiave di compilazione.
Modificata jre in gradle.properties.
2020-10-01 10:14:49 +02:00
7864e930c4 Finish v1.13.8 2020-10-01 09:56:56 +02:00
160 changed files with 6064 additions and 4426 deletions

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_base" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<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>

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_frudis" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</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>

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_gramm" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<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>

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_ime" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<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>

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_saporiveri" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<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>

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_saporiveri_pv" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_vgalimenti" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<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>

View File

@@ -1,12 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_vglimenti" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="app" />
<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="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv" />
<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="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
@@ -41,11 +42,16 @@
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<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>

Binary file not shown.

View File

@@ -7,8 +7,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 154
def appVersionName = '1.13.8'
def appVersionCode = 174
def appVersionName = '1.13.28'
signingConfigs {
release {
@@ -82,33 +82,42 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.2.0', {
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.google.firebase:firebase-core:17.5.0'
implementation 'com.google.firebase:firebase-crash:16.2.1'
implementation 'com.google.firebase:firebase-perf:19.0.8'
implementation 'com.google.firebase:firebase-crashlytics:17.2.1'
//Firebase
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:26.0.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-core'
implementation 'com.google.firebase:firebase-crash'
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.android.gms:play-services-basement:17.5.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.3.0-alpha02'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'com.google.android.material:material:1.3.0-alpha04'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.5.0'
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
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:2.2.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
implementation 'org.apache.commons:commons-text:1.8'
implementation 'org.apache.commons:commons-text:1.9'
//MVVM
def dagger2_version = '2.27'
def dagger2_version = '2.29.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
api "com.google.dagger:dagger:$dagger2_version"
@@ -125,7 +134,7 @@ dependencies {
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'
testImplementation 'junit:junit:4.13.1'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'com.github.pedromassango:doubleClick:3.0'
@@ -145,8 +154,8 @@ dependencies {
implementation project(':honeywellscannerlibrary')
implementation project(':keyobardemulatorscannerlibrary')
implementation project(':barcode_kaiteki')
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.1'
androidTestImplementation 'org.testng:testng:7.1.0'
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
androidTestImplementation 'org.testng:testng:7.3.0'
}
repositories {
mavenCentral()

View File

@@ -14,14 +14,6 @@
}
},
"oauth_client": [
{
"client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "it.integry.integrywmsnative",
"certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6"
}
},
{
"client_id": "963231271247-59qdc1vobbnjfp135ce4hv12c53s9hse.apps.googleusercontent.com",
"client_type": 1,
@@ -30,6 +22,14 @@
"certificate_hash": "3b6d97a981f446f5011049d781aeb9960f9352af"
}
},
{
"client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "it.integry.integrywmsnative",
"certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6"
}
},
{
"client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com",
"client_type": 3
@@ -41,20 +41,13 @@
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 2,
"other_platform_oauth_client": [
{
"client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com",
"client_type": 3
}
]
},
"ads_service": {
"status": 2
}
}
}

View File

@@ -22,13 +22,17 @@
android:name=".gest.spedizione.SpedizioneActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" ></activity>
android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
<activity
android:name=".gest.picking_resi.PickingResiActivity"
android:name=".gest.picking_resi_OLD.PickingResiActivity"
android:label="@string/activity_ultime_consegne_title"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".gest.picking_resi.PickingResiActivity"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
@@ -41,12 +45,7 @@
</intent-filter>
</activity>
<activity
android:name=".gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.spedizione.VenditaOrdineInevasoActivity"
android:name=".gest.accettazione_picking.AccettazionePickingActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />

View File

@@ -175,8 +175,8 @@ public class MainActivity extends BaseActivity
break;
case R.id.nav_logout:
UtilitySettings.logout(this.mAppDatabase);
ServerStatusChecker.dispose();
UtilitySettings.logout();
startLoginActivity();
break;

View File

@@ -34,6 +34,8 @@ public class MainApplication extends Application {
.roomModule(roomModule)
.build();
appComponent.inject(appContext);
appContext.init();
res = getResources();
}

View File

@@ -3,9 +3,14 @@ package it.integry.integrywmsnative;
import javax.inject.Singleton;
import dagger.Component;
import it.integry.integrywmsnative.core.context.AppContext;
import it.integry.integrywmsnative.core.data_store.db.RoomModule;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingComponent;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
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;
@@ -14,6 +19,8 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComp
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
// Definition of the Application graph
@Singleton
@@ -25,7 +32,10 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
PVOrdineAcquistoEditModule.class,
PickingLiberoModule.class,
RettificaGiacenzeModule.class,
SpedizioneModule.class})
SpedizioneModule.class,
AccettazionePickingModule.class,
PickingResiModule.class,
DialogInputQuantityV2Module.class})
public interface MainApplicationComponent {
MainActivityComponent.Factory mainActivityComponent();
@@ -34,5 +44,12 @@ public interface MainApplicationComponent {
PickingLiberoComponent.Factory pickingLiberoComponent();
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
SpedizioneComponent.Factory spedizioneComponent();
AccettazionePickingComponent.Factory accettazionePickingComponent();
PickingResiComponent.Factory pickingResiComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
void inject(AppContext appContext);
}

View File

@@ -11,6 +11,7 @@ import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
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.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
@@ -44,6 +45,12 @@ public class MainApplicationModule {
return new OrdiniRESTConsumer();
}
@Provides
@Singleton
GestSetupRESTConsumer provideGestSetupRESTConsumer() {
return new GestSetupRESTConsumer();
}
@Provides
@Singleton
ArticoloRESTConsumer provideArticoloRESTConsumer() {

View File

@@ -6,12 +6,16 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import javax.inject.Inject;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecover;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.settings.Stash;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
@@ -20,6 +24,9 @@ public class AppContext {
//Note: this is the Application Context NOT the Activity Context
private final Context mContext;
@Inject
AppDatabase mAppDatabase;
public AppContext(Context context) {
this.mContext = context;
}
@@ -50,11 +57,11 @@ public class AppContext {
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
if( SettingsManager.isInstanceAvailable() &&
(SettingsManager.i().userSession != null && !UtilityString.isNullOrEmpty(SettingsManager.i().userSession.profileDB)) &&
(SettingsManager.i().user != null && !UtilityString.isNullOrEmpty(SettingsManager.i().user.fullname))) {
(SettingsManager.i().getUserSession() != null && !UtilityString.isNullOrEmpty(SettingsManager.i().getUserSession().getProfileDB())) &&
(SettingsManager.i().getUser() != null && !UtilityString.isNullOrEmpty(SettingsManager.i().getUser().getFullname()))) {
crashlytics.setUserId(SettingsManager.i().user.fullname);
crashlytics.setCustomKey("profile_db", SettingsManager.i().userSession.profileDB);
crashlytics.setUserId(SettingsManager.i().getUser().getFullname());
crashlytics.setCustomKey("profile_db", SettingsManager.i().getUserSession().getProfileDB());
}
}
}
@@ -63,6 +70,7 @@ public class AppContext {
UtilityContext.initApplicationContext(mContext);
UtilityResources.init(mContext);
UtilityToast.init(mContext);
UtilitySettings.init(mAppDatabase);
}
private void initLogger() {

View File

@@ -3,15 +3,18 @@ package it.integry.integrywmsnative.core.context;
import android.content.Context;
import android.text.SpannableString;
import java.lang.reflect.Method;
import androidx.appcompat.app.AppCompatActivity;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import java.lang.reflect.Method;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class MainContext {
@@ -44,7 +47,10 @@ public class MainContext {
private void initDBData(Runnable onComplete) {
SettingsManager.loadDBVariables(onComplete, ex -> {
DialogSimpleMessageHelper.makeErrorDialog(mContext,
new SpannableString(ex.getMessage()), null, mContext::finish).show();
new SpannableString(ex.getMessage()), null, mContext::finish, R.string.logout, () -> {
UtilitySettings.logout();
MainApplication.exit();
}).show();
}
);
}

View File

@@ -6,7 +6,7 @@ import androidx.room.ForeignKey;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@Entity(
tableName = "articoli_griglia",
@@ -159,7 +159,7 @@ public class ArticoloGriglia {
articolo.setQtaCnf(this.getQtaCnf());
articolo.setUntMis(this.getUntMis());
articolo.setDescrizione(this.getDescrizione());
articolo.setDataIns(new Date());
articolo.setDataIns(UtilityDate.getDateInstance());
articolo.setQtaOrd(0);
return articolo;

View File

@@ -1,23 +1,6 @@
package it.integry.integrywmsnative.core.di;
import androidx.annotation.ColorRes;
import androidx.annotation.IdRes;
import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.BindingAdapter;
import androidx.databinding.BindingConversion;
import androidx.constraintlayout.widget.Guideline;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import androidx.core.util.Pair;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatTextView;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.res.ColorStateList;
import android.util.Log;
import android.view.View;
@@ -25,10 +8,25 @@ import android.widget.AutoCompleteTextView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import androidx.annotation.ColorRes;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.constraintlayout.widget.Guideline;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.util.Pair;
import androidx.databinding.BindingAdapter;
import androidx.databinding.BindingConversion;
import androidx.databinding.Observable;
import androidx.databinding.ObservableField;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
@@ -37,15 +35,10 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import androidx.databinding.Observable;
import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -178,7 +171,7 @@ public class Converters {
view.addTextChangedListener(watcher);
}
String newValue = observableString.get();
String viewValue = view.getText().toString().trim();
String viewValue = view.getText().toString();
if(!viewValue.equalsIgnoreCase(newValue)) {
view.setText(newValue);
@@ -386,7 +379,7 @@ public class Converters {
}
@BindingAdapter({"app:visibility"})
@BindingAdapter({"visibility"})
public static void bindViewVisibility(View view, final BindableBoolean bindableBoolean) {
if (view.getTag(R.id.bound_observable) != bindableBoolean) {
view.setTag(R.id.bound_observable, bindableBoolean);

View File

@@ -0,0 +1,11 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class AlreadyUsedAnonymousLabelException extends Exception {
public AlreadyUsedAnonymousLabelException() {
super(UtilityResources.getString(R.string.already_used_anonymous_barcode));
}
}

View File

@@ -0,0 +1,11 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InvalidLUMultiGestioneException extends Exception {
public InvalidLUMultiGestioneException() {
super(UtilityResources.getString(R.string.error_multiple_gest));
}
}

View File

@@ -0,0 +1,11 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InvalidOrderTypeException extends Exception {
public InvalidOrderTypeException() {
super(UtilityResources.getString(R.string.error_wrong_order_type));
}
}

View File

@@ -0,0 +1,11 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class LUScanNotGrantedException extends Exception {
public LUScanNotGrantedException() {
super(UtilityResources.getString(R.string.lu_scan_not_granted_here));
}
}

View File

@@ -1,15 +1,19 @@
package it.integry.integrywmsnative.core.expansion;
import android.app.Dialog;
import android.view.KeyEvent;
import androidx.appcompat.app.AppCompatActivity;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.exception.MyExceptionHandler;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
public class BaseActivity extends AppCompatActivity {
protected Dialog mCurrentProgress;
public BaseActivity() {
Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this, BaseActivity.class));
}
@@ -33,4 +37,19 @@ public class BaseActivity extends AppCompatActivity {
);
}
protected void openProgress() {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this);
}
}
protected void closeProgress() {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
}
}

View File

@@ -40,6 +40,7 @@ public abstract class ExtendedRecyclerView<T, VH extends RecyclerView.ViewHolder
public ExtendedRecyclerView<T, VH> setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
public interface ILUBaseOperationsListener {
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
void onLUOpened(MtbColt mtbColt);
void onLUClosed();
void onRowSaved();
}

View File

@@ -0,0 +1,9 @@
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
public interface ILoadingListener {
void onLoadingStarted();
void onLoadingEnded();
}

View File

@@ -141,6 +141,8 @@ public class DtbDocr {
private MtbAart mtbAart;
private String dataScadPartitaMag;
public String getCodAnag() {
return codAnag;
}
@@ -739,6 +741,19 @@ public class DtbDocr {
return this;
}
public String getDataScadPartitaMag() {
return dataScadPartitaMag;
}
public Date getDataScadPartitaMagD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataScadPartitaMag());
}
public DtbDocr setDataScadPartitaMag(String dataScadPartitaMag) {
this.dataScadPartitaMag = dataScadPartitaMag;
return this;
}
public MtbAart getMtbAart() {
return mtbAart;
}

View File

@@ -1,6 +1,5 @@
package it.integry.integrywmsnative.core.model;
import java.text.SimpleDateFormat;
import java.util.Date;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@@ -21,8 +20,8 @@ public class MtbCols extends EntityBase {
public MtbCols() {
type = "mtb_cols";
setCodMdep(SettingsManager.i().userSession.depo.getCodMdep());
setModificatoDa(SettingsManager.i().user.fullname);
setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep());
setModificatoDa(SettingsManager.i().getUser().getFullname());
setDataMove(UtilityDate.getDateInstance());
}

View File

@@ -86,7 +86,7 @@ public class MtbColt extends EntityBase {
private ObservableArrayList<MtbColr> mtbColr = new ObservableArrayList<>();
public ObservableArrayList<MtbColr> getMtbColr() {
return mtbColr;
return mtbColr == null ? new ObservableArrayList<>() : mtbColr;
}
public MtbColt setMtbColr(ObservableArrayList<MtbColr> mtbColr) {
@@ -101,8 +101,8 @@ public class MtbColt extends EntityBase {
}
public MtbColt initDefaultFields() {
setCodMdep(SettingsManager.i().userSession.depo.getCodMdep());
setPreparatoDa(SettingsManager.i().user.fullname);
setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep());
setPreparatoDa(SettingsManager.i().getUser().getFullname());
setOraInizPrep(UtilityDate.getDateInstance());
setCodAnag(SettingsManager.iDB().getDefaultCodAnag());
@@ -312,6 +312,10 @@ public class MtbColt extends EntityBase {
return this;
}
public Date getDataOrdD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataOrd());
}
public String getDataOrd() {
return dataOrd;
}
@@ -537,6 +541,10 @@ public class MtbColt extends EntityBase {
}
public boolean isDocumentPresent() {
return this.getNumDoc() != null && this.getDataDoc() != null && this.getSerDoc() != null;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.spedizione.model;
package it.integry.integrywmsnative.core.model.dto;
import java.math.BigDecimal;
@@ -10,9 +10,19 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
public class PickDataDTO {
private MtbColt refMtbColt;
private MtbColt sourceMtbColt;
private ManualPickDTO manualPickDTO;
public MtbColt getRefMtbColt() {
return refMtbColt;
}
public PickDataDTO setRefMtbColt(MtbColt refMtbColt) {
this.refMtbColt = refMtbColt;
return this;
}
public MtbColt getSourceMtbColt() {
return sourceMtbColt;
}

View File

@@ -19,9 +19,9 @@ public class HttpInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
final String PROFILE_DB = SettingsManager.i().userSession == null ? null : SettingsManager.i().userSession.profileDB;
final String USERNAME = SettingsManager.i().user.username;
final String PASSWORD = SettingsManager.i().user.password;
final String PROFILE_DB = SettingsManager.i().getUserSession() == null ? null : SettingsManager.i().getUserSession().getProfileDB();
final String USERNAME = SettingsManager.i().getUser().getUsername();
final String PASSWORD = SettingsManager.i().getUser().getPassword();
final Request request = chain.request();
final HttpUrl url = request.url().newBuilder()

View File

@@ -20,12 +20,12 @@ public class RESTBuilder {
public static <T> T getService(final Class<T> service) {
// return getService(service, "192.168.2.13", 8080);
return getService(service, SettingsManager.i().server.host, SettingsManager.i().server.port, true);
return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true);
}
public static <T> T getService(final Class<T> service, int timeout) {
// return getService(service, "192.168.2.13", 8080);
return getService(service, SettingsManager.i().server.host, SettingsManager.i().server.port, true, true, timeout);
return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true, true, timeout);
}

View File

@@ -4,6 +4,8 @@ import android.util.Log;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.model.StbGestSetup;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.GestSetupDTO;
@@ -14,9 +16,14 @@ import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class GestSetupRESTConsumer extends _BaseRESTConsumer {
public static void getValue(String gestName, String sectionName, String keySection, RunnableArgs<GestSetupDTO> onComplete, RunnableArgs<Exception> onFailed) {
public void getValue(String gestName, String sectionName, String keySection, RunnableArgs<GestSetupDTO> onComplete, RunnableArgs<Exception> onFailed) {
getValueStatic(gestName, sectionName, keySection, onComplete, onFailed);
}
public static void getValueStatic(String gestName, String sectionName, String keySection, RunnableArgs<GestSetupDTO> onComplete, RunnableArgs<Exception> onFailed) {
GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class);
service.getGestSetupValue(gestName, sectionName, keySection).enqueue(new Callback<ServiceRESTResponse<GestSetupDTO>>() {
@Override
@@ -34,7 +41,7 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
}
public static void getBooleanValue(String gestName, String sectionName, String keySection, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
getValue(gestName, sectionName, keySection, value -> {
getValueStatic(gestName, sectionName, keySection, value -> {
if(value != null){
onComplete.run("S".equalsIgnoreCase(value.value));
} else onComplete.run(false);
@@ -43,7 +50,7 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
});
}
public static void getValue(String gestName, String sectionName, String keySection, String codMdep, RunnableArgs<GestSetupDTO> onComplete, RunnableArgs<Exception> onFailed) {
public static void getValueStatic(String gestName, String sectionName, String keySection, String codMdep, RunnableArgs<GestSetupDTO> onComplete, RunnableArgs<Exception> onFailed) {
GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class);
service.getGestSetupValue(gestName, sectionName, keySection, codMdep).enqueue(new Callback<ServiceRESTResponse<GestSetupDTO>>() {
@Override
@@ -61,7 +68,7 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
}
public static void getBooleanValue(String gestName, String sectionName, String keySection, String codMdep, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
getValue(gestName, sectionName, keySection, codMdep, value -> {
getValueStatic(gestName, sectionName, keySection, codMdep, value -> {
if(value != null){
onComplete.run("S".equalsIgnoreCase(value.value));
} else onComplete.run(false);

View File

@@ -11,7 +11,7 @@ import retrofit2.http.Query;
public interface MesRESTConsumerService {
@GET("mes/getOrdiniLavorazioneMateriale")
@GET("mes_v2/getOrdiniLavorazioneMateriale")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazioneMateriale(@Query("codJfas") String codJfas, @Query("idMateriale") String idMateriale);
}

View File

@@ -6,7 +6,6 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
@@ -18,6 +17,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityThread;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.ArtDTO;
@@ -84,7 +84,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
}
ordineDTO.setChiaveGriglia(griglia.getCodAlis());
ordineDTO.setDataConsD(new Date());
ordineDTO.setDataConsD(UtilityDate.getDateInstance());
ordineDTO.setArtRows(artRows);
saveDTO.setGestione("O");
saveDTO.setOrdineDTO(ordineDTO);
@@ -101,7 +101,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
if (dtoList.size() > 0){
DtbOrdt dto = dtoList.get(0);
ordine.setTransmitted(true);
ordine.setTransmissionDate(new Date());
ordine.setTransmissionDate(UtilityDate.getDateInstance());
ordine.setGestione(dto.getGestione());
ordine.setDataOrdS(dto.getDataOrd());
ordine.setCodMdep(dto.getCodMdep());

View File

@@ -21,7 +21,7 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{
public static void getAvailablePosizioni(RunnableArgs<List<MtbDepoPosizione>> onComplete, RunnableArgs<Exception> onFailed) {
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class);
posizioniRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback<ServiceRESTResponse<List<MtbDepoPosizione>>>() {

View File

@@ -92,7 +92,7 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
public static void getAvailableProfiles(final ISimpleOperationCallback<List<String>> callback){
SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class);
service.getAvailableProfiles(SettingsManager.i().user.username, SettingsManager.i().user.password).enqueue(new Callback<ServiceRESTResponse<List<String>>>() {
service.getAvailableProfiles(SettingsManager.i().getUser().getUsername(), SettingsManager.i().getUser().getPassword()).enqueue(new Callback<ServiceRESTResponse<List<String>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<String>>> call, Response<ServiceRESTResponse<List<String>>> response) {
analyzeAnswer(response, "ProfilesAvailable", callback);
@@ -139,7 +139,7 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
public static void sendErrorLogMail(String message, Runnable onComplete, RunnableArgs<Exception> onFailed) {
String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().userSession.profileDB) ? "" : " [" + SettingsManager.i().userSession.profileDB + "]";
String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().getUserSession().getProfileDB()) ? "" : " [" + SettingsManager.i().getUserSession().getProfileDB() + "]";
String dest = "";
if(BuildConfig.DEBUG) {

View File

@@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.rest.model;
public class Ean13PesoModel {
private String precode;
//TODO: Change to bigdecimal
private Float peso;
public String getPrecode() {

View File

@@ -30,8 +30,8 @@ public class ServerStatusChecker {
private Runnable runnableCode = new Runnable() {
@Override
public void run() {
if(shouldExecute && !UtilityString.isNullOrEmpty(SettingsManager.i().server.host)) {
UtilityServer.isEmsApiAvailable(SettingsManager.i().server.host, SettingsManager.i().server.port, mInternalCallback);
if(shouldExecute && !UtilityString.isNullOrEmpty(SettingsManager.i().getServer().getHost())) {
UtilityServer.isEmsApiAvailable(SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), mInternalCallback);
handler.postDelayed(this, MILLIS_DELAY);
}
}

View File

@@ -31,6 +31,7 @@ public class DBSettingsModel {
private boolean flagAskPesoColloSpedizione;
private boolean flagForceAllToColli;
private boolean flagSpedizioneEnableManualPick;
private boolean flagSpedizioneCanSelectMultipleOrders;
private String produzioneDefaultCodAnag;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
@@ -65,7 +66,7 @@ public class DBSettingsModel {
}
public DBSettingsModel setDatiAzienda(Azienda datiAzienda) {
this.datiAzienda = datiAzienda;
this.datiAzienda = datiAzienda;
return this;
}
@@ -213,6 +214,15 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagSpedizioneCanSelectMultipleOrders() {
return flagSpedizioneCanSelectMultipleOrders;
}
public DBSettingsModel setFlagSpedizioneCanSelectMultipleOrders(boolean flagSpedizioneCanSelectMultipleOrders) {
this.flagSpedizioneCanSelectMultipleOrders = flagSpedizioneCanSelectMultipleOrders;
return this;
}
public String getProduzioneDefaultCodAnag() {
return produzioneDefaultCodAnag;
}

View File

@@ -38,7 +38,7 @@ public class SettingsManager {
if(settingsModelIstance == null) {
settingsModelIstance = new SettingsModel();
settingsModelIstance.server = new SettingsModel.Server();
settingsModelIstance.setServer(new SettingsModel.Server());
//settingsModelIstance.user = new SettingsModel.User();
//settingsModelIstance.userSession = new SettingsModel.UserSession();
@@ -136,10 +136,10 @@ public class SettingsManager {
boolean codMdepExistsAnymore = false;
if(settingsModelIstance.userSession.depo != null){
if(settingsModelIstance.getUserSession().getDepo() != null){
for(AvailableCodMdepsDTO availableCodMdepDTO : availableCodMdeps){
//Controllo se il codMdep salvato esiste ancora
if(availableCodMdepDTO.getCodMdep().equalsIgnoreCase(settingsModelIstance.userSession.depo.getCodMdep())) {
if(availableCodMdepDTO.getCodMdep().equalsIgnoreCase(settingsModelIstance.getUserSession().getDepo().getCodMdep())) {
codMdepExistsAnymore = true;
break;
}
@@ -147,7 +147,7 @@ public class SettingsManager {
}
if(!codMdepExistsAnymore){
settingsModelIstance.userSession.depo = availableCodMdeps.get(0);
settingsModelIstance.getUserSession().setDepo(availableCodMdeps.get(0));
}
if(onComplete != null) onComplete.run();
@@ -246,6 +246,10 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("ENABLE_FAKE_GIACENZA"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS"));
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
@@ -266,6 +270,7 @@ public class SettingsManager {
dbSettingsModelIstance.setProduzioneDefaultCodAnag(getValueFromList(list, "PRODUZIONE", "DEFAULT_COD_ANAG", String.class));
dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
if(onComplete != null) onComplete.run();
}, onFailed);

View File

@@ -4,9 +4,9 @@ import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
public class SettingsModel {
public Server server;
public User user;
public UserSession userSession;
private Server server;
private User user;
private UserSession userSession;
public boolean isUserLoggedIn() {
return user != null;
@@ -19,9 +19,9 @@ public class SettingsModel {
public static class Server {
public String codAzienda;
public String host;
public int port;
private String codAzienda;
private String host;
private int port;
public String getCodAzienda() {
return codAzienda;
@@ -52,9 +52,9 @@ public class SettingsModel {
}
public static class User {
public String username;
public String password;
public String fullname;
private String username;
private String password;
private String fullname;
public String getUsername() {
return username;
@@ -85,9 +85,9 @@ public class SettingsModel {
}
public static class UserSession {
public String profileDB;
public AvailableCodMdepsDTO depo;
public Integer defaultOrdinamentoPickingAccettazione = 0;
private String profileDB;
private AvailableCodMdepsDTO depo;
private Integer defaultOrdinamentoPickingAccettazione = 0;
public String getProfileDB() {
return profileDB;

View File

@@ -36,8 +36,8 @@ public class UpdatesManager {
suffix = "";
}
String currentVersionUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion";
String currentDownloadUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/android-release"+suffix+"_v2.apk";
String currentVersionUrl = "http://" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "/ems-api/wms/currentVersion";
String currentDownloadUrl = "http://" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "/ems-api/wms/android-release"+suffix+"_v2.apk";
AppUpdater appUpdater = new AppUpdater(context)

View File

@@ -50,7 +50,7 @@ public class UtilityBarcode {
}
public static boolean isEtichettaArt(BarcodeScanDTO barcodeScanDTO) {
return isEan8(barcodeScanDTO) || isEan13(barcodeScanDTO) || isUPCA(barcodeScanDTO);
return isEan8(barcodeScanDTO) || isEan13(barcodeScanDTO) || isUPCA(barcodeScanDTO) || isInterleaved2Of5(barcodeScanDTO);
}
@@ -71,6 +71,10 @@ public class UtilityBarcode {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.UPCA;
}
public static boolean isInterleaved2Of5(BarcodeScanDTO barcodeScanDTO) {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.INTERLEAVED_2OF5;
}
public static Integer getNumColloFromULAnonima(String barcode) {

View File

@@ -26,6 +26,14 @@ public class UtilityBigDecimal {
return input.compareTo(toCompareWith) < 0;
}
public static boolean equalsOrLowerThan(BigDecimal input, BigDecimal toCompareWith) {
return equalsTo(input, toCompareWith) || lowerThan(input, toCompareWith);
}
public static boolean equalsOrGreaterThan(BigDecimal input, BigDecimal toCompareWith) {
return equalsTo(input, toCompareWith) || greaterThan(input, toCompareWith);
}
public static BigDecimal getLowerBetween(BigDecimal input1, BigDecimal input2) {
if(input1 == null) return input2;
if(input2 == null) return input1;

View File

@@ -8,14 +8,14 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UtilityFirebase {
public static Trace getNewPerformanceTrace(String traceName) {
String username = SettingsManager.i().user != null && !UtilityString.isNullOrEmpty(SettingsManager.i().user.fullname) ?
SettingsManager.i().user.fullname :
String username = SettingsManager.i().getUser() != null && !UtilityString.isNullOrEmpty(SettingsManager.i().getUser().getFullname()) ?
SettingsManager.i().getUser().getFullname() :
"N / A";
Trace newTrace = FirebasePerformance.getInstance().newTrace(traceName);
newTrace.putAttribute("user_fullame", username);
newTrace.putAttribute("profile_db", SettingsManager.i().userSession.profileDB);
newTrace.putAttribute("profile_db", SettingsManager.i().getUserSession().getProfileDB());
return newTrace;
}

View File

@@ -73,7 +73,7 @@ public class UtilityLogger {
//
// message = message.replace("__ERROR_STACKTRACE__", sw.toString());
//
// String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().userSession.profileDB) ? "" : SettingsManager.i().userSession.profileDB;
// String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().getUserSession().getProfileDB()) ? "" : SettingsManager.i().getUserSession().getProfileDB();
// message = message.replace("__CUSTOMER_NAME__", currentAzienda);
//
// message = message.replace("__ERROR_DATE__", UtilityDate.formatDate(UtilityDate.getDateInstance(), UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH));

View File

@@ -6,10 +6,16 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UtilitySettings {
public static void logout(AppDatabase appDatabase){
SettingsManager.i().user = null;
SettingsManager.i().userSession = null;
UtilityThread.executeParallel(appDatabase::clearAllTables);
private static AppDatabase mAppDatabase;
public static void init(AppDatabase appDatabase) {
mAppDatabase = appDatabase;
}
public static void logout(){
SettingsManager.i().setUser(null);
SettingsManager.i().setUserSession(null);
UtilityThread.executeParallel(mAppDatabase::clearAllTables);
SettingsManager.update();
}

View File

@@ -3,7 +3,6 @@ package it.integry.integrywmsnative.core.utility;
import android.text.Html;
import android.text.Spanned;
import androidx.annotation.IdRes;
import androidx.annotation.StringRes;
import java.util.regex.Matcher;
@@ -19,6 +18,10 @@ public class UtilityString {
return stringToCheck == null || stringToCheck.trim().length() == 0;
}
public static String isNull(String stringToCheck, String alternativeString){
return isNullOrEmpty(stringToCheck) ? alternativeString : stringToCheck;
}
public static String empty2null(String stringToCheck) {
return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim();
}

View File

@@ -4,13 +4,7 @@ package it.integry.integrywmsnative.gest.accettazione;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
@@ -18,27 +12,34 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISearcableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentMainAccettazioneBinding;
import it.integry.integrywmsnative.gest.accettazione.core.AccettazioneHelper;
import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneAdapter;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
@@ -172,49 +173,43 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
private void onAccettazioneMainFabClick() {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
List<String> barcodes = new ArrayList<>();
for(OrdineAccettazioneInevasoDTO ordine : selectedOrders){
if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode());
}
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper.retrievePickingList(barcodes, ordini -> {
OrdiniAccettazioneRESTConsumer.retrievePickingListNewStatic(selectedOrders, sitArtOrds -> {
progress.dismiss();
AtomicInteger artsCounter = new AtomicInteger();
Stream.of(ordini).forEach(x -> {
artsCounter.addAndGet((int) Stream.of(x.getOrdini()).filter(y -> y.getQtaDaEvadere().floatValue() > 0).count());
});
long artsCounter = Stream.of(sitArtOrds)
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
.map(SitArtOrdDTO::getCodMart)
.distinct()
.count();
List<String> ordersKeys = new ArrayList<>();
long ordsCounter = Stream.of(sitArtOrds)
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
.count();
for(OrdineAccettazioneDTO ordine : ordini){
if(!ordersKeys.contains(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione())){
ordersKeys.add(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione());
}
}
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, ordersKeys.size()), ordersKeys.size())
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, artsCounter.get())),
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
null,
() -> {
String cacheItemID = DataCache.addItem(ordini);
String cacheSitArtItemID = DataCache.addItem(sitArtOrds);
String cacheOrdersItemID = DataCache.addItem(selectedOrders);
Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class);
myIntent.putExtra("key", cacheItemID);
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
myIntent.putExtra("keyOrders", cacheOrdersItemID);
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show();
}, ex -> {
// Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);

View File

@@ -1,21 +1,17 @@
package it.integry.integrywmsnative.gest.accettazione.core;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.EsitoType;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService;
import retrofit2.Call;
@@ -35,7 +31,7 @@ public class AccettazioneHelper {
}
public void loadOrdini(RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed){
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep, "A").enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
@@ -65,50 +61,6 @@ public class AccettazioneHelper {
});
}
public void retrievePickingList(List<String> barcodeOrdini, RunnableArgs<List<OrdineAccettazioneDTO>> onComplete, RunnableArgs<Exception> onFailed){
String joinedBarcodes = TextUtils.join(",", barcodeOrdini);
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.pickingListAccettazione(joinedBarcodes).enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> response) {
if(response.isSuccessful()) {
if(response.body() != null) {
if(response.body().getEsito() == EsitoType.OK) {
List<OrdineAccettazioneDTO> dto = response.body().getDto();
for (OrdineAccettazioneDTO ordine : dto) {
for(OrdineAccettazioneDTO.Riga riga : ordine.getOrdini()){
riga.numOrd = ordine.getNumero();
riga.dataOrd = ordine.getData();
riga.gestioneOrd = ordine.getGestione();
riga.codAlis = ordine.getCodAlis();
}
}
onComplete.run(dto);
} else {
onFailed.run(new Exception(response.body().getErrorMessage()));
}
} else {
onFailed.run(new Exception(response.message()));
}
} else {
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
}
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}

View File

@@ -0,0 +1,35 @@
package it.integry.integrywmsnative.gest.accettazione.dto;
public class GetPickingListAccettazioneDTO {
private String data;
private Integer numero;
private String gestione;
public String getData() {
return data;
}
public GetPickingListAccettazioneDTO setData(String data) {
this.data = data;
return this;
}
public Integer getNumero() {
return numero;
}
public GetPickingListAccettazioneDTO setNumero(Integer numero) {
this.numero = numero;
return this;
}
public String getGestione() {
return gestione;
}
public GetPickingListAccettazioneDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
}

View File

@@ -3,8 +3,8 @@ package it.integry.integrywmsnative.gest.accettazione.dto;
import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
/**
* Created by GiuseppeS on 06/03/2018.
@@ -31,6 +31,7 @@ public class OrdineAccettazioneInevasoDTO {
private String dataCons;
private String barcode;
private String gestione;
private boolean ordTrasf;
public BindableBoolean selected;
@@ -223,11 +224,23 @@ public class OrdineAccettazioneInevasoDTO {
return gestione;
}
public GestioneEnum getGestioneEnum() {
return GestioneEnum.fromString(gestione);
}
public OrdineAccettazioneInevasoDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public boolean isOrdTrasf() {
return ordTrasf;
}
public OrdineAccettazioneInevasoDTO setOrdTrasf(boolean ordTrasf) {
this.ordTrasf = ordTrasf;
return this;
}
public boolean isSelected() {
return selected.get();

View File

@@ -0,0 +1,282 @@
package it.integry.integrywmsnative.gest.accettazione.dto;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
public class SitArtOrdDTO {
private String codJcom;
private String codMart;
private String codCol;
private String codTagl;
private String codAlis;
private String codArtFor;
private BigDecimal qtaOrd;
private BigDecimal numCnfOrd;
private BigDecimal qtaCnfOrd;
private BigDecimal qtaEvasa;
private BigDecimal qtaDaEvadere;
private BigDecimal numCnfDaEvadere;
private BigDecimal qtaRiservata;
private String untOrd;
private String codMdep;
private String dataOrd;
private int numOrd;
private String gestione;
private int rigaOrd;
private String codAnagOrd;
private String ragSocOrd;
private String codAnagCom;
private String ragSocCom;
private String rifOrd;
private String descrizioneCommessa;
private String termCons;
private String descrizioneEstesaArt;
public String getCodJcom() {
return codJcom;
}
public SitArtOrdDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public String getCodMart() {
return codMart;
}
public SitArtOrdDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getCodCol() {
return codCol;
}
public SitArtOrdDTO setCodCol(String codCol) {
this.codCol = codCol;
return this;
}
public String getCodTagl() {
return codTagl;
}
public SitArtOrdDTO setCodTagl(String codTagl) {
this.codTagl = codTagl;
return this;
}
public String getCodAlis() {
return codAlis;
}
public SitArtOrdDTO setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
public String getCodArtFor() {
return codArtFor;
}
public SitArtOrdDTO setCodArtFor(String codArtFor) {
this.codArtFor = codArtFor;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public SitArtOrdDTO setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public BigDecimal getNumCnfOrd() {
return numCnfOrd;
}
public SitArtOrdDTO setNumCnfOrd(BigDecimal numCnfOrd) {
this.numCnfOrd = numCnfOrd;
return this;
}
public BigDecimal getQtaCnfOrd() {
return qtaCnfOrd;
}
public SitArtOrdDTO setQtaCnfOrd(BigDecimal qtaCnfOrd) {
this.qtaCnfOrd = qtaCnfOrd;
return this;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
public SitArtOrdDTO setQtaEvasa(BigDecimal qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public BigDecimal getQtaDaEvadere() {
return qtaDaEvadere;
}
public SitArtOrdDTO setQtaDaEvadere(BigDecimal qtaDaEvadere) {
this.qtaDaEvadere = qtaDaEvadere;
return this;
}
public BigDecimal getNumCnfDaEvadere() {
return numCnfDaEvadere;
}
public SitArtOrdDTO setNumCnfDaEvadere(BigDecimal numCnfDaEvadere) {
this.numCnfDaEvadere = numCnfDaEvadere;
return this;
}
public BigDecimal getQtaRiservata() {
return qtaRiservata;
}
public SitArtOrdDTO setQtaRiservata(BigDecimal qtaRiservata) {
this.qtaRiservata = qtaRiservata;
return this;
}
public String getUntOrd() {
return untOrd;
}
public SitArtOrdDTO setUntOrd(String untOrd) {
this.untOrd = untOrd;
return this;
}
public String getCodMdep() {
return codMdep;
}
public SitArtOrdDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getDataOrd() {
return dataOrd;
}
public SitArtOrdDTO setDataOrd(String dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public int getNumOrd() {
return numOrd;
}
public SitArtOrdDTO setNumOrd(int numOrd) {
this.numOrd = numOrd;
return this;
}
public String getGestione() {
return gestione;
}
public GestioneEnum getGestioneEnum() {
return GestioneEnum.fromString(gestione);
}
public SitArtOrdDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public int getRigaOrd() {
return rigaOrd;
}
public SitArtOrdDTO setRigaOrd(int rigaOrd) {
this.rigaOrd = rigaOrd;
return this;
}
public String getCodAnagOrd() {
return codAnagOrd;
}
public SitArtOrdDTO setCodAnagOrd(String codAnagOrd) {
this.codAnagOrd = codAnagOrd;
return this;
}
public String getRagSocOrd() {
return ragSocOrd;
}
public SitArtOrdDTO setRagSocOrd(String ragSocOrd) {
this.ragSocOrd = ragSocOrd;
return this;
}
public String getCodAnagCom() {
return codAnagCom;
}
public SitArtOrdDTO setCodAnagCom(String codAnagCom) {
this.codAnagCom = codAnagCom;
return this;
}
public String getRagSocCom() {
return ragSocCom;
}
public SitArtOrdDTO setRagSocCom(String ragSocCom) {
this.ragSocCom = ragSocCom;
return this;
}
public String getRifOrd() {
return rifOrd;
}
public SitArtOrdDTO setRifOrd(String rifOrd) {
this.rifOrd = rifOrd;
return this;
}
public String getDescrizioneCommessa() {
return descrizioneCommessa;
}
public SitArtOrdDTO setDescrizioneCommessa(String descrizioneCommessa) {
this.descrizioneCommessa = descrizioneCommessa;
return this;
}
public String getTermCons() {
return termCons;
}
public SitArtOrdDTO setTermCons(String termCons) {
this.termCons = termCons;
return this;
}
public String getDescrizioneEstesaArt() {
return descrizioneEstesaArt;
}
public SitArtOrdDTO setDescrizioneEstesaArt(String descrizioneEstesaArt) {
this.descrizioneEstesaArt = descrizioneEstesaArt;
return this;
}
}

View File

@@ -0,0 +1,53 @@
package it.integry.integrywmsnative.gest.accettazione.rest;
import com.annimon.stream.Stream;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.accettazione.dto.GetPickingListAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
retrievePickingListNewStatic(orders, onComplete, onFailed);
}
public static void retrievePickingListNewStatic(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
List<GetPickingListAccettazioneDTO> getPickingListDTOs = Stream.of(orders)
.map(x -> new GetPickingListAccettazioneDTO()
.setData(x.getData())
.setGestione(x.getGestione())
.setNumero(x.getNumero()))
.toList();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.getArticoliFromOrdiniAccettazione(getPickingListDTOs).enqueue(new Callback<ServiceRESTResponse<List<SitArtOrdDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) {
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniAccettazione", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Throwable t) {
UtilityLogger.errorMe(new Exception(t));
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -3,10 +3,13 @@ package it.integry.integrywmsnative.gest.accettazione.rest;
import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.GetPickingListAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
/**
@@ -15,13 +18,10 @@ import retrofit2.http.Query;
public interface OrdiniAccettazioneRESTConsumerService {
@GET("SM2GetOrdiniAccettazioneInevasi")
Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> listOrdiniInevasi(@Query("codMdep") String codMdep);
@GET("SM2GetOrdiniAccettazioneInevasi")
Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> listOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione);
@GET("WMSGetPickingListAccettazione")
Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale);
@POST("wms/getArticoliFromOrdiniAccettazione")
Call<ServiceRESTResponse<List<SitArtOrdDTO>>> getArticoliFromOrdiniAccettazione(@Body List<GetPickingListAccettazioneDTO> pickingListAccettazioneDTOS);
}

View File

@@ -1,138 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso;
import android.content.Intent;
import androidx.databinding.DataBindingUtil;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOrdineAccettazioneInevasoViewModel;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
public class AccettazioneOrdineInevasoActivity extends BaseActivity {
public ActivityAccettazioneOrdineInevasoBinding bindings;
private AccettazioneOrdineAccettazioneInevasoViewModel mAccettazioneOrdineInevasoViewModel;
private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
private static final int PICK_UL_REQUEST = 1; // The request code
private int barcodeScannerIstanceID = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bindings = DataBindingUtil.setContentView(this, R.layout.activity_accettazione_ordine_inevaso);
FragmentArticoliInColloBottomSheetBinding bindings = this.bindings.bottomSheetInclude;
mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings);
List<OrdineAccettazioneDTO> orders = DataCache.retrieveItem(getIntent().getStringExtra("key"));
mAccettazioneOrdineInevasoViewModel = new AccettazioneOrdineAccettazioneInevasoViewModel(
this, mArticoliInColloBottomSheetViewModel, orders);
setSupportActionBar(this.bindings.toolbar);
setTitle(orders);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(mAccettazioneOrdineInevasoViewModel.onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
if(mArticoliInColloBottomSheetViewModel.isExpanded()){
mArticoliInColloBottomSheetViewModel.collapse();
} else if(mAccettazioneOrdineInevasoViewModel.thereIsAnOpenedUL()) {
mArticoliInColloBottomSheetViewModel.closeCurrentUL();
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_accettazione_ordine_inevaso, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.action_filter:
mAccettazioneOrdineInevasoViewModel.showOrderDialog();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void setTitle(List<OrdineAccettazioneDTO> ordini){
if(ordini.size() > 0){
if(ordini.size() == 1){
setTitle(ordini.get(0).getRagSoc());
} else {
setTitle(R.string.accettazione_ordine_inevaso_title_multiple_order);
}
} else {
setTitle(R.string.accettazione_ordine_inevaso_title_empty);
}
}
public void startListaBancaliRegistratiActivity(ArrayList<MtbColt> mtbColts){
Intent myIntent = ListaBancaliActivity.createIntent(this, mtbColts, false, PrinterRESTConsumer.Type.SECONDARIA, ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to
if (requestCode == PICK_UL_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
MtbColt recoveredMtbColt = DataCache.retrieveItem(data.getStringExtra("key"));
mAccettazioneOrdineInevasoViewModel.recoverUL(recoveredMtbColt);
}
}
}
}

View File

@@ -1,318 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core;
import android.content.Context;
import androidx.databinding.ObservableArrayList;
import android.view.View;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy;
/**
* Created by GiuseppeS on 21/03/2018.
*/
public class AccettazioneOrdineInevasoHelper {
private Context mContext;
private ObservableArrayList<AccettazioneOrdineInevasoListViewModel> mListViewModels = new ObservableArrayList<>();
public AccettazioneOrdineInevasoHelper(Context context){
mContext = context;
}
public MainListOrdineAccettazioneAdapter getRightListAdapter(View emptyView) {
return new MainListOrdineAccettazioneAdapter(mContext, mListViewModels, emptyView);
}
public void updateListModel(AccettazioneOrdineInevasoOrderBy.Enum orderByEnum, List<List<OrdineAccettazioneDTO.Riga>> mDataset, List<MtbColr> mtbColrs) throws Exception {
mListViewModels.clear();
switch (orderByEnum){
case COD_ART_FOR:
case DESCR_ART:
mListViewModels.addAll(getListViewModelPerArtForn(mDataset, mtbColrs));
break;
case RAG_SOC_COM:
mListViewModels.addAll(getListViewModelPerRagSocCommessa(mDataset, mtbColrs));
break;
default:
throw new Exception("Cannot find right list adapter: " + orderByEnum.toString());
}
}
public List<List<OrdineAccettazioneDTO.Riga>> getOrdiniRaggruppatiPerCodArtForn(List<OrdineAccettazioneDTO.Riga> mDataset, boolean forceHiddenCheck){
List<String> codArtForns = new ArrayList<>();
for(int i = 0; i < mDataset.size(); i++){
if(!codArtForns.contains(mDataset.get(i).getCodArtFor())){
codArtForns.add(mDataset.get(i).getCodArtFor());
}
if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = CommonConst.Config.COMMESSA_MAG;
if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = null;
}
boolean anyNull = codArtForns.contains(null);
codArtForns = Stream.of(codArtForns)
.withoutNulls()
.sortBy(x -> x).toList();
if(anyNull) codArtForns.add(null);
List<List<OrdineAccettazioneDTO.Riga>> groupedRighe = new ArrayList<>();
for (String codArtForn : codArtForns) {
List<OrdineAccettazioneDTO.Riga> tmpList = Stream.of(mDataset).filter(x -> (x.getCodArtFor() != null && x.getCodArtFor().equalsIgnoreCase(codArtForn)) || (x.getCodArtFor() == null && codArtForn == null)).toList();
for(int i = 0; i < tmpList.size(); i++){
if(tmpList.get(i).isHidden() == null || forceHiddenCheck) {
if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) {
tmpList.get(i).setHidden(true);
//tmpList.remove(i);
//i--;
} else tmpList.get(i).setHidden(false);
tmpList.get(i).setTempHidden(false);
}
}
if(tmpList.size() > 0){
groupedRighe.add(tmpList);
}
}
return groupedRighe;
}
public List<List<OrdineAccettazioneDTO.Riga>> getOrdiniRaggruppatiPerDescrArt(List<OrdineAccettazioneDTO.Riga> mDataset, boolean forceHiddenCheck){
List<String> descrArtForns = new ArrayList<>();
for(int i = 0; i < mDataset.size(); i++){
if(!descrArtForns.contains(mDataset.get(i).descrizioneEstesa)){
descrArtForns.add(mDataset.get(i).descrizioneEstesa);
}
if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = CommonConst.Config.COMMESSA_MAG;
if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = null;
}
Collections.sort(descrArtForns, String::compareToIgnoreCase);
List<List<OrdineAccettazioneDTO.Riga>> groupedRighe = new ArrayList<>();
for (String descrArtForn : descrArtForns) {
List<OrdineAccettazioneDTO.Riga> tmpList = Stream.of(mDataset).filter(x -> x.getDescrizioneEstesa() != null && x.getDescrizioneEstesa().equalsIgnoreCase(descrArtForn)).toList();
for(int i = 0; i < tmpList.size(); i++){
if(tmpList.get(i).isHidden() == null || forceHiddenCheck) {
if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) {
tmpList.get(i).setHidden(true);
} else tmpList.get(i).setHidden(false);
tmpList.get(i).setTempHidden(false);
}
}
if(tmpList.size() > 0){
groupedRighe.add(tmpList);
}
}
return groupedRighe;
}
private class RaggruppaPerCommessaUtilDTO {
public String codJcom = "";
public String ragSocCom = "";
}
public List<List<OrdineAccettazioneDTO.Riga>> getOrdiniRaggruppatiPerRagSocCommessa(List<OrdineAccettazioneDTO.Riga> mDataset, boolean forceHiddenCheck) {
List<RaggruppaPerCommessaUtilDTO> commessaList = new ArrayList<>();
commessaList.add(new RaggruppaPerCommessaUtilDTO());
for(int i = 0; i < mDataset.size(); i++){
boolean alreadyExists = false;
if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = CommonConst.Config.COMMESSA_MAG;
if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = mContext.getText(R.string.stock).toString().toUpperCase();
for(int k = 0; k < commessaList.size(); k++){
if(commessaList.get(k).codJcom.equalsIgnoreCase(mDataset.get(i).codJcom)){
alreadyExists = true;
}
}
if(mDataset.get(i).codJcom != null && !alreadyExists){
RaggruppaPerCommessaUtilDTO dto = new RaggruppaPerCommessaUtilDTO();
dto.codJcom = mDataset.get(i).codJcom;
dto.ragSocCom = mDataset.get(i).descrizioneCommessa;
commessaList.add(dto);
}
}
Collections.sort(commessaList, (dto1, dto2) -> {
if(dto1.ragSocCom == null || dto2.codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) return -1;
if(dto2.ragSocCom == null || dto1.codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) return 1;
return dto1.ragSocCom.compareToIgnoreCase(dto2.ragSocCom);
});
List<List<OrdineAccettazioneDTO.Riga>> groupedRighe = new ArrayList<>();
for (RaggruppaPerCommessaUtilDTO dto : commessaList) {
List<OrdineAccettazioneDTO.Riga> tmpList = Stream.of(mDataset).filter(x -> x.getCodJcom().equalsIgnoreCase(dto.codJcom)).toList();
for(int i = 0; i < tmpList.size(); i++){
if(tmpList.get(i).isHidden() == null || forceHiddenCheck) {
if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) {
tmpList.get(i).setHidden(true);
//tmpList.remove(i);
//i--;
} else tmpList.get(i).setHidden(false);
tmpList.get(i).setTempHidden(false);
}
}
Collections.sort(tmpList, (obj1, obj2) -> obj1.mtbAart.getDescrizioneEstesa().compareToIgnoreCase(obj2.mtbAart.getDescrizioneEstesa()));
if(tmpList.size() > 0){
groupedRighe.add(tmpList);
}
}
return groupedRighe;
}
public List<AccettazioneOrdineInevasoListViewModel> getListViewModelPerArtForn(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe, List<MtbColr> mtbColrs){
List<AccettazioneOrdineInevasoListViewModel> listModel = new ArrayList<>();
for(int i = 0; i < groupedRighe.size(); i++){
AccettazioneOrdineInevasoListViewModel itemModel = new AccettazioneOrdineInevasoListViewModel();
itemModel.descrizioneGroup = "";
itemModel.descrizioneGroup += !UtilityString.isNullOrEmpty(groupedRighe.get(i).get(0).getCodArtFor()) ? (groupedRighe.get(i).get(0).getCodArtFor() + " - ") : "";
itemModel.descrizioneGroup += groupedRighe.get(i).get(0).descrizioneEstesa;
itemModel.rows = new ArrayList<>();
for(int k = 0; k < groupedRighe.get(i).size(); k++){
final OrdineAccettazioneDTO.Riga rowItem = groupedRighe.get(i).get(k);
final AccettazioneOrdineInevasoListViewModel.SubItem rowModel = new AccettazioneOrdineInevasoListViewModel.SubItem();
rowModel.setBadge1(rowItem.codJcom != null ? rowItem.codJcom : CommonConst.Config.COMMESSA_MAG);
rowModel.setBadge2(String.valueOf(rowItem.numOrd));
// rowModel.descrizione = rowItem.ragSocCom;
rowModel.setDescrizione(rowItem.descrizioneCommessa);
rowModel.setQtaRiservata(getRigaQuantityEvasa(rowItem, mtbColrs));
rowModel.setQtaOrdinata(rowItem.getQtaOrd());
rowModel.setOriginalModel(rowItem);
itemModel.rows.add(rowModel);
}
listModel.add(itemModel);
}
return listModel;
}
public List<AccettazioneOrdineInevasoListViewModel> getListViewModelPerRagSocCommessa(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe, List<MtbColr> mtbColrs) {
List<AccettazioneOrdineInevasoListViewModel> listModel = new ArrayList<>();
for(int i = 0; i < groupedRighe.size(); i++){
AccettazioneOrdineInevasoListViewModel itemModel = new AccettazioneOrdineInevasoListViewModel();
if(groupedRighe.get(i).get(0).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){
itemModel.descrizioneGroup = mContext.getString(R.string.warehouse).toUpperCase();
} else {
itemModel.descrizioneGroup = groupedRighe.get(i).get(0).codJcom;
}
if(groupedRighe.get(i).get(0).ragSocCom != null && groupedRighe.get(i).get(0).ragSocCom.trim().length() > 0){
itemModel.descrizioneGroup += " - " + groupedRighe.get(i).get(0).descrizioneCommessa;
}
itemModel.rows = new ArrayList<>();
for(int k = 0; k < groupedRighe.get(i).size(); k++){
final OrdineAccettazioneDTO.Riga rowItem = groupedRighe.get(i).get(k);
final AccettazioneOrdineInevasoListViewModel.SubItem rowModel = new AccettazioneOrdineInevasoListViewModel.SubItem();
rowModel.setBadge1(rowItem.getCodArtFor());
rowModel.setBadge2(String.valueOf(rowItem.numOrd));
rowModel.setDescrizione(rowItem.mtbAart.getDescrizioneEstesa());
rowModel.setQtaRiservata(getRigaQuantityEvasa(rowItem, mtbColrs));
// rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate);
rowModel.setQtaOrdinata(rowItem.getQtaOrd());
rowModel.setOriginalModel(rowItem);
itemModel.rows.add(rowModel);
}
listModel.add(itemModel);
}
return listModel;
}
private BigDecimal getRigaQuantityEvasa(OrdineAccettazioneDTO.Riga item, List<MtbColr> mtbColrs){
BigDecimal currentQtaEvasa = item.getQtaRiservate().add(item.getQtaEvasa());
if(mtbColrs != null) {
List<MtbColr> filteredMtbColrs = Stream.of(mtbColrs)
.filter(x -> x.getNumOrd() != null)
.filter(
x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.getCodMart()) &&
(x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) &&
x.getRigaOrd() == item.rigaOrd &&
x.getNumOrd() == item.numOrd &&
x.getDataOrdS().equals(UtilityDate.formatDate(item.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH))).toList();
for (MtbColr mtbColr : filteredMtbColrs) {
currentQtaEvasa = currentQtaEvasa.add(mtbColr.getQtaCol());
}
}
return currentQtaEvasa;
}
}

View File

@@ -1,10 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
public interface IOnOrdineAccettazioneRowDispatchCallback {
void onOrdineRowDispatch(OrdineAccettazioneDTO.Riga item, Ean128Model ean128Model);
}

View File

@@ -1,247 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core;
import android.content.Context;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import android.graphics.Color;
import androidx.core.util.Pools;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel;
/**
* Created by GiuseppeS on 21/03/2018.
*/
public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<MainListOrdineAccettazioneAdapter.ViewHolder> {
private Context mContext;
private List<AccettazioneOrdineInevasoListViewModel> mDataset;
private View mEmptyView;
private ObservableArrayList<AccettazioneOrdineInevasoListViewModel> mObservableDataset;
private IOnOrdineAccettazioneRowDispatchCallback mOrdineRowDispatch;
private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200);
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
protected View mGroupTitle;
protected LinearLayout mLinearLayoutGroupItemContainer;
protected List<View> pool = new ArrayList<>();
public ViewHolder(View v) {
super(v);
}
}
public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList<AccettazioneOrdineInevasoListViewModel> myDataset, View emptyView) {
mContext = context;
mObservableDataset = myDataset;
mEmptyView = emptyView;
mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList();
mObservableDataset.addOnListChangedCallback(onListChangedCallback);
checkIfEmpty();
}
public void setOnOrdineRowDispatchCallback(IOnOrdineAccettazioneRowDispatchCallback ordineRowDispatch) {
mOrdineRowDispatch = ordineRowDispatch;
}
private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback<ObservableList<AccettazioneOrdineInevasoListViewModel>>() {
@Override
public void onChanged(ObservableList<AccettazioneOrdineInevasoListViewModel> sender) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeChanged(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeInserted(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeMoved(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int fromPosition, int toPosition, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
private void refreshNotHiddenElements() {
mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList();
}
};
@Override
public MainListOrdineAccettazioneAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for, parent, false);
//v.setHasTransientState(true);
ViewHolder vh = new ViewHolder(v);
TextView descrizioneArtForn = v.findViewById(R.id.accettazione_ordine_inevaso_main_list_descrArtFor);
vh.mGroupTitle = descrizioneArtForn;
LinearLayout groupItemContainer = v.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_container);
vh.mLinearLayoutGroupItemContainer = groupItemContainer;
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(MainListOrdineAccettazioneAdapter.ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
((TextView)holder.mGroupTitle).setText(mDataset.get(position).descrizioneGroup);
List<AccettazioneOrdineInevasoListViewModel.SubItem> subset = mDataset.get(position).rows;
int visibleElementsCounter = 0;
for(int i = 0; i < subset.size(); i++) {
final AccettazioneOrdineInevasoListViewModel.SubItem rowItem = subset.get(i);
if(!rowItem.getOriginalModel().isHidden() &&
(rowItem.getOriginalModel().isTempHidden() == null ||
(rowItem.getOriginalModel().isTempHidden() != null && !rowItem.getOriginalModel().isTempHidden()))) {
visibleElementsCounter++;
View groupModelViewPool = (View) sPool.acquire();
if (groupModelViewPool == null) {
groupModelViewPool = LayoutInflater.from(mContext)
.inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for_group_model, holder.mLinearLayoutGroupItemContainer, false);
}
View groupModelView = groupModelViewPool;
holder.pool.add(groupModelView);
if (rowItem.getQtaRiservata().subtract(rowItem.getQtaOrdinata()).floatValue() >= 0 ) {
groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
} else if (rowItem.getQtaRiservata().floatValue() > 0) {
groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
} else if (visibleElementsCounter % 2 == 1) {
groupModelView.setBackgroundColor(Color.WHITE);
} else {
groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
}
final TextView badge1 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge1);
badge1.setText(rowItem.getBadge1());
badge1.setVisibility(UtilityString.isNullOrEmpty(rowItem.getBadge1()) ? View.GONE : View.VISIBLE);
final TextView badge2 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge2);
badge2.setText(rowItem.getBadge2());
badge2.setVisibility(UtilityString.isNullOrEmpty(rowItem.getBadge2()) ? View.GONE : View.VISIBLE);
final TextView descrizione = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_descrizione);
String descrizioneString = rowItem.getDescrizione();
int descrizioneColor = Color.BLACK;
if (UtilityString.isNullOrEmpty(descrizioneString)) {
descrizioneString = mContext.getString(R.string.no_description);
descrizioneColor = Color.GRAY;
} else if (descrizioneString.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) {
descrizioneString = mContext.getString(R.string.stock);
}
descrizione.setText(descrizioneString);
descrizione.setTextColor(descrizioneColor);
final TextView qtaEvasa = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_evasa);
qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata()));
final TextView qtaTot = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_tot);
qtaTot.setText(UtilityNumber.decimalToString(rowItem.getQtaOrdinata()));
groupModelView.setOnClickListener(view -> {
if (mOrdineRowDispatch != null) {
mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel(), null);
}
});
holder.mLinearLayoutGroupItemContainer.addView(groupModelView);
}
}
}
@Override
public void onViewRecycled(MainListOrdineAccettazioneAdapter.ViewHolder holder){
if(holder != null){
for(int i = 0; i < holder.pool.size(); i++){
((ViewGroup) holder.pool.get(i).getParent()).removeView(holder.pool.get(i));
sPool.release(holder.pool.get(i));
}
holder.pool.clear();
}
super.onViewRecycled(holder);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.size();
}
void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
}

View File

@@ -1,92 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.List;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
/**
* Created by GiuseppeS on 27/03/2018.
*/
public class AccettazioneOrdineInevasoListViewModel {
public String descrizioneGroup;
public List<SubItem> rows;
public boolean isHidden(){
if(rows == null || rows.size() == 0) return true;
return Stream.of(rows).filter(
x -> (x.originalModel.isHidden() != null && !x.originalModel.isHidden()) &&
(x.originalModel.isTempHidden() != null && !x.originalModel.isTempHidden())).count() == 0;
}
public static class SubItem {
private String badge1;
private String badge2;
private String descrizione;
private BigDecimal qtaRiservata;
private BigDecimal qtaOrdinata;
private OrdineAccettazioneDTO.Riga originalModel;
public String getBadge1() {
return badge1;
}
public SubItem setBadge1(String badge1) {
this.badge1 = badge1;
return this;
}
public String getBadge2() {
return badge2;
}
public SubItem setBadge2(String badge2) {
this.badge2 = badge2;
return this;
}
public String getDescrizione() {
return descrizione;
}
public SubItem setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getQtaRiservata() {
return qtaRiservata;
}
public SubItem setQtaRiservata(BigDecimal qtaRiservata) {
this.qtaRiservata = qtaRiservata;
return this;
}
public BigDecimal getQtaOrdinata() {
return qtaOrdinata;
}
public SubItem setQtaOrdinata(BigDecimal qtaOrdinata) {
this.qtaOrdinata = qtaOrdinata;
return this;
}
public OrdineAccettazioneDTO.Riga getOriginalModel() {
return originalModel;
}
public SubItem setOriginalModel(OrdineAccettazioneDTO.Riga originalModel) {
this.originalModel = originalModel;
return this;
}
}
}

View File

@@ -1,948 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel;
import android.app.Dialog;
import android.text.SpannableString;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import com.tfb.fbtoast.FBToast;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
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.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.AccettazioneOrdineInevasoHelper;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.IOnOrdineAccettazioneRowDispatchCallback;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainListOrdineAccettazioneAdapter;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.rest.OrdineAccettazioneInevasoRESTConsumerService;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class AccettazioneOrdineAccettazioneInevasoViewModel implements IOnColloClosedCallback, IOnOrdineAccettazioneRowDispatchCallback {
public ObservableField<Boolean> isFabVisible = new ObservableField<>();
private AccettazioneOrdineInevasoActivity mActivity;
private final ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
private final List<OrdineAccettazioneDTO> mOrders;
private List<List<OrdineAccettazioneDTO.Riga>> groupedRighe;
private List<OrdineAccettazioneDTO.Riga> groupedOrdini;
private AccettazioneOrdineInevasoHelper helper;
private AccettazioneOrdineInevasoOrderBy.Enum currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR;
private MainListOrdineAccettazioneAdapter mAdapter;
private GestioneEnum defaultGestioneOfUL = null;
public AccettazioneOrdineAccettazioneInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List<OrdineAccettazioneDTO> orders) {
this.mActivity = activity;
this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel;
this.mOrders = orders;
this.isFabVisible.set(true);
this.mActivity.bindings.setViewmodel(this);
this.init();
}
private void init() {
currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(SettingsManager.i().userSession.defaultOrdinamentoPickingAccettazione);
mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this);
mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onRowDeleted);
mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onRowEdited);
groupedOrdini = new ArrayList<>();
for (OrdineAccettazioneDTO ordine : mOrders) {
groupedOrdini.addAll(ordine.getOrdini());
}
helper = new AccettazioneOrdineInevasoHelper(mActivity);
groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini, true);
initRecyclerView(groupedRighe);
//Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = Stream.of(groupedOrdini)
.map(OrdineAccettazioneDTO.Riga::getGestioneOrdEnum)
.withoutNulls()
.distinctBy(x -> x)
.toList();
if (foundGestioni != null) {
if (foundGestioni.size() == 1) {
defaultGestioneOfUL = foundGestioni.get(0) == GestioneEnum.PRODUZIONE ? GestioneEnum.LAVORAZIONE : foundGestioni.get(0);
} else {
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(mActivity.getString(R.string.error_multiple_gest)), null, () -> {
mActivity.finish();
}).show();
return;
}
} else {
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(mActivity.getString(R.string.error_no_gest_found)), null, () -> {
mActivity.finish();
}).show();
return;
}
}
private void initRecyclerView(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe) {
//RecyclerView setup
mActivity.bindings.accettazioneOrdineMainList.setHasFixedSize(true);
mActivity.bindings.accettazioneOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity));
mAdapter = helper.getRightListAdapter(mActivity.bindings.accettazioneEmptyView);
try {
helper.updateListModel(AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR, groupedRighe, null);
} catch (Exception e) {
UtilityExceptions.defaultException(mActivity, e);
}
mAdapter.setOnOrdineRowDispatchCallback(this);
mActivity.bindings.accettazioneOrdineMainList.setAdapter(mAdapter);
}
public void refreshOrderBy(boolean forceHiddenCheck) {
switch (currentOrderBy) {
case COD_ART_FOR:
groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini, forceHiddenCheck);
break;
case DESCR_ART:
groupedRighe = helper.getOrdiniRaggruppatiPerDescrArt(groupedOrdini, forceHiddenCheck);
break;
case RAG_SOC_COM:
groupedRighe = helper.getOrdiniRaggruppatiPerRagSocCommessa(groupedOrdini, forceHiddenCheck);
break;
default:
break;
}
try {
List<MtbColr> mtbColrs = getColloRef() != null ? getColloRef().getMtbColr() : null;
helper.updateListModel(currentOrderBy, groupedRighe, mtbColrs);
} catch (Exception e) {
UtilityExceptions.defaultException(mActivity, e);
}
}
public void applyFilter(String descriptionText) {
mActivity.bindings.filteredArtsInListExpandableLayout.expand(true);
mActivity.bindings.descriptionFilterText.setText(descriptionText);
}
public void removeListFilter() {
for (int i = 0; i < groupedOrdini.size(); i++) {
groupedOrdini.get(i).setTempHidden(false);
}
refreshOrderBy(false);
mActivity.bindings.filteredArtsInListExpandableLayout.collapse(true);
}
public void recoverUL(MtbColt recoveredMtbColt) {
for (int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++) {
MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i);
/*
List<OrdineAccettazioneDTO.Riga> foundRows = Stream.of(groupedOrdini)
.filter(x -> x.getNumOrd() == currentMtbColr.getNumOrd() &&
x.getRigaOrd() == currentMtbColr.getRigaOrd()&&
x.getDataOrdD().equals(currentMtbColr.getDataOrdD()))
.toList();
*/
List<OrdineAccettazioneDTO.Riga> foundRows = Stream.of(groupedOrdini)
.filter(x -> Objects.equals(x.mtbAart.getCodMart(), currentMtbColr.getCodMart()) &&
Objects.equals(x.getPartitaMag(), currentMtbColr.getPartitaMag()) &&
Objects.equals(x.getCodJcom(), currentMtbColr.getCodJcom()))
.toList();
if (foundRows != null && foundRows.size() > 0) {
OrdineAccettazioneDTO.Riga currentRow = foundRows.get(0);
currentRow.setHidden(false);
currentRow.setQtaRiservate(currentRow.getQtaRiservate().subtract(currentMtbColr.getQtaCol()));
}
}
setULToCurrentContext(recoveredMtbColt);
refreshOrderBy(false);
}
public RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
BarcodeManager.disable();
if (UtilityBarcode.isEtichettaAnonima(data)) {
if (!thereIsAnOpenedUL()) this.executeEtichettaAnonima(data, progressDialog);
else {
DialogSimpleMessageHelper.makeErrorDialog(
mActivity,
new SpannableString(mActivity.getString(R.string.lu_scan_not_granted_here)),
null,
() -> {
BarcodeManager.enable();
progressDialog.dismiss();
})
.show();
}
} else if (UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaEan128(data, progressDialog);
} else if (UtilityBarcode.isEanPeso(data)) {
this.executeEtichettaEanPeso(data, progressDialog);
} else {
this.loadArticolo(data.getStringValue(), null, progressDialog);
}
};
private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
ColliMagazzinoRESTConsumer.getBySSCCStatic(barcodeScanDTO.getStringValue(), false, false, mtbColt -> {
if (mtbColt == null) {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
UtilityExceptions.defaultException(mActivity, new Exception("Per continuare scansiona un'etichetta dell'anno corrente"), progressDialog, false);
BarcodeManager.enable();
} else {
this.createNewUL(UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()), CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, progressDialog, true, null);
BarcodeManager.enable();
}
} else {
progressDialog.dismiss();
BarcodeManager.enable();
DialogSimpleMessageHelper.makeWarningDialog(mActivity,
new SpannableString(mActivity.getResources().getText(R.string.already_used_anonymous_barcode)),
null, null).show();
}
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
BarcodeRESTConsumer.decodeEan128Static(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc;
if (ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin;
if (ean128Model.Content != null) barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) {
barcodeProd = barcodeProd.substring(1, barcodeProd.length());
}
this.loadArticolo(barcodeProd, ean128Model, progressDialog);
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
progressDialog.dismiss();
BarcodeManager.enable();
}
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
try {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), progressDialog);
} catch (Exception ex) {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
}
}
private void loadArticolo(String barcodeProd, Ean128Model ean128Model, Dialog progressDialog) {
if (barcodeProd.length() == 14) {
// barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd);
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
}
ArticoloRESTConsumer.getByBarcodeProdStatic(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) {
if (!thereIsAnOpenedUL()) {
if (SettingsManager.iDB().isFlagCanAutoOpenNewULAccettazione()) {
this.createNewUL(null, null, progressDialog, false, () -> {
BarcodeManager.enable();
this.searchArtInList(mtbAartList.get(0), ean128Model);
});
} else {
BarcodeManager.enable();
progressDialog.dismiss();
showPleaseOpenULDialog();
}
} else {
this.searchArtInList(mtbAartList.get(0), ean128Model);
BarcodeManager.enable();
progressDialog.dismiss();
}
} else {
BarcodeManager.enable();
progressDialog.dismiss();
DialogSimpleMessageHelper.makeWarningDialog(mActivity,
new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)),
null, null)
.show();
}
}, ex -> {
BarcodeManager.enable();
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
});
}
private void searchArtInList(MtbAart mtbAart, Ean128Model ean128Model) {
removeListFilter();
List<OrdineAccettazioneDTO.Riga> foundRowsList = Stream.of(groupedOrdini)
.filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(mtbAart.getCodMart()) &&
(x.isHidden() != null && !x.isHidden()) && (x.isTempHidden() != null && !x.isTempHidden()))
.toList();
if (foundRowsList.size() == 0) {
showNoArtFoundDialog();
} else if (foundRowsList.size() == 1) {
onOrdineRowDispatch(foundRowsList.get(0), ean128Model);
} else {
for (int i = 0; i < groupedOrdini.size(); i++) {
if (!foundRowsList.contains(groupedOrdini.get(i))) {
groupedOrdini.get(i).setTempHidden(true);
}
}
applyFilter("COD: " + mtbAart.getCodMart());
refreshOrderBy(false);
}
}
private void showNoArtFoundDialog() {
DialogSimpleMessageHelper.makeWarningDialog(mActivity,
new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)),
null, null).show();
}
private void showPleaseOpenULDialog() {
DialogSimpleMessageHelper.makeWarningDialog(mActivity,
new SpannableString(mActivity.getResources().getText(R.string.please_open_lu)),
null, null).show();
}
public void showOrderDialog() {
AlertDialog dialog = new AlertDialog.Builder(mActivity)
.setTitle(mActivity.getText(R.string.action_orderBy))
.setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, currentOrderBy.getVal(), (dialog12, which) -> {
currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which);
SettingsManager.i().userSession.defaultOrdinamentoPickingAccettazione = which;
})
.setPositiveButton("Ok", (dialog1, which) -> refreshOrderBy(false))
.create();
dialog.show();
}
public void createNewUL() {
this.createNewUL(null, null, null, false, null);
}
public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, Runnable onComplete) {
mActivity.bindings.accettazioneOrdineInevasoFab.close(true);
if (progress == null) {
progress = UtilityProgress.createDefaultProgressDialog(mActivity);
}
Dialog finalProgress = progress;
NoteAggiuntiveLUDialog.make(mActivity, noteString -> {
//Add loading dialog here
finalProgress.show();
GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_POSIZIONE_COLLI_ACCETTAZIONE", defaultPosAccettazioneDTO -> {
String defaultPosAccettazione = "";
if (defaultPosAccettazioneDTO != null && !UtilityString.isNullOrEmpty(defaultPosAccettazioneDTO.value))
defaultPosAccettazione = defaultPosAccettazioneDTO.value;
MtbColt mtbColt = new MtbColt();
mtbColt
.initDefaultFields()
.setGestione(defaultGestioneOfUL)
.setAnnotazioni(noteString)
.setPosizione(defaultPosAccettazione)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if (customNumCollo != null) {
mtbColt.setNumCollo(customNumCollo);
}
if (!UtilityString.isNullOrEmpty(customSerCollo)) {
mtbColt.setSerCollo(customSerCollo);
}
List<String> codAnags =
Stream.of(mOrders)
.map(OrdineAccettazioneDTO::getCodAnag)
.distinct()
.toList();
if (codAnags != null && codAnags.size() == 1) {
mtbColt.setCodAnag(codAnags.get(0));
}
List<String> rifOrds =
Stream.of(mOrders)
.map(OrdineAccettazioneDTO::getRifOrd)
.distinct()
.toList();
if (rifOrds != null && rifOrds.size() == 1) {
mtbColt.setRifOrd(rifOrds.get(0));
}
List<String> numDataOrds =
Stream.of(mOrders)
.map(value -> value.getNumero() + value.getData())
.distinct()
.toList();
if (numDataOrds != null && numDataOrds.size() == 1) {
mtbColt.setNumOrd(mOrders.get(0).getNumero());
mtbColt.setDataOrd(mOrders.get(0).getData());
try {
mtbColt.generaFiltroOrdine();
} catch (Exception ex) {
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(ex.getMessage()), null, null).show();
return;
}
}
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
value
.setDisablePrint(disablePrint)
.setMtbColr(new ObservableArrayList<>());
value.setMtbCols(null);
setULToCurrentContext(value);
finalProgress.dismiss();
FBToast.successToast(mActivity, mActivity.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
if (onComplete != null) onComplete.run();
}
@Override
public void onFailed(Exception ex) {
UtilityExceptions.defaultException(mActivity, ex, finalProgress);
}
});
}, ex -> UtilityExceptions.defaultException(mActivity, ex, finalProgress));
}, finalProgress::dismiss).show();
}
private void setULToCurrentContext(MtbColt mtbColt) {
isFabVisible.set(false);
mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt);
}
//Al click di "Mostra UL già create"
public void showCreatedUL() {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mActivity);
mActivity.bindings.accettazioneOrdineInevasoFab.close(false);
try {
OrdineAccettazioneInevasoRESTConsumerService.getBancaliGiaRegistrati(mOrders, mtbColts -> {
progress.dismiss();
mActivity.startListaBancaliRegistratiActivity((ArrayList<MtbColt>) mtbColts);
}, ex -> UtilityExceptions.defaultException(mActivity, ex, progress));
} catch (Exception ex) {
UtilityExceptions.defaultException(mActivity, ex, progress);
}
}
@Override
public void onColloClosed(Runnable onComplete, boolean shouldPrint) {
if (thereIsAnOpenedUL()) {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mActivity);
progress.show();
if (thereIsAnyRowInUL()) {
ColliMagazzinoRESTConsumer.updateDataFineStatic(getColloRef(), () -> {
if (shouldPrint) printCollo(progress, onComplete);
else {
postCloseOperations(onComplete);
progress.dismiss();
}
}, ex -> UtilityExceptions.defaultException(mActivity, ex, progress));
} else {
deleteCollo(progress, onComplete);
}
} else {
if (onComplete != null) onComplete.run();
}
}
private void printCollo(Dialog progress, Runnable onComplete) {
MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get();
if (currentMtbColt.getDisablePrint()) {
postCloseOperations(onComplete);
progress.dismiss();
return;
}
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().userSession.depo.getCodMdep(), PrinterRESTConsumer.Type.SECONDARIA, value -> {
if (value.size() > 0) {
try {
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO, reportName -> {
PrinterRESTConsumer.printColloStatic(
value.get(0),
currentMtbColt,
1, reportName, () -> {
postCloseOperations(onComplete);
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(
mActivity,
new SpannableString(errorMessage),
null,
null,
R.string.button_ignore_print,
() -> postCloseOperations(onComplete)).show();
});
}, ex -> UtilityExceptions.defaultException(mActivity, ex, progress)
);
} catch (Exception ex) {
UtilityExceptions.defaultException(mActivity, ex, progress);
}
} else {
resetUL();
isFabVisible.set(true);
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mActivity, new SpannableString(errorMessage), null, null).show();
}
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progress);
});
}
private void deleteCollo(Dialog progress, Runnable onComplete) {
ColliMagazzinoRESTConsumer.deleteColloStatic(getColloRef(), () -> {
mArticoliInColloBottomSheetViewModel.mtbColt.set(null);
isFabVisible.set(true);
progress.dismiss();
if (onComplete != null) onComplete.run();
}, ex -> UtilityExceptions.defaultException(mActivity, ex, progress));
}
public boolean thereIsAnOpenedUL() {
return getColloRef() != null;
}
public boolean thereIsAnyRowInUL() {
return getColloRef() != null &&
getColloRef().getMtbColr() != null &&
getColloRef().getMtbColr().size() > 0;
}
private void postCloseOperations(Runnable onComplete) {
MtbColt mtbColt = (MtbColt) getColloRef().clone();
resetUL();
isFabVisible.set(true);
if (mtbColt != null && mtbColt.getMtbColr() != null) {
for (int i = 0; i < mtbColt.getMtbColr().size(); i++) {
MtbColr currentRow = mtbColt.getMtbColr().get(i);
if (currentRow.getRigaOrd() != null) {
for (int k = 0; k < this.groupedOrdini.size(); k++) {
OrdineAccettazioneDTO.Riga x = this.groupedOrdini.get(k);
if (x.getQtaDaEvadere().floatValue() > 0 &&
x.getMtbAart().getCodMart().equalsIgnoreCase(currentRow.getCodMart()) &&
x.getCodJcom().equalsIgnoreCase(currentRow.getCodJcom()) &&
x.getRigaOrd() == currentRow.getRigaOrd() &&
x.getDataOrdD().equals(currentRow.getDataOrdD()) &&
x.getNumOrd() == currentRow.getNumOrd()) {
x.setQtaRiservate(x.getQtaRiservate().add(currentRow.getQtaCol()));
}
}
// Stream.of(this.groupedOrdini)
// .filter(x ->
// x.getQtaDaEvadere().floatValue() > 0 &&
// x.getMtbAart().getCodMart().equalsIgnoreCase(currentRow.getCodMart()) &&
// x.getCodJcom().equalsIgnoreCase(currentRow.getCodJcom()) &&
// x.getRigaOrd() == currentRow.getRigaOrd() &&
// x.getDataOrdD().equals(currentRow.getDataOrdD()) &&
// x.getNumOrd() == currentRow.getNumOrd()
// )
// .forEach(x -> {
// x.setQtaRiservate(x.getQtaRiservate().add(currentRow.getQtaCol()));
// });
}
}
}
removeListFilter();
refreshOrderBy(true);
if (onComplete != null) onComplete.run();
}
@Override
public void onOrdineRowDispatch(final OrdineAccettazioneDTO.Riga item, Ean128Model ean128Model) {
if (getColloRef() != null) {
List<MtbColr> currentMtbColrs = getColloRef().getMtbColr();
List<MtbColr> filteredMtbColrs = Stream.of(currentMtbColrs).filter(
x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.getCodMart()) &&
x.getNumOrd() == item.numOrd &&
(x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) &&
x.getRigaOrd() == item.rigaOrd).toList();
float qtaEvasaInMtbColr = 0;
for (MtbColr mtbColr : filteredMtbColrs) {
qtaEvasaInMtbColr += mtbColr.getQtaCol().floatValue();
}
float qtaEvasa = item.qtaRiservate + qtaEvasaInMtbColr;
BigDecimal qtaDaEvadere;
BigDecimal totalQtaDaEvadere = item.getQtaOrd().subtract(new BigDecimal(qtaEvasa)).subtract(item.getQtaEvasa());
BigDecimal qtaColliPedana = item.mtbAart.getColliPedana().multiply(item.mtbAart.getQtaCnf());
if (qtaColliPedana.floatValue() > 0 && qtaColliPedana.compareTo(totalQtaDaEvadere) <= 0) {
qtaDaEvadere = qtaColliPedana;
} else {
qtaDaEvadere = totalQtaDaEvadere;
}
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
.setBatchLot(item.getPartitaMag())
.setCodArtFor(item.getCodArtFor())
.setMtbAart(item.getMtbAart())
.setQtaOrd(item.getQtaOrd())
.setQtaDaEvadere(qtaDaEvadere)
.setQtaEvasa(new BigDecimal(qtaEvasa))
.setCanPartitaMagBeChanged(true);
if (ean128Model != null) {
if (!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
dto.setBatchLot(ean128Model.BatchLot);
}
try {
if (!UtilityString.isNullOrEmpty(ean128Model.BestBefore)) {
dto.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore));
} else if (!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
dto.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry));
}
} catch (Exception e) {
UtilityLogger.errorMe(e);
}
if (ean128Model.Count != null && ean128Model.Count > 0) {
//if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
dto.setQtaTot(new BigDecimal(ean128Model.Count));
if (!item.getMtbAart().isFlagQtaCnfFissaBoolean()) {
dto.setQtaCnf(new BigDecimal(ean128Model.Count));
}
//} else {
// dto.setQtaTot(new BigDecimal(ean128Model.Count));
//}
}
if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
dto.setQtaTot(new BigDecimal(ean128Model.NetWeightKg));
}
if (dto.getQtaTot() != null && dto.getQtaTot().floatValue() > 0 && dto.getNumCnf() != null && dto.getNumCnf() > 0) {
dto.setQtaCnf(dto.getQtaTot().divide(new BigDecimal(dto.getNumCnf())));
}
dto.setCanPartitaMagBeChanged(false);
dto.setCanDataScadBeChanged(false);
dto.setShouldAskDataScad(true);
}
DialogInputQuantity.makeBase(mActivity, dto, true, (quantityDTO, closeLU) -> onOrdineRowDispatched(item, quantityDTO, closeLU), null).show();
}
}
private void onOrdineRowDispatched(OrdineAccettazioneDTO.Riga item, QuantityDTO quantityDTO, boolean closeLU) {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mActivity);
String gestioneRif = item.getGestioneOrdEnum() == GestioneEnum.PRODUZIONE ? "L" : item.getGestioneOrd();
final MtbColr mtbColr = new MtbColr()
.setCodMart(item.getMtbAart().getCodMart())
.setPartitaMag(quantityDTO.batchLot.get())
.setDataScadPartita(quantityDTO.expireDate)
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setDescrizione(item.getDescrizioneEstesa())
.setNumOrd(item.getNumOrd())
.setDataOrd(item.getDataOrdD())
.setGestioneRif(gestioneRif)
.setCodJcom(item.getCodJcom())
.setRigaOrd(item.getRigaOrd());
if (!item.getMtbAart().isFlagQtaCnfFissaBoolean()) {
mtbColr.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal());
}
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) getColloRef().clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add(mtbColr);
ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(item.getMtbAart().getUntMis())
.setMtbAart(item.getMtbAart());
//item.setQtaRiservate(item.getQtaRiservate().add(mtbColr.getQtaCol()));
getColloRef().getMtbColr().add(mtbColr);
refreshOrderBy(false);
FBToast.successToast(mActivity, mActivity.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
progress.dismiss();
if (closeLU) onColloClosed(null, true);
}
@Override
public void onFailed(Exception ex) {
UtilityExceptions.defaultException(mActivity, ex, progress);
}
});
}
private MtbColt getColloRef() {
return mArticoliInColloBottomSheetViewModel.mtbColt.get();
}
private void resetUL() {
mArticoliInColloBottomSheetViewModel.mtbColt.set(null);
}
private void onRowEdited(MtbColr oldValue, MtbColr newValue) {
// if (getColloRef() != null) {
//
// Dialog progress = UtilityProgress.createDefaultProgressDialog(mActivity);
//
// Optional<MtbColr> optionalMtbColrToEditOfAccettazione = Stream.of(getColloRef().getMtbColr())
// .filter(x -> UtilityBigDecimal.equalsTo(x.getQtaCol(), oldValue.getQtaCol()) &&
// UtilityString.equalsIgnoreCase(x.getCodMart(), oldValue.getCodMart()) &&
// UtilityString.equalsIgnoreCase(x.getPartitaMag(), oldValue.getPartitaMag()) &&
// UtilityString.equalsIgnoreCase(x.getCodJcom(), oldValue.getCodJcom()))
// .findFirst();
//
// if(optionalMtbColrToEditOfAccettazione.isPresent()) {
// MtbColr mtbColrToEditOfAccettazione = optionalMtbColrToEditOfAccettazione.get();
//
// mtbColrToEditOfAccettazione
// .setQtaCol(newValue.getQtaCol());
//
// ColliMagazzinoRESTConsumer.updateRiga(mtbColrToEditOfAccettazione, () -> {
// progress.dismiss();
// this.refreshOrderBy(false);
// }, ex -> {
// UtilityExceptions.defaultException(mActivity, ex, progress);
// this.refreshOrderBy(false);
// });
//
// }
//
// } else {
//
this.refreshOrderBy(false);
// }
}
private void onRowDeleted(MtbColr deletedValue) {
// if(getColloRef() != null) {
// Dialog progress = UtilityProgress.createDefaultProgressDialog(mActivity);
// MtbColr mtbColrToDeleteOfAccettazione = Stream.of(getColloRef().getMtbColr())
// .filter(x -> x.getQtaCol().compareTo(deletedValue.getQtaCol()) == 0 &&
// x.getCodMart().equalsIgnoreCase(deletedValue.getCodMart()) &&
// x.getPartitaMag().equalsIgnoreCase(deletedValue.getPartitaMag()) &&
// x.getCodJcom().equalsIgnoreCase(deletedValue.getCodJcom()))
// .findFirst()
// .get();
// ColliMagazzinoRESTConsumer.deleteRiga(mtbColrToDeleteOfAccettazione, () -> {
// getColloRef().getMtbColr().remove(mtbColrToDeleteOfAccettazione);
//
// progress.dismiss();
// this.refreshOrderBy(false);
// }, ex -> {
// UtilityExceptions.defaultException(mActivity, ex, progress);
// this.refreshOrderBy(false);
// });
// } else {
this.refreshOrderBy(false);
// }
}
}

View File

@@ -0,0 +1,623 @@
package it.integry.integrywmsnative.gest.accettazione_picking;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import com.tfb.fbtoast.FBToast;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.core.AccettazioneListAdapter;
import it.integry.integrywmsnative.gest.accettazione_picking.core.AccettazioneListModel;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.AccettazioneOrdineInevasoOrderBy;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class AccettazionePickingActivity extends BaseActivity implements AccettazionePickingViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener {
private ActivityAccettazioneOrdineInevasoBinding mBindings;
@Inject
AccettazionePickingViewModel mViewModel;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private ObservableArrayList<AccettazioneListModel> mAccettazioneMutableData = new ObservableArrayList<>();
public BindableBoolean noItemsToPick = new BindableBoolean(false);
public BindableBoolean noLUPresent = new BindableBoolean(true);
public BindableBoolean bottomSheetEnabled = new BindableBoolean(false);
private int barcodeScannerIstanceID = -1;
private List<OrdineAccettazioneInevasoDTO> mOrders;
private List<SitArtOrdDTO> mSitArts;
private boolean mShouldCloseActivity;
private AccettazioneOrdineInevasoOrderBy.Enum mCurrentOrderBy;
private final int PICK_UL_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mOrders = DataCache.retrieveItem(getIntent().getStringExtra("keyOrders"));
mSitArts = DataCache.retrieveItem(getIntent().getStringExtra("keySitArts"));
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_accettazione_ordine_inevaso);
mBindings.setLifecycleOwner(this);
mBindings.setAccettazioneView(this);
MainApplication.appComponent
.accettazionePickingComponent()
.create()
.inject(this);
setSupportActionBar(mBindings.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null);
mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance();
mBindings.bottomSheetLuContent.setListener(this);
mBottomSheetFragmentLUContentViewModel.setListener(this);
setSupportActionBar(this.mBindings.toolbar);
this.initVars();
this.initBarcodeReader();
this.initRecyclerView();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.setListeners(this);
mViewModel.init(mOrders, mSitArts, codMdep);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
if (this.mBindings.bottomSheetLuContent.isExpanded()) {
this.mBindings.bottomSheetLuContent.collapse();
} else if (!noLUPresent.get()) {
this.mShouldCloseActivity = true;
BarcodeManager.removeCallback(barcodeScannerIstanceID);
this.mViewModel.closeLU();
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_accettazione_ordine_inevaso, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.action_filter:
showOrderDialog();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void initVars() {
this.noLUPresent.addOnPropertyChangedCallback(() -> {
this.bottomSheetEnabled.set(!this.noLUPresent.get());
});
mCurrentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(SettingsManager.i().getUserSession().getDefaultOrdinamentoPickingAccettazione());
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
}
private void initRecyclerView() {
this.mViewModel.getPickingList().observe(this, updatedData -> {
refreshList();
});
AccettazioneListAdapter accettazioneListAdapter = new AccettazioneListAdapter(this, mAccettazioneMutableData);
this.mBindings.accettazionePickingList.setAdapter(accettazioneListAdapter);
this.mBindings.accettazionePickingList.setLayoutManager(new LinearLayoutManager(this));
accettazioneListAdapter.setOnItemClicked(clickedItem -> {
this.mViewModel.dispatchOrdineRow(clickedItem);
});
}
private void refreshList() {
this.mAccettazioneMutableData.clear();
this.mAccettazioneMutableData.addAll(convertDataModelToListModel(this.mViewModel.getPickingList().getValue()));
this.noItemsToPick.set(!isThereAnyItemToPick(this.mViewModel.getPickingList().getValue()));
}
private List<AccettazioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) {
List<PickingObjectDTO> tmpList = Stream.of(dataList)
.filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getSitArtOrdDTO().getQtaDaEvadere(), BigDecimal.ZERO))
.toList();
List<AccettazioneListModel> sortedList = null;
switch (mCurrentOrderBy) {
case COD_ART_FOR:
sortedList = convertDataModelToListModel__CodArtForn(tmpList);
break;
case DESCR_ART:
sortedList = convertDataModelToListModel__DescrArt(tmpList);
break;
case RAG_SOC_COM:
sortedList = convertDataModelToListModel__RagSocCom(tmpList);
break;
}
return sortedList;
}
private List<AccettazioneListModel> convertDataModelToListModel__CodArtForn(List<PickingObjectDTO> dataList) {
ArrayList<AccettazioneListModel> list = new ArrayList<>();
Stream.of(dataList)
.sortBy(x -> x.getSitArtOrdDTO().getCodArtFor() + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa()))
.forEach(x -> {
AccettazioneListModel accettazioneListModel = new AccettazioneListModel();
accettazioneListModel.setActive(true);
accettazioneListModel.setGroupTitle(x.getSitArtOrdDTO().getCodArtFor() + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa()));
accettazioneListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG));
accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa());
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere());
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
} else {
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
accettazioneListModel.setQtaEvasa(qtaEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getQtaDaEvadere());
if (x.getMtbAart() != null)
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
}
accettazioneListModel.setOriginalModel(x);
list.add(accettazioneListModel);
});
return list;
}
private List<AccettazioneListModel> convertDataModelToListModel__DescrArt(List<PickingObjectDTO> dataList) {
ArrayList<AccettazioneListModel> list = new ArrayList<>();
Stream.of(dataList)
.sortBy(x -> x.getMtbAart().getDescrizioneEstesa())
.forEach(x -> {
AccettazioneListModel accettazioneListModel = new AccettazioneListModel();
accettazioneListModel.setActive(true);
accettazioneListModel.setGroupTitle(x.getSitArtOrdDTO().getCodArtFor() + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa()));
accettazioneListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG));
accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa());
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
} else {
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
accettazioneListModel.setQtaEvasa(qtaEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getQtaDaEvadere());
if (x.getMtbAart() != null)
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
}
if (x.getMtbAart() != null)
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
accettazioneListModel.setOriginalModel(x);
list.add(accettazioneListModel);
});
return list;
}
private List<AccettazioneListModel> convertDataModelToListModel__RagSocCom(List<PickingObjectDTO> dataList) {
ArrayList<AccettazioneListModel> list = new ArrayList<>();
Stream.of(dataList)
.filter(x -> !UtilityString.isNullOrEmpty(x.getSitArtOrdDTO().getDescrizioneCommessa()) && !x.getSitArtOrdDTO().getCodJcom().equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG))
.sortBy(x -> x.getSitArtOrdDTO().getDescrizioneCommessa())
.forEach(x -> {
AccettazioneListModel accettazioneListModel = new AccettazioneListModel();
accettazioneListModel.setActive(true);
accettazioneListModel.setGroupTitle(x.getSitArtOrdDTO().getCodJcom() + (!UtilityString.isNullOrEmpty(x.getSitArtOrdDTO().getDescrizioneCommessa()) ? " - " + x.getSitArtOrdDTO().getDescrizioneCommessa() : ""));
accettazioneListModel.setBadge1(x.getSitArtOrdDTO().getCodArtFor());
accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
} else {
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
accettazioneListModel.setQtaEvasa(qtaEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getQtaDaEvadere());
if (x.getMtbAart() != null)
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
}
if (x.getMtbAart() != null) {
accettazioneListModel.setDescrizione(x.getMtbAart().getDescrizioneEstesa());
}
accettazioneListModel.setOriginalModel(x);
list.add(accettazioneListModel);
});
Stream.of(dataList)
.filter(x -> UtilityString.isNullOrEmpty(x.getSitArtOrdDTO().getDescrizioneCommessa()) || x.getSitArtOrdDTO().getCodJcom().equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG))
.forEach(x -> {
AccettazioneListModel accettazioneListModel = new AccettazioneListModel();
accettazioneListModel.setActive(true);
accettazioneListModel.setGroupTitle(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG));
accettazioneListModel.setBadge1(x.getSitArtOrdDTO().getCodArtFor());
accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
accettazioneListModel.setQtaEvasa(BigDecimal.ZERO);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getQtaOrd());
if (x.getMtbAart() != null) {
accettazioneListModel.setDescrizione(x.getMtbAart().getDescrizioneEstesa());
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
}
accettazioneListModel.setOriginalModel(x);
list.add(accettazioneListModel);
});
return list;
}
private boolean isThereAnyItemToPick(List<PickingObjectDTO> dataList) {
return Stream.of(dataList)
.anyMatch(x -> !x.isHidden());
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
});
};
public void removeListFilter() {
this.mViewModel.resetMatchedRows();
}
public void createNewLU() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.openProgress();
this.mViewModel.createNewLU(null, null, false, () -> {
this.closeProgress();
});
}
public void showCreatedUL() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity);
}
private void showOrderDialog() {
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(this.getText(R.string.action_orderBy))
.setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), (dialog12, which) -> {
mCurrentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which);
SettingsManager.i().getUserSession().setDefaultOrdinamentoPickingAccettazione(which);
})
.setPositiveButton(getText(R.string.ok), (dialog1, which) -> this.refreshList())
.create();
dialog.show();
}
public void startListaBancaliRegistratiActivity(ArrayList<MtbColt> mtbColts){
Intent myIntent = ListaBancaliActivity.createIntent(this, mtbColts, false, PrinterRESTConsumer.Type.SECONDARIA, ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
}
@Override
public void onLUSuccessullyPrinted() {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
}
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
}
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewModel.dispatchRowEdit(mtbColr);
}
@Override
public void onMtbColrDelete(MtbColr mtbColr) {
this.mViewModel.deleteRow(mtbColr);
}
@Override
public void onBottomSheetLUClose() {
this.mViewModel.closeLU();
}
@Override
public void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete) {
NoteAggiuntiveLUDialog.make(this, onComplete::run, () -> onComplete.run(null)).show();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
if(ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
}
BarcodeManager.enable();
}
@Override
public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, Date dataScad, boolean canPartitaMagBeChanged, boolean canOverflowQuantity, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalQtaOrd(totalQtaOrd)
.setTotalNumCnfOrd(totalNumCnfOrd)
.setQtaCnfOrd(qtaCnfOrd)
.setTotalQtaToBeTaken(totalQtaToBeTaken)
.setTotalNumCnfToBeTaken(totalNumCnfToBeTaken)
.setQtaCnfToBeTaken(qtaCnfToBeTaken)
.setTotalQtaAvailable(totalQtaAvailable)
.setTotalNumCnfAvailable(totalNumCnfAvailable)
.setQtaCnfAvailable(qtaCnfAvailable)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(true)
.setCanOverflowOrderQuantity(canOverflowQuantity);
DialogInputQuantityV2
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
this.mViewModel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
@Override
public void onFilterApplied(String newValue) {
this.mBindings.filteredArtsInListExpandableLayout.expand(true);
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : "");
}
@Override
public void onFilterRemoved() {
mBindings.filteredArtsInListExpandableLayout.collapse(true);
}
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
}
@Override
public void onLUOpened(MtbColt mtbColt) {
noLUPresent.set(false);
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
}
@Override
public void onLUClosed() {
noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
if (this.mShouldCloseActivity) super.onBackPressed();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to
if (requestCode == PICK_UL_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
MtbColt recoveredMtbColt = DataCache.retrieveItem(data.getStringExtra("key"));
this.mViewModel.recoverLU(recoveredMtbColt);
}
}
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.accettazione_picking;
import dagger.Subcomponent;
@Subcomponent
public interface AccettazionePickingComponent {
@Subcomponent.Factory
interface Factory {
AccettazionePickingComponent create();
}
void inject(AccettazionePickingActivity accettazionePickingActivity);
}

View File

@@ -0,0 +1,32 @@
package it.integry.integrywmsnative.gest.accettazione_picking;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_picking.rest.AccettazionePickingRESTConsumer;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
@Module(subcomponents = AccettazionePickingComponent.class)
public class AccettazionePickingModule {
@Provides
AccettazionePickingRESTConsumer providesAccettazionePickingRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new AccettazionePickingRESTConsumer(systemRESTConsumer);
}
@Provides
BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() {
return new BottomSheetFragmentLUContentViewModel();
}
@Provides
AccettazionePickingViewModel providesAccettazioneViewModel(ArticoloRESTConsumer articoloRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, AccettazionePickingRESTConsumer accettazionePickingRESTConsumer, GestSetupRESTConsumer gestSetupRESTConsumer) {
return new AccettazionePickingViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, accettazionePickingRESTConsumer, gestSetupRESTConsumer);
}
}

View File

@@ -0,0 +1,943 @@
package it.integry.integrywmsnative.gest.accettazione_picking;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.exception.AlreadyUsedAnonymousLabelException;
import it.integry.integrywmsnative.core.exception.InvalidLUMultiGestioneException;
import it.integry.integrywmsnative.core.exception.InvalidOrderTypeException;
import it.integry.integrywmsnative.core.exception.LUScanNotGrantedException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUPrintListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
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.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.rest.AccettazionePickingRESTConsumer;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class AccettazionePickingViewModel {
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final PrinterRESTConsumer mPrinterRESTConsumer;
private final AccettazionePickingRESTConsumer mAccettazionePickingRESTConsumer;
private final GestSetupRESTConsumer mGestSetupRESTConsumer;
private AccettazionePickingViewModel.Listener mListener;
private List<OrdineAccettazioneInevasoDTO> mOrders;
private List<SitArtOrdDTO> mSitArts;
private MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>();
private MtbColt mCurrentMtbColt = null;
private GestioneEnum defaultGestioneOfUL = null;
private String mDefaultCodMdep = null;
@Inject
public AccettazionePickingViewModel(ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
AccettazionePickingRESTConsumer accettazionePickingRESTConsumer,
GestSetupRESTConsumer gestSetupRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mPrinterRESTConsumer = printerRESTConsumer;
this.mAccettazionePickingRESTConsumer = accettazionePickingRESTConsumer;
this.mGestSetupRESTConsumer = gestSetupRESTConsumer;
}
public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, String codMdep) {
this.mOrders = orders;
this.mSitArts = sitArts;
this.mDefaultCodMdep = codMdep;
getEmptyPickingList(sitArts, pickingObjectList -> {
this.mPickingList.postValue(pickingObjectList);
});
//Definizione della gestione collo di default
Boolean isOrdTrasf = Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::isOrdTrasf)
.withoutNulls()
.distinctBy(x -> x)
.findFirst()
.get();
//Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::getGestioneEnum)
.withoutNulls()
.distinctBy(x -> x)
.toList();
if (foundGestioni != null) {
if (foundGestioni.size() == 1) {
if (isOrdTrasf && (foundGestioni.get(0) == GestioneEnum.PRODUZIONE || foundGestioni.get(0) == GestioneEnum.LAVORAZIONE)) {
defaultGestioneOfUL = GestioneEnum.ACQUISTO;
} else
defaultGestioneOfUL = foundGestioni.get(0) == GestioneEnum.PRODUZIONE ? GestioneEnum.LAVORAZIONE : foundGestioni.get(0);
} else {
this.sendError(new InvalidLUMultiGestioneException());
}
} else {
this.sendError(new InvalidOrderTypeException());
}
}
private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = Stream.of(sitArtOrdList)
.map(SitArtOrdDTO::getCodMart)
.toList();
ArticoloRESTConsumer.getByCodMart(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> {
MtbAart mtbAart = null;
for (MtbAart mtbAartItem : listMtbAarts) {
if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) {
mtbAart = mtbAartItem;
break;
}
}
return new PickingObjectDTO()
.setSitArtOrdDTO(sitArtOrdDTO)
.setMtbAart(mtbAart);
})
.toList();
onComplete.run(pickingList);
}, this::sendError);
}
public MutableLiveData<List<PickingObjectDTO>> getPickingList() {
return mPickingList;
}
public void retrieveExistentLU(RunnableArgs<ArrayList<MtbColt>> onComplete) {
this.sendOnLoadingStarted();
this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mSitArts, mtbColtList -> {
this.sendOnLoadingEnded();
onComplete.run(mtbColtList);
}, this::sendError);
}
public void recoverLU(MtbColt recoveredMtbColt) {
this.mCurrentMtbColt = recoveredMtbColt;
this.resetMatchedRows();
this.sendLUOpened(this.mCurrentMtbColt);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
//Se non c'è una UL aperta
if (mCurrentMtbColt == null) {
//Se è un'etichetta anonima
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima
this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else {
this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
}
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.sendError(new LUScanNotGrantedException());
} else {
this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
}
}
}
private void executeEtichettaAnonimaNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
if (mtbColt == null) {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
this.sendError(new NotCurrentYearLUException());
} else {
this.createNewLU(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, true, onComplete);
}
} else {
this.sendError(new AlreadyUsedAnonymousLabelException());
}
}, this::sendError);
}
private void processBarcodeNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.createNewLU(
null,
null,
false,
() -> processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete));
}
private void processBarcodeAlreadyOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEanPeso(barcodeScanDTO)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEanPeso(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else {
this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete);
}
}
private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
try {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
this.loadArticolo(ean13PesoModel.getPrecode(), PickDataDTO.fromEan128(ean13PesoModel.toEan128()), onComplete);
} catch (Exception ex) {
this.sendError(ex);
}
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
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(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.sendError(new LUScanNotGrantedException());
} else {
if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) {
barcodeProd = barcodeProd.substring(1);
}
PickDataDTO pickDataDTO = PickDataDTO.fromEan128(ean128Model);
this.loadArticolo(barcodeProd, pickDataDTO, onComplete);
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
onComplete.run();
}
}, this::sendError);
}
private void loadArticolo(String barcodeProd, PickDataDTO pickData, Runnable onComplete) {
if (barcodeProd.length() == 14) {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
}
this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) {
this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete);
} else {
this.sendError(new NoResultFromBarcodeException());
}
}, this::sendError);
}
private void searchArtFromAnag(MtbAart mtbAart, PickDataDTO pickData, Runnable onComplete) {
final List<PickingObjectDTO> pickingList = mPickingList.getValue();
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
.filter(x -> UtilityString.equalsIgnoreCase(mtbAart.getCodMart(), x.getSitArtOrdDTO().getCodMart()))
.toList();
for (PickingObjectDTO pickingObjectDTO : matchPickingObject) {
pickingObjectDTO.setTempPickData(pickData);
}
this.loadMatchedRows(matchPickingObject);
onComplete.run();
}
private void loadMatchedRows(List<PickingObjectDTO> matchedRows) {
if (matchedRows == null || matchedRows.size() == 0) {
this.sendError(new NoArtsFoundException());
} else if (matchedRows.size() == 1) {
this.dispatchOrdineRow(matchedRows.get(0));
} else {
List<PickingObjectDTO> pickingList = mPickingList.getValue();
for (int i = 0; i < pickingList.size(); i++) {
if (!matchedRows.contains(pickingList.get(i))) {
pickingList.get(i).setHidden(true);
}
}
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
}
}
public void createNewLU(Integer customNumCollo, String customSerCollo, boolean disablePrint, Runnable onComplete) {
this.sendOnNoteAggiuntiveRequest(additionalNotes -> {
this.mGestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_POSIZIONE_COLLI_ACCETTAZIONE", defaultPosAccettazioneDTO -> {
String defaultPosAccettazione = null;
if (defaultPosAccettazioneDTO != null && !UtilityString.isNullOrEmpty(defaultPosAccettazioneDTO.value))
defaultPosAccettazione = defaultPosAccettazioneDTO.value;
MtbColt mtbColt = new MtbColt();
mtbColt
.initDefaultFields()
.setGestione(defaultGestioneOfUL)
.setAnnotazioni(additionalNotes)
.setPosizione(defaultPosAccettazione)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if (customNumCollo != null) {
mtbColt.setNumCollo(customNumCollo);
}
if (!UtilityString.isNullOrEmpty(customSerCollo)) {
mtbColt.setSerCollo(customSerCollo);
}
List<String> codAnags =
Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::getCodAnagOrd)
.distinct()
.toList();
if (codAnags != null && codAnags.size() == 1) {
mtbColt.setCodAnag(codAnags.get(0));
}
List<String> rifOrds =
Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::getRifOrd)
.distinct()
.toList();
if (rifOrds != null && rifOrds.size() == 1) {
mtbColt.setRifOrd(rifOrds.get(0));
}
List<String> numDataOrds =
Stream.of(mOrders)
.map(value -> value.getNumero() + value.getData())
.distinct()
.toList();
if (numDataOrds != null && numDataOrds.size() == 1) {
mtbColt.setNumOrd(mOrders.get(0).getNumero());
mtbColt.setDataOrd(mOrders.get(0).getData());
try {
mtbColt.generaFiltroOrdine();
} catch (Exception ex) {
this.sendError(ex);
return;
}
}
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> {
mtbColt
.setNumCollo(savedMtbColt.getNumCollo())
.setDataCollo(savedMtbColt.getDataColloS())
.setMtbColr(new ObservableArrayList<>())
.setDisablePrint(disablePrint);
this.mCurrentMtbColt = mtbColt;
if (onComplete != null) onComplete.run();
this.sendLUOpened(mtbColt);
}, this::sendError);
}, this::sendError);
});
}
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO) {
if(this.mCurrentMtbColt == null) return;
BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd();
AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal();
AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal();
Stream.of(pickingObjectDTO.getWithdrawMtbColrs())
.forEach(row -> {
numCnfWithdrawRows.addAndGet(row.getNumCnf());
qtaColWithdrawRows.addAndGet(row.getQtaCol());
});
BigDecimal numCnfDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getNumCnfDaEvadere().subtract(numCnfWithdrawRows.getBigDecimalValue());
BigDecimal qtaDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getQtaDaEvadere().subtract(qtaColWithdrawRows.getBigDecimalValue());
BigDecimal qtaCnfDaEvadere = qtaCnfOrd;
numCnfDaEvadere = UtilityBigDecimal.getGreaterBetween(numCnfDaEvadere, BigDecimal.ZERO);
qtaDaEvadere = UtilityBigDecimal.getGreaterBetween(qtaDaEvadere, BigDecimal.ZERO);
BigDecimal numCnfDaPrelevare = null;
BigDecimal qtaColDaPrelevare = null;
BigDecimal qtaCnfDaPrelevare = null;
String partitaMag = null;
Date dataScad = null;
if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) {
//Oppure le info del barcode scansionato
PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO();
MtbAart mtbAart = pickingObjectDTO.getMtbAart();
qtaColDaPrelevare = manualPickDTO.getQtaTot();
numCnfDaPrelevare = manualPickDTO.getNumCnf();
if (mtbAart.isFlagQtaCnfFissaBoolean()) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
if (manualPickDTO.isEanPeso()) {
if (mtbAart.getUntMisRifPeso() == MtbAart.UntMisRifPesoEnum.M) {
if (UtilityBigDecimal.equalsTo(mtbAart.getPesoKg(), BigDecimal.ZERO)) {
this.sendError(new InvalidPesoKGException());
} else {
qtaColDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, mtbAart.getPesoKg());
}
}
}
} else if (qtaColDaPrelevare != null && numCnfDaPrelevare != null) {
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) {
numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
if (!mtbAart.isFlagQtaCnfFissaBoolean()) {
if (UtilityBigDecimal.equalsTo(numCnfDaPrelevare, BigDecimal.ZERO))
numCnfDaPrelevare = BigDecimal.ONE;
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
} else if (numCnfDaPrelevare != null && qtaColDaPrelevare == null) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
qtaColDaPrelevare = UtilityBigDecimal.multiply(numCnfDaPrelevare, qtaCnfDaPrelevare);
}
if (manualPickDTO.getMtbPartitaMag() != null) {
partitaMag = manualPickDTO.getMtbPartitaMag().getPartitaMag();
dataScad = manualPickDTO.getMtbPartitaMag().getDataScadD();
}
}
BigDecimal initialNumCnf;
BigDecimal initialQtaCnf;
BigDecimal initialQtaTot;
if (qtaColDaPrelevare != null) {
initialNumCnf = numCnfDaPrelevare;
initialQtaCnf = qtaCnfDaPrelevare;
initialQtaTot = qtaColDaPrelevare;
} else {
initialNumCnf = totalNumCnfOrd;
initialQtaCnf = qtaCnfOrd;
initialQtaTot = totalQtaOrd;
}
if(UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
}
if(dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
dataScad = UtilityDate.getDateInstance();
Calendar c = new GregorianCalendar();
c.setTime(dataScad);
c.add(Calendar.DATE, pickingObjectDTO.getMtbAart().getGgScadPartita());
dataScad = c.getTime();
}
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
initialNumCnf, initialQtaCnf, initialQtaTot,
qtaDaEvadere,
numCnfDaEvadere,
qtaCnfDaEvadere,
qtaColDaPrelevare,
numCnfDaPrelevare,
qtaCnfDaPrelevare,
null,
null,
null,
partitaMag,
dataScad,
true,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione();
final MtbColr mtbColr = new MtbColr()
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setGestioneRif(gestioneRif)
.setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom())
.setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setDataOrd(pickingObjectDTO.getSitArtOrdDTO().getDataOrd())
.setNumOrd(pickingObjectDTO.getSitArtOrdDTO().getNumOrd())
.setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
resetMatchedRows();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU();
return;
}
mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart());
pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr);
mCurrentMtbColt.getMtbColr().add(mtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
resetMatchedRows();
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU();
}, this::sendError);
}
public void dispatchRowEdit(MtbColr mtbColrToEdit) {
final PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
.setMtbAart(mtbColrToEdit.getMtbAart());
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
mtbColrToEdit.getNumCnf(),
mtbColrToEdit.getQtaCnf(),
mtbColrToEdit.getQtaCol(),
null,
null,
null,
null, null, null,
null, null, null,
mtbColrToEdit.getPartitaMag(),
mtbColrToEdit.getDataScadPartitaD(),
true,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveEditedRow(mtbColrToEdit,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToUpdate.getNumCollo())
.setDataCollo(mtbColrToUpdate.getDataColloS())
.setSerCollo(mtbColrToUpdate.getSerCollo())
.setGestione(mtbColrToUpdate.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.UPDATE);
mtbColr
.setNumCnf(numCnf)
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot)
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setUtente(SettingsManager.i().getUser().getFullname())
.setDatetimeRow(UtilityDate.getDateInstance());
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
mtbColr.setNumCnf(numCnf)
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot);
Optional<PickingObjectDTO> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToUpdate))
.findSingle();
if(pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToUpdate);
pickingObjectDTO.get().getWithdrawMtbColrs().add(mtbColr);
}
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
this.mCurrentMtbColt.getMtbColr().add(mtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
resetMatchedRows();
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU();
}, this::sendError);
}
public void deleteRow(MtbColr mtbColrToDelete) {
this.sendMtbColrDeleteRequest(shouldDelete -> {
if (shouldDelete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setRiga(null);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
Optional<PickingObjectDTO> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToDelete))
.findSingle();
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete);
}
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
this.resetMatchedRows();
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
}
});
}
public void closeLU() {
if (mCurrentMtbColt == null) return;
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.canLUBeDeleted(mCurrentMtbColt, canBeDeleted -> {
if (canBeDeleted) {
deleteLU(() -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
} else {
mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> {
if (!mCurrentMtbColt.getDisablePrint()) {
printCollo(this::postCloseOperations);
} else {
postCloseOperations();
}
this.sendLUClosed();
this.sendOnLoadingEnded();
}, this::sendError);
}
}, this::sendError);
}
private void printCollo(Runnable onComplete) {
this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdep, PrinterRESTConsumer.Type.SECONDARIA, printerList -> {
if (printerList == null || printerList.size() == 0) {
this.sendError(new NoPrintersFoundException());
onComplete.run();
return;
}
String reportName = ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO);
this.mPrinterRESTConsumer.printCollo(
printerList.get(0),
mCurrentMtbColt,
1,
reportName, () -> {
this.sendLUSuccessfullyPrinted();
onComplete.run();
}, ex -> this.sendLUPrintError(ex, onComplete));
}, this::sendError);
}
private void postCloseOperations() {
this.mCurrentMtbColt = null;
this.sendLUClosed();
this.sendOnLoadingEnded();
}
private void deleteLU(Runnable onComplete) {
mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> {
this.mCurrentMtbColt = null;
if (onComplete != null) onComplete.run();
}, this::sendError);
}
public void resetMatchedRows() {
for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO
.setTempPickData(null)
.setHidden(false);
}
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendOnNoteAggiuntiveRequest(RunnableArgs<String> onComplete) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete);
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
private void sendLUOpened(MtbColt mtbColt) {
if (this.mListener != null) mListener.onLUOpened(mtbColt);
}
private void sendLUClosed() {
if (this.mListener != null) mListener.onLUClosed();
}
private void sendLUSuccessfullyPrinted() {
if (this.mListener != null) mListener.onLUSuccessullyPrinted();
}
private void sendLUPrintError(Exception ex, Runnable onComplete) {
if (this.mListener != null) mListener.onLUPrintError(ex, onComplete);
}
private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaOrd,
BigDecimal totalNumCnfOrd,
BigDecimal qtaCnfOrd,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canPartitaMagBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaOrd,
totalNumCnfOrd,
qtaCnfOrd,
totalQtaToBeTaken,
totalNumCnfToBeTaken,
qtaCnfToBeTaken,
totalQtaAvailable,
totalNumCnfAvailable,
qtaCnfAvailable,
partitaMag,
dataScad,
canPartitaMagBeChanged,
true,
onComplete);
}
private void sendOnRowSaved() {
if (this.mListener != null) mListener.onRowSaved();
}
private void sendFilterApplied(String newValue) {
if (this.mListener != null) mListener.onFilterApplied(newValue);
}
private void sendFilterRemoved() {
if (this.mListener != null) mListener.onFilterRemoved();
}
private void sendMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
}
public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener
listener) {
this.mListener = listener;
return this;
}
public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener {
void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete);
void onError(Exception ex);
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaOrd,
BigDecimal totalNumCnfOrd,
BigDecimal qtaCnfOrd,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canPartitaMagBeChanged,
boolean canOverflowQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onFilterApplied(String newValue);
void onFilterRemoved();
}
}

View File

@@ -0,0 +1,159 @@
package it.integry.integrywmsnative.gest.accettazione_picking.core;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
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.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupHeaderBinding;
import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupItemBinding;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
public class AccettazioneListAdapter extends SectionedRecyclerViewAdapter<AccettazioneListAdapter.SubheaderHolder, AccettazioneListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<AccettazioneListModel> mDataset = new ArrayList<>();
private RunnableArgs<PickingObjectDTO> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
AccettazioneOrdineInevasoMainListGroupHeaderBinding mBinding;
SubheaderHolder(AccettazioneOrdineInevasoMainListGroupHeaderBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
AccettazioneOrdineInevasoMainListGroupItemBinding mBinding;
SingleItemViewHolder(AccettazioneOrdineInevasoMainListGroupItemBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
public AccettazioneListAdapter(AppCompatActivity context, ObservableArrayList<AccettazioneListModel> mutableDataSet) {
this.mContext = context;
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
}
});
}
public void setOnItemClicked(RunnableArgs<PickingObjectDTO> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
@Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
AccettazioneOrdineInevasoMainListGroupHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_ordine_inevaso_main_list__group_header, parent, false);
return new SubheaderHolder(binding);
}
@Override
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
AccettazioneOrdineInevasoMainListGroupItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_ordine_inevaso_main_list__group_item, parent, false);
return new SingleItemViewHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
AccettazioneListModel pickingObjectDTO = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.spedizioneGroupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getGroupTitle()) ? View.GONE : View.VISIBLE);
subheaderHolder.mBinding.spedizioneGroupTitle.setText(pickingObjectDTO.getGroupTitle());
}
@Override
public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) {
AccettazioneListModel pickingObjectDTO = this.mDataset.get(position);
if (pickingObjectDTO.getQtaEvasa().subtract(pickingObjectDTO.getQtaTot()).floatValue() >= 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
} else if (pickingObjectDTO.getQtaEvasa().floatValue() > 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
} else if (position % 2 == 1) {
holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
} else {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
}
holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(mContext.getResources().getDrawable(!pickingObjectDTO.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner));
holder.mBinding.qtaEvasa.setTextColor(mContext.getResources().getColor(!pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700));
holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione());
holder.mBinding.descrizione.setTextColor(pickingObjectDTO.isDescrizionePresente() ? Color.BLACK : Color.GRAY);
holder.mBinding.badge1.setText(pickingObjectDTO.getBadge1());
holder.mBinding.badge2.setText(pickingObjectDTO.getBadge2());
holder.mBinding.badge2.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getBadge2()) ? View.GONE : View.VISIBLE);
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaEvasa()));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaTot()));
holder.mBinding.untMis.setText(pickingObjectDTO.getUntMis());
holder.mBinding.untMis.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getUntMis()) ? View.GONE : View.VISIBLE);
holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingObjectDTO.getOriginalModel());
});
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
AccettazioneListModel compare1 = this.mDataset.get(position);
AccettazioneListModel 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,144 @@
package it.integry.integrywmsnative.gest.accettazione_picking.core;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
public class AccettazioneListModel implements Cloneable {
private String groupTitle;
private String badge1;
private String badge2;
private String descrizione;
private boolean descrizionePresente;
private String subDescrizione1;
private String subDescrizione2;
private BigDecimal qtaEvasa;
private BigDecimal qtaTot;
private String untMis;
private boolean active;
private PickingObjectDTO mOriginalModel;
@NotNull
@Override
public Object clone() {
try {
return super.clone();
} catch (Exception ex) {
return null;
}
}
public String getGroupTitle() {
return groupTitle;
}
public AccettazioneListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public String getBadge1() {
return badge1;
}
public AccettazioneListModel setBadge1(String badge1) {
this.badge1 = badge1;
return this;
}
public String getBadge2() {
return badge2;
}
public AccettazioneListModel setBadge2(String badge2) {
this.badge2 = badge2;
return this;
}
public String getDescrizione() {
return descrizione;
}
public AccettazioneListModel setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public boolean isDescrizionePresente() {
return descrizionePresente;
}
public AccettazioneListModel setDescrizionePresente(boolean descrizionePresente) {
this.descrizionePresente = descrizionePresente;
return this;
}
public String getSubDescrizione1() {
return subDescrizione1;
}
public AccettazioneListModel setSubDescrizione1(String subDescrizione1) {
this.subDescrizione1 = subDescrizione1;
return this;
}
public String getSubDescrizione2() {
return subDescrizione2;
}
public AccettazioneListModel setSubDescrizione2(String subDescrizione2) {
this.subDescrizione2 = subDescrizione2;
return this;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
public AccettazioneListModel setQtaEvasa(BigDecimal qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public AccettazioneListModel setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public String getUntMis() {
return untMis;
}
public AccettazioneListModel setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public boolean isActive() {
return active;
}
public AccettazioneListModel setActive(boolean active) {
this.active = active;
return this;
}
public PickingObjectDTO getOriginalModel() {
return mOriginalModel;
}
public AccettazioneListModel setOriginalModel(PickingObjectDTO mOriginalModel) {
this.mOriginalModel = mOriginalModel;
return this;
}
}

View File

@@ -0,0 +1,133 @@
package it.integry.integrywmsnative.gest.accettazione_picking.dto;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
public class AccettazioneListModel implements Cloneable {
private String groupTitle;
private String badge1;
private String badge2;
private String descrizione;
private boolean descrizionePresente;
private String subDescrizione1;
private String subDescrizione2;
private BigDecimal qtaEvasa;
private BigDecimal qtaTot;
private String untMis;
private boolean active;
@NotNull
@Override
public Object clone() {
try {
return super.clone();
} catch (Exception ex) {
return null;
}
}
public String getGroupTitle() {
return groupTitle;
}
public AccettazioneListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public String getBadge1() {
return badge1;
}
public AccettazioneListModel setBadge1(String badge1) {
this.badge1 = badge1;
return this;
}
public String getBadge2() {
return badge2;
}
public AccettazioneListModel setBadge2(String badge2) {
this.badge2 = badge2;
return this;
}
public String getDescrizione() {
return descrizione;
}
public AccettazioneListModel setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public boolean isDescrizionePresente() {
return descrizionePresente;
}
public AccettazioneListModel setDescrizionePresente(boolean descrizionePresente) {
this.descrizionePresente = descrizionePresente;
return this;
}
public String getSubDescrizione1() {
return subDescrizione1;
}
public AccettazioneListModel setSubDescrizione1(String subDescrizione1) {
this.subDescrizione1 = subDescrizione1;
return this;
}
public String getSubDescrizione2() {
return subDescrizione2;
}
public AccettazioneListModel setSubDescrizione2(String subDescrizione2) {
this.subDescrizione2 = subDescrizione2;
return this;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
public AccettazioneListModel setQtaEvasa(BigDecimal qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public AccettazioneListModel setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public String getUntMis() {
return untMis;
}
public AccettazioneListModel setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public boolean isActive() {
return active;
}
public AccettazioneListModel setActive(boolean active) {
this.active = active;
return this;
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto;
package it.integry.integrywmsnative.gest.accettazione_picking.dto;
/**
* Created by GiuseppeS on 21/03/2018.

View File

@@ -0,0 +1,64 @@
package it.integry.integrywmsnative.gest.accettazione_picking.dto;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
public class PickingObjectDTO {
private SitArtOrdDTO sitArtOrdDTO;
private MtbAart mtbAart;
private PickDataDTO tempPickData;
private List<MtbColr> withdrawMtbColrs = new ArrayList<>();
private boolean hidden = false;
public SitArtOrdDTO getSitArtOrdDTO() {
return sitArtOrdDTO;
}
public PickingObjectDTO setSitArtOrdDTO(SitArtOrdDTO sitArtOrdDTO) {
this.sitArtOrdDTO = sitArtOrdDTO;
return this;
}
public MtbAart getMtbAart() {
return mtbAart;
}
public PickingObjectDTO setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public PickDataDTO getTempPickData() {
return tempPickData;
}
public PickingObjectDTO setTempPickData(PickDataDTO tempPickData) {
this.tempPickData = tempPickData;
return this;
}
public List<MtbColr> getWithdrawMtbColrs() {
return withdrawMtbColrs;
}
public PickingObjectDTO setWithdrawMtbColrs(List<MtbColr> withdrawMtbColrs) {
this.withdrawMtbColrs = withdrawMtbColrs;
return this;
}
public boolean isHidden() {
return hidden;
}
public PickingObjectDTO setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.rest;
package it.integry.integrywmsnative.gest.accettazione_picking.rest;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
@@ -8,29 +8,40 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
public class OrdineAccettazioneInevasoRESTConsumerService {
@Singleton
public class AccettazionePickingRESTConsumer {
public static void getBancaliGiaRegistrati(List<OrdineAccettazioneDTO> ordiniToShow, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) throws Exception {
private final SystemRESTConsumer mSystemRestConsumer;
@Inject
public AccettazionePickingRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.mSystemRestConsumer = systemRESTConsumer;
}
public void getBancaliGiaRegistrati(List<SitArtOrdDTO> ordiniToShow, RunnableArgs<ArrayList<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<String> colliWhereCond = new ArrayList<>();
Stream.of(ordiniToShow).forEach(x -> {
try {
Date date = UtilityDate.recognizeDate(x.getData());
Date date = UtilityDate.recognizeDate(x.getDataOrd());
String dateString = UtilityDate.formatDate(date, "yyyy/MM/dd");
if (!colliWhereCond.contains(x.getGestione() + " " + dateString + " " + x.getNumero())) {
if (!colliWhereCond.contains(x.getGestione() + " " + dateString + " " + x.getNumOrd())) {
String gestione = x.getGestione().equalsIgnoreCase("P") ? "L" : x.getGestione();
colliWhereCond.add(gestione + " " + dateString + " " + x.getNumero());
colliWhereCond.add(gestione + " " + dateString + " " + x.getNumOrd());
}
} catch (Exception ex){
UtilityLogger.errorMe(ex);
@@ -38,12 +49,12 @@ public class OrdineAccettazioneInevasoRESTConsumerService {
});
String colliINCondition = "";
StringBuilder colliINCondition = new StringBuilder();
for(int i = 0; i < colliWhereCond.size(); i ++){
colliINCondition += "'" + colliWhereCond.get(i) + "'";
colliINCondition.append("'").append(colliWhereCond.get(i)).append("'");
if(i < (colliWhereCond.size()-1)) colliINCondition += ",";
if(i < (colliWhereCond.size()-1)) colliINCondition.append(",");
}
@@ -59,9 +70,9 @@ public class OrdineAccettazioneInevasoRESTConsumerService {
Type typeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<List<MtbColt>>() {
mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<MtbColt>>() {
@Override
public void onSuccess(List<MtbColt> value) {
public void onSuccess(ArrayList<MtbColt> value) {
if(onComplete != null) onComplete.run(value);
}
@@ -73,4 +84,5 @@ public class OrdineAccettazioneInevasoRESTConsumerService {
}
}

View File

@@ -3,21 +3,22 @@ package it.integry.integrywmsnative.gest.contenuto_bancale.viewmodel;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import androidx.databinding.ObservableField;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
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;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableString;
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.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
@@ -42,7 +43,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName;
public ContenutoBancaleViewModel(ContenutoBancaleActivity context, MtbColt mtbColt, boolean canRecoverUL, PrinterRESTConsumer.Type printerType, String defaultReportName){
public ContenutoBancaleViewModel(ContenutoBancaleActivity context, MtbColt mtbColt, boolean canRecoverUL, PrinterRESTConsumer.Type printerType, String defaultReportName) {
mContext = context;
this.mtbColt = new ObservableField<>(mtbColt);
this.isFabVisible.set(true);
@@ -85,8 +86,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
}
public void recoverUL(){
public void recoverUL() {
Intent data = new Intent();
String key = DataCache.addItem(mtbColt.get());
data.putExtra("key", key);
@@ -100,41 +100,39 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
mContext.bindings.contenutoBancaleFab.close(true);
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().userSession.depo.getCodMdep(), mPrinterType, value -> {
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), mPrinterType, value -> {
if(value.size() > 0) {
if (value.size() > 0) {
try {
ReportManager.getReportNameLUFromGestione(mtbColt.get().getGestioneEnum(), reportName -> {
try {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColt.get().getGestioneEnum());
reportName = mReportName != null ? mReportName : reportName;
reportName = mReportName != null ? mReportName : reportName;
PrinterRESTConsumer.printColloStatic(value.get(0),
mtbColt.get(),
1,
reportName,
() -> {
progress.dismiss();
PrinterRESTConsumer.printColloStatic(value.get(0),
mtbColt.get(),
1,
reportName,
() -> {
progress.dismiss();
Resources res = mContext.getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}, ex -> UtilityExceptions.defaultException(mContext,ex, progress));
Resources res = mContext.getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress));
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress)
);
} catch (Exception ex){
UtilityExceptions.defaultException(mContext, ex, progress);
}
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show();
} catch (Exception ex) {
UtilityExceptions.defaultException(mContext, ex, progress);
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);
});
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show();
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);
});
}

View File

@@ -2,18 +2,18 @@ package it.integry.integrywmsnative.gest.lista_bancali;
import android.content.Context;
import android.content.Intent;
import androidx.databinding.DataBindingUtil;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.lista_bancali.viewmodel.ListaBancaliViewModel;
@@ -25,6 +25,7 @@ public class ListaBancaliActivity extends BaseActivity {
private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName";
private static final String FlagOnlyResiduo = "flagOnlyResiduo";
}
public ActivityListaBancaliBinding bindings;
@@ -34,6 +35,7 @@ public class ListaBancaliActivity extends BaseActivity {
private boolean mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName;
private boolean mFlagOnlyResiduo;
private static final int PICK_UL_REQUEST = 1; // The request code
@@ -54,10 +56,13 @@ public class ListaBancaliActivity extends BaseActivity {
String reportNameKey = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, reportNameKey);
String flagOnlyResiduoKey = DataCache.addItem(true);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
return myIntent;
}
public static Intent createIntent(Context context, ArrayList<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType) {
public static Intent createIntent(Context context, ArrayList<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class);
String mtbColtsKey = DataCache.addItem(items);
@@ -69,6 +74,9 @@ public class ListaBancaliActivity extends BaseActivity {
String printerTypeKey = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, printerTypeKey);
String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
return myIntent;
}
@@ -81,9 +89,10 @@ public class ListaBancaliActivity extends BaseActivity {
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo));
List<MtbColt> mtbColts = DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtsKey));
mViewModel = new ListaBancaliViewModel(this, mtbColts);
mViewModel = new ListaBancaliViewModel(this, mtbColts, mFlagOnlyResiduo);
setSupportActionBar(this.bindings.toolbar);

View File

@@ -26,11 +26,15 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
private MainListListaColliAdapter mAdapter;
public ListaBancaliViewModel(ListaBancaliActivity context, List<MtbColt> mtbColts){
private boolean mLoadOnlyResiduo;
public ListaBancaliViewModel(ListaBancaliActivity context, List<MtbColt> mtbColts, boolean loadOnlyResiduo){
mContext = context;
mMtbColts = new ObservableArrayList<>();
mMtbColts.addAll(mtbColts);
this.mLoadOnlyResiduo = loadOnlyResiduo;
initRecyclerView();
}
@@ -56,7 +60,7 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
try {
ColliMagazzinoRESTConsumer.getByTestataStatic(item, true, false, mtbColt -> {
ColliMagazzinoRESTConsumer.getByTestataStatic(item, mLoadOnlyResiduo, false, mtbColt -> {
ObservableArrayList<MtbColr> mtbColrObservableArrayList = new ObservableArrayList<>();
mtbColrObservableArrayList.addAll(mtbColt.getMtbColr());

View File

@@ -1,25 +1,25 @@
package it.integry.integrywmsnative.gest.login.viewmodel;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import androidx.appcompat.app.AlertDialog;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import androidx.appcompat.app.AlertDialog;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import it.integry.integrywmsnative.MainActivity;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.context.MainContext;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityServer;
@@ -59,10 +59,10 @@ public class LoginViewModel {
loginButtonEnabled.set(true);
codAzienda.set(SettingsManager.i().server.codAzienda);
codAzienda.set(SettingsManager.i().getServer().getCodAzienda());
customSettingsCheckboxChecked.set(SettingsManager.i().server.host == null);
customSettingsCheckboxEnabled.set(SettingsManager.i().server.host != null);
customSettingsCheckboxChecked.set(SettingsManager.i().getServer().getHost() == null);
customSettingsCheckboxEnabled.set(SettingsManager.i().getServer().getHost() != null);
}
@@ -120,7 +120,7 @@ public class LoginViewModel {
SettingsManager.iDB().setAvailableProfiles(loginDTO.availableProfiles);
SettingsManager.i().createUserSession();
SettingsManager.i().user.fullname = !UtilityString.isNullOrEmpty(loginDTO.full_name) ? loginDTO.full_name : username.get();
SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.full_name) ? loginDTO.full_name : username.get());
mActivity.runOnUiThread(() -> onLoginSuccess(
@@ -157,12 +157,12 @@ public class LoginViewModel {
private void loadDepo(String host, int port, Runnable onComplete) {
SettingsManager.i().server.codAzienda = codAzienda.get();
SettingsManager.i().server.host = host;
SettingsManager.i().server.port = port;
SettingsManager.i().getServer().setCodAzienda(codAzienda.get());
SettingsManager.i().getServer().setHost(host);
SettingsManager.i().getServer().setPort(port);
SettingsManager.i().user.username = username.get();
SettingsManager.i().user.password = password.get();
SettingsManager.i().getUser().setUsername(username.get());
SettingsManager.i().getUser().setPassword(password.get());
SystemRESTConsumer.getAvailableCodMdeps(new ISimpleOperationCallback<List<AvailableCodMdepsDTO>>() {
@Override
@@ -174,7 +174,7 @@ public class LoginViewModel {
return;
}
SettingsManager.i().userSession.depo = availableCodMdeps.get(0);
SettingsManager.i().getUserSession().setDepo(availableCodMdeps.get(0));
if(onComplete != null) onComplete.run();
@@ -212,7 +212,7 @@ public class LoginViewModel {
private void showProfileDBSelectionDialog(final String host, final int port, final List<String> availableProfiles){
if(availableProfiles != null && availableProfiles.size() == 1 ) {
SettingsManager.i().userSession.profileDB = availableProfiles.get(0);
SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(0));
loadDepo(host, port, this::onLoginCompleted);
} else {
@@ -225,7 +225,7 @@ public class LoginViewModel {
String[] profiles = new String[availableProfiles.size()];
profiles = availableProfiles.toArray(profiles);
builder.setItems(profiles, (dialog, which) -> {
SettingsManager.i().userSession.profileDB = availableProfiles.get(which);
SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(which));
loadDepo(host, port, this::onLoginCompleted);
});

View File

@@ -112,8 +112,8 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
}
private void initSessionData() {
mBindings.currentUserName.setText(SettingsManager.i().user.fullname);
mBindings.currentDeposito.setText(String.format("Deposito: %s • %s", SettingsManager.i().userSession.depo.getCodMdep(), SettingsManager.i().userSession.depo.getDescrizione()));
mBindings.currentUserName.setText(SettingsManager.i().getUser().getFullname());
mBindings.currentDeposito.setText(String.format("Deposito: %s • %s", SettingsManager.i().getUserSession().getDepo().getCodMdep(), SettingsManager.i().getUserSession().getDepo().getDescrizione()));
if (SettingsManager.iDB().getDatiAzienda() != null && SettingsManager.iDB().getDatiAzienda().isLogoAvailable()) {
// currentLogoAzienda.setImageBitmap(SettingsManager.iDB().getDatiAzienda().getLogo());

View File

@@ -191,7 +191,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
mAdapter = null;
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
@@ -258,6 +258,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
@Override
public void onLUOpened(MtbColt mtbColt) {
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
initAdapter();
thereIsAnOpenedUL.set(true);
@@ -275,6 +277,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
@Override
public void onLUClosed() {
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
destroyAdapter();
thereIsAnyRowInUL.set(false);

View File

@@ -7,7 +7,6 @@ import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
@Module(subcomponents = {PickingLiberoComponent.class})
public class PickingLiberoModule {
@@ -16,8 +15,7 @@ public class PickingLiberoModule {
@Singleton
PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer) {
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, barcodeRESTConsumer);
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer);
}
}

View File

@@ -6,7 +6,9 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
@@ -17,16 +19,18 @@ import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@@ -35,7 +39,6 @@ import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickDataDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
@@ -46,7 +49,6 @@ public class PickingLiberoViewModel {
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final PrinterRESTConsumer mPrinterRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
@@ -60,11 +62,9 @@ public class PickingLiberoViewModel {
@Inject
public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mPrinterRESTConsumer = printerRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
}
@@ -644,7 +644,7 @@ public class PickingLiberoViewModel {
.setQtaCol(qtaTot)
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setUtente(SettingsManager.i().user.fullname)
.setUtente(SettingsManager.i().getUser().getFullname())
.setCausale(MtbColr.Causale.RETTIFICA)
.setDatetimeRow(UtilityDate.getDateInstance());
@@ -812,16 +812,7 @@ public class PickingLiberoViewModel {
return this;
}
public interface Listener {
void onLoadingStarted();
void onLoadingEnded();
void onLUOpened(MtbColt mtbColt);
void onLUClosed();
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
public interface Listener extends ILoadingListener, ILUBaseOperationsListener {
void onError(Exception ex);
@@ -846,10 +837,6 @@ public class PickingLiberoViewModel {
boolean canPartitaMagBeChanged,
boolean canLUBeClosed,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onRowSaved();
}

View File

@@ -1,109 +1,135 @@
package it.integry.integrywmsnative.gest.picking_resi;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.SpannableString;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.SpannableString;
import com.annimon.stream.Stream;
import com.tfb.fbtoast.FBToast;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
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.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityPickingResiBinding;
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListAdapter;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListModel;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class PickingResiActivity extends BaseActivity implements IOnColloClosedCallback {
public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener {
private ActivityPickingResiBinding mBindings;
@Inject
PickingResiViewModel mViewmodel;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>();
public BindableBoolean noLUPresent = new BindableBoolean(true);
public BindableBoolean noItemsToPick = new BindableBoolean(false);
public BindableBoolean bottomSheetEnabled = new BindableBoolean(false);
private String mTitle;
private List<DocumentoResoDTO> mDocumentiResiList;
public ObservableList<WithdrawableDtbDocr> mDtbDocrList;
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
private ActivityPickingResiBinding mBinding;
private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
public ObservableField<MtbColt> currentMtbColt = new ObservableField<>();
private PickingResiListAdapter mAdapter;
private int barcodeScannerIstanceID = -1;
private String mActivityTitle;
private String mDefaultGestioneOfUL;
private String mDefaultCodAnagOfUL;
private Integer mDefaultSegnoOfUL;
private boolean mShouldCloseActivity;
public static void startActivity(Context context, String activityTitle, List<DocumentoResoDTO> documentoResoDTOList, Integer segno) {
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
Intent intent = new Intent(context, PickingResiActivity.class);
intent.putExtra("activity_title", activityTitle);
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
intent.putExtra("key", consegneCacheKey);
intent.putExtra("segno", segno);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
mBinding.setViewmodel(this);
this.mDtbDocrList = new ObservableArrayList<>();
mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, this.mBinding.bottomSheetInclude);
mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this);
mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onItemEdited);
mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onItemDeleted);
mTitle = getIntent().getStringExtra("activity_title");
mDocumentiResiList = DataCache.retrieveItem(getIntent().getStringExtra("key"));
mDefaultSegnoOfUL = getIntent().getIntExtra("segno", +1);
int defaultSegnoLU = getIntent().getIntExtra("segno", +1);
mActivityTitle = getIntent().getStringExtra("activity_title");
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
this.initView();
MainApplication.appComponent
.pickingResiComponent()
.create()
.inject(this);
mViewmodel.setListener(this);
setSupportActionBar(mBindings.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(mTitle);
mBindings.setLifecycleOwner(this);
mBindings.setPickingResiView(this);
mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null);
mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance();
mBindings.bottomSheetLuContent.setListener(this);
mBottomSheetFragmentLUContentViewModel.setListener(this);
this.initVars();
this.initBarcodeReader();
this.initRecyclerView();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
this.mViewmodel.init(mDocumentiResiList, defaultSegnoLU, codMdep);
}
@Override
@@ -114,435 +140,255 @@ public class PickingResiActivity extends BaseActivity implements IOnColloClosedC
@Override
public void onBackPressed() {
if(mArticoliInColloBottomSheetViewModel.isExpanded()){
mArticoliInColloBottomSheetViewModel.collapse();
}
else if(thereIsAnOpenedUL()) {
mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
});
}
else {
if (this.mBindings.bottomSheetLuContent.isExpanded()) {
this.mBindings.bottomSheetLuContent.collapse();
} else if (!noLUPresent.get()) {
this.mShouldCloseActivity = true;
BarcodeManager.removeCallback(barcodeScannerIstanceID);
this.mViewmodel.closeLU(true);
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
private void initView() {
private void initVars() {
this.noLUPresent.addOnPropertyChangedCallback(() -> {
this.bottomSheetEnabled.set(!this.noLUPresent.get());
});
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(this::onScanSuccessful)
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
}
private void initRecyclerView() {
this.mBindings.elevatedToolbar.setRecyclerView(this.mBindings.mainList);
setSupportActionBar(this.mBinding.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.mViewmodel.getPickingList().observe(this, updatedData -> {
this.mPickingResiMutableData.clear();
this.mPickingResiMutableData.addAll(convertDataModelToListModel(updatedData));
this.noItemsToPick.set(updatedData.isEmpty());
});
getSupportActionBar().setTitle(mActivityTitle);
PickingResiListAdapter pickingResiListAdapter = new PickingResiListAdapter(this, mPickingResiMutableData);
this.mBindings.mainList.setAdapter(pickingResiListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
this.mBinding.elevatedToolbar.setRecyclerView(this.mBinding.mainList);
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(this);
UltimeConsegneClienteRESTConsumer.loadDocRowFromConsegna(mDocumentiResiList, dtbDocrToPick -> {
progressDialog.dismiss();
this.mDtbDocrList.addAll(dtbDocrToPick);
try {
this.initDatiPicking();
} catch (Exception ex) {
DialogSimpleMessageHelper.showSimpleErrorDialog(this, ex.getMessage());
pickingResiListAdapter.setOnItemClicked(clickedItem -> {
if (!noLUPresent.get()) {
this.mViewmodel.dispatchOrdineRow(clickedItem);
}
this.initList();
}, ex -> {
UtilityExceptions.defaultException(this, ex, progressDialog);
});
}
private void initList() {
mAdapter = new PickingResiListAdapter(this, this.mDtbDocrList);
mAdapter.setOnItemClicked(this::onOrdineRowDispatch);
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
this.mBinding.mainList.setLayoutManager(new LinearLayoutManager(this));
this.mBinding.mainList.setAdapter(mAdapter);
Stream.of(dataList)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.forEach(x -> {
PickingResiListModel pickingResiListModel = new PickingResiListModel();
pickingResiListModel.setGroupTitle(x.getCodDtip() + " - N° " + x.getNumDoc() + " del " + UtilityDate.formatDate(x.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
pickingResiListModel.setBadge1(x.getCodMart());
pickingResiListModel.setDescrizione(UtilityString.isNull(x.getDescrizioneEstesa(), x.getDescrizione()));
pickingResiListModel.setActive(true);
pickingResiListModel.setOriginalModel(x);
BigDecimal qtaColEvasa = BigDecimal.ZERO;
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
for (MtbColr mtbColr : x.getWithdrawRows()) {
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
}
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
pickingResiListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
pickingResiListModel.setQtaEvasa(numCnfColEvasa);
pickingResiListModel.setQtaTot(x.getNumCnf());
} else {
if (x.getMtbAart() != null)
pickingResiListModel.setUntMis(x.getMtbAart().getUntMis());
else pickingResiListModel.setUntMis(x.getUntDoc());
pickingResiListModel.setQtaEvasa(qtaColEvasa);
pickingResiListModel.setQtaTot(x.getQtaDoc());
}
pickingResiListModels.add(pickingResiListModel);
});
return pickingResiListModels;
}
private void initDatiPicking() throws Exception {
List<String> foundGestioni = Stream.of(this.mDocumentiResiList)
.map(DocumentoResoDTO::getGestione)
.distinct()
.withoutNulls()
.toList();
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
if(foundGestioni.size() > 1) {
throw new Exception("Sono stati caricati documenti con diverse gestioni");
} else mDefaultGestioneOfUL = foundGestioni.get(0);
this.openProgress();
this.mViewmodel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
});
};
List<String> foundCodAnags = Stream.of(this.mDocumentiResiList)
.map(DocumentoResoDTO::getCodAnag)
.distinct()
.toList();
public void createNewLU() {
this.mBindings.mainFab.close(true);
if(foundCodAnags.size() > 1) {
throw new Exception("Sono stati caricati documenti con diversi codici anagrafici");
} else mDefaultCodAnagOfUL = foundCodAnags.get(0);
this.openProgress();
}
private void onScanSuccessful(BarcodeScanDTO data) {
}
public void createNewUL() {
this.createNewUL(null, null, null, false, true, null);
}
public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) {
this.mBinding.mainFab.close(true);
if (progress == null){
progress = UtilityProgress.createDefaultProgressDialog(this);
}
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields();
mtbColt .setGestione(mDefaultGestioneOfUL)
.setSegno(mDefaultSegnoOfUL)
.setCodAnag(mDefaultCodAnagOfUL)
.setCodMdep(SettingsManager.i().userSession.depo.getCodMdep())
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if(customNumCollo != null) {
mtbColt.setNumCollo(customNumCollo);
}
if(!UtilityString.isNullOrEmpty(customSerCollo)) {
mtbColt.setSerCollo(customSerCollo);
}
Dialog finalProgress = progress;
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, value -> {
value.setDisablePrint(disablePrint);
setULToCurrentContext(value);
if(closeProgress) finalProgress.dismiss();
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
if(onComplete != null) onComplete.run();
}, ex -> {
UtilityExceptions.defaultException(this, ex, finalProgress);
});
}
private void setULToCurrentContext(MtbColt mtbColt){
if(mtbColt != null && mtbColt.getMtbColr() == null) {
mtbColt.setMtbColr(new ObservableArrayList<>());
}
this.currentMtbColt.set(mtbColt);
mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt);
}
public void onOrdineRowDispatch(final WithdrawableDtbDocr item) {
if(currentMtbColt.get() != null){
List<MtbColr> currentMtbColrs = item.getWithdrawRows();
BigDecimal qtaEvasaTotaleInMtbColr = BigDecimal.ZERO;
for (MtbColr mtbColr : currentMtbColrs) {
qtaEvasaTotaleInMtbColr.add(mtbColr.getQtaCol());
}
BigDecimal qtaDaEvadere = item.getQtaDoc().subtract(qtaEvasaTotaleInMtbColr);
if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO;
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
.setBatchLot(item.getPartitaMag())
.setCodArtFor(item.getCodArtFor())
.setMtbAart(item.getMtbAart())
.setQtaDisponibile(qtaDaEvadere)
.setQtaTot(qtaDaEvadere)
.setQtaEvasa(qtaEvasaTotaleInMtbColr)
.setCanPartitaMagBeChanged(false)
.setMaxQta(qtaDaEvadere);
DialogInputQuantity.makeBase(this, dto, false, (quantityDTO, closeUL) -> {
onOrdineRowDispatched(item, quantityDTO, closeUL);
}, null).show();
}
}
private void onOrdineRowDispatched(WithdrawableDtbDocr item, QuantityDTO quantityDTO, boolean closeUL){
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
final MtbColr mtbColr = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
.setDescrizione(item.getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setCodAnagDoc(item.getCodAnag())
.setCodDtipDoc(item.getCodDtip())
.setSerDoc(item.getSerDoc())
.setNumDoc(item.getNumDoc())
.setDataDoc(item.getDataDocS())
.setIdRigaDoc(item.getIdRiga());
// .setCodJcom(item.getCodJcom());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) currentMtbColt.get().clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add(mtbColr);
ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, value -> {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(item.getMtbAart().getUntMis())
.setMtbAart(item.getMtbAart());
item.getWithdrawRows().add(mtbColr);
this.refreshDtbDocrItem(item);
currentMtbColt.get().getMtbColr().add(mtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
removeListFilter();
FBToast.successToast(this, this.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
progress.dismiss();
// if(closeUL) onColloClosed(null);
}, ex -> {
UtilityExceptions.defaultException(this, ex, progress);
this.mViewmodel.createNewLU(null, null, () -> {
this.closeProgress();
});
}
@Override
public void onColloClosed(Runnable onComplete, boolean shouldPrint) {
if(thereIsAnOpenedUL()) {
public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewmodel.dispatchRowEdit(mtbColr);
}
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
progress.show();
@Override
public void onMtbColrDelete(MtbColr mtbColr) {
this.mViewmodel.deleteRow(mtbColr);
}
if(thereIsAnyRowInUL()) {
NoteAggiuntiveLUDialog.make(this, noteString -> {
@Override
public void onBottomSheetLUClose() {
this.mViewmodel.closeLU(true);
}
MtbColt currentLU = currentMtbColt.get();
@Override
public void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show();
}
Runnable postNoteSave = () -> {
ColliMagazzinoRESTConsumer.updateDataFineStatic(
currentLU,
() -> printCollo(progress, currentMtbColt.get(), onComplete),
ex -> UtilityExceptions.defaultException(this, ex, progress));
};
if(!UtilityString.isNullOrEmpty(noteString)) {
currentLU.setAnnotazioni(noteString);
ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> {
postNoteSave.run();
}, ex -> UtilityExceptions.defaultException(this, ex, progress));
} else postNoteSave.run();
}, () -> {
}).show();
} else {
deleteCollo(progress, onComplete);
}
@Override
public void onError(Exception ex) {
this.closeProgress();
if(ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
if(onComplete != null) onComplete.run();
}
}
private void onItemEdited(MtbColr mtbColrOriginal, MtbColr mtbColrEdited) {
for(int i = 0; i < mDtbDocrList.size(); i++) {
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrOriginal);
if(foundIndex >= 0){
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
mDtbDocrList.get(i).getWithdrawRows().add(foundIndex, mtbColrEdited);
refreshDtbDocrItem(this.mDtbDocrList.get(i));
break;
}
}
}
private void onItemDeleted(MtbColr mtbColrDeleted) {
for(int i = 0; i < mDtbDocrList.size(); i++) {
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrDeleted);
if(foundIndex >= 0){
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
refreshDtbDocrItem(this.mDtbDocrList.get(i));
break;
}
}
}
private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) {
DialogAskShouldPrint.make(this, "Packing List", shouldPrint -> {
if(shouldPrint) {
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().userSession.depo.getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList.size() > 0) {
try {
singlePrint(mtbColtToPrint, printerList.get(0), () -> {
postCloseOperations(mtbColtToPrint, onComplete);
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(
this,
new SpannableString(errorMessage),
null,
null,
R.string.button_ignore_print,
() -> postCloseOperations(mtbColtToPrint, onComplete)).show();
});
} catch (Exception ex) {
UtilityExceptions.defaultException(this, ex, progress);
postCloseOperations(mtbColtToPrint, onComplete);
}
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtToPrint, onComplete)).show();
}
}, ex -> {
UtilityExceptions.defaultException(this, ex, progress);
});
} else {
postCloseOperations(mtbColtToPrint, onComplete);
progress.dismiss();
}
}).show();
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
}, onAbort);
}
private void postCloseOperations(MtbColt generatedMtbColt, Runnable onComplete) {
this.mColliRegistrati.add(generatedMtbColt);
setULToCurrentContext(null);
for(int i = 0; i < this.mDtbDocrList.size(); i++) {
WithdrawableDtbDocr dtbDocr = this.mDtbDocrList.get(i);
List<MtbColr> withdraws = dtbDocr.getWithdrawRows();
for(int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
dtbDocr.setQtaDoc(dtbDocr.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
dtbDocr.getWithdrawRows().clear();
if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) {
this.mDtbDocrList.remove(dtbDocr);
i--;
} else this.refreshDtbDocrItem(dtbDocr);
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
}
removeListFilter();
if(onComplete != null) onComplete.run();
BarcodeManager.enable();
}
@Override
public void onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalQtaAvailable(totalQtaAvailable)
.setTotalNumCnfAvailable(totalNumCnfAvailable)
.setQtaCnfAvailable(qtaCnfAvailable)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(false)
.setCanLUBeClosed(false)
.setCanPartitaMagBeChanged(false);
private void deleteCollo(Dialog progress, Runnable onComplete) {
DialogInputQuantityV2
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
ColliMagazzinoRESTConsumer.deleteColloStatic(currentMtbColt.get(), () -> {
setULToCurrentContext(null);
progress.dismiss();
if(onComplete != null) onComplete.run();
}, ex -> UtilityExceptions.defaultException(this, ex, progress)
);
this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
// this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
}
public boolean thereIsAnOpenedUL() {
return currentMtbColt.get() != null;
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
public boolean thereIsAnyRowInUL() {
return currentMtbColt.get() != null &&
currentMtbColt.get().getMtbColr() != null &&
currentMtbColt.get().getMtbColr().size() > 0;
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
}
@Override
public void onLUOpened(MtbColt mtbColt) {
noLUPresent.set(false);
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) {
int index = this.mDtbDocrList.indexOf(dtbDocr);
this.mDtbDocrList.remove(dtbDocr);
this.mDtbDocrList.add(index, dtbDocr);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
}
@Override
public void onLUClosed() {
noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
public void removeListFilter() {
if (this.mShouldCloseActivity) super.onBackPressed();
}
@Override
public void onLUSuccessullyPrinted() {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
DialogAskShouldPrint.make(this, "Packing List", onComplete).show();
}
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
}
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.picking_resi;
import dagger.Subcomponent;
@Subcomponent
public interface PickingResiComponent {
@Subcomponent.Factory
interface Factory {
PickingResiComponent create();
}
void inject(PickingResiActivity pickingResiActivity);
}

View File

@@ -0,0 +1,33 @@
package it.integry.integrywmsnative.gest.picking_resi;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
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.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
@Module(subcomponents = PickingResiComponent.class)
public class PickingResiModule {
@Provides
PickingResiRESTConsumer providesPickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new PickingResiRESTConsumer(systemRESTConsumer);
}
@Provides
BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() {
return new BottomSheetFragmentLUContentViewModel();
}
@Provides
PickingResiViewModel providesPickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PickingResiRESTConsumer pickingResiRESTConsumer) {
return new PickingResiViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, pickingResiRESTConsumer);
}
}

View File

@@ -0,0 +1,576 @@
package it.integry.integrywmsnative.gest.picking_resi;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUPrintListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.report.ReportManager;
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.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class PickingResiViewModel {
private Listener mListener;
private final MutableLiveData<List<WithdrawableDtbDocr>> mPickingList = new MutableLiveData<>();
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
private MtbColt mCurrentMtbColt = null;
private String mDefaultGestioneOfLU;
private String mDefaultCodAnagOfLU;
private int mDefaultSegnoOfLU;
private String mDefaultCodMdepOfLU;
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliDataRecoverService mColliDataRecoverService;
private final OrdiniRESTConsumer mOrdiniRestConsumerService;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final PrinterRESTConsumer mPrinterRESTConsumer;
private final PickingResiRESTConsumer mPickingResiRESTConsumer;
@Inject
public PickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliDataRecoverService colliDataRecoverService,
OrdiniRESTConsumer ordiniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
PickingResiRESTConsumer mPickingResiRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliDataRecoverService = colliDataRecoverService;
this.mOrdiniRestConsumerService = ordiniRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mPrinterRESTConsumer = printerRESTConsumer;
this.mPickingResiRESTConsumer = mPickingResiRESTConsumer;
}
public void init(List<DocumentoResoDTO> documentList, int defaultSegnoLU, String codMdep) {
this.mDefaultSegnoOfLU = defaultSegnoLU;
this.mDefaultCodMdepOfLU = codMdep;
this.sendOnLoadingStarted();
this.initDatiPicking(documentList);
this.mPickingResiRESTConsumer.loadDocRows(documentList, withdrawableDtbDocr -> {
this.mPickingList.postValue(withdrawableDtbDocr);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex)));
}
private void initDatiPicking(List<DocumentoResoDTO> documentList) {
List<String> foundGestioni = Stream.of(documentList)
.map(DocumentoResoDTO::getGestione)
.distinct()
.withoutNulls()
.toList();
if (foundGestioni.size() > 1) {
this.sendError(new Exception("Sono stati caricati documenti con diverse gestioni"));
} else mDefaultGestioneOfLU = foundGestioni.get(0);
List<String> foundCodAnags = Stream.of(documentList)
.map(DocumentoResoDTO::getCodAnag)
.distinct()
.toList();
if (foundCodAnags.size() > 1) {
this.sendError(new Exception("Sono stati caricati documenti con diversi codici anagrafici"));
} else mDefaultCodAnagOfLU = foundCodAnags.get(0);
}
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields();
mtbColt.setGestione(mDefaultGestioneOfLU)
.setSegno(mDefaultSegnoOfLU)
.setCodAnag(mDefaultCodAnagOfLU)
.setCodMdep(mDefaultCodMdepOfLU)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if (customNumCollo != null) mtbColt.setNumCollo(customNumCollo);
if (!UtilityString.isNullOrEmpty(customSerCollo)) mtbColt.setSerCollo(customSerCollo);
mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
mtbColt
.setNumCollo(value.getNumCollo())
.setDataCollo(value.getDataColloS())
.setMtbColr(new ObservableArrayList<>());
this.mCurrentMtbColt = mtbColt;
if (onComplete != null) onComplete.run();
this.sendLUOpened(mtbColt);
}, this::sendError);
}
public void closeLU(boolean shouldPrint) {
if (mCurrentMtbColt == null) return;
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.canLUBeDeleted(mCurrentMtbColt, canBeDeleted -> {
if (canBeDeleted) {
deleteLU(() -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
} else {
this.sendOnNoteAggiuntiveRequired(noteAggiuntive -> {
if (!UtilityString.isNullOrEmpty(noteAggiuntive)) {
this.mCurrentMtbColt.setAnnotazioni(noteAggiuntive);
}
this.mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> {
if (shouldPrint) {
printCollo(mCurrentMtbColt, () -> {
postCloseOperations(mCurrentMtbColt, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
});
} else {
postCloseOperations(mCurrentMtbColt, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
}
}, this::sendError);
}, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
}
}, this::sendError);
}
private void deleteLU(Runnable onComplete) {
mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> {
this.mCurrentMtbColt = null;
if (onComplete != null) onComplete.run();
}, this::sendError);
}
private void printCollo(MtbColt mtbColtToPrint, Runnable onComplete) {
this.sendLUPrintRequest(shouldPrint -> {
if (!shouldPrint) {
onComplete.run();
} else {
this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdepOfLU, PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList == null || printerList.size() == 0) {
this.sendError(new NoPrintersFoundException());
onComplete.run();
return;
}
singlePrint(mtbColtToPrint, printerList.get(0), onComplete, ex -> this.sendLUPrintError(ex, onComplete));
}, this::sendError);
}
});
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum());
this.mPrinterRESTConsumer.printCollo(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onFailed);
}
private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) {
this.mColliRegistrati.add(mtbColt);
Stream.of(this.mPickingList.getValue())
.forEach(x -> {
List<MtbColr> withdraws = x.getWithdrawRows();
for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
x.getWithdrawRows().clear();
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
this.mPickingList.getValue().remove(x);
}
});
this.mPickingList.postValue(this.mPickingList.getValue());
onComplete.run();
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
//Se non c'è una UL aperta
if (mCurrentMtbColt == null) {
//Se è un'etichetta anonima
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima
// this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else {
// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
}
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
} else {
// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
}
}
}
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) {
BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc();
BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf();
BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf();
this.sendOnItemDispatched(
withdrawableDtbDocr.getMtbAart(),
totalNumCnfDoc,
qtaCnfDoc,
totalQtaDoc,
totalQtaDoc,
totalNumCnfDoc,
qtaCnfDoc,
withdrawableDtbDocr.getPartitaMag(),
withdrawableDtbDocr.getDataScadPartitaMagD(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(withdrawableDtbDocr,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
public void dispatchRowEdit(final MtbColr mtbColrToEdit) {
this.sendOnItemDispatched(
mtbColrToEdit.getMtbAart(),
mtbColrToEdit.getNumCnf(),
mtbColrToEdit.getQtaCnf(),
mtbColrToEdit.getQtaCol(),
null,
null,
null,
mtbColrToEdit.getPartitaMag(),
mtbColrToEdit.getDataScadPartitaD(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveEditedRow(mtbColrToEdit,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr()
.setCodMart(withdrawableDtbDocr.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setDescrizione(withdrawableDtbDocr.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setCodAnagDoc(withdrawableDtbDocr.getCodAnag())
.setCodDtipDoc(withdrawableDtbDocr.getCodDtip())
.setSerDoc(withdrawableDtbDocr.getSerDoc())
.setNumDoc(withdrawableDtbDocr.getNumDoc())
.setDataDoc(withdrawableDtbDocr.getDataDocS())
.setIdRigaDoc(withdrawableDtbDocr.getIdRiga());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
boolean shouldPrint = true;
//Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe)
if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) {
shouldPrint = false;
}
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(shouldPrint);
return;
}
boolean finalShouldPrint = shouldPrint;
this.mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(withdrawableDtbDocr.getMtbAart().getUntMis())
.setMtbAart(withdrawableDtbDocr.getMtbAart());
withdrawableDtbDocr.getWithdrawRows().add(mtbColr);
mCurrentMtbColt.getMtbColr().add(mtbColr);
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(finalShouldPrint);
}, this::sendError);
}
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToUpdate.getNumCollo())
.setDataCollo(mtbColrToUpdate.getDataColloS())
.setSerCollo(mtbColrToUpdate.getSerCollo())
.setGestione(mtbColrToUpdate.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setRiga(null)
.setNumCnf(numCnf.subtract(mtbColrToUpdate.getNumCnf()))
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot.subtract(mtbColrToUpdate.getQtaCol()))
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
mtbColr.setNumCnf(numCnf)
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot);
Optional<WithdrawableDtbDocr> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToUpdate))
.findSingle();
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToUpdate);
pickingObjectDTO.get().getWithdrawRows().add(mtbColr);
}
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
this.mCurrentMtbColt.getMtbColr().add(mtbColr);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
}
public void deleteRow(MtbColr mtbColrToDelete) {
this.sendMtbColrDeleteRequest(canDelete -> {
if (canDelete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setRiga(null);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
Optional<WithdrawableDtbDocr> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToDelete))
.findSingle();
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToDelete);
}
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
}
});
}
public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
return mPickingList;
}
private void sendOnNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort);
}
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);
}
private void sendLUOpened(MtbColt mtbColt) {
if (this.mListener != null) mListener.onLUOpened(mtbColt);
}
private void sendLUClosed() {
if (this.mListener != null) mListener.onLUClosed();
}
private void sendLUPrintRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) mListener.onLUPrintRequest(onComplete);
}
private void sendLUPrintError(Exception ex, Runnable onComplete) {
if (this.mListener != null) mListener.onLUPrintError(ex, onComplete);
}
private void sendMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
}
private void sendOnItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaAvailable,
totalNumCnfAvailable,
qtaCnfAvailable,
partitaMag,
dataScad,
onComplete);
}
private void sendOnRowSaved() {
if (this.mListener != null) mListener.onRowSaved();
}
public PickingResiViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort);
void onError(Exception ex);
void onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
}
}

View File

@@ -1,197 +1,149 @@
package it.integry.integrywmsnative.gest.picking_resi.core;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.math.BigDecimal;
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.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemBinding;
import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemHeaderBinding;
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding;
import it.integry.integrywmsnative.databinding.PickingResiMainListItemHeaderBinding;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<PickingResiListAdapter.SubheaderHolder, PickingResiListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<WithdrawableDtbDocr> mDataset;
private final List<PickingResiListModel> mDataset = new ArrayList<>();
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemHeaderBinding mBinding;
UltimeConsegneMainListItemHeaderBinding mBinding;
SubheaderHolder(UltimeConsegneMainListItemHeaderBinding binding) {
SubheaderHolder(PickingResiMainListItemHeaderBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemBinding mBinding;
UltimeConsegneMainListItemBinding mBinding;
SingleItemViewHolder(UltimeConsegneMainListItemBinding binding) {
SingleItemViewHolder(PickingResiMainListItemBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
public PickingResiListAdapter(Context context, ObservableList<WithdrawableDtbDocr> data) {
public PickingResiListAdapter(AppCompatActivity context, ObservableArrayList<PickingResiListModel> mutableDataSet) {
this.mContext = context;
this.mDataset = new ArrayList<>();
refreshData(data);
data.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<WithdrawableDtbDocr>>() {
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList<WithdrawableDtbDocr> sender) {
refreshData(sender);
}
@Override
public void onItemRangeChanged(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
refreshData(sender);
}
@Override
public void onItemRangeInserted(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
refreshData(sender);
}
@Override
public void onItemRangeMoved(ObservableList<WithdrawableDtbDocr> sender, int fromPosition, int toPosition, int itemCount) {
refreshData(sender);
}
@Override
public void onItemRangeRemoved(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
refreshData(sender);
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
}
});
}
private void refreshData(List<WithdrawableDtbDocr> data) {
this.mDataset.clear();
this.mDataset.addAll(Stream.of(data)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.toList());
this.notifyDataChanged();
}
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
@Override
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
UltimeConsegneMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item, parent, false);
return new SingleItemViewHolder(binding);
public PickingResiListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
PickingResiMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item, parent, false);
return new PickingResiListAdapter.SingleItemViewHolder(binding);
}
@Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
UltimeConsegneMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item_header, parent, false);
return new SubheaderHolder(binding);
public PickingResiListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
PickingResiMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item_header, parent, false);
return new PickingResiListAdapter.SubheaderHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(PickingResiListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
PickingResiListModel pickingResiListModel = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.groupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getGroupTitle()) ? View.GONE : View.VISIBLE);
subheaderHolder.mBinding.groupTitle.setText(pickingResiListModel.getGroupTitle());
}
@Override
public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) {
final WithdrawableDtbDocr dtbDocr = this.mDataset.get(position);
public void onBindItemViewHolder(final PickingResiListAdapter.SingleItemViewHolder holder, final int position) {
PickingResiListModel pickingResiListModel = this.mDataset.get(position);
BigDecimal qtaColEvasa = BigDecimal.ZERO;
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
for(MtbColr mtbColr : dtbDocr.getWithdrawRows()) {
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
}
Float qtaDaEvadere = UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc().subtract(qtaColEvasa));
holder.mBinding.badge1.setText(dtbDocr.getCodMart());
holder.mBinding.descrizione.setText(UtilityString.isNullOrEmpty(dtbDocr.getDescrizioneEstesa()) ? dtbDocr.getDescrizioneEstesa() : dtbDocr.getDescrizione());
//Setting qty with unt_mis
if(!SettingsManager.iDB().isFlagForceAllToColli() && (dtbDocr.getMtbAart() == null || dtbDocr.getMtbAart().isFlagQtaCnfFissaBoolean())){
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(qtaColEvasa));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getQtaDoc()));
holder.mBinding.untMis.setText(dtbDocr.getUntDoc());
} else {
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(numCnfColEvasa));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getNumCnf()));
holder.mBinding.untMis.setText(UtilityResources.getString(R.string.unt_mis_col));
}
if (qtaDaEvadere <= 0 ) {
if (pickingResiListModel.getQtaEvasa().subtract(pickingResiListModel.getQtaTot()).floatValue() >= 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
} else if (qtaDaEvadere > 0 && qtaColEvasa.floatValue() > 0) {
} else if (pickingResiListModel.getQtaEvasa().floatValue() > 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
} else if (position % 2 == 1) {
holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
} else {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.full_white));
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
}
holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingResiListModel.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(mContext.getResources().getDrawable(!pickingResiListModel.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner));
holder.mBinding.qtaEvasa.setTextColor(mContext.getResources().getColor(!pickingResiListModel.isActive() ? R.color.gray_600 : R.color.green_700));
holder.mBinding.descrizione.setText(pickingResiListModel.getDescrizione());
holder.mBinding.descrizione.setTextColor(pickingResiListModel.isDescrizionePresente() ? Color.BLACK : Color.GRAY);
holder.mBinding.badge1.setText(pickingResiListModel.getBadge1());
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaEvasa()));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaTot()));
holder.mBinding.untMis.setText(pickingResiListModel.getUntMis());
holder.mBinding.untMis.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getUntMis()) ? View.GONE : View.VISIBLE);
holder.mBinding.getRoot().setOnClickListener(v -> {
if(this.mOnItemClicked != null) this.mOnItemClicked.run(dtbDocr);
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel());
});
}
@Override
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
DtbDocr nextDtbDocr = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.descrizione.setText(nextDtbDocr.getCodDtip() + " - N° " + nextDtbDocr.getNumDoc() + " del " + UtilityDate.formatDate(nextDtbDocr.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
PickingResiListModel compare1 = this.mDataset.get(position);
PickingResiListModel compare2 = this.mDataset.get(position + 1);
DtbDocr compare1 = this.mDataset.get(position);
DtbDocr compare2 = this.mDataset.get(position + 1);
if( !compare1.getDataDocS().equalsIgnoreCase(compare2.getDataDocS()) ||
!compare1.getSerDoc().equalsIgnoreCase(compare2.getSerDoc()) ||
!compare1.getNumDoc().equals(compare2.getNumDoc()) ||
!compare1.getCodAnag().equalsIgnoreCase(compare2.getCodAnag()) ||
!compare1.getCodDtip().equalsIgnoreCase(compare2.getCodDtip())) {
return true;
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
return false;
return true;
}
@Override
public int getItemSize() {
return this.mDataset.size();
}
}

View File

@@ -0,0 +1,103 @@
package it.integry.integrywmsnative.gest.picking_resi.core;
import java.math.BigDecimal;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListModel {
private String groupTitle;
private String badge1;
private String descrizione;
private boolean descrizionePresente;
private BigDecimal qtaEvasa;
private BigDecimal qtaTot;
private String untMis;
private boolean active;
private WithdrawableDtbDocr mOriginalModel;
public String getGroupTitle() {
return groupTitle;
}
public PickingResiListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public String getBadge1() {
return badge1;
}
public PickingResiListModel setBadge1(String badge1) {
this.badge1 = badge1;
return this;
}
public String getDescrizione() {
return descrizione;
}
public PickingResiListModel setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public boolean isDescrizionePresente() {
return descrizionePresente;
}
public PickingResiListModel setDescrizionePresente(boolean descrizionePresente) {
this.descrizionePresente = descrizionePresente;
return this;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
public PickingResiListModel setQtaEvasa(BigDecimal qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public PickingResiListModel setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public String getUntMis() {
return untMis;
}
public PickingResiListModel setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public boolean isActive() {
return active;
}
public PickingResiListModel setActive(boolean active) {
this.active = active;
return this;
}
public WithdrawableDtbDocr getOriginalModel() {
return mOriginalModel;
}
public PickingResiListModel setOriginalModel(WithdrawableDtbDocr originalModel) {
this.mOriginalModel = originalModel;
return this;
}
}

View File

@@ -0,0 +1,10 @@
package it.integry.integrywmsnative.gest.picking_resi.exceptions;
public class DocumentsLoadException extends Exception {
public DocumentsLoadException(Throwable cause) {
super("Errore durante il caricamento dei documenti");
initCause(cause);
}
}

View File

@@ -0,0 +1,102 @@
package it.integry.integrywmsnative.gest.picking_resi.rest;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
@Singleton
public class PickingResiRESTConsumer {
private final SystemRESTConsumer mSystemRestConsumer;
@Inject
public PickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.mSystemRestConsumer = systemRESTConsumer;
}
public void loadDocRows(List<DocumentoResoDTO> documents, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> filterCond = new ArrayList<>();
for(int i = 0; i < documents.size(); i++) {
HashMap<String, Object> filter = new HashMap<>();
filter.put("data_doc", documents.get(i).getDataDocD());
filter.put("num_doc", documents.get(i).getNumDoc());
filter.put("ser_doc", documents.get(i).getSerDoc());
filter.put("cod_anag", documents.get(i).getCodAnag());
filter.put("cod_dtip", documents.get(i).getCodDtip());
filterCond.add(filter);
}
String sql = "SELECT * FROM dvw_situazione_qta_docs " +
"WHERE " +
UtilityQuery.concatFieldListInWhereCond(filterCond) +
"ORDER BY cod_mart";
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {}.getType();
this.mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
@Override
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
if(values != null && values.size() > 0){
List<String> codMarts = Stream.of(values)
.map(DtbDocr::getCodMart)
.withoutNulls()
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMart(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (DtbDocr value : values) {
MtbAart foundMtbAart = null;
List<MtbAart> mtbAartStream = Stream.of(arts)
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
if(mtbAartStream != null && mtbAartStream.size() > 0){
foundMtbAart = mtbAartStream.get(0);
}
value.setMtbAart(foundMtbAart);
}
if(onComplete != null) onComplete.run(values);
}
}, onFailed);
} else {
if(onComplete != null) onComplete.run(values);
}
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
});
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.picking_resi.dto;
package it.integry.integrywmsnative.gest.picking_resi.rest;
import java.util.ArrayList;
import java.util.List;

View File

@@ -5,12 +5,6 @@ import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
@@ -18,24 +12,31 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneHelper;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
@@ -108,33 +109,28 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
}
private void init() {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper = new OrdineProduzioneHelper(getActivity());
mHelper.loadOrdini(ordini -> {
if(ordini != null) {
Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show();
mOriginalOrderList = ordini;
if (ordini != null) {
Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show();
mOriginalOrderList = ordini;
}
mBinding.ordiniProduzioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE);
refreshRenderedOrdini(ordini);
initRecyclerView();
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
}
mBinding.ordiniProduzioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE);
refreshRenderedOrdini(ordini);
initRecyclerView();
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if(errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
}
);
}
@Override
@@ -148,7 +144,6 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
}
private void initRecyclerView() {
mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
mBinding.ordineProduzioneMainList.setAdapter(mAdapter);
@@ -157,7 +152,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
private void refreshRenderedOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
mRenderedOrderList.clear();
if(ordini != null) mRenderedOrderList.addAll(ordini);
if (ordini != null) mRenderedOrderList.addAll(ordini);
}
private void refreshRecyclerView() {
@@ -167,88 +162,77 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
private RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged = dto -> {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
if(dto.isSelected()) {
if (dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
if (selectedOrders != null && selectedOrders.size() > 0) {
mBinding.ordineProduzioneMainFab.show();
}
else {
} else {
mBinding.ordineProduzioneMainFab.hide();
}
};
private void onAccettazioneMainFabClick() {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
List<String> barcodes = new ArrayList<>();
for(OrdineAccettazioneInevasoDTO ordine : selectedOrders){
if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode());
}
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper.retrievePickingList(barcodes, ordini -> {
progress.dismiss();
OrdiniAccettazioneRESTConsumer.retrievePickingListNewStatic(selectedOrders, sitArtOrds -> {
progress.dismiss();
AtomicInteger artsCounter = new AtomicInteger();
long artsCounter = Stream.of(sitArtOrds)
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
.map(SitArtOrdDTO::getCodMart)
.distinct()
.count();
Stream.of(ordini).forEach(x -> {
artsCounter.addAndGet((int) Stream.of(x.getOrdini()).filter(y -> y.getQtaDaEvadere().floatValue() > 0).count());
});
long ordsCounter = Stream.of(sitArtOrds)
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
.count();
List<String> ordersKeys = new ArrayList<>();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
null,
() -> {
for(OrdineAccettazioneDTO ordine : ordini){
if(!ordersKeys.contains(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione())){
ordersKeys.add(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione());
}
}
String cacheSitArtItemID = DataCache.addItem(sitArtOrds);
String cacheOrdersItemID = DataCache.addItem(selectedOrders);
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, ordersKeys.size()), ordersKeys.size())
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, artsCounter.get())),
null,
() -> {
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
myIntent.putExtra("keyOrders", cacheOrdersItemID);
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
String cacheItemID = DataCache.addItem(ordini);
}).show();
Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class);
myIntent.putExtra("key", cacheItemID);
getActivity().startActivity(myIntent);
},
}).show();
},
ex -> {
ex -> {
// Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
progress.dismiss();
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if(errorMessage == null) errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
});
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null)
errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
});
}
@Override
public void onFilterClick() {
DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
mAppliedFilterViewModel = filter;
if(filteredOrderList != null){
if (filteredOrderList != null) {
refreshOrdini(filteredOrderList);
refreshRecyclerView();
@@ -258,9 +242,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
}
public void refreshOrdini(List<OrdineAccettazioneInevasoDTO> ordini){
public void refreshOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
mRenderedOrderList.clear();
mRenderedOrderList.addAll(ordini);
}

View File

@@ -1,20 +1,17 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.annimon.stream.Stream;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.EsitoType;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService;
import retrofit2.Call;
@@ -29,7 +26,7 @@ public class OrdineProduzioneHelper {
mContext = context;
}
public void loadOrdini(RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed){
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
@@ -64,58 +61,6 @@ public class OrdineProduzioneHelper {
}
public void retrievePickingList(List<String> barcodeOrdini, RunnableArgs<List<OrdineAccettazioneDTO>> onComplete, RunnableArgs<Exception> onFailed){
String joinedBarcodes = TextUtils.join(",", barcodeOrdini);
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.pickingListAccettazione(joinedBarcodes).enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> response) {
if(response.isSuccessful()) {
if(response.body() != null) {
if(response.body().getEsito() == EsitoType.OK) {
List<OrdineAccettazioneDTO> dto = response.body().getDto();
for (OrdineAccettazioneDTO ordine : dto) {
for(OrdineAccettazioneDTO.Riga riga : ordine.getOrdini()){
riga.numOrd = ordine.getNumero();
riga.dataOrd = ordine.getData();
riga.gestioneOrd = ordine.getGestione();
riga.codAlis = ordine.getCodAlis();
}
}
onComplete.run(dto);
} else {
Log.e("Produzione", response.body().getErrorMessage());
onFailed.run(new Exception(response.body().getErrorMessage()));
}
} else {
Log.e("Produzione", response.message());
onFailed.run(new Exception(response.message()));
}
} else {
Log.e("Produzione", "Status " + response.code() + ": " + response.message());
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
}
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> call, Throwable t) {
Log.e("Produzione", t.toString());
UtilityLogger.errorMe(new Exception(t));
onFailed.run(new Exception(t));
}
});
}
public List<OrdineAccettazioneInevasoDTO> getSelectedOrders(List<OrdineAccettazioneInevasoDTO> ordiniList){
return Stream.of(ordiniList)
.filter(OrdineAccettazioneInevasoDTO::isSelected)

View File

@@ -39,7 +39,7 @@ public class ProdOrdineLavorazioneHelper {
}
public void loadOrdini(RunnableArgs<List<OrdineVenditaInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed){
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
Trace perfTrace = UtilityFirebase.getNewPerformanceTrace("db_load_ords_lavorazione");
perfTrace.start();
@@ -95,7 +95,7 @@ public class ProdOrdineLavorazioneHelper {
// public void retrievePickingList(List<OrdineLavorazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed){
// String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
// String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
//
//
// Trace perfTrace = UtilityFirebase.getNewPerformanceTrace("db_load_pick_lavorazione");

View File

@@ -79,7 +79,6 @@ public class ProdRecuperoMaterialeViewModel {
}
private void initBarcode() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
@@ -97,13 +96,12 @@ public class ProdRecuperoMaterialeViewModel {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
if(UtilityBarcode.isEtichettaAnonima(data) || UtilityBarcode.isEtichetta128(data)){
if (UtilityBarcode.isEtichettaAnonima(data) || UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaUL(data, progressDialog);
}
@@ -112,10 +110,10 @@ public class ProdRecuperoMaterialeViewModel {
private void executeEtichettaUL(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
ColliMagazzinoRESTConsumer.getBySSCCStatic(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
if(mtbColt != null) {
if (mtbColt != null) {
HistoryVersamentoProdULDTO historyVersamentoProdULRestDTO = this.getHistoryElementFromMtbColt(mtbColt);
if(historyVersamentoProdULRestDTO != null) {
if (historyVersamentoProdULRestDTO != null) {
this.dispatchItem(historyVersamentoProdULRestDTO, mtbColt, progressDialog);
} else {
DialogCommon.showNoULFound(mContext, () -> {
@@ -144,9 +142,9 @@ public class ProdRecuperoMaterialeViewModel {
x.getDataColloRif().equals(mtbColt.getDataColloS()) &&
x.getSerColloRif().equalsIgnoreCase(mtbColt.getSerCollo()) &&
x.getGestioneRif().equalsIgnoreCase(mtbColt.getGestione()))
.toList();
.toList();
if(filteredItems != null && filteredItems.size() > 0) {
if (filteredItems != null && filteredItems.size() > 0) {
return filteredItems.get(0);
}
@@ -175,17 +173,14 @@ public class ProdRecuperoMaterialeViewModel {
DialogInputQuantity.makeBase(mContext, dto, false, quantity -> {
onItemDispatched(item, quantity.qtaTot.getBigDecimal(), sourceMtbColt, dialogProgress);
}, () -> {
if(dialogProgress != null) dialogProgress.dismiss();
if (dialogProgress != null) dialogProgress.dismiss();
}).show();
}
private void onItemDispatched(HistoryVersamentoProdULDTO item, BigDecimal quantity, MtbColt sourceMtbColt, Dialog progress) {
if(progress == null) {
if (progress == null) {
progress = UtilityProgress.createDefaultProgressDialog(mContext);
}
Dialog finalProgress = progress;
@@ -197,7 +192,7 @@ public class ProdRecuperoMaterialeViewModel {
.setGestione(item.getGestione())
.setMtbColr(new ObservableArrayList<>());
for(HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
BigDecimal qtaCol = quantity.multiply(new BigDecimal(-1).multiply(new BigDecimal(ordine.getPercentageHr()))).divide(new BigDecimal(100), 3, RoundingMode.HALF_EVEN);
final MtbColr mtbColrScarico = new MtbColr()
@@ -220,18 +215,17 @@ public class ProdRecuperoMaterialeViewModel {
}
mtbColtScarico.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
RunnableArgss<MtbColt, Boolean> saveRunnable = (mtbColt, createdLU) -> {
if(mtbColt != null) {
if (mtbColt != null) {
List<MtbColt> colliToSave = new ArrayList<>();
boolean shouldPrint = false;
if(!Objects.equals(mtbColt.getNumCollo(), item.getNumColloRif()) ||
if (!Objects.equals(mtbColt.getNumCollo(), item.getNumColloRif()) ||
!Objects.equals(mtbColt.getSerCollo(), item.getSerColloRif()) ||
!Objects.equals(mtbColt.getDataColloS(), item.getDataColloRif()) ||
!Objects.equals(mtbColt.getGestione(), item.getGestioneRif())) {
@@ -267,7 +261,7 @@ public class ProdRecuperoMaterialeViewModel {
FBToast.successToast(mContext, mContext.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
if(finalShouldPrint) {
if (finalShouldPrint) {
printCollo(finalProgress, value.get(0), () -> {
this.refreshAdapter();
mOnRecuperoCompleted.run();
@@ -287,7 +281,7 @@ public class ProdRecuperoMaterialeViewModel {
}
};
if(sourceMtbColt != null) saveRunnable.run(sourceMtbColt, false);
if (sourceMtbColt != null) saveRunnable.run(sourceMtbColt, false);
else DialogScanOrCreateLU.make(mContext, true, false, saveRunnable).show();
}
@@ -295,7 +289,7 @@ public class ProdRecuperoMaterialeViewModel {
private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) {
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().userSession.depo.getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList.size() > 0) {
try {
@@ -329,21 +323,18 @@ public class ProdRecuperoMaterialeViewModel {
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum());
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
}, onAbort);
}
private void refreshAdapter() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
@@ -360,5 +351,4 @@ public class ProdRecuperoMaterialeViewModel {
}
}

View File

@@ -75,7 +75,7 @@ public class DialogScanLisA {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);

View File

@@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper;
import android.app.Activity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
@@ -16,6 +15,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepositor
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class OrdineAcquistoPvHelper {
@@ -67,7 +67,7 @@ public class OrdineAcquistoPvHelper {
public void createNewOrder(Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onError) {
Ordine ordine = new Ordine();
ordine.setDataIns(new Date());
ordine.setDataIns(UtilityDate.getDateInstance());
ordine.setIdGriglia(griglia.getGrigliaId());
mOrdineRepository.insert(ordine, id -> {
ordine.setOrdineId(id);

View File

@@ -159,6 +159,7 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
mAdapter = new RettificaGiacenzeMainListAdapter(mViewModel.getCurrentMtbColt().getMtbColr());
mAdapter.setEmptyView(mBinding.rettificaGiacenzeEmptyView);
this.mAdapter.setOnItemClickListener(clickedMtbColr -> {
mBinding.bottomSheetMtbColrEdit.setMtbColr(clickedMtbColr);
mBinding.bottomSheetMtbColrEdit.expand();
@@ -204,7 +205,7 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();

View File

@@ -6,7 +6,9 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.inject.Inject;
@@ -38,7 +40,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeRESTConsumer;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickDataDTO;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
@@ -277,6 +279,14 @@ public class RettificaGiacenzeViewModel {
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
if(dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
dataScad = UtilityDate.getDateInstance();
Calendar c = new GregorianCalendar();
c.setTime(dataScad);
c.add(Calendar.DATE, pickingObjectDTO.getMtbAart().getGgScadPartita());
dataScad = c.getTime();
}
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
@@ -317,7 +327,7 @@ public class RettificaGiacenzeViewModel {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if (!mIsCreatedLU) {
if (!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
mtbColr
.setQtaCol(BigDecimal.ZERO)
.setNumCnf(BigDecimal.ZERO)
@@ -447,7 +457,7 @@ public class RettificaGiacenzeViewModel {
private void savePosizione(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) {
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(null);
cloneMtbColt.setPosizione(mtbDepoPosizione != null ? mtbDepoPosizione.getPosizione() : CommonModelConsts.ENTITY_NULL_STRING);
@@ -538,7 +548,7 @@ public class RettificaGiacenzeViewModel {
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
if(!mIsCreatedLU) {
if(!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
this.mColliMagazzinoRESTConsumer.creaRettificaCollo(
mtbColrToUpdate,
@@ -546,9 +556,9 @@ public class RettificaGiacenzeViewModel {
qtaTot,
savedMtbColr -> {
mtbColrToUpdate
.setQtaCol(savedMtbColr.getQtaCol())
.setQtaCnf(savedMtbColr.getQtaCnf())
.setNumCnf(savedMtbColr.getNumCnf())
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setOperation(CommonModelConsts.OPERATION.NO_OP);
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
@@ -570,16 +580,16 @@ public class RettificaGiacenzeViewModel {
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.UPDATE);
mtbColr
.setNumCnf(numCnf)
.setNumCnf(numCnf.subtract(mtbColr.getNumCnf()))
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot)
.setQtaCol(qtaTot.subtract(mtbColr.getQtaCol()))
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setUtente(SettingsManager.i().user.fullname)
.setUtente(SettingsManager.i().getUser().getFullname())
.setCausale(MtbColr.Causale.RETTIFICA)
.setDatetimeRow(UtilityDate.getDateInstance());
.setDatetimeRow(UtilityDate.getDateInstance())
.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColt.getMtbColr().add(mtbColr);
@@ -604,28 +614,7 @@ public class RettificaGiacenzeViewModel {
if (shouldDelete) {
this.sendOnLoadingStarted();
if(mIsCreatedLU) {
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
} else {
if(!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
this.mColliMagazzinoRESTConsumer.creaRettificaCollo(
mtbColrToDelete,
BigDecimal.ZERO,
@@ -637,6 +626,36 @@ public class RettificaGiacenzeViewModel {
},
this::sendError
);
} else {
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setQtaCnf(mtbColr.getQtaCnf())
.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setPartitaMag(mtbColr.getPartitaMag())
.setDataScadPartita(mtbColr.getDataScadPartitaD())
.setUtente(SettingsManager.i().getUser().getFullname())
.setCausale(MtbColr.Causale.RETTIFICA)
.setDatetimeRow(UtilityDate.getDateInstance())
.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
}
}
});

View File

@@ -1,6 +1,6 @@
package it.integry.integrywmsnative.gest.spedizione;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
@@ -45,7 +45,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
@@ -68,7 +68,7 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArt;
public class SpedizioneActivity extends BaseActivity implements SpedizioneViewModel.Listeners, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener {
public class SpedizioneActivity extends BaseActivity implements SpedizioneViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener {
private ActivitySpedizioneBinding mBindings;
@@ -94,11 +94,25 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
private ArrayList<OrdineVenditaInevasoDTO> mTestateOrdini;
private ArrayList<MtbColt> mColliRegistrati;
private Dialog mCurrentProgress;
private boolean mShouldCloseActivity;
private final int PICK_UL_REQUEST = 1;
public static void startActivity(Context context, List<SitArtOrdDTO> ordini, List<OrdineVenditaInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
Intent myIntent = new Intent(context, SpedizioneActivity.class);
String keyPickingList = DataCache.addItem(ordini);
myIntent.putExtra("keyPickingList", keyPickingList);
String keyTestateOrdini = DataCache.addItem(selectedOrders);
myIntent.putExtra("keyTestateOrdini", keyTestateOrdini);
String keyColliRegistrati = DataCache.addItem(mtbColtList);
myIntent.putExtra("keyColliRegistrati", keyColliRegistrati);
context.startActivity(myIntent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -142,7 +156,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione();
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
if (mEnableGiacenza) mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this);
if (mEnableGiacenza) this.openProgress();
mViewmodel.init(codMdep, mEnableGiacenza, enableCheckPartitaMag, shouldAskPesoLU, canOverflowOrderQuantity, mSitArtOrd, mTestateOrdini, mColliRegistrati);
}
@@ -190,9 +204,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.mBindings.spedizionePickingList.setAdapter(spedizioneListAdapter);
this.mBindings.spedizionePickingList.setLayoutManager(new LinearLayoutManager(this));
spedizioneListAdapter.setOnItemClicked(clickedItem -> {
spedizioneListAdapter.setOnItemClicked((clickedItem, refMtbColt) -> {
if (!noLUPresent.get() && SettingsManager.iDB().isFlagSpedizioneEnableManualPick() && clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale()) {
this.mViewmodel.dispatchOrdineRow(clickedItem);
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
}
});
}
@@ -206,7 +220,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
List<SpedizioneListModel> spedizioneListModels = new ArrayList<>();
List<SpedizioneListModel> sortedList = null;
if(!mDivideByGrpMerc) {
@@ -253,7 +266,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
spedizioneListModel.setUntMis("col");
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
} else {
@@ -268,13 +281,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
} else {
BigDecimal qtaColOrdCounter = x.getSitArtOrdDTO().getQtaOrd();
// qtaColOrdCounter = qtaColOrdCounter.add(qtaColWithdrawRows.getBigDecimalValue());
BigDecimal numCnfOrdCounter = x.getSitArtOrdDTO().getNumCnfOrd();
for (MtbColt mtbColtToPick : x.getMtbColts()) {
if(UtilityBigDecimal.equalsTo(qtaColOrdCounter, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(qtaColOrdCounter, BigDecimal.ZERO))
break;
if(UtilityBigDecimal.equalsTo(numCnfOrdCounter, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(numCnfOrdCounter, BigDecimal.ZERO))
break;
SpedizioneListModel cloneModel = (SpedizioneListModel) spedizioneListModel.clone();
cloneModel.setGroupTitle(String.format("%s: %s", getString(R.string.position_text), UtilityString.isNullOrEmpty(mtbColtToPick.getPosizione()) ? "N.A." : mtbColtToPick.getPosizione()));
@@ -288,14 +304,37 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
cloneModel.setUntMis("col");
cloneModel.setQtaTot(mtbColrToDispatch != null ? mtbColrToDispatch.getNumCnf() : x.getSitArtOrdDTO().getNumCnfOrd());
cloneModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
BigDecimal qtaTot = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
if(UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(qtaTot, BigDecimal.ZERO)) continue;
cloneModel.setQtaTot(qtaTot);
numCnfOrdCounter = numCnfOrdCounter.subtract(numCnfOrdToSubstract);
BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.filter(y -> y.getRefMtbColr() != null &&
y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) &&
y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) &&
y.getRefMtbColr().getSerCollo().equals(mtbColrToDispatch.getSerCollo()) &&
y.getRefMtbColr().getGestioneEnum().equals(mtbColrToDispatch.getGestioneEnum()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodMart(), mtbColrToDispatch.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodTagl(), mtbColrToDispatch.getCodTagl()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodCol(), mtbColrToDispatch.getCodCol()))
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
cloneModel.setQtaEvasa(qtaEvasa);
} else {
BigDecimal qtaOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getQtaCol(), qtaColOrdCounter);
cloneModel.setQtaTot(UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getQtaCol(), qtaColOrdCounter));
BigDecimal qtaTot = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getQtaCol(), qtaColOrdCounter);
if(UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(qtaTot, BigDecimal.ZERO)) continue;
cloneModel.setQtaTot(qtaTot);
qtaColOrdCounter = qtaColOrdCounter.subtract(qtaOrdToSubstract);
BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
@@ -390,7 +429,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
spedizioneListModel.setUntMis("col");
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
} else {
@@ -404,8 +443,18 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
spedizioneListModels.add(spedizioneListModel);
} else {
BigDecimal qtaColOrdCounter = x.getSitArtOrdDTO().getQtaOrd();
BigDecimal numCnfOrdCounter = x.getSitArtOrdDTO().getNumCnfOrd();
for (MtbColt mtbColtToPick : x.getMtbColts()) {
if(UtilityBigDecimal.equalsTo(qtaColOrdCounter, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(qtaColOrdCounter, BigDecimal.ZERO))
break;
if(UtilityBigDecimal.equalsTo(numCnfOrdCounter, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(numCnfOrdCounter, BigDecimal.ZERO))
break;
SpedizioneListModel cloneModel = (SpedizioneListModel) spedizioneListModel.clone();
@@ -418,12 +467,50 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
cloneModel.setUntMis("col");
cloneModel.setQtaTot(mtbColrToDispatch != null ? mtbColrToDispatch.getNumCnf() : x.getSitArtOrdDTO().getNumCnfOrd());
cloneModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
BigDecimal qtaTot = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
if(UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(qtaTot, BigDecimal.ZERO)) continue;
cloneModel.setQtaTot(qtaTot);
numCnfOrdCounter = numCnfOrdCounter.subtract(numCnfOrdToSubstract);
BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.filter(y -> y.getRefMtbColr() != null &&
y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) &&
y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) &&
y.getRefMtbColr().getSerCollo().equals(mtbColrToDispatch.getSerCollo()) &&
y.getRefMtbColr().getGestioneEnum().equals(mtbColrToDispatch.getGestioneEnum()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodMart(), mtbColrToDispatch.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodTagl(), mtbColrToDispatch.getCodTagl()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodCol(), mtbColrToDispatch.getCodCol()))
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
cloneModel.setQtaEvasa(qtaEvasa);
} else {
cloneModel.setQtaTot(mtbColrToDispatch != null ? mtbColrToDispatch.getQtaCol() : x.getSitArtOrdDTO().getQtaOrd());
cloneModel.setQtaEvasa(qtaColWithdrawRows.getBigDecimalValue());
BigDecimal qtaOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getQtaCol(), qtaColOrdCounter);
BigDecimal qtaTot = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getQtaCol(), qtaColOrdCounter);
if(UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(qtaTot, BigDecimal.ZERO)) continue;
cloneModel.setQtaTot(qtaTot);
qtaColOrdCounter = qtaColOrdCounter.subtract(qtaOrdToSubstract);
BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.filter(y -> y.getRefMtbColr() != null &&
y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) &&
y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) &&
y.getRefMtbColr().getSerCollo().equals(mtbColrToDispatch.getSerCollo()) &&
y.getRefMtbColr().getGestioneEnum().equals(mtbColrToDispatch.getGestioneEnum()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodMart(), mtbColrToDispatch.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodTagl(), mtbColrToDispatch.getCodTagl()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodCol(), mtbColrToDispatch.getCodCol()))
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
cloneModel.setQtaEvasa(qtaEvasa);
if (x.getMtbAart() != null)
cloneModel.setUntMis(x.getMtbAart().getUntMis());
}
@@ -438,7 +525,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
sortedList = Stream.of(spedizioneListModels)
.filter(SpedizioneListModel::isActive)
.sortBy(x -> x.getOriginalModel().getSitArtOrdDTO().getCodMgrp())
.sortBy(x -> x.getOriginalModel().getSitArtOrdDTO().getCodMgrp() + " - " + x.getOriginalModel().getSitArtOrdDTO().getCodMsgr())
.toList();
@@ -458,7 +545,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
@@ -514,7 +601,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts();
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA);
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA, false);
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
}
@@ -649,7 +736,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setQtaCnfAvailable(qtaCnfAvailable)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity);
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanLUBeClosed(true);
DialogInputQuantityV2
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
@@ -688,19 +776,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.mViewmodel.deleteRow(mtbColr);
}
private void openProgress() {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this);
}
}
private void closeProgress() {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

View File

@@ -7,7 +7,6 @@ public interface SpedizioneComponent {
@Subcomponent.Factory
interface Factory {
SpedizioneComponent create();
}

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