Compare commits

...

150 Commits

Author SHA1 Message Date
7da0a5ade9 Finish v1.17.1(219) 2021-05-21 09:21:47 +02:00
86d92b947d -> v1.17.1 (219) 2021-05-21 09:21:35 +02:00
374127dfe9 Finish v1.17.0(218) 2021-05-20 15:11:00 +02:00
91b43d1974 Finish v1.17.0(218) 2021-05-20 15:10:59 +02:00
c167893544 -> v1.17.0 (218) 2021-05-20 15:10:55 +02:00
4c9a1bbaa9 Implementata barra di ricerca nel dialog di selezione articoli da prelevare 2021-05-20 15:09:51 +02:00
f970eb6cac Finish v1.16.35(217)#2 2021-05-19 11:32:42 +02:00
1e1163c04d Finish v1.16.35(217)#2 2021-05-19 11:32:41 +02:00
48f1307095 Revert "Aggiornati build.gradle"
This reverts commit 97bf8c291a.

# Conflicts:
#	dynamic_frudis/build.gradle
#	dynamic_ime/build.gradle
#	dynamic_saporiveri/build.gradle
#	dynamic_saporiveri_pv/build.gradle
#	dynamic_vgalimenti/build.gradle
2021-05-19 11:32:14 +02:00
64fdda43db Merge branch 'master' into develop 2021-05-19 09:49:58 +02:00
6611617a81 Finish Hotfix-Script 2021-05-19 09:49:57 +02:00
f488e6bad0 Fix scripts 2021-05-19 09:49:52 +02:00
266b3d707f Merge branch 'master' into develop 2021-05-18 17:48:36 +02:00
a726631925 Finish Hotfix-Script 2021-05-18 17:48:36 +02:00
0b634154e4 Fix scripts 2021-05-18 17:48:31 +02:00
3e4d4300f1 Merge branch 'master' into develop 2021-05-18 16:28:23 +02:00
fb527c443f Finish Hotfix-Script 2021-05-18 16:28:23 +02:00
259c719344 Fix scripts 2021-05-18 16:26:52 +02:00
178787d907 Merge branch 'master' into develop 2021-05-18 15:52:54 +02:00
a51cf2e899 Finish Hotfix-Script 2021-05-18 15:52:53 +02:00
9f587ac8b1 Fix scripts 2021-05-18 15:52:48 +02:00
df97d5c4a2 Merge branch 'master' into develop 2021-05-18 15:39:34 +02:00
697bd1e85e Finish Hotfix-Script 2021-05-18 15:39:33 +02:00
5ace80ba28 Fix scripts 2021-05-18 15:39:28 +02:00
1c8abcaa58 Merge branch 'master' into develop 2021-05-18 13:04:52 +02:00
96ab52821c Finish Hotfix-Script 2021-05-18 13:04:52 +02:00
ecd58dea14 Fix scripts 2021-05-18 13:04:46 +02:00
9cdc4f299e Merge branch 'master' into develop 2021-05-18 12:34:36 +02:00
39af233380 Finish Hotfix-Script 2021-05-18 12:34:35 +02:00
2576d423da Fix scripts 2021-05-18 12:34:30 +02:00
234c21c7a1 Finish v1.16.35(217) 2021-05-18 11:47:01 +02:00
6d5b6b0260 Finish v1.16.35(217) 2021-05-18 11:47:01 +02:00
f03976595c -> v1.16.35 (217) 2021-05-18 11:46:56 +02:00
54dbade661 Fix su thread in fase di apertura del dialog di caricamento 2021-05-18 11:46:25 +02:00
6d54bda9b4 Merge branch 'master' into develop 2021-05-17 18:41:51 +02:00
4c244c1927 Finish Hotfix-BuildGradle 2021-05-17 18:41:50 +02:00
ee3ee54e69 Aggiornati build.gradle 2021-05-17 18:41:45 +02:00
82d4607375 Merge branch 'master' into develop 2021-05-17 18:32:26 +02:00
7ecdbd1f11 Finish Hotfix-BuildGradle 2021-05-17 18:32:25 +02:00
a4c30b7fdd Aggiornati build.gradle 2021-05-17 18:32:20 +02:00
3ca75ca11a Merge branch 'master' into develop 2021-05-17 17:59:53 +02:00
f2f8594a18 Finish Hotfix-BuildGradle 2021-05-17 17:59:52 +02:00
7b7b3e554b Aggiornati build.gradle 2021-05-17 17:59:47 +02:00
7913771b2a Merge branch 'master' into develop 2021-05-17 17:50:13 +02:00
ebcd8eea0a Finish Hotfix-GradleVersion 2021-05-17 17:50:13 +02:00
97bf8c291a Aggiornati build.gradle 2021-05-17 17:50:07 +02:00
e4f783862b Finish v1.16.34(216)#2 2021-05-17 17:35:11 +02:00
653d4def4e Finish v1.16.34(216)#2 2021-05-17 17:35:10 +02:00
3cf63fc1f1 Rimossa libreria per la scansione dei barcode tramite fotocamera 2021-05-17 17:34:41 +02:00
45ddca1928 Finish v1.16.34(216) 2021-05-13 17:47:58 +02:00
f4ff33a942 Finish v1.16.34(216) 2021-05-13 17:47:54 +02:00
ca5b5d3151 -> v1.16.34 (216) 2021-05-13 17:47:47 +02:00
e22f7cf5c7 Riabilitato filtro paese 2021-05-13 17:45:52 +02:00
8ea38fd31c Sistemato ricaricamento ordini di uscita senza perdere l'istanza del filtro applicato. 2021-05-13 17:39:29 +02:00
ea7acf6053 Refactoring DialogFiltroVenditaAvanzato 2021-05-13 15:33:58 +02:00
3a0d4d290c Aggiornamenti vari.
Implementata gestione di partite multiple all'interno di una UL.
2021-05-13 09:44:43 +02:00
c8053831db Finish v1.16.33(215) 2021-05-07 13:04:51 +02:00
e0c07ea06e Finish v1.16.33(215) 2021-05-07 13:04:50 +02:00
3e79b52e23 -> v1.16.33 (215) 2021-05-07 13:04:44 +02:00
7d7712e57a Ordinamento ordini uscita 2021-05-07 13:03:45 +02:00
6d7a047e8e Finish v1.16.32(214) 2021-05-04 17:34:36 +02:00
72e4f2a0b9 Finish v1.16.32(214) 2021-05-04 17:34:35 +02:00
ef6cdc6a86 -> v1.16.32 (214) 2021-05-04 17:34:30 +02:00
23b86e68cc Fix su scansione barcode ean13 in dialog input quantity 2021-05-04 17:34:00 +02:00
2e46f9f665 Finish v1.16.31(213) 2021-04-26 12:01:38 +02:00
88b1c56360 Finish v1.16.31(213) 2021-04-26 12:01:37 +02:00
1d71ac10bd -> v1.16.31 (213) 2021-04-26 12:01:29 +02:00
8eb677ecdf Sostituito getBySSCC con get generica dei colli. 2021-04-26 12:01:00 +02:00
74efbac452 Finish v1.16.30(212) 2021-04-23 15:25:16 +02:00
9c6375083f Finish v1.16.30(212) 2021-04-23 15:25:16 +02:00
b24d5271a4 -> v1.16.30 (212) 2021-04-23 15:23:54 +02:00
b5626e5b08 Fix su refMtbColr in Spedizione 2021-04-23 15:23:28 +02:00
fd2e1fa4f4 Finish v1.16.29(211) 2021-04-23 12:59:11 +02:00
a3f5072646 Finish v1.16.29(211) 2021-04-23 12:59:10 +02:00
1258e8c3e6 -> v1.16.29 (211) 2021-04-23 12:58:58 +02:00
ccef0fe528 Fix su qtaDaPrelevare in spedizione 2021-04-23 12:58:03 +02:00
9bb5d1adce Finish v1.16.28(210) 2021-04-16 18:33:55 +02:00
ac446d953c Finish v1.16.28(210) 2021-04-16 18:33:53 +02:00
407ff0b264 -> v1.16.28 (210) 2021-04-16 18:33:49 +02:00
10e748b9d4 Fix su getValue nel caso di integer in gest setup 2021-04-16 18:33:16 +02:00
e30273fe42 Finish v1.16.27(209) 2021-04-15 12:10:26 +02:00
44564245a7 Finish v1.16.27(209) 2021-04-15 12:10:25 +02:00
920f306907 -> v1.16.27 (209) 2021-04-15 12:10:20 +02:00
90aa52ab55 Fix versamento merce 2021-04-15 12:09:43 +02:00
93f3eb65f0 Finish v1.16.26(208) 2021-04-14 12:25:51 +02:00
eb94944928 Finish v1.16.26(208) 2021-04-14 12:25:50 +02:00
28698ba306 -> v1.16.26 (208) 2021-04-14 12:25:45 +02:00
c713bbebbc Fix su creazione collo involontaria in DialogScanOrCreateUL 2021-04-14 12:25:09 +02:00
38e2a02766 Finish v1.16.25(207) 2021-04-14 11:41:26 +02:00
dd8bf264a4 Finish v1.16.25(207) 2021-04-14 11:41:25 +02:00
9488c1994d -> v1.16.25 (207) 2021-04-14 11:41:20 +02:00
16099cdaf6 Fix su mtbPartitaMag in servizio spostaArtsTraUL 2021-04-14 11:40:06 +02:00
f061f2bfc9 Finish v1.16.24(206)#2 2021-04-12 15:34:42 +02:00
f7253fd44c Finish v1.16.24(206)#2 2021-04-12 15:34:42 +02:00
e12d371567 Finish v1.16.24(206) 2021-04-12 13:44:17 +02:00
5596f71c03 Merge branch 'master' into develop 2021-04-12 13:44:17 +02:00
8669b812f5 -> v1.16.24 (206) 2021-04-12 13:44:10 +02:00
3243484dd0 Ripristinato stato del filtro nell'elenco di ordini in uscita 2021-04-12 13:43:39 +02:00
37114dc4d1 Finish v1.16.23(205) 2021-04-12 12:48:26 +02:00
d5af79abba Finish v1.16.23(205) 2021-04-12 12:48:25 +02:00
b50aa7a9d2 -> v1.16.23 (205) 2021-04-12 12:48:19 +02:00
cc333c3147 Mini refactoring DialogAskCliente 2021-04-12 12:47:28 +02:00
fc5044134c Finish v1.16.22(204) 2021-04-12 09:39:10 +02:00
93a3e39332 Merge branch 'master' into develop 2021-04-12 09:39:10 +02:00
3eaf187136 -> v1.16.22 (204) 2021-04-12 09:39:03 +02:00
36f9fa1e36 Fix su null in ColliDataRecover 2021-04-12 09:37:45 +02:00
0f89913609 Finish v1.16.21(203) 2021-04-09 16:51:41 +02:00
4cda247ddc Finish v1.16.21(203) 2021-04-09 16:51:41 +02:00
e88ea0a45c -> v1.16.21 (203) 2021-04-09 16:51:36 +02:00
726cf80dc0 Implementata setup per ricalcolo qta 2021-04-09 16:51:02 +02:00
a779d8b94d Finish v1.16.20(202) 2021-04-08 18:18:32 +02:00
f41e1f3a02 Finish v1.16.20(202) 2021-04-08 18:18:31 +02:00
aa75a77913 -> v1.16.20 (202) 2021-04-08 18:18:24 +02:00
639be21ab5 Revert su ricalcolo qta_cnf in caso di peso variabile 2021-04-08 18:17:17 +02:00
dfc241e7f6 Finish v1.16.19(201) 2021-04-06 13:36:15 +02:00
7948c7fa97 Finish v1.16.19(201) 2021-04-06 13:36:14 +02:00
2ae311c28a -> v1.16.19 (201) 2021-04-06 13:36:06 +02:00
56ba43183c Fix su causale in Picking Libero.
Fix su nome utente in MtbColt e MtbColr.
2021-04-06 13:35:36 +02:00
b93b309ea8 Finish v1.16.18(200) 2021-04-06 12:22:43 +02:00
f5a2d012e5 Finish v1.16.18(200) 2021-04-06 12:22:42 +02:00
bf07e3d0f0 -> v1.16.18 (200) 2021-04-06 12:22:33 +02:00
91f075976d Completato refactoring di DialogScanOrCreateLU 2021-04-06 12:21:49 +02:00
ee70faefa9 Completato refactoring Versamento Merce (+ gestione non conformi) 2021-04-02 18:43:19 +02:00
13cca99b09 Fix su rendering lista ordini uscita 2021-03-17 12:26:15 +01:00
e55b6f4934 Finish v1.16.17(199) 2021-03-16 17:55:28 +01:00
62d4b6f724 Finish v1.16.17(199) 2021-03-16 17:55:28 +01:00
19b0465569 -> v1.16.17 (199) 2021-03-16 17:55:22 +01:00
d4f44c1ab7 Fix vari 2021-03-16 17:53:39 +01:00
6bf183d73c Finish v1.16.16(198) 2021-03-15 16:02:56 +01:00
a939f0ba08 Finish v1.16.16(198) 2021-03-15 16:02:56 +01:00
08b44cb45b -> v1.16.116 (198) 2021-03-15 16:02:51 +01:00
fef57622cf Implementato blocco per scansione EAN128 nel caso non sia abilitato il Picking Manuale 2021-03-15 15:54:52 +01:00
cbf36ec962 Fix su qta negative in accettazione 2021-03-15 13:09:40 +01:00
adc7343352 Implementato flag per impostare automaticamente la qta ordinata in fase di picking per Spedizione.
Migliorata gestione dell'update dei campi nel caso si scansiona un ean con peso in fase di inserimento qta.
2021-03-12 17:05:20 +01:00
94b2959d29 Implementata lettura barcode pedane in gestione resi 2021-03-12 13:33:54 +01:00
11903d1a34 Refactoring ultimi arrivi fornitori 2021-03-11 15:45:42 +01:00
ff448b36b9 Refactoring ultime consegne cliente 2021-03-11 13:11:06 +01:00
aa8a54547c Implementato versamento in depositi diversi da quello dell'utente loggato 2021-03-10 16:11:50 +01:00
e1d1878131 Migliorato SimpleDialog 2021-03-10 12:33:58 +01:00
81bc85f854 Finish v1.16.15(197) 2021-03-08 16:46:28 +01:00
00c90021b5 Finish v1.16.15(197) 2021-03-08 16:46:28 +01:00
89e046cc78 -> v1.16.15 (197) 2021-03-08 16:46:22 +01:00
2b2cf3656c Sistemata cancellazione colli in fase di picking per fabbisogno linea prod. 2021-03-08 16:45:39 +01:00
47a2c36e04 Finish v1.16.14(196) 2021-03-05 15:36:29 +01:00
bca0d0cc52 Finish v1.16.14(196) 2021-03-05 15:36:28 +01:00
594a6fc9d2 -> v1.16.14 (196) 2021-03-05 15:36:23 +01:00
e633dcbc4d Fix su where cond flag_evaso_prod 2021-03-05 15:35:42 +01:00
99de98db28 Risolto problema di confezioni 0 quando scansiono un codice ean peso e il peso è sotto il peso medio. 2021-03-05 12:12:44 +01:00
cce8ea5ca0 Sistemato actionDone su soft keyboard 2021-03-05 12:01:38 +01:00
cc54dfb452 Finish v1.16.13(195) 2021-03-04 18:28:54 +01:00
166 changed files with 5699 additions and 4764 deletions

View File

@@ -1,24 +1,12 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value>
<package name="java.util" alias="false" withSubpackages="false" />
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
<package name="io.ktor" alias="false" withSubpackages="true" />
</value>
</option>
<option name="PACKAGES_IMPORT_LAYOUT">
<value>
<package name="" alias="false" withSubpackages="true" />
<package name="java" alias="false" withSubpackages="true" />
<package name="javax" alias="false" withSubpackages="true" />
<package name="kotlin" alias="false" withSubpackages="true" />
<package name="" alias="true" withSubpackages="true" />
</value>
</option>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
@@ -127,5 +115,8 @@
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View File

@@ -3,6 +3,7 @@
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />

View File

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

View File

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

View File

@@ -30,6 +30,7 @@ import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration;
import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration;
import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
@@ -42,6 +43,7 @@ import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.update.UpdatesManager;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.databinding.ActivityMainBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity;
@@ -59,6 +61,9 @@ public class MainActivity extends BaseActivity
@Inject
AppDatabase mAppDatabase;
@Inject
ColliDataRecoverService mColliDataRecoverService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -68,10 +73,13 @@ public class MainActivity extends BaseActivity
.create()
.inject(this);
mColliDataRecoverService.init(this);
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false);
setContentView(mBinding.getRoot());
UpdatesManager.init(this);
UtilityContext.initMainActivity(this);
setSupportActionBar(mBinding.appBarMain.toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

View File

@@ -27,10 +27,20 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUComponent;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUModule;
// Definition of the Application graph
@Singleton
@@ -44,12 +54,17 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
RettificaGiacenzeModule.class,
SpedizioneModule.class,
AccettazionePickingModule.class,
UltimeConsegneClienteModule.class,
UltimiArriviFornitoreModule.class,
PickingResiModule.class,
OrdiniUscitaElencoModule.class,
DialogInputQuantityV2Module.class,
DialogScanArtModule.class,
DialogScanOrCreateLUModule.class,
ProdFabbisognoLineeProdModule.class,
VersamentoMerceModule.class,
DialogAskMagazzinoProssimitaModule.class,
DialogChooseBatchLotModule.class,
DialogRowInfoProdFabbisognoLineeProdModule.class})
public interface MainApplicationComponent {
@@ -60,12 +75,17 @@ public interface MainApplicationComponent {
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
SpedizioneComponent.Factory spedizioneComponent();
AccettazionePickingComponent.Factory accettazionePickingComponent();
UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent();
UltimiArriviFornitoreComponent.Factory ultimiArriviFornitoreComponent();
PickingResiComponent.Factory pickingResiComponent();
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
DialogScanArtComponent.Factory dialogScanArtComponent();
DialogScanOrCreateLUComponent.Factory dialogScanOrCreateLUComponent();
ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent();
VersamentoMerceComponent.Factory versamentoMerceComponent();
DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent();
DialogChooseBatchLotComponent.Factory dialogChooseBatchLotComponent();
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();

View File

@@ -38,7 +38,7 @@ public class MainApplicationModule {
@Provides
@Singleton
ColliDataRecoverService provideColliDataRecoverService() {
return new ColliDataRecoverService(mContext);
return new ColliDataRecoverService();
}
@Provides

View File

@@ -6,22 +6,21 @@ import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import it.integry.integrywmsnative.core.context.MainContext;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.PermissionsHelper;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.databinding.ActivitySplashBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class SplashActivity extends BaseActivity {
@@ -39,6 +38,8 @@ public class SplashActivity extends BaseActivity {
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_splash, null, false);
setContentView(mBinding.getRoot());
UtilityContext.initMainActivity(this);
initAppVersion();
initPermissions(this::init);
@@ -49,10 +50,10 @@ public class SplashActivity extends BaseActivity {
onComplete.run();
}, permanentlyDenied -> {
if(permanentlyDenied) {
DialogSimpleMessageHelper.makeErrorDialog(this,
new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> {
DialogSimpleMessageView.makeErrorDialog(new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> {
this.finish();
}).show();
})
.show(getSupportFragmentManager(), "tag");
} else {
initPermissions(onComplete);
}
@@ -93,6 +94,7 @@ public class SplashActivity extends BaseActivity {
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(this.onRequestPermissionResult != null) {
List<Integer> grantResultsList = new ArrayList<>();
for(int i = 0; i < grantResults.length; i++) {

View File

@@ -9,7 +9,6 @@ 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;
@@ -41,8 +40,6 @@ public class AppContext {
this.initCrashlytics();
this.initLogger();
this.initRecoverColli();
}
@@ -77,9 +74,5 @@ public class AppContext {
Logger.addLogAdapter(new AndroidLogAdapter());
}
private void initRecoverColli() {
ColliDataRecover.init(mContext);
}
}

View File

@@ -1,21 +1,25 @@
package it.integry.integrywmsnative.core.context;
import android.content.Context;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import androidx.appcompat.app.AppCompatActivity;
import java.lang.reflect.Method;
import java.net.ConnectException;
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.data_recover.ColliDataRecover;
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;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class MainContext {
@@ -37,6 +41,8 @@ public class MainContext {
this.initReflections();
this.initServerStatusChecker();
ColliDataRecover.init(mContext);
}
@@ -46,11 +52,23 @@ public class MainContext {
private void initDBData(Runnable onComplete) {
SettingsManager.loadDBVariables(onComplete, ex -> {
DialogSimpleMessageHelper.makeErrorDialog(mContext,
new SpannableString(ex.getMessage()), null, mContext::finish, R.string.logout, () -> {
Spanned message = null;
if (ex.getCause() != null && ex.getCause() instanceof ConnectException) {
message = Html.fromHtml("Impossibile collegarsi all'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else if (ex.getMessage().startsWith("Status 404:")) {
message = Html.fromHtml("Errore 404. Non è stato possibile soddisfare la richiesta sull'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else {
message = new SpannableString(ex.getMessage());
}
DialogSimpleMessageView.makeErrorDialog(
message, null, mContext::finish, R.string.logout, () -> {
UtilitySettings.logout();
MainApplication.exit();
}).show();
})
.show(mContext.getSupportFragmentManager(), "tag");
}
);
}

View File

@@ -2,9 +2,10 @@ package it.integry.integrywmsnative.core.data_recover;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@@ -107,11 +108,11 @@ public class ColliDataRecover {
}
}
private static Context mContext;
private static AppCompatActivity mContext;
private static List<RecoverDTO> mtbColtsSessions = new ArrayList<>();
public static void init(Context context) {
public static void init(AppCompatActivity context) {
mContext = context;
if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) {
@@ -120,7 +121,7 @@ public class ColliDataRecover {
}
public static boolean thereIsAnExistantSession() {
return mtbColtsSessions.size() > 0;
return mtbColtsSessions != null && mtbColtsSessions.size() > 0;
}
public static List<Integer> getAllSessionIDs() {
@@ -191,13 +192,16 @@ public class ColliDataRecover {
try {
inputStream = mContext.openFileInput(CommonConst.Files.RECOVER_COLLO_FILE);
byte[] bytes = IOUtils.readInputStreamFully(inputStream);
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
inputStream.close();
String jsonString = new String(bytes);
Type listType = new TypeToken<ArrayList<RecoverDTO>>(){}.getType();
mtbColtsSessions = gson.fromJson(jsonString, listType);
inputStream.close();
if(mtbColtsSessions == null) mtbColtsSessions = new ArrayList<>();
} catch (Exception e) {
e.printStackTrace();
UtilityExceptions.defaultException(mContext, e);

View File

@@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_recover;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils;
@@ -28,20 +30,21 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
public class ColliDataRecoverService {
private final Context mContext;
private AppCompatActivity mContext;
private List<ColliDataRecoverDTO> mtbColtsSessions = new ArrayList<>();
@Inject
public ColliDataRecoverService(Context context) {
this.mContext = context;
public ColliDataRecoverService() {
}
public void init(AppCompatActivity appCompatActivity) {
this.mContext = appCompatActivity;
if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) {
loadLocalFile();
}
}
public boolean thereIsAnExistantSession() {
return mtbColtsSessions.size() > 0;
}

View File

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

View File

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

View File

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

View File

@@ -1,36 +0,0 @@
package it.integry.integrywmsnative.core.exception;
import android.content.Context;
import android.content.Intent;
import java.io.PrintWriter;
import java.io.StringWriter;
public class MyExceptionHandler implements
java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
private final Class<?> myActivityClass;
public MyExceptionHandler(Context context, Class<?> c) {
myContext = context;
myActivityClass = c;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
System.err.println(stackTrace);// You can use LogCat too
// Intent intent = new Intent(myContext, myActivityClass);
// String s = stackTrace.toString();
// //you can use this String to know what caused the exception and in which Activity
// intent.putExtra("uncaughtException",
// "Exception is: " + stackTrace.toString());
// intent.putExtra("stacktrace", s);
// myContext.startActivity(intent);
//for restarting the Activity
// Process.killProcess(Process.myPid());
// System.exit(0);
}
}

View File

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

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 TooManyLUFoundInMonoLUPositionException extends Exception {
public TooManyLUFoundInMonoLUPositionException() {
super(UtilityResources.getString(R.string.too_much_lu_found_message_in_mono_lu));
}
}

View File

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

View File

@@ -12,19 +12,24 @@ public class BaseFragment extends Fragment {
protected void openProgress() {
if (this.mCurrentProgress == null) {
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
}
});
}
// }).start();
}
protected void closeProgress() {
if (mCurrentProgress != null) {
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss();
mCurrentProgress = null;
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
});
}
// }).start();
}
}

View File

@@ -0,0 +1,56 @@
package it.integry.integrywmsnative.core.expansion.view;
import android.view.View;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.ViewHolder, VH extends RecyclerView.ViewHolder>
extends SectionedRecyclerViewAdapter<SH, VH> {
protected ArrayList<T> mDataset = new ArrayList<>();
private View mEmptyView;
public ExtendedSectionedRecyclerView(ObservableArrayList<T> myDataset) {
mDataset.addAll(myDataset);
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
checkIfEmpty();
}
});
checkIfEmpty();
}
public ExtendedSectionedRecyclerView<T, SH, VH> setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}
@Override
public int getItemSize() {
return this.mDataset.size();
}
private void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemSize() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
}

View File

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.util.Date;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class MtbColr extends EntityBase {
@@ -56,6 +57,10 @@ public class MtbColr extends EntityBase {
public MtbColr() {
type = "mtb_colr";
if(SettingsManager.i().isUserLoggedIn()) {
setUtente(SettingsManager.i().getUser().getFullname());
}
}

View File

@@ -99,6 +99,10 @@ public class MtbColt extends EntityBase {
type = "mtb_colt";
setDataCollo(UtilityDate.getDateInstance());
setSerCollo("/");
if(SettingsManager.i().isUserLoggedIn()) {
setPreparatoDa(SettingsManager.i().getUser().getFullname());
}
}
public MtbColt initDefaultFields() {

View File

@@ -11,7 +11,6 @@ import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -32,6 +31,7 @@ import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO;
import it.integry.integrywmsnative.core.rest.model.RettificaULDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -125,7 +125,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public static void createColloLavorazione(int segno, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
public void createColloLavorazione(int segno, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToCreate = new MtbColt()
.setSegno(segno)
.setGestione(GestioneEnum.LAVORAZIONE);
@@ -136,16 +136,10 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
.setOperation(CommonModelConsts.OPERATION.INSERT);
saveColloStatic(mtbColtToCreate, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
if (onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
saveCollo(mtbColtToCreate, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
@@ -212,7 +206,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public static void createColliScaricoDaOrdineLavorazione(MtbColt sourceMtbColt,MtbColr sourceMtbColr, MtbDepoPosizione posizione, List<OrdineLavorazioneDTO> ordini, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
public static void createColliScaricoDaOrdineLavorazione(MtbColt sourceMtbColt, MtbColr sourceMtbColr, MtbDepoPosizione posizione, List<OrdineLavorazioneDTO> ordini, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt newMtbColt = new MtbColt()
.initDefaultFields()
@@ -262,7 +256,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
.setPartitaMag(original.getPartitaMag())
.setOperation(CommonModelConsts.OPERATION.INSERT);
for (OrdineLavorazioneDTO ordLav : ordini) {
if (ordLav.getQtaColVersamento().getBigDecimal().compareTo(BigDecimal.ZERO) > 0){
if (ordLav.getQtaColVersamento().getBigDecimal().compareTo(BigDecimal.ZERO) > 0) {
MtbColr ordColr = (MtbColr) mtbColrClone.clone();
ordColr.setQtaCol(ordLav.getQtaColVersamento().getBigDecimal());
ordColr.setNumCnf(ordLav.getNumCnfVersamento().getBigDecimal());
@@ -290,12 +284,11 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public static void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, GestioneEnum gestione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
public void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, GestioneEnum gestione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
createColloFromEtichettaAnonima(barcodeScanDTO.getStringValue(), gestione, onComplete, onFailed);
}
public static void createColloFromEtichettaAnonima(String barcode, GestioneEnum gestione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
public void createColloFromEtichettaAnonima(String barcode, GestioneEnum gestione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToCreate = new MtbColt()
.setGestione(gestione);
@@ -321,39 +314,22 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
mtbColtToCreate
.setOperation(CommonModelConsts.OPERATION.INSERT);
saveColloStatic(mtbColtToCreate, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
if (onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
saveCollo(mtbColtToCreate, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public void deleteCollo(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ColliMagazzinoRESTConsumer.deleteColloStatic(mtbColtToDelete, onComplete, onFailed);
}
public static void deleteColloStatic(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs<Exception> onFailed) {
mtbColtToDelete.setOperation(CommonModelConsts.OPERATION.DELETE);
saveColloStatic(mtbColtToDelete, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
if (onComplete != null) onComplete.run();
}
@Override
public void onFailed(Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
saveCollo(mtbColtToDelete, value -> {
if (onComplete != null) onComplete.run();
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void distribuisciCollo(MtbColt mtbColtToDistribute, DistribuzioneColloDTO.CriterioDistribuzione criterioDistribuzione, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
@@ -411,7 +387,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
List<MtbColt> mtbColtList = new ArrayList<>();
mtbColtList.add(mtbColt);
fillMtbAartsOfMtbColts(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed);
fillMtbAartsOfMtbColtsStatic(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed);
} else {
onComplete.run(mtbColt);
}
@@ -426,8 +402,11 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public void fillMtbAartsOfMtbColts(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
fillMtbAartsOfMtbColtsStatic(mtbColts, onComplete, onFailed);
}
public static void fillMtbAartsOfMtbColts(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
public static void fillMtbAartsOfMtbColtsStatic(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<String> codMarts = new ArrayList<>();
for (MtbColt mtbColt : mtbColts) {
@@ -505,81 +484,65 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public static void getByTestataStatic(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
String ssccString = null;
testata.setMtbColr(new ObservableArrayList<>());
if (testata.getSerCollo().equalsIgnoreCase(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE)) {
ssccString = "U";
SimpleDateFormat sdf = new SimpleDateFormat("yy");
ssccString += sdf.format(testata.getDataColloD());
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService.getColloInGiac(onlyResiduo, throwExcIfNull, testata).enqueue(new Callback<ServiceRESTResponse<MtbColt>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbColt>> call, Response<ServiceRESTResponse<MtbColt>> response) {
analyzeAnswer(response, "getColloInGiac", mtbColt -> {
ssccString += String.format("%07d", testata.getNumCollo());
} else {
ssccString = "";
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
List<MtbColt> mtbColtList = new ArrayList<>();
mtbColtList.add(mtbColt);
fillMtbAartsOfMtbColtsStatic(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed);
} else {
onComplete.run(mtbColt);
}
switch (testata.getGestioneEnum()) {
case ACQUISTO:
ssccString += "1";
break;
case LAVORAZIONE:
ssccString += "2";
break;
case VENDITA:
ssccString += "3";
break;
}, onFailed);
}
SimpleDateFormat sdf = new SimpleDateFormat("yy");
ssccString += sdf.format(testata.getDataColloD());
@Override
public void onFailure(Call<ServiceRESTResponse<MtbColt>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
ssccString += String.format("%05d", testata.getNumCollo());
ssccString += "0";
public void changePosizione(MtbColt mtbColtToMove, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs<Exception> onFailed) {
String codMdep = posizione.getCodMdep();
String posizioneString = posizione.getPosizione();
MtbColt mtbColtToMoveClone = (MtbColt) mtbColtToMove.clone();
for (int i = 0; i < mtbColtToMoveClone.getMtbColr().size(); i++) {
mtbColtToMoveClone.getMtbColr().get(i)
.setMtbAart(null)
.setMtbPartitaMag(null);
}
getBySSCCStatic(ssccString, onlyResiduo, throwExcIfNull, onComplete, onFailed);
}
public static void changePosizione(MtbColt mtbColtToSave, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToSaveClone = (MtbColt) mtbColtToSave.clone();
mtbColtToSaveClone.setOperation(CommonModelConsts.OPERATION.UPDATE);
mtbColtToSaveClone.setMtbColr(new ObservableArrayList<>());
if (posizione == null) mtbColtToSaveClone.setPosizione(null);
else mtbColtToSaveClone.setPosizione(posizione.getPosizione());
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColtToSaveClone, mtbColt -> {
if (onComplete != null) onComplete.run();
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public void updateRiga(MtbColr mtbColrToUpdate, Runnable onComplete, RunnableArgs<Exception> onFailed) {
updateRigaStatic(mtbColrToUpdate, onComplete, onFailed);
}
public static void updateRigaStatic(MtbColr mtbColrToUpdate, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColt = new MtbColt()
.setGestione(mtbColrToUpdate.getGestioneEnum())
.setNumCollo(mtbColrToUpdate.getNumCollo())
.setSerCollo(mtbColrToUpdate.getSerCollo())
.setDataCollo(mtbColrToUpdate.getDataColloS());
mtbColt.getMtbColr().add(mtbColrToUpdate);
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
mtbColrToUpdate.setOperation(CommonModelConsts.OPERATION.UPDATE);
EntityRESTConsumer.processEntity(mtbColt, value -> {
if(onComplete != null) onComplete.run();
}, onFailed, MtbColt.class);
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService
.spostaULInPosizione(codMdep,
posizioneString,
mtbColtToMoveClone)
.enqueue(new Callback<ServiceRESTResponse<Object>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "changePosizione", mtbColts -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}
public void updateDataFine(MtbColt mtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) {
@@ -659,7 +622,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
@Override
public void onResponse(Call<ServiceRESTResponse<List<MtbColt>>> call, Response<ServiceRESTResponse<List<MtbColt>>> response) {
analyzeAnswer(response, "getColliInBasket", mtbColts -> {
fillMtbAartsOfMtbColts(mtbColts, onComplete, onFailed);
fillMtbAartsOfMtbColtsStatic(mtbColts, onComplete, onFailed);
}, onFailed);
}
@@ -670,12 +633,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public static void creaRettificaColloStatic(MtbColr sourceMtbColrOriginal, BigDecimal newNumCnf, BigDecimal newQtaTot, RunnableArgs<MtbColr> onComplete, RunnableArgs<Exception> onFailed) {
public void creaRettificaCollo(MtbColr sourceMtbColrOriginal, BigDecimal newNumCnf, BigDecimal newQtaTot, RunnableArgs<MtbColr> onComplete, RunnableArgs<Exception> onFailed) {
MtbColr sourceMtbColr = (MtbColr) sourceMtbColrOriginal.clone();
sourceMtbColr.setMtbPartitaMag(null);
sourceMtbColr.setMtbAart(null);
@@ -692,22 +650,48 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
).enqueue(new Callback<ServiceRESTResponse<MtbColr>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbColr>> call, Response<ServiceRESTResponse<MtbColr>> response) {
analyzeAnswer(response, "creaRettificaCollo", data -> {
onComplete.run(data);
}, onFailed);
analyzeAnswer(response, "creaRettificaCollo", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbColr>> call, Throwable t) {
if(onFailed != null) onFailed.run(new Exception(t));
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}
public void spostaArtsTraUL(MtbColt sourceMtbColt, MtbColt destMtbColt, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToMoveClone = (MtbColt) sourceMtbColt.clone();
MtbColt mtbColtDestClone = (MtbColt) destMtbColt.clone();
for (int i = 0; i < mtbColtToMoveClone.getMtbColr().size(); i++) {
mtbColtToMoveClone.getMtbColr().get(i)
.setMtbAart(null)
.setMtbPartitaMag(null);
}
public void creaRettificaCollo(MtbColr sourceMtbColrOriginal, BigDecimal newNumCnf, BigDecimal newQtaTot, RunnableArgs<MtbColr> onComplete, RunnableArgs<Exception> onFailed) {
creaRettificaColloStatic(sourceMtbColrOriginal, newNumCnf, newQtaTot, onComplete, onFailed);
mtbColtDestClone.setMtbColr(null);
SpostaArtsTraULRequestDTO spostaArtsTraULRequestDTO = new SpostaArtsTraULRequestDTO()
.setSourceMtbColt(mtbColtToMoveClone)
.setDestinationMtbColt(mtbColtDestClone);
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService.spostaArtsTraUL(
spostaArtsTraULRequestDTO
).enqueue(new Callback<ServiceRESTResponse<Object>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "spostaArtsTraUL", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -9,6 +9,7 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO;
import it.integry.integrywmsnative.core.rest.model.RettificaULDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
@@ -23,10 +24,19 @@ public interface ColliMagazzinoRESTConsumerService {
@POST("getColloByBarcode")
Call<ServiceRESTResponse<MtbColt>> getColloByBarcode(@Query("codBarreCollo") String sscc, @Query("onlyResiduo") boolean onlyResiduo, @Query("throwExcIfNull") boolean throwExcIfNull);
@POST("getColloInGiac")
Call<ServiceRESTResponse<MtbColt>> getColloInGiac(@Query("onlyResiduo") boolean onlyResiduo, @Query("throwExcIfNull") boolean throwExcIfNull, @Body MtbColt mtbColt);
@GET("getColliInBasket")
Call<ServiceRESTResponse<List<MtbColt>>> getColliInBasket(@Query("codMdep") String codMdep);
@POST("creaRettificaCollo")
Call<ServiceRESTResponse<MtbColr>> creaRettificaCollo(@Query("codMdep") String codMdep, @Body RettificaULDTO rettificaULDTO);
@POST("wms/spostaULInPosizione")
Call<ServiceRESTResponse<Object>> spostaULInPosizione(@Query("codMdep") String codMdep, @Query("posizione") String posizione, @Body MtbColt mtbColtToMove);
@POST("wms/spostaArtsTraUL")
Call<ServiceRESTResponse<Object>> spostaArtsTraUL(@Body SpostaArtsTraULRequestDTO spostaArtsTraULRequestDTO);
}

View File

@@ -8,12 +8,11 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import retrofit2.Call;
import retrofit2.Callback;
@@ -28,8 +27,30 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{
this.mSystemRESTConsumer = systemRESTConsumer;
}
public void getPosizioneFromString(String posizione, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT TOP 1 mtb_depo_posizioni.*," +
" CASE WHEN jtb_fasi.cod_jfas IS NULL THEN 'N' ELSE 'S' END AS flag_linea_produzione " +
" FROM mtb_depo_posizioni " +
" LEFT OUTER JOIN jtb_fasi " +
" ON mtb_depo_posizioni.posizione = jtb_fasi.cod_jfas " +
" WHERE posizione = " + UtilityDB.valueToString(posizione);
SystemRESTConsumer.processSqlStatic(sql, MtbDepoPosizione.class, new ISimpleOperationCallback<MtbDepoPosizione>() {
@Override
public void onSuccess(MtbDepoPosizione value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
});
}
public static void getAvailablePosizioni(RunnableArgs<List<MtbDepoPosizione>> onComplete, RunnableArgs<Exception> onFailed) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
// String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String codMdep = null;
PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class);
posizioniRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback<ServiceRESTResponse<List<MtbDepoPosizione>>>() {
@@ -47,11 +68,8 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{
});
}
public void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
getBancaliInPosizioneStatic(mtbDepoPosizione, onComplete, onFailed);
}
public static void getBancaliInPosizioneStatic(MtbDepoPosizione mtbDepoPosizione, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
public void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT * FROM mtb_colt WHERE segno > 0 AND cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione());

View File

@@ -0,0 +1,30 @@
package it.integry.integrywmsnative.core.rest.model;
import it.integry.integrywmsnative.core.model.MtbColt;
public class SpostaArtsTraULRequestDTO {
private MtbColt sourceMtbColt;
private MtbColt destinationMtbColt;
public MtbColt getSourceMtbColt() {
return sourceMtbColt;
}
public SpostaArtsTraULRequestDTO setSourceMtbColt(MtbColt sourceMtbColt) {
this.sourceMtbColt = sourceMtbColt;
return this;
}
public MtbColt getDestinationMtbColt() {
return destinationMtbColt;
}
public SpostaArtsTraULRequestDTO setDestinationMtbColt(MtbColt destinationMtbColt) {
this.destinationMtbColt = destinationMtbColt;
return this;
}
}

View File

@@ -33,8 +33,10 @@ public class DBSettingsModel {
private boolean flagForceAllToColli;
private boolean flagSpedizioneEnableManualPick;
private boolean flagSpedizioneCanSelectMultipleOrders;
private boolean flagSpedizioneUseQtaOrd;
private String produzioneDefaultCodAnag;
private String reportNameSpedizionChiudiOrdine;
private int onNumCnfInputChanged = 1;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza;
@@ -234,6 +236,15 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagSpedizioneUseQtaOrd() {
return flagSpedizioneUseQtaOrd;
}
public DBSettingsModel setFlagSpedizioneUseQtaOrd(boolean flagSpedizioneUseQtaOrd) {
this.flagSpedizioneUseQtaOrd = flagSpedizioneUseQtaOrd;
return this;
}
public String getProduzioneDefaultCodAnag() {
return produzioneDefaultCodAnag;
}
@@ -251,4 +262,13 @@ public class DBSettingsModel {
this.reportNameSpedizionChiudiOrdine = reportNameSpedizionChiudiOrdine;
return this;
}
public int getOnNumCnfInputChanged() {
return onNumCnfInputChanged;
}
public DBSettingsModel setOnNumCnfInputChanged(int onNumCnfInputChanged) {
this.onNumCnfInputChanged = onNumCnfInputChanged;
return this;
}
}

View File

@@ -258,6 +258,14 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("REPORT_PACKING_LIST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_USE_QTA_ORD"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("ON_NUM_CNF_INPUT_CHANGED"));
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
@@ -281,6 +289,12 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class));
dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
Integer onNumCnfInputChanged = getValueFromList(list, "SETUP", "ON_NUM_CNF_INPUT_CHANGED", Integer.class);
if(onNumCnfInputChanged != null) {
dbSettingsModelIstance.setOnNumCnfInputChanged(onNumCnfInputChanged);
}
if(onComplete != null) onComplete.run();
}, onFailed);
@@ -298,6 +312,8 @@ public class SettingsManager {
return clazz.cast(value.getValue());
} else if(clazz == Boolean.class) {
return clazz.cast("S".equalsIgnoreCase(value.getValue()));
} else if(clazz == Integer.class && value.getValue() != null) {
return clazz.cast(Integer.parseInt(value.getValue()));
} else return null;
}

View File

@@ -33,19 +33,24 @@ public class UtilityBarcode {
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) {
return isEtichettaPosizione(barcodeScanDTO, true);
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, boolean enableCheckCodMdep) {
String currentCodMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String barcode = barcodeScanDTO.getStringValue();
boolean isPosizione = false;
if(SettingsManager.iDB().getAvailablePosizioni() != null) {
Stream<MtbDepoPosizione> tmpStream = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
.filter(x -> x.getPosizione().equalsIgnoreCase(barcode));
.filter(x -> x.getPosizione().equalsIgnoreCase(barcode) && (!enableCheckCodMdep || currentCodMdep.equalsIgnoreCase(x.getCodMdep())));
if(tmpStream.count() > 0){
isPosizione = true;
}
}
return isPosizione;
}

View File

@@ -2,17 +2,28 @@ package it.integry.integrywmsnative.core.utility;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
public class UtilityContext {
private static Context mApplicationContext;
private static AppCompatActivity mMainActivity;
public static void initApplicationContext(Context context) {
mApplicationContext = context;
}
public static void initMainActivity(AppCompatActivity mainActivity) {
mMainActivity = mainActivity;
}
public static Context getApplicationContext() {
return mApplicationContext;
}
public static AppCompatActivity getMainActivity() {
return mMainActivity;
}
}

View File

@@ -4,12 +4,15 @@ import android.app.Dialog;
import android.content.Context;
import android.text.SpannableString;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.orhanobut.logger.Logger;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class UtilityExceptions {
@@ -43,8 +46,17 @@ public class UtilityExceptions {
if(ex.getCause() != null) errorMessage += "<br />" + ex.getCause().getMessage();
}
if(context != null) {
DialogSimpleMessageHelper.makeErrorDialog(context, new SpannableString(errorMessage), null, null).show();
FragmentManager fm = null;
if(context != null && context instanceof FragmentActivity) {
fm = ((FragmentActivity) context).getSupportFragmentManager();
} else if(UtilityContext.getMainActivity() != null) {
fm = UtilityContext.getMainActivity().getSupportFragmentManager();
}
if(fm != null) {
DialogSimpleMessageView.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(fm, "tag");
}
if(!BuildConfig.DEBUG) {

View File

@@ -1,11 +1,8 @@
package it.integry.integrywmsnative.core.utility;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.widget.ProgressBar;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.view.dialogs.DialogProgress;
public class UtilityProgress {
@@ -26,27 +23,4 @@ public class UtilityProgress {
return progress;
}
public static Thread makeProgressBarIndeterminate(ProgressBar progressBar) {
progressBar.setMax(100);
Thread updateProgressThread = new Thread(() -> {
try {
while (true) {
for (int i = 0; i < 100; i++) {
progressBar.setProgress(i);
Thread.sleep(10);
}
}
} catch (Exception ex) {
// String message = ex.toString();
}
});
updateProgressThread.start();
return updateProgressThread;
}
}

View File

@@ -23,7 +23,7 @@ public class UtilityString {
}
public static String empty2null(String stringToCheck) {
return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim();
return (stringToCheck == null || stringToCheck.trim().length() == 0) ? null : stringToCheck.trim();
}
public static String capitalizeWords(String capString){
@@ -68,11 +68,11 @@ public class UtilityString {
}
public static Spanned formatHtmlString(String format, String... params){
return Html.fromHtml(String.format(format,params));
return Html.fromHtml(String.format(format, (Object[]) params));
}
public static Spanned formatHtmlStringFromResId(@StringRes int stringId, String... params){
return Html.fromHtml(String.format(UtilityResources.getString(stringId),params));
return Html.fromHtml(String.format(UtilityResources.getString(stringId), (Object[]) params));
}

View File

@@ -41,7 +41,7 @@ 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;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class MainAccettazioneFragment extends Fragment implements ISearcableFragment, ITitledFragment, IScrollableFragment {
@@ -187,8 +187,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
.count();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
DialogSimpleMessageView.makeInfoDialog(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)),
@@ -203,14 +202,17 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
}, ex -> {
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();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
});

View File

@@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGExcep
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.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
@@ -245,7 +245,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -254,14 +254,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere());
@@ -308,7 +307,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -317,14 +316,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere());
@@ -371,7 +369,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -380,7 +378,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -431,7 +429,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -440,7 +438,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -535,7 +533,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
public void startListaBancaliRegistratiActivity(ArrayList<RecoverMtbColt> mtbColts) {
Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(x -> (MtbColt)x).toList(),
Stream.of(mtbColts).map(x -> (MtbColt) x).toList(),
input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(),
PrinterRESTConsumer.Type.SECONDARIA,
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
@@ -546,7 +544,9 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -556,13 +556,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -599,7 +599,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
public void onError(Exception ex) {
this.closeProgress();
if(ex instanceof InvalidPesoKGException) {
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
@@ -664,12 +664,11 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
).show(getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -98,10 +98,13 @@ public class AccettazionePickingViewModel {
public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, String codMdep) {
this.mOrders = orders;
this.mSitArts = sitArts;
this.mDefaultCodMdep = codMdep;
getEmptyPickingList(sitArts, pickingObjectList -> {
this.mSitArts = Stream.of(sitArts)
.filter(x -> UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
.toList();
getEmptyPickingList(this.mSitArts, pickingObjectList -> {
this.mPickingList.postValue(pickingObjectList);
});
@@ -136,6 +139,7 @@ public class AccettazionePickingViewModel {
}
private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = Stream.of(sitArtOrdList)
.map(SitArtOrdDTO::getCodMart)
.toList();
@@ -169,7 +173,7 @@ public class AccettazionePickingViewModel {
public void retrieveExistentLU(RunnableArgs<ArrayList<RecoverMtbColt>> onComplete) {
this.sendOnLoadingStarted();
this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mSitArts, mtbColtList -> {
this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mOrders, mtbColtList -> {
this.sendOnLoadingEnded();
onComplete.run(mtbColtList);
}, this::sendError);

View File

@@ -16,7 +16,7 @@ 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.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
@Singleton
public class AccettazionePickingRESTConsumer {
@@ -28,18 +28,18 @@ public class AccettazionePickingRESTConsumer {
this.mSystemRestConsumer = systemRESTConsumer;
}
public void getBancaliGiaRegistrati(List<SitArtOrdDTO> ordiniToShow, RunnableArgs<ArrayList<RecoverMtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
public void getBancaliGiaRegistrati(List<OrdineAccettazioneInevasoDTO> ordiniToShow, RunnableArgs<ArrayList<RecoverMtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> whereCondListMap = new ArrayList<>();
Stream
.of(ordiniToShow)
.distinctBy(x -> x.getDataOrd() + " " + x.getGestione() + " " + x.getNumOrd())
.distinctBy(x -> x.getData() + " " + x.getGestione() + " " + x.getNumero())
.forEach(x -> {
try {
HashMap<String, Object> whereCondMap = new HashMap<>();
whereCondMap.put("mtb_colr.data_ord", UtilityDate.recognizeDate(x.getDataOrd()));
whereCondMap.put("mtb_colr.data_ord", UtilityDate.recognizeDate(x.getData()));
whereCondMap.put("mtb_colr.gestione", x.getGestione().equalsIgnoreCase("P") ? "L" : x.getGestione());
whereCondMap.put("mtb_colr.num_ord", x.getNumOrd());
whereCondMap.put("mtb_colr.num_ord", x.getNumero());
whereCondListMap.add(whereCondMap);
} catch (Exception ex) {

View File

@@ -7,7 +7,6 @@ import android.text.SpannableString;
import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import it.integry.integrywmsnative.R;
@@ -24,7 +23,8 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import static android.app.Activity.RESULT_OK;
@@ -66,7 +66,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
mContext.bindings.contenutoBancaleMainList.setLayoutManager(new LinearLayoutManager(mContext));
DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(mContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider));
mContext.bindings.contenutoBancaleMainList.addItemDecoration(itemDecorator);
@@ -118,7 +118,9 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(mContext.getSupportFragmentManager(), "tag");
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress));
} catch (Exception ex) {
@@ -128,7 +130,9 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(errorMessage), null, null)
.show(mContext.getSupportFragmentManager(), "tag");;
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);

View File

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

View File

@@ -28,7 +28,7 @@ import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.login.core.LoginHelper;
import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO;
import it.integry.integrywmsnative.gest.login.dto.LoginDTO;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class LoginViewModel {
@@ -192,22 +192,22 @@ public class LoginViewModel {
private void onLoginFailed(final Spanned message){
mProgress.dismiss();
loginButtonEnabled.set(true);
mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog(
mActivity,
mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeErrorDialog(
message,
null,
null).show());
null)
.show(mActivity.getSupportFragmentManager(), "tag"));
}
private void onLoginSuccess(final String title, final Spanned message, final String host, final int port, final List<String> availableProfiles){
mProgress.dismiss();
mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeSuccessDialog(
mActivity,
mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(
title,
message,
null,
() -> showProfileDBSelectionDialog(host, port, availableProfiles)).show());
() -> showProfileDBSelectionDialog(host, port, availableProfiles))
.show(mActivity.getSupportFragmentManager(), "tag"));
}
private void showProfileDBSelectionDialog(final String host, final int port, final List<String> availableProfiles){

View File

@@ -7,8 +7,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
@@ -33,7 +31,6 @@ import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
@@ -46,16 +43,16 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaBinding;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzato;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.dialogs.DialogVenditaFiltroAvanzatoViewModel;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoAdapter;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaElencoListModel;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, ILifecycleFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener {
public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener {
public BindableBoolean fabVisible = new BindableBoolean(false);
@@ -132,8 +129,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
public void onStart() {
super.onStart();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
@@ -141,6 +138,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
@Override
public void onDestroy() {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
@@ -152,13 +151,13 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
boolean canSelectMultipleOrdini = SettingsManager.iDB().isFlagSpedizioneCanSelectMultipleOrders();
boolean canSelectMultipleClienti = SettingsManager.iDB().isFlagMultiClienteOrdV();
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), v -> this.refreshList(null));
OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter =
new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData)
.setEmptyView(this.mBindings.ordiniVenditaEmptyView)
.setOnGroupItemClicked(x -> {
if(!canSelectMultipleClienti) {
if (!canSelectMultipleClienti) {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
@@ -173,7 +172,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.forEach(y -> y.getSelectedObservable().set(!allSelected));
})
.setOnItemChecked(x -> {
if(!canSelectMultipleClienti && x.getSelectedObservable().get()) {
if (!canSelectMultipleClienti && x.getSelectedObservable().get()) {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
@@ -186,7 +185,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
this.mBindings.venditaMainList.setAdapter(ordiniUscitaElencoAdapter);
this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
if(mToolbar != null)
if (mToolbar != null)
mToolbar.setRecyclerView(this.mBindings.venditaMainList);
}
@@ -208,15 +207,28 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
});
};
private void refreshList(List<OrdiniUscitaElencoDTO> orderList) {
private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) {
List<OrdiniUscitaElencoDTO> tmpList = null;
if(filteredList != null) {
tmpList = filteredList;
} else if (mAppliedFilterViewModel != null) {
mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
mAppliedFilterViewModel.applyAllTests();
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
} else {
tmpList = mViewModel.getOrderList().getValue();
}
this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(orderList));
this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList));
}
private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) {
ComparatorCompat<OrdiniUscitaElencoDTO> comparator = ComparatorCompat
.comparing(OrdiniUscitaElencoDTO::getRagSocOrd)
.thenComparing(ComparatorCompat.comparing(x -> x.getDestinatario() != null ? x.getDestinatario() : "zzzzzzzzz"))
.thenComparing(ComparatorCompat.comparing(OrdiniUscitaElencoDTO::getNumOrd));
List<OrdiniUscitaElencoListModel> notHiddenElements = Stream.of(dataList)
@@ -259,12 +271,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.forEach(x -> x.getSelectedObservable().set(false));
}
@Override
public void onPreDestroy(Runnable onComplete) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
onComplete.run();
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString());
@@ -278,7 +284,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.toList();
this.mViewModel.loadPicking(selectedOrders);
}
@@ -315,8 +320,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
int alreadyRegisteredUL = alreadyRegisteredMtbColts.size();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, orders.size()), orders.size())
+ "<br />" +
"<b>" + codMarts.size() + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size())
@@ -324,7 +328,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
null,
() -> SpedizioneActivity.startActivity(getActivity(), sitArts, orders, alreadyRegisteredMtbColts, mCurrentGestioneCol, mCurrentSegnoCol, MtbColr.Causale.DEFAULT, mDialogRowInfo)
).show();
).show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
@@ -352,19 +356,17 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
@Override
public void onFilterClick() {
DialogVenditaFiltroAvanzato.make(
DialogVenditaFiltroAvanzatoView.make(
getActivity(),
this.mViewModel.getOrderList().getValue(),
mAppliedFilterViewModel,
(filteredOrderList, filter) -> {
mAppliedFilterViewModel = filter;
filter -> {
if(filteredOrderList != null){
refreshList(filteredOrderList);
}
mAppliedFilterViewModel = filter;
refreshList(null);
}).show();
}).show();
}
@Override

View File

@@ -18,6 +18,7 @@ import it.integry.integrywmsnative.core.exception.InvalidLUMultiGestioneExceptio
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoOrderFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
@@ -282,10 +283,7 @@ public class OrdiniUscitaElencoViewModel {
if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts);
}
public interface Listener {
void onLoadingStarted();
void onLoadingEnded();
public interface Listener extends ILoadingListener {
void onError(Exception ex);

View File

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

View File

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

View File

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

View File

@@ -132,17 +132,25 @@ public class OrdiniUscitaElencoAdapter extends SectionedRecyclerViewAdapter<Ordi
holder.mBinding.emptyView.setBackgroundColor(listModel.getEtichettaColor());
else holder.mBinding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), android.R.color.transparent, null));
if(!UtilityString.isNullOrEmpty(listModel.getDescription()))
if(!UtilityString.isNullOrEmpty(listModel.getDescription())) {
holder.mBinding.descrizione.setText(Html.fromHtml(listModel.getDescription()));
holder.mBinding.descrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.descrizione.setVisibility(View.GONE);
if(!UtilityString.isNullOrEmpty(listModel.getSubDescription()))
if(!UtilityString.isNullOrEmpty(listModel.getSubDescription())) {
holder.mBinding.subDescrizione.setText(Html.fromHtml(listModel.getSubDescription()));
holder.mBinding.subDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.subDescrizione.setVisibility(View.GONE);
if(!UtilityString.isNullOrEmpty(listModel.getRightDescription()))
if(!UtilityString.isNullOrEmpty(listModel.getRightDescription())) {
holder.mBinding.rightDescrizione.setText(Html.fromHtml(listModel.getRightDescription()));
holder.mBinding.rightDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightDescrizione.setVisibility(View.GONE);
if(!UtilityString.isNullOrEmpty(listModel.getRightSubDescription()))
if(!UtilityString.isNullOrEmpty(listModel.getRightSubDescription())) {
holder.mBinding.rightSubDescrizione.setText(Html.fromHtml(listModel.getRightSubDescription()));
holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE);
holder.mBinding.setSelected(listModel.getSelectedObservable());
holder.mBinding.executePendingBindings();

View File

@@ -13,7 +13,6 @@ import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableList;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.tfb.fbtoast.FBToast;
@@ -52,10 +51,10 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGExcep
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskCliente;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -169,7 +168,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
mBindings.pickingLiberoMainList.setHasFixedSize(true);
mBindings.pickingLiberoMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBindings.pickingLiberoMainList.addItemDecoration(itemDecorator);
}
@@ -191,7 +190,6 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> {
@@ -239,65 +237,65 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onLUOpened(MtbColt mtbColt) {
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
getActivity().runOnUiThread(() -> {
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
initAdapter();
initAdapter();
thereIsAnOpenedUL.set(true);
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
thereIsAnOpenedUL.set(true);
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
}
mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true);
}
});
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
});
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
@Override
public void onLUClosed() {
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
destroyAdapter();
getActivity().runOnUiThread(() -> {
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
destroyAdapter();
thereIsAnyRowInUL.set(false);
thereIsAnOpenedUL.set(false);
thereIsAnyRowInUL.set(false);
thereIsAnOpenedUL.set(false);
});
}
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(getActivity(),
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
).show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onError(Exception ex) {
this.closeProgress();
getActivity().runOnUiThread(() -> {
this.closeProgress();
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
}
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
}
BarcodeManager.enable();
BarcodeManager.enable();
});
}
@Override
public void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort) {
DialogAskCliente.makeBase(getActivity(), (status, result, codJcom) -> {
if (status == DialogConsts.Results.YES) {
onComplete.run(result, codJcom);
} else {
onAbort.run();
}
}).show();
DialogAskClienteView.newInstance(onComplete, onAbort)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
@@ -305,8 +303,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
DialogChooseArtsFromListaArts.make(getActivity(), mtbColrsToPick, onComplete, () -> {
onAbort.run();
BarcodeManager.enable();
})
.show();
});
}
@Override
@@ -365,11 +362,12 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onRowSaved() {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
getActivity().runOnUiThread(() -> {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
});
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewModel.dispatchRowEdit(mtbColr);
@@ -383,7 +381,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onPreDestroy(Runnable onComplete) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
if(thereIsAnOpenedUL.get()) mViewModel.closeLU(onComplete);
if (thereIsAnOpenedUL.get()) mViewModel.closeLU(onComplete);
else onComplete.run();
}

View File

@@ -179,15 +179,20 @@ public class PickingLiberoViewModel {
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
if (this.mFlagAskCliente) {
this.sendOnLoadingEnded();
this.sendLUClienteRequired((vtbDest, codJcom) -> {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, codJcom, onComplete);
}, onComplete);
}, () -> {
});
} else {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, null, onComplete);
}
}
private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, String codJcom, Runnable onComplete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields();
mtbColt.setGestione(mDefaultGestione)
@@ -209,7 +214,7 @@ public class PickingLiberoViewModel {
mtbColt.setCodVdes(vtbDest.getCodVdes());
}
if(!UtilityString.isNullOrEmpty(codJcom)) {
if (!UtilityString.isNullOrEmpty(codJcom)) {
mtbColt.setCodJcom(codJcom);
}
@@ -376,38 +381,29 @@ public class PickingLiberoViewModel {
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> {
for (int i = 0; i < mtbColrObservableField.size(); i++) {
MtbColr initialMtbColr = mtbColrObservableField.get(i);
new Thread(() -> {
mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> {
for (int i = 0; i < mtbColrObservableField.size(); i++) {
MtbColr initialMtbColr = mtbColrObservableField.get(i);
initialMtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo());
initialMtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo());
initialMtbColr.setRiga(value.getMtbColr().get(i).getRiga());
initialMtbColr.setRiga(value.getMtbColr().get(i).getRiga());
mCurrentMtbColt.getMtbColr().add(mtbColrObservableField.get(i));
}
// for (int j = 0; j < value.getMtbColr().size(); j++) {
// MtbColr savedMtbColr = value.getMtbColr().get(j);
// if (savedMtbColr.getCodMart().equals(initialMtbColr.getCodMart()) &&
// UtilityString.equalsIgnoreCase(savedMtbColr.getPartitaMag(), initialMtbColr.getPartitaMag()) &&
// UtilityString.equalsIgnoreCase(savedMtbColr.getCodCol(), initialMtbColr.getCodCol()) &&
// UtilityString.equalsIgnoreCase(savedMtbColr.getCodTagl(), initialMtbColr.getCodTagl()) &&
// savedMtbColr.getQtaCol().equals(initialMtbColr.getQtaCol()) &&
// savedMtbColr.getNumCnf().equals(initialMtbColr.getNumCnf())) {
// initialMtbColr.setRiga(savedMtbColr.getRiga());
// }
// }
this.sendOnRowSaved();
this.sendOnLoadingEnded();
mCurrentMtbColt.getMtbColr().add(mtbColrObservableField.get(i));
}
onComplete.run();
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
onComplete.run();
}, this::sendError);
}).start();
}
}, onComplete);
} else {
@@ -646,8 +642,6 @@ public class PickingLiberoViewModel {
.setQtaCol(qtaTot)
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setUtente(SettingsManager.i().getUser().getFullname())
.setCausale(MtbColr.Causale.RETTIFICA)
.setDatetimeRow(UtilityDate.getDateInstance());
mtbColt.getMtbColr().add(mtbColr);

View File

@@ -35,6 +35,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
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.UtilityResources;
@@ -49,9 +50,9 @@ 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_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener {
@@ -179,9 +180,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.mBindings.mainList.setAdapter(pickingResiListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
pickingResiListAdapter.setOnItemClicked(clickedItem -> {
pickingResiListAdapter.setOnItemClicked((clickedItem, refMtbColt) -> {
if (!noLUPresent.get()) {
this.mViewmodel.dispatchOrdineRow(clickedItem);
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
}
});
}
@@ -190,7 +191,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
Stream.of(dataList)
List<WithdrawableDtbDocr> tmpList = Stream.of(dataList)
.filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getQtaDoc(), BigDecimal.ZERO))
.toList();
Stream.of(tmpList)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.forEach(x -> {
@@ -251,6 +256,10 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
});
}
public void removeListFilter() {
this.mViewmodel.resetMatchedRows();
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewmodel.dispatchRowEdit(mtbColr);
@@ -321,11 +330,23 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
// this.mViewmodel.resetMatchedRows();
this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onFilterApplied(String newValue) {
this.mBindings.filteredArtsInListExpandableLayout.expand(true);
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : "");
}
@Override
public void onFilterRemoved() {
this.mBindings.filteredArtsInListExpandableLayout.collapse(true);
this.mBindings.descriptionFilterText.setText("");
}
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
@@ -334,12 +355,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
).show(getSupportFragmentManager(), "tag");
}
@Override
@@ -362,7 +382,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -373,13 +395,13 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -14,7 +14,11 @@ 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.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
@@ -25,6 +29,7 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@@ -39,6 +44,7 @@ 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.exceptions.NotCurrentYearLUException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class PickingResiViewModel {
@@ -229,23 +235,26 @@ public class PickingResiViewModel {
private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) {
this.mColliRegistrati.add(mtbColt);
Stream.of(this.mPickingList.getValue())
.forEach(x -> {
List<MtbColr> withdraws = x.getWithdrawRows();
List<WithdrawableDtbDocr> tmpList = getPickingList().getValue();
for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
for (int i = 0; i < tmpList.size(); i++) {
WithdrawableDtbDocr x = tmpList.get(i);
List<MtbColr> withdraws = x.getWithdrawRows();
x.getWithdrawRows().clear();
for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
this.mPickingList.getValue().remove(x);
}
});
x.getWithdrawRows().clear();
this.mPickingList.postValue(this.mPickingList.getValue());
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
tmpList.remove(x);
i--;
}
}
this.mPickingList.postValue(tmpList);
onComplete.run();
}
@@ -259,41 +268,232 @@ public class PickingResiViewModel {
//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);
this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else {
// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
}
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
} else {
// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
}
}
}
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) {
private void processBarcodeNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.createNewLU(
null,
null,
() -> processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete));
}
private void processBarcodeAlreadyOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else onComplete.run();
}
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, onComplete);
}
} else {
this.createNewLU(
null,
null,
() -> searchArtFromUL(mtbColt, onComplete)
);
}
}, this::sendError);
}
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if (mtbColt.getSegno() != -1) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidLUException());
} else {
this.sendError(new NoArtsFoundException());
}
}, this::sendError);
}
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.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
onComplete.run();
}
}, this::sendError);
}
private void searchArtFromUL(MtbColt scannedUL, Runnable onComplete) {
final List<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
final List<WithdrawableDtbDocr> matchPickingObject = new ArrayList<>();
//Controllo se nel collo ho degli articoli che corrispondono per codice / taglia / colore / lotto
Stream.of(scannedUL.getMtbColr())
.filter(x -> !UtilityString.isNullOrEmpty(x.getCodMart()))
.forEach(x -> {
for (WithdrawableDtbDocr pickingObject : pickingList) {
//Da verificare se il controllo per partita deve essere sempre effettuato
if (UtilityString.equalsIgnoreCase(x.getCodMart(), pickingObject.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), pickingObject.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getCodCol())) {
if (!matchPickingObject.contains(pickingObject)) {
matchPickingObject.add(pickingObject);
}
}
}
});
for (WithdrawableDtbDocr matchedObject : matchPickingObject) {
MtbColt cloneMtbColt = (MtbColt) scannedUL.clone();
ObservableArrayList<MtbColr> cloneMtbColrs = (ObservableArrayList<MtbColr>) cloneMtbColt.getMtbColr().clone();
Stream.of(cloneMtbColt.getMtbColr())
.filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getCodCol())))
.forEach(cloneMtbColrs::remove);
cloneMtbColt.setMtbColr(cloneMtbColrs);
PickDataDTO tempPickData = new PickDataDTO()
.setSourceMtbColt(cloneMtbColt);
matchedObject.setTempPickData(tempPickData);
}
this.loadMatchedRows(matchPickingObject);
onComplete.run();
}
private void loadMatchedRows(List<WithdrawableDtbDocr> matchedRows) {
if (matchedRows == null || matchedRows.size() == 0) {
this.sendError(new NoArtsFoundException());
} else if (matchedRows.size() == 1) {
WithdrawableDtbDocr matchedItem = matchedRows.get(0);
if (matchedItem.getWithdrawRows() != null && matchedItem.getWithdrawRows().size() > 1) {
List<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
Stream.of(pickingList)
.filter(x -> x != matchedItem)
.forEach(x -> x.setHidden(true));
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
} else {
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt());
}
} else {
List<WithdrawableDtbDocr> 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 dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr, final MtbColt refMtbColt) {
BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc();
BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf();
BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf();
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
BigDecimal totalAvailableQtaCol;
BigDecimal totalAvailableQtaCnf;
BigDecimal totalAvailableNumCnf;
if (mtbColrToDispatch != null) {
totalAvailableQtaCol = mtbColrToDispatch.getQtaCol();
totalAvailableQtaCnf = mtbColrToDispatch.getQtaCnf();
totalAvailableNumCnf = mtbColrToDispatch.getNumCnf();
} else {
totalAvailableQtaCol = totalQtaDoc;
totalAvailableQtaCnf = qtaCnfDoc;
totalAvailableNumCnf = totalNumCnfDoc;
}
this.sendOnItemDispatched(
withdrawableDtbDocr.getMtbAart(),
totalNumCnfDoc,
qtaCnfDoc,
totalQtaDoc,
totalQtaDoc,
totalNumCnfDoc,
qtaCnfDoc,
totalAvailableNumCnf,
totalAvailableQtaCnf,
totalAvailableQtaCol,
totalAvailableQtaCol,
totalAvailableNumCnf,
totalAvailableQtaCnf,
withdrawableDtbDocr.getPartitaMag(),
withdrawableDtbDocr.getDataScadPartitaMagD(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(withdrawableDtbDocr,
refMtbColt,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
@@ -328,7 +528,7 @@ public class PickingResiViewModel {
}
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, MtbColt refMtbColt, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr()
@@ -348,6 +548,39 @@ public class PickingResiViewModel {
.setDataDoc(withdrawableDtbDocr.getDataDocS())
.setIdRigaDoc(withdrawableDtbDocr.getIdRiga());
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (mtbColrToDispatch != null) {
if (UtilityString.isNullOrEmpty(mCurrentMtbColt.getCodTcol()))
mCurrentMtbColt.setCodTcol(UtilityString.empty2null(withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getCodTcol()));
mtbColr
.setCodJcom(UtilityString.empty2null(mtbColrToDispatch.getCodJcom()))
.setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo()))
.setNumColloRif(mtbColrToDispatch.getNumCollo())
.setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione()))
.setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS()));
if (mtbColrToDispatch.getPesoNettoKg() != null) {
//Proporzione
BigDecimal pesoNettoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoNettoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoNettoKg(pesoNettoKg);
}
if (mtbColrToDispatch.getPesoLordoKg() != null) {
//Proporzione
BigDecimal pesoLordoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoLordoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoLordoKg(pesoLordoKg);
}
}
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
@@ -482,6 +715,17 @@ public class PickingResiViewModel {
});
}
public void resetMatchedRows() {
for (WithdrawableDtbDocr pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO
.setTempPickData(null)
.setHidden(false);
}
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
}
public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
return mPickingList;
@@ -549,6 +793,14 @@ public class PickingResiViewModel {
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();
}
public PickingResiViewModel setListener(Listener listener) {
this.mListener = listener;
@@ -572,5 +824,9 @@ public class PickingResiViewModel {
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onFilterApplied(String newValue);
void onFilterRemoved();
}
}

View File

@@ -20,7 +20,8 @@ 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.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding;
@@ -31,7 +32,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
private Context mContext;
private final List<PickingResiListModel> mDataset = new ArrayList<>();
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked;
private RunnableArgss<WithdrawableDtbDocr, MtbColt> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemHeaderBinding mBinding;
@@ -65,7 +66,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
});
}
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) {
public void setOnItemClicked(RunnableArgss<WithdrawableDtbDocr, MtbColt> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
@@ -123,7 +124,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel());
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel(), pickingResiListModel.getSourceMtbColt());
});
}

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.picking_resi.core;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListModel {
@@ -19,6 +20,7 @@ public class PickingResiListModel {
private boolean active;
private WithdrawableDtbDocr mOriginalModel;
private MtbColt mSourceMtbColt;
public String getGroupTitle() {
return groupTitle;
@@ -100,4 +102,13 @@ public class PickingResiListModel {
this.mOriginalModel = originalModel;
return this;
}
public MtbColt getSourceMtbColt() {
return mSourceMtbColt;
}
public PickingResiListModel setSourceMtbColt(MtbColt sourceMtbColt) {
this.mSourceMtbColt = sourceMtbColt;
return this;
}
}

View File

@@ -5,13 +5,18 @@ import java.util.List;
import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
public class WithdrawableDtbDocr extends DtbDocr {
private String gestione;
private List<MtbColr> withdrawRows = new ArrayList<>();
private PickDataDTO tempPickData;
private MtbColt refMtbColt;
private boolean hidden = false;
public WithdrawableDtbDocr() {
super();
}
@@ -33,4 +38,31 @@ public class WithdrawableDtbDocr extends DtbDocr {
this.gestione = gestione;
return this;
}
public MtbColt getRefMtbColt() {
return refMtbColt;
}
public WithdrawableDtbDocr setRefMtbColt(MtbColt refMtbColt) {
this.refMtbColt = refMtbColt;
return this;
}
public PickDataDTO getTempPickData() {
return tempPickData;
}
public WithdrawableDtbDocr setTempPickData(PickDataDTO tempPickData) {
this.tempPickData = tempPickData;
return this;
}
public boolean isHidden() {
return hidden;
}
public WithdrawableDtbDocr setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
}

View File

@@ -41,7 +41,7 @@ import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.Or
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
/**
* A simple {@link Fragment} subclass.
@@ -137,7 +137,9 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
}
);
}
@@ -197,8 +199,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
.count();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
DialogSimpleMessageView.makeInfoDialog(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)),
@@ -213,7 +214,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
},
@@ -224,7 +225,9 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
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();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
});

View File

@@ -76,6 +76,7 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
" CROSS APPLY input_values " +
" WHERE dtb_ordt.gestione = 'L' " +
" AND flag_evaso = 'I' " +
" AND flag_evaso_prod = 'I' " +
" AND dtb_ordr.flag_evaso_forzato = 'N' " +
" AND flag_annulla = 'N' " +
" AND dtb_ordt.cod_mdep = input_values.cod_mdep " +
@@ -144,7 +145,7 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
"FROM ord_without_positioned_mtb_colt " +
"CROSS APPLY input_values " +
"GROUP BY cod_mart, unt_mis, input_values.data_inizio, input_values.data_fine " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0 " +
"ORDER BY cod_mart";
@@ -391,7 +392,7 @@ ORDER BY cod_mart, posizione
"CROSS APPLY input_values " +
"WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " " +
"GROUP BY cod_mart, unt_mis, cod_jfas, input_values.data_inizio, input_values.data_fine " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0 " +
"ORDER BY cod_mart";

View File

@@ -42,10 +42,10 @@ import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuper
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
public class ProdRecuperoMaterialeViewModel {
@@ -369,7 +369,8 @@ public class ProdRecuperoMaterialeViewModel {
};
if (sourceMtbColt != null) saveRunnable.run(sourceMtbColt, false);
else DialogScanOrCreateLU.make(mContext, true, false, saveRunnable).show();
else DialogScanOrCreateLUView.newInstance(true, false, saveRunnable)
.show(mContext.getSupportFragmentManager(), "tag");
}
@@ -386,13 +387,13 @@ public class ProdRecuperoMaterialeViewModel {
}, ex -> {
progress.dismiss();
String errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(
mContext,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(errorMessage),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(mContext.getSupportFragmentManager(), "tag");
});
} catch (Exception ex) {
@@ -402,7 +403,9 @@ public class ProdRecuperoMaterialeViewModel {
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, onComplete).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(errorMessage), null, onComplete)
.show(mContext.getSupportFragmentManager(), "tag");
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);

View File

@@ -6,6 +6,7 @@ import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable;
import androidx.recyclerview.widget.RecyclerView;
@@ -32,7 +33,7 @@ import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentChooseOrdsLavFromListItemModelBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter<ChooseOrdsLavFromListAdapter.ViewHolder> {
@@ -57,11 +58,12 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter<ChooseOrd
private void onItemChecked(CheckableOrdineLavoro itemModel) {
if (itemModel.isChecked() && itemModel.getItem().getOrdineLav().getHrNum() <= 0){
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("Nessuna risorsa umana registrata per l'ordine selezionato! <br> Per una corretta suddivisione delle quantità registra le risorse.")),
null, () -> {
itemModel.getChecked().set(false);
}).show();
})
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
return;
}
if (!itemModel.isChecked()) {

View File

@@ -1,14 +1,14 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.viewmodel;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.text.Html;
import android.text.SpannableString;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.ObservableField;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import org.jetbrains.annotations.NotNull;
@@ -44,14 +44,14 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavo
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
public class ProdVersamentoMaterialViewModel {
private Context mContext;
private FragmentActivity mContext;
private FragmentProdVersamentoMaterialeBinding mBinding;
private ProdVersamentoMaterialHelper mHelper;
@@ -62,7 +62,7 @@ public class ProdVersamentoMaterialViewModel {
public MtbColr mMtbColr;
public void init(Activity context, FragmentProdVersamentoMaterialeBinding binding, ProdVersamentoMaterialHelper helper, Runnable onVersamentoCompleted) {
public void init(FragmentActivity context, FragmentProdVersamentoMaterialeBinding binding, ProdVersamentoMaterialHelper helper, Runnable onVersamentoCompleted) {
mContext = context;
mBinding = binding;
mHelper = helper;
@@ -75,7 +75,7 @@ public class ProdVersamentoMaterialViewModel {
mMtbColr = mtbColr;
mBinding.descrArt.setText(mtbColr.getDescrizione());
mBinding.codArt.setText(mtbColr.getCodMart());
mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - "+ mtbColr.getMtbPartitaMag().getDescrizione() : ""));
mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - " + mtbColr.getMtbPartitaMag().getDescrizione() : ""));
if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())) {
String text = UtilityNumber.decimalToString(mtbColr.getQtaCol());
@@ -90,26 +90,28 @@ public class ProdVersamentoMaterialViewModel {
}
public void openLU() {
DialogScanOrCreateLU.make(mContext, false, false, true, false, (mtbColt, created) -> {
DialogScanOrCreateLUView.newInstance(false, false, true, false, (mtbColt, created) -> {
if (mtbColt == null) {
((IPoppableActivity) mContext).pop();
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) && mtbColt.getSegno().equals(+1)) {
if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU).show();
null, this::openLU)
.show((mContext).getSupportFragmentManager(), "tag");
} else {
setMtbColt(mtbColt);
choosePosition();
}
} else {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU)
.show((mContext).getSupportFragmentManager(), "tag");
}
}).show();
}).show(mContext.getSupportFragmentManager(), "tag");
}
private void choosePosition() {
@@ -123,28 +125,37 @@ public class ProdVersamentoMaterialViewModel {
createColloScarico(mtbDepoPosizione);
} else {
if (mtbColt == null || mtbColt.get() == null || mtbColt.get().getMtbColr() == null || mtbColt.get().getMtbColr().size() <= 0) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")),
null, this::openLU)
.show(mContext.getSupportFragmentManager(), "tag");
return;
} else if (mtbColt.get().getMtbColr().size() > 1) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, solo il primo verrà versato in questa sessione. <br> Per versare i colli restanti ripetere l'operazione di versamento.")),
null, () -> {
cyclicGetOrdiniLavByCollo(mtbColt.get().getMtbColr().iterator(), mtbDepoPosizione);
}).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, solo il primo verrà versato in questa sessione. <br> Per versare i colli restanti ripetere l'operazione di versamento.")),
null, () -> {
cyclicGetOrdiniLavByCollo(mtbColt.get().getMtbColr().iterator(), mtbDepoPosizione);
})
.show(mContext.getSupportFragmentManager(), "tag");
return;
}
MesRESTConsumer.getOrdiniLavorazioneMateriale(mtbDepoPosizione.getPosizione(), getIdMaterialeFromCollo(mtbColt.get()), ordini -> richiediOrdiniPerVersamento(ordini, mtbDepoPosizione), e -> DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml(e.getMessage())),
null, this::openLU).show());
MesRESTConsumer.getOrdiniLavorazioneMateriale(
mtbDepoPosizione.getPosizione(),
getIdMaterialeFromCollo(mtbColt.get()),
ordini -> richiediOrdiniPerVersamento(ordini, mtbDepoPosizione),
e -> DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(e.getMessage())),
null,
this::openLU)
.show(mContext.getSupportFragmentManager(), "tag"));
}
} else {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")),
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
}
}
@@ -243,8 +254,8 @@ public class ProdVersamentoMaterialViewModel {
richiediOrdiniPerVersamento(ordini, mtbDepoPosizione);
}
}
, e -> DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml(e.getMessage())),
null, this::openLU).show());
, e -> DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(e.getMessage())),
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"));
}
}

View File

@@ -9,7 +9,6 @@ import android.widget.Toast;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList;
@@ -40,9 +39,10 @@ import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.adapter.OrdineAc
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdineAcquistoEditActivity extends BaseActivity {
@@ -114,7 +114,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this));
DividerItemDecoration itemDecorator = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(this, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction);
@@ -135,7 +135,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
private void deleteArticolo(ArticoloOrdine articoloOrdine) {
String text = "Stai per eliminare l'articolo <b> " + articoloOrdine.getDescrizione() + "</b> dall'ordine, <br> sei sicuro?";
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
mhelper.removeArticoloFromOrdine(articoloOrdine, () -> {
progress.dismiss();
@@ -146,7 +146,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
runOnUiThread(() -> UtilityExceptions.defaultException(this, e));
});
}), () -> {
}).show();
}).show(getSupportFragmentManager(), "tag");
}
private void handleException(Exception ex) {

View File

@@ -15,7 +15,6 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.ArrayList;
@@ -46,8 +45,9 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.core.OrdineAcquistoPv
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLisA;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment {
@@ -142,7 +142,9 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
}), (e) -> {
progress.dismiss();
String errorMessage = e.getMessage();
getActivity().runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show());
getActivity().runOnUiThread(() -> DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag"));
});
}
@@ -167,7 +169,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction);
@@ -198,7 +200,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
private void deleteOrdine(Ordine ordine) {
String text = "Stai per eliminare un ordine sei sicuro?";
DialogSimpleMessageHelper.makeWarningDialog(getActivity(), new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper.deleteOrder(ordine, () -> {
getActivity().runOnUiThread(() -> {
@@ -211,7 +213,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e));
});
}), () -> {
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
}
private void refreshRenderedOrdini(List<OrdineWrapper> ordini) {

View File

@@ -17,7 +17,6 @@ import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.android.material.textfield.TextInputLayout;
@@ -57,14 +56,15 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNo;
public class RettificaGiacenzeFragment extends Fragment implements ITitledFragment, ILifecycleFragment, RettificaGiacenzeViewModel.Listener, BottomSheetMtbColrEditView.Listener {
@@ -153,7 +153,7 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
mBinding.rettificaGiacenzeMainList.setHasFixedSize(true);
mBinding.rettificaGiacenzeMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator);
}
@@ -329,13 +329,13 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
@Override
public void onLUOpenRequest(RunnableArgss<MtbColt, Boolean> onComplete) {
DialogScanOrCreateLU.make(getActivity(), true, false, (mtbColt, created) -> {
DialogScanOrCreateLUView.newInstance(true, false, (mtbColt, created) -> {
if (mtbColt == null) {
((IPoppableActivity) getActivity()).pop();
} else {
onComplete.run(mtbColt, created);
}
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
@@ -360,12 +360,12 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(getActivity(),
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
@@ -471,29 +471,31 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
public void onLUSuccessullyPrinted() {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(getActivity(), res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
DialogSimpleMessageHelper.makeInfoDialog(
getActivity(),
DialogSimpleMessageView.makeInfoDialog(
getActivity().getResources().getString(R.string.action_print_ul),
new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)).show();
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");;
}
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
DialogSimpleMessageHelper.makeErrorDialog(
getActivity(),
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
@@ -67,8 +68,8 @@ import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.camera_barcode_reader.DialogCameraBarcodeReader;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -198,6 +199,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean enableCheckPartitaMag = SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV();
boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione();
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd();
if (mEnableGiacenza) this.openProgress();
mViewmodel.init(
@@ -211,7 +213,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
mColliRegistrati,
reportNameSpedizioneChiudiOrdine,
mGestioneCol, mSegnoCol, mDefaultCausaleUL,
mEnableQuantityReset);
mEnableQuantityReset,
useQtaOrd);
}
@Override
@@ -265,7 +268,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
((SettingsManager.iDB().isFlagSpedizioneEnableManualPick() &&
clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale()) ||
clickedItem.getTempPickData() != null)) {
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt,
SettingsManager.iDB().isFlagSpedizioneEnableManualPick() && clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale());
}
});
}
@@ -639,13 +643,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}, BarcodeManager::enable).show();
}
public void startCameraBarcode() {
DialogCameraBarcodeReader.newInstance(this, data -> {
this.onScanSuccessful.run(data);
})
.show(getSupportFragmentManager(), "camera_barcode");
}
public void removeListFilter() {
this.mViewmodel.resetMatchedRows();
}
@@ -719,7 +716,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -730,13 +729,14 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getSupportFragmentManager(), "tag");
;
}
@Override
@@ -754,12 +754,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -793,6 +793,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canPartitaMagBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
@@ -811,7 +812,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanLUBeClosed(true);
.setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged);
DialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
@@ -851,6 +853,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}).show();
}
@Override
public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);

View File

@@ -95,6 +95,7 @@ public class SpedizioneViewModel {
private String mReportNameSpedizioneChiudiOrdine;
private boolean mIsNewLU;
private boolean mEnableQuantityReset;
private boolean mUseQtaOrd;
private MtbColt mCurrentMtbColt = null;
@@ -137,7 +138,8 @@ public class SpedizioneViewModel {
GestioneEnum gestioneCol,
int segnoCol,
Integer defaultCausaleUL,
boolean enableQuantityReset) {
boolean enableQuantityReset,
boolean useQtaOrd) {
this.sendOnLoadingStarted();
this.mDefaultCodMdep = codMdep;
@@ -150,6 +152,7 @@ public class SpedizioneViewModel {
this.mReportNameSpedizioneChiudiOrdine = reportNameSpedizioneChiudiOrdine;
this.mDefaultCausaleOfUL = defaultCausaleUL;
this.mEnableQuantityReset = enableQuantityReset;
this.mUseQtaOrd = useQtaOrd;
if (enableGiacenza) {
mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> {
@@ -361,6 +364,7 @@ public class SpedizioneViewModel {
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
@@ -379,6 +383,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
canOverflowOrderQuantity,
canBatchLotBeChanged,
onComplete);
}
@@ -390,6 +395,11 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onLUPositionChangeRequest(onComplete);
}
private void sendBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
if (this.mListener != null)
mListener.onBatchLotSelectionRequest(availableBatchLots, onComplete);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
//Se non c'è una UL aperta
@@ -437,6 +447,9 @@ public class SpedizioneViewModel {
this.sendError(new InvalidLUException());
onComplete.run();
} else {
//Reset of existant mtbColrs
mtbColt.setMtbColr(new ObservableArrayList<>());
this.mCurrentMtbColt = mtbColt;
mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini);
this.mIsNewLU = false;
@@ -729,7 +742,7 @@ public class SpedizioneViewModel {
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
} else {
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt());
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt(), false);
}
} else {
@@ -748,8 +761,72 @@ public class SpedizioneViewModel {
}
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt) {
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, boolean canPartitaMagBeChanged) {
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
if (pickingObjectDTO.getTempPickData() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null) {
List<MtbColr> scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr();
List<MtbPartitaMag> availableBatchLot = Stream.of(scannedMtbColrs)
.filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && (
x.getPartitaMag() == null || UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD())
))
.distinctBy(MtbColr::getPartitaMag)
.map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag())
.toList();
if(availableBatchLot.size() > 1) {
this.sendOnLoadingStarted();
List<MtbPartitaMag> tmp = new ArrayList<>();
if(Stream.of(availableBatchLot).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) {
tmp.addAll(
Stream.of(availableBatchLot)
.filter(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()) && UtilityDate.getDateInstance().before(x.getDataScadD()))
.sortBy(MtbPartitaMag::getDataScadD)
.toList());
}
if(Stream.of(availableBatchLot).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) {
tmp.addAll(
Stream.of(availableBatchLot)
.filter(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))
.sortBy(MtbPartitaMag::getPartitaMag)
.toList());
}
this.sendBatchLotSelectionRequest(tmp, selected -> {
this.sendOnLoadingEnded();
if(selected != null) {
MtbColr scannedMtbColr = Stream.of(pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr())
.filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) &&
((x.getPartitaMag() != null && selected.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(selected.getPartitaMag())) ||
(x.getPartitaMag() == null && selected.getPartitaMag() == null)))
.toList()
.get(0);
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, scannedMtbColr, canPartitaMagBeChanged);
}
});
} else {
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, scannedMtbColrs.get(0), canPartitaMagBeChanged);
}
} else {
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, null, canPartitaMagBeChanged);
}
}
private void dispatchOrdineRowOnPostBatchLotSelection(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, MtbColr scannedMtbColr, boolean canPartitaMagBeChanged) {
BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd();
@@ -783,14 +860,6 @@ public class SpedizioneViewModel {
Date dataScad = null;
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr scannedMtbColr = pickingObjectDTO.getTempPickData() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (refMtbColt == null && pickingObjectDTO.getMtbColts() != null && pickingObjectDTO.getMtbColts().size() == 1) {
refMtbColt = pickingObjectDTO.getMtbColts().get(0);
}
@@ -808,7 +877,7 @@ public class SpedizioneViewModel {
if (optionalMtbColr.isPresent()) refMtbColr = optionalMtbColr.get();
}
MtbColr mtbColrToUse = refMtbColr != null ? refMtbColr : scannedMtbColr;
MtbColr mtbColrToUse = scannedMtbColr != null ? scannedMtbColr : refMtbColr;
if (mtbColrToUse != null) {
if (pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) {
@@ -897,7 +966,9 @@ public class SpedizioneViewModel {
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
null, null, null,
mUseQtaOrd ? numCnfDaPrelevare : null,
mUseQtaOrd ? qtaCnfDaPrelevare : null,
mUseQtaOrd ? qtaColDaPrelevare : null,
qtaDaEvadere,
numCnfDaEvadere,
qtaCnfDaEvadere,
@@ -910,6 +981,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
mCanOverflowOrderQuantity,
canPartitaMagBeChanged,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
finalRefMtbColt,
@@ -922,7 +994,6 @@ public class SpedizioneViewModel {
});
}
public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) {
PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
@@ -1002,6 +1073,12 @@ public class SpedizioneViewModel {
if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) {
numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
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);
@@ -1043,6 +1120,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
mCanOverflowOrderQuantity,
true,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
finalRefMtbColt,
@@ -1179,6 +1257,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
mCanOverflowOrderQuantity,
false,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveEditedRow(mtbColrToEdit,
pickedQuantityDTO.getNumCnf(),
@@ -1440,12 +1519,17 @@ public class SpedizioneViewModel {
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)
.setPesoLordoKg(null)
.setPesoNettoKg(null);
if (mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
} else {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setRiga(null)
.setPesoLordoKg(null)
.setPesoNettoKg(null);
}
mtbColt.getMtbColr().add(mtbColr);
@@ -1516,7 +1600,7 @@ public class SpedizioneViewModel {
} else {
distribuisciLU(mtbColts -> {
if(this.mIsNewLU) {
if (this.mIsNewLU) {
this.sendLUPositionChangeRequest((shouldChangePosition, mtbDepoPosizione) -> {
if (shouldChangePosition) {
@@ -1570,7 +1654,8 @@ public class SpedizioneViewModel {
IOrdiniVendita ordiniVendita = ClassRouter.getInstance(ClassRouter.PATH.ORDINI_VENDITA);
ordiniVendita.distribuisciCollo(cloneMtbColt, mTestateOrdini, mtbColts -> {
mColliMagazzinoRESTConsumer.getMultipleByTestate(mtbColts, false, onComplete, this::sendError);
mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(mtbColts, onComplete, this::sendError);
// mColliMagazzinoRESTConsumer.getMultipleByTestate(mtbColts, false, onComplete, this::sendError);
}, this::sendError);
}
@@ -1677,7 +1762,7 @@ public class SpedizioneViewModel {
this.mCurrentMtbColt = null;
if(mEnableQuantityReset) {
if (mEnableQuantityReset) {
for (PickingObjectDTO pickingObjectDTO : mPickingList.getValue()) {
List<MtbColr> withdrawMtbColrList = pickingObjectDTO.getWithdrawMtbColrs();
@@ -1834,10 +1919,13 @@ public class SpedizioneViewModel {
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);
void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete);
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import dagger.Subcomponent;
@Subcomponent
public interface UltimeConsegneClienteComponent {
@Subcomponent.Factory
interface Factory{
UltimeConsegneClienteComponent create();
}
void inject(UltimeConsegneClienteFragment ultimeConsegneClienteFragment);
}

View File

@@ -7,38 +7,62 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
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.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
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.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel.UltimeConsegneClienteViewModel;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
public class UltimeConsegneClienteFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
public class UltimeConsegneClienteFragment extends BaseFragment implements UltimeConsegneClienteViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment {
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private ElevatedToolbar mToolbar;
private UltimeConsegneClienteViewModel mViewModel;
private int barcodeScannerIstanceID = -1;
private final ObservableArrayList<DocumentoResoDTO> mDocumentiMutableData = new ObservableArrayList<>();
@Inject
UltimeConsegneClienteViewModel mViewModel;
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
private FragmentMainUltimeConsegneClienteBinding mBindings;
public UltimeConsegneClienteFragment() {
// Required empty public constructor
}
public static UltimeConsegneClienteFragment newInstance() {
UltimeConsegneClienteFragment fragment = new UltimeConsegneClienteFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
return new UltimeConsegneClienteFragment();
}
@@ -46,21 +70,158 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FragmentMainUltimeConsegneClienteBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false);
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false);
mViewModel = new UltimeConsegneClienteViewModel(getActivity(), mBinding);
MainApplication.appComponent
.ultimeConsegneClienteComponent()
.create()
.inject(this);
mBinding.setViewmodel(mViewModel);
mViewModel.setListener(this);
mToolbar.setRecyclerView(mBinding.recyclerView);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
// this.initBarcodeReader();
// Inflate the layout for this fragment
return mBinding.getRoot();
return mBindings.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep);
this.mBindings.mainFab.hide();
this.mBindings.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
openFilterDialog();
}
public void openFilterDialog() {
this.mViewModel.loadCodAnagClienti(gtbAnags -> {
DialogUltimeConsegneFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
});
}
private void initRecyclerView() {
UltimeConsegneMainListAdapter mAdapter =
new UltimeConsegneMainListAdapter(getActivity(), mDocumentiMutableData);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mAdapter.setEmptyView(mBindings.emptyView);
mBindings.recyclerView.setHasFixedSize(true);
mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mBindings.recyclerView.setAdapter(mAdapter);
// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView);
if(mToolbar != null)
mToolbar.setRecyclerView(mBindings.recyclerView);
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
});
};
private void refreshList(List<DocumentoResoDTO> documentList) {
this.mDocumentiMutableData.clear();
this.mDocumentiMutableData.addAll(sort(documentList));
}
private void refreshItems() {
this.openProgress();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(this.mViewModel.getGtbAnagClienti().getValue())
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if (singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
this.mViewModel.loadConsegneClienti(currentCodAnagFilter,
null,
-1,
548
);
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
return sortedDataset;
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if (dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if (selectedOrders != null && selectedOrders.size() > 0) {
mBindings.mainFab.show();
} else {
mBindings.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mDocumentiMutableData)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1);
}
@Override
public void onDestroy() {
for(Runnable onPreDestroy : mOnPreDestroyList) {
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
@@ -78,11 +239,30 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr
@Override
public void onFilterClick() {
mViewModel.openFilterDialog();
openFilterDialog();
}
@Override
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
@Module(subcomponents = UltimeConsegneClienteComponent.class)
public class UltimeConsegneClienteModule {
@Singleton
@Provides
UltimeConsegneClienteRESTConsumer providesUltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new UltimeConsegneClienteRESTConsumer(systemRESTConsumer);
}
@Provides
UltimeConsegneClienteViewModel providesUltimeConsegneClienteViewModel(
UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new UltimeConsegneClienteViewModel(ultimeConsegneClienteRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@@ -0,0 +1,181 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
public class UltimeConsegneClienteViewModel {
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
private final UltimeConsegneClienteRESTConsumer mUltimeConsegneClienteRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private Listener mListener;
private String mCodMdep;
@Inject
public UltimeConsegneClienteViewModel(
UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mUltimeConsegneClienteRESTConsumer = ultimeConsegneClienteRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
public void init(String codMdep) {
this.mCodMdep = codMdep;
}
public void loadCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete) {
this.sendOnLoadingStarted();
this.mUltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
mGtbAnagClienti.postValue(gtbAnags);
this.sendOnLoadingEnded();
onComplete.run(gtbAnags);
}, this::sendError);
}
public void loadConsegneClienti(String codAnag, String codMart, int limitDocsForCli, int limitDays) {
this.sendOnLoadingStarted();
this.mUltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(mCodMdep, codAnag, codMart, limitDocsForCli, limitDays, documentList -> {
this.mDocuments.postValue(documentList);
this.sendOnLoadingEnded();
}, this::sendError);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.sendOnLoadingStarted();
RunnableArgs<List<OrdiniUscitaElencoDTO>> onBarcodeScanComplete = orderList -> {
onComplete.run();
this.sendOnLoadingEnded();
};
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
} else {
onComplete.run();
}
}
private void executeEtichettaLU(String SSCC, RunnableArgs<List<OrdiniUscitaElencoDTO>> onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
// if(mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
// //GET BY COMMESSA COLLO
// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> {
//
// if(orderList != null && orderList.size() > 0) {
// List<Integer> numOrds = Stream.of(orderList)
// .map(DtbOrdt::getNumOrd)
// .toList();
//
// List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
// .filter(x -> numOrds.contains(x.getNumOrd())).toList();
//
// onComplete.run(filteredOrders);
// } else {
// this.sendError(new NoOrderFoundException());
// }
//
// }, this::sendError);
//
// } else {
// this.sendError(new InvalidLUGestioneException(GestioneEnum.VENDITA));
// }
//
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgs<List<OrdiniUscitaElencoDTO>> onComplete) {
this.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.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
return mGtbAnagClienti;
}
public MutableLiveData<List<DocumentoResoDTO>> getDocuments() {
return mDocuments;
}
public UltimeConsegneClienteViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
}
}

View File

@@ -1,44 +1,31 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel;
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListHeaderBinding;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListSingleItemBinding;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<UltimeConsegneMainListAdapter.SubheaderHolder, UltimeConsegneMainListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
public class UltimeConsegneMainListAdapter extends ExtendedSectionedRecyclerView<DocumentoResoDTO, UltimeConsegneMainListAdapter.SubheaderHolder, UltimeConsegneMainListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<DocumentoResoDTO> mDataset;
private ArrayList<String> mSectionTitleItems;
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
@Override
public String getSectionTitle(int position) {
return mSectionTitleItems.get(position);
}
static class SubheaderHolder extends RecyclerView.ViewHolder {
@@ -65,12 +52,9 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<
public UltimeConsegneMainListAdapter(Context context, ArrayList<DocumentoResoDTO> dataset) {
super();
public UltimeConsegneMainListAdapter(Context context, ObservableArrayList<DocumentoResoDTO> mutableDataSet) {
super(mutableDataSet);
this.mContext = context;
this.mDataset = new ArrayList<>();
updateItems(sort(dataset));
}
@@ -146,45 +130,6 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<
return false;
}
@Override
public int getItemSize() {
return this.mDataset.size();
}
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
mDataset.clear();
mDataset.addAll(sort(updatedDataset));
notifyDataSetChanged();
notifyDataChanged();
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
this.mSectionTitleItems = new ArrayList<>();
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
Stream.of(sortedDataset)
.map(DocumentoResoDTO::getRagSoc)
.distinct()
.forEach(x -> {
this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
long count = Stream.of(dataset)
.filter(y -> y.getRagSoc().equalsIgnoreCase(x))
.count();
for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
});
return sortedDataset;
}
public void setOnSelectionChanged(RunnableArgs<DocumentoResoDTO> mSelectionChanged) {
this.mOnSelectionChanged = mSelectionChanged;

View File

@@ -8,6 +8,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
@@ -20,65 +22,61 @@ import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
@Singleton
public class UltimeConsegneClienteRESTConsumer {
public static void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
private final SystemRESTConsumer systemRESTConsumer;
public UltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.systemRESTConsumer = systemRESTConsumer;
}
public void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
"FROM gtb_anag " +
"INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " +
"WHERE flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
@Override
public void onSuccess(ArrayList<GtbAnag> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {
}.getType();
systemRESTConsumer.<ArrayList<GtbAnag>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT consegne.*, " +
" rag_soc," +
" dtb_doct.gestione " +
"FROM WMS_GetUltimeConsegneClienti(" +
UtilityDB.valueToString(limitConsegnePerCli) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " +
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " +
"INNER JOIN dtb_doct ON consegne.num_doc = dtb_doct.num_doc AND consegne.data_doc = dtb_doct.data_doc AND consegne.cod_anag = dtb_doct.cod_anag AND consegne.cod_dtip = dtb_doct.cod_dtip AND consegne.ser_doc = dtb_doct.ser_doc " +
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
"ORDER BY rag_soc, " +
" counter_consegna ";
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DocumentoResoDTO>>() {
@Override
public void onSuccess(ArrayList<DocumentoResoDTO> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
}.getType();
systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void loadDocRowFromConsegna(List<DocumentoResoDTO> consegne, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> filterCond = new ArrayList<>();
for(int i = 0; i < consegne.size(); i++) {
for (int i = 0; i < consegne.size(); i++) {
HashMap<String, Object> filter = new HashMap<>();
filter.put("dtb_docr.data_doc", consegne.get(i).getDataDocD());
@@ -172,17 +170,18 @@ public class UltimeConsegneClienteRESTConsumer {
" (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL) AND " +
" dtb_docr.[qta_doc] - ISNULL(mtb_colr.qta_col, 0) > 0 AND" +
" ( " +
UtilityQuery.concatFieldListInWhereCond(filterCond) +
UtilityQuery.concatFieldListInWhereCond(filterCond) +
" ) " +
"ORDER BY cod_mart";
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {}.getType();
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {
}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
@Override
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
if(values != null && values.size() > 0){
if (values != null && values.size() > 0) {
List<String> codMarts = Stream.of(values)
.map(DtbDocr::getCodMart)
.withoutNulls()
@@ -191,7 +190,7 @@ public class UltimeConsegneClienteRESTConsumer {
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
if (arts != null && arts.size() > 0) {
for (DtbDocr value : values) {
MtbAart foundMtbAart = null;
@@ -199,7 +198,7 @@ public class UltimeConsegneClienteRESTConsumer {
List<MtbAart> mtbAartStream = Stream.of(arts)
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
if(mtbAartStream != null && mtbAartStream.size() > 0){
if (mtbAartStream != null && mtbAartStream.size() > 0) {
foundMtbAart = mtbAartStream.get(0);
}
@@ -207,19 +206,19 @@ public class UltimeConsegneClienteRESTConsumer {
}
if(onComplete != null) onComplete.run(values);
if (onComplete != null) onComplete.run(values);
}
}, onFailed);
} else {
if(onComplete != null) onComplete.run(values);
if (onComplete != null) onComplete.run(values);
}
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
if (onFailed != null) onFailed.run(ex);
}
});
}

View File

@@ -1,146 +0,0 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
public class UltimeConsegneClienteViewModel {
private Context mContext;
private FragmentMainUltimeConsegneClienteBinding mBinding;
private UltimeConsegneMainListAdapter mAdapter;
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private List<GtbAnag> mAvailableGtbAnags = null;
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimeConsegneClienteViewModel(Context context, FragmentMainUltimeConsegneClienteBinding binding) {
this.mContext = context;
this.mBinding = binding;
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
openFilterDialog();
}
public void openFilterDialog() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
UltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
mAvailableGtbAnags = gtbAnags;
progressDialog.dismiss();
DialogUltimeConsegneFiltroAvanzato.make(mContext, gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
mAdapter = new UltimeConsegneMainListAdapter(mContext, dataset);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mBinding.recyclerView.setHasFixedSize(true);
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mBinding.recyclerView.setAdapter(mAdapter);
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
}
private void refreshItems(){
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if(singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
currentCodAnagFilter,
null,
null,
548,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(this.mItems != null) mRenderedItems.addAll(this.mItems);
mAdapter.updateItems(mRenderedItems);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.mainFab.show();
}
else {
mBinding.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mItems)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1);
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore;
import dagger.Subcomponent;
@Subcomponent
public interface UltimiArriviFornitoreComponent {
@Subcomponent.Factory
interface Factory{
UltimiArriviFornitoreComponent create();
}
void inject(UltimiArriviFornitoreFragment ultimiArriviFornitoreFragment);
}

View File

@@ -7,41 +7,70 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
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.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
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.model.GtbAnag;
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.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
/**
* A simple {@link Fragment} subclass.
* A simple {@link BaseFragment} subclass.
*/
public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, IFilterableFragment, UltimiArriviFornitoreViewModel.Listener {
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private ElevatedToolbar mToolbar;
private UltimiArriviFornitoreViewModel mViewModel;
private int barcodeScannerIstanceID = -1;
private final ObservableArrayList<DocumentoResoDTO> mDocumentiMutableData = new ObservableArrayList<>();
@Inject
UltimiArriviFornitoreViewModel mViewModel;
private FragmentUltimiArriviFornitoreBinding mBindings;
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimiArriviFornitoreFragment() {
// Required empty public constructor
}
public static UltimiArriviFornitoreFragment newInstance() {
UltimiArriviFornitoreFragment fragment = new UltimiArriviFornitoreFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
return new UltimiArriviFornitoreFragment();
}
@@ -49,21 +78,154 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FragmentUltimiArriviFornitoreBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false);
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false);
mViewModel = new UltimiArriviFornitoreViewModel(getActivity(), mBinding);
MainApplication.appComponent
.ultimiArriviFornitoreComponent()
.create()
.inject(this);
mBinding.setViewmodel(mViewModel);
mViewModel.setListener(this);
mToolbar.setRecyclerView(mBinding.recyclerView);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
this.initBarcodeReader();
// Inflate the layout for this fragment
return mBinding.getRoot();
return mBindings.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep);
this.mBindings.mainFab.hide();
this.mBindings.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
openFilterDialog();
}
public void openFilterDialog() {
this.mViewModel.loadCodAnagFornitori(gtbAnags -> {
DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
filterItems(null);
}).show();
});
}
private void initRecyclerView() {
UltimiArriviFornitoreListAdapter mAdapter =
new UltimiArriviFornitoreListAdapter(getActivity(), mDocumentiMutableData);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mAdapter.setEmptyView(mBindings.emptyView);
mBindings.recyclerView.setHasFixedSize(true);
mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mBindings.recyclerView.setAdapter(mAdapter);
// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView);
if (mToolbar != null)
mToolbar.setRecyclerView(mBindings.recyclerView);
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
});
};
private void refreshList(List<DocumentoResoDTO> documentList) {
this.mDocumentiMutableData.clear();
this.mDocumentiMutableData.addAll(sort(documentList));
}
private void filterItems(List<MtbAart> filteredMtbAarts) {
this.openProgress();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mViewModel.getGtbAnagClienti().getValue())
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if (singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
this.mViewModel.loadArriviFornitori(currentCodAnagFilter,
filteredMtbAarts,
-1,
365);
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
List<DocumentoResoDTO> items = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
return items;
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if (dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if (selectedOrders != null && selectedOrders.size() > 0) {
mBindings.mainFab.show();
} else {
mBindings.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mDocumentiMutableData)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
}
@Override
public void onDestroy() {
for(Runnable onPreDestroy : mOnPreDestroyList) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
@@ -80,12 +242,9 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
}
@Override
public void onFilterClick() {
mViewModel.openFilterDialog();
openFilterDialog();
}
@@ -93,4 +252,39 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
@Override
public void onMtbColtScanned(MtbColt scannedMtbColt) {
DialogChooseArtsFromListaArts
.make(getActivity(), scannedMtbColt.getMtbColr(), items -> {
List<MtbAart> mtbAarts = Stream.of(items)
.map(MtbColr::getMtbAart)
.toList();
filterItems(mtbAarts);
}, null);
}
}

View File

@@ -0,0 +1,30 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
@Module(subcomponents = UltimiArriviFornitoreComponent.class)
public class UltimiArriviFornitoreModule {
@Singleton
@Provides
UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new UltimiArriviFornitoreRESTConsumer(systemRESTConsumer);
}
@Provides
UltimiArriviFornitoreViewModel providesUltimiArriviFornitoreViewModel(
UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new UltimiArriviFornitoreViewModel(ultimiArriviFornitoreRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@@ -6,38 +6,29 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapter<UltimiArriviFornitoreListAdapter.SubheaderHolder, UltimiArriviFornitoreListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
public class UltimiArriviFornitoreListAdapter extends ExtendedSectionedRecyclerView<DocumentoResoDTO,
UltimiArriviFornitoreListAdapter.SubheaderHolder,
UltimiArriviFornitoreListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<DocumentoResoDTO> mDataset;
private ArrayList<String> mSectionTitleItems;
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
@Override
public String getSectionTitle(int position) {
return mSectionTitleItems.get(position);
}
static class SubheaderHolder extends RecyclerView.ViewHolder {
@@ -64,13 +55,9 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
public UltimiArriviFornitoreListAdapter(Context context, ArrayList<DocumentoResoDTO> dataset) {
super();
public UltimiArriviFornitoreListAdapter(Context context, ObservableArrayList<DocumentoResoDTO> mutableDataSet) {
super(mutableDataSet);
this.mContext = context;
this.mDataset = new ArrayList<>();
this.mSectionTitleItems = new ArrayList<>();
mDataset.addAll(sort(dataset));
}
@@ -152,7 +139,7 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
mDataset.clear();
mDataset.addAll(sort(updatedDataset));
mDataset.addAll(updatedDataset);
notifyDataSetChanged();
notifyDataChanged();
}
@@ -163,28 +150,5 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
List<DocumentoResoDTO> items = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
Stream.of(items)
.map(DocumentoResoDTO::getRagSoc)
.distinct()
.forEach(x -> {
this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
long count = Stream.of(dataset)
.filter(y -> y.getRagSoc().equalsIgnoreCase(x))
.count();
for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
});
return items;
}
}

View File

@@ -1,154 +1,192 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import androidx.lifecycle.MutableLiveData;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
public class UltimiArriviFornitoreViewModel {
private Context mContext;
private FragmentUltimiArriviFornitoreBinding mBinding;
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private List<GtbAnag> mAvailableGtbAnags = null;
private Listener mListener;
private UltimiArriviFornitoreListAdapter mAdapter;
private String mCodMdep;
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimiArriviFornitoreViewModel(Context context, FragmentUltimiArriviFornitoreBinding binding) {
this.mContext = context;
this.mBinding = binding;
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
openFilterDialog();
@Inject
public UltimiArriviFornitoreViewModel(
UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mUltimiArriviFornitoreRESTConsumer = ultimiArriviFornitoreRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
mAdapter = new UltimiArriviFornitoreListAdapter(mContext, dataset);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mBinding.recyclerView.setHasFixedSize(true);
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mBinding.recyclerView.setAdapter(mAdapter);
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
public void init(String codMdep) {
this.mCodMdep = codMdep;
}
public void openFilterDialog() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
public void loadCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete) {
this.sendOnLoadingStarted();
UltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> {
mAvailableGtbAnags = gtbAnags;
progressDialog.dismiss();
this.mUltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> {
mGtbAnagClienti.postValue(gtbAnags);
this.sendOnLoadingEnded();
DialogUltimiArriviFornitoreFiltroAvanzato.make(mContext, mAvailableGtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
onComplete.run(gtbAnags);
}, this::sendError);
}
public void loadArriviFornitori(String codAnag, List<MtbAart> mtbAarts, int limitDocsForCli, int limitDays) {
this.sendOnLoadingStarted();
this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays, documentList -> {
this.mDocuments.postValue(documentList);
this.sendOnLoadingEnded();
}, this::sendError);
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
}
this.sendOnLoadingStarted();
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mItems)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
Runnable onBarcodeScanComplete = () -> {
onComplete.run();
this.sendOnLoadingEnded();
};
private void refreshItems(){
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if(singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
} else {
onComplete.run();
}
UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
currentCodAnagFilter,
null,
null,
365,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(this.mItems != null) mRenderedItems.addAll(this.mItems);
mAdapter.updateItems(mRenderedItems);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if(mtbColt.getSegno() > 0) {
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.mainFab.show();
}
else {
mBinding.mainFab.hide();
}
this.sendOnMtbColtScanned(mtbColt);
// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> {
//
// if(orderList != null && orderList.size() > 0) {
// List<Integer> numOrds = Stream.of(orderList)
// .map(DtbOrdt::getNumOrd)
// .toList();
//
// List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
// .filter(x -> numOrds.contains(x.getNumOrd())).toList();
//
// onComplete.run(filteredOrders);
// } else {
// this.sendError(new NoOrderFoundException());
// }
//
// }, this::sendError);
} else {
this.sendError(new InvalidLUException());
}
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.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.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
return mGtbAnagClienti;
}
public MutableLiveData<List<DocumentoResoDTO>> getDocuments() {
return mDocuments;
}
public UltimiArriviFornitoreViewModel setListener(UltimiArriviFornitoreViewModel.Listener listener) {
this.mListener = listener;
return this;
}
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 sendOnMtbColtScanned(MtbColt scannedMtbColt) {
if (this.mListener != null) mListener.onMtbColtScanned(scannedMtbColt);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void onMtbColtScanned(MtbColt scannedMtbColt);
}
}

View File

@@ -1,49 +1,62 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDB;
@Singleton
public class UltimiArriviFornitoreRESTConsumer {
public static void getAvailableCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
private final SystemRESTConsumer systemRESTConsumer;
public UltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.systemRESTConsumer = systemRESTConsumer;
}
public void getAvailableCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
"FROM gtb_anag " +
"INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " +
"WHERE flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
@Override
public void onSuccess(ArrayList<GtbAnag> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {
}.getType();
this.systemRESTConsumer.<ArrayList<GtbAnag>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void getUltimeConsegneFornitori(String codMdep, String codAnag, List<MtbAart> mtbAarts, int limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String codMarts = null;
if (mtbAarts != null && mtbAarts.size() > 0) {
codMarts = StringUtils.join(Stream.of(mtbAarts)
.map(MtbAart::getCodMart)
.toList(), "|");
}
String sql = "SELECT consegne.*, " +
" rag_soc " +
"FROM WMS_GetUltimeConsegneFornitori(" +
UtilityDB.valueToString(limitConsegnePerCli) + ", " +
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMarts) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " +
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
@@ -51,17 +64,12 @@ public class UltimiArriviFornitoreRESTConsumer {
" counter_consegna ";
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DocumentoResoDTO>>() {
@Override
public void onSuccess(ArrayList<DocumentoResoDTO> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
}.getType();
this.systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}

View File

@@ -0,0 +1,16 @@
package it.integry.integrywmsnative.gest.versamento_merce;
import dagger.Subcomponent;
@Subcomponent
public interface VersamentoMerceComponent {
@Subcomponent.Factory
interface Factory {
VersamentoMerceComponent create();
}
void inject(VersamentoMerceFragment versamentoMerceFragment);
}

View File

@@ -2,90 +2,143 @@ package it.integry.integrywmsnative.gest.versamento_merce;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
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.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding;
import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper;
import it.integry.integrywmsnative.gest.versamento_merce.viewmodel.VersamentoMerceViewModel;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
public class VersamentoMerceFragment extends Fragment implements ITitledFragment {
public class VersamentoMerceFragment extends BaseFragment implements ITitledFragment, VersamentoMerceViewModel.Listener {
private FragmentMainVersamentoMerceBinding mBinding;
private VersamentoMerceViewModel mVersamentoMerceViewModel;
private VersamentoMerceHelper mHelper;
@Inject
VersamentoMerceViewModel mViewModel;
private FragmentMainVersamentoMerceBinding mBindings = null;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private int barcodeScannerIstanceID = -1;
public VersamentoMerceFragment() {
// Required empty public constructor
}
public static VersamentoMerceFragment newInstance() {
VersamentoMerceFragment fragment = new VersamentoMerceFragment();
return fragment;
return new VersamentoMerceFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mVersamentoMerceViewModel = new VersamentoMerceViewModel();
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(mVersamentoMerceViewModel.onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_versamento_merce, container, false);
mBinding.setView(this);
mBinding.setViewmodel(mVersamentoMerceViewModel);
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main_versamento_merce, container, false);
init();
return mBinding.getRoot();
}
MainApplication.appComponent
.versamentoMerceComponent()
.create()
.inject(this);
private void init() {
mHelper = new VersamentoMerceHelper(getActivity());
mVersamentoMerceViewModel.init(getActivity(), mBinding, mHelper, () -> {
((IPoppableActivity) getActivity()).pop();
});
mViewModel.setListener(this);
mVersamentoMerceViewModel.openLU();
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initBarcodeReader();
this.openLU();
return mBindings.getRoot();
}
@Override
public void onDestroy() {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for(Runnable onPreDestroy : mOnPreDestroyList) {
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
}
public void openLU() {
DialogScanOrCreateLUView.newInstance(true, false, true, false, (mtbColt, created) -> {
if (mtbColt == null) {
((IPoppableActivity) getActivity()).pop();
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)) {
this.mViewModel.getCurrentMtbColt().postValue(mtbColt);
} else if (mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) {
this.mViewModel.getCurrentMtbColt().postValue(mtbColt);
} else {
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU)
.show(getActivity().getSupportFragmentManager(), "tag");
}
}).show(getActivity().getSupportFragmentManager(), "tag");
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
});
};
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.versamento_merce_fragment_title).toString());
@@ -95,4 +148,92 @@ public class VersamentoMerceFragment extends Fragment implements ITitledFragment
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskLivelloPosizione.make(getActivity(), posizione, false, onComplete, this::onError);
}
@Override
public void onSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete) {
DialogSimpleMessageView.makeWarningDialog(Html.fromHtml("Stai spostando una UL dal deposito <b>" + sourceCodMdep + "</b> al deposito <b>" + destinationCodMdep + "</b>"),
null,
() -> onComplete.run(true),
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
DialogChooseArtsFromListaArts.make(getActivity(), mtbColrList, onComplete, onAbort);
}
@Override
public void onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgs<PickedQuantityDTO> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalQtaAvailable(totalQtaAvailable)
.setTotalNumCnfAvailable(totalNumCnfAvailable)
.setQtaCnfAvailable(qtaCnfAvailable)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanPartitaMagBeChanged(canBatchLotBeChanged)
.setCanLUBeClosed(false);
DialogInputQuantityV2View
.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);
}, this::onLoadingEnded)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onDataSaved() {
DialogCommon.showDataSaved(getActivity(), () -> {
((IPoppableActivity) getActivity()).pop();
});
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
}

View File

@@ -0,0 +1,17 @@
package it.integry.integrywmsnative.gest.versamento_merce;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
@Module(subcomponents = VersamentoMerceComponent.class)
public class VersamentoMerceModule {
@Provides
VersamentoMerceViewModel providesVersamentoMerceViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PosizioniRESTConsumer posizioniRESTConsumer) {
return new VersamentoMerceViewModel(colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer);
}
}

View File

@@ -0,0 +1,361 @@
package it.integry.integrywmsnative.gest.versamento_merce;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException;
import it.integry.integrywmsnative.core.exception.NoArtsInLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class VersamentoMerceViewModel {
private final MutableLiveData<MtbColt> mCurrentMtbColt = new MutableLiveData<>();
private Listener mListener;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final PosizioniRESTConsumer mPosizioniRESTConsumer;
@Inject
public VersamentoMerceViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PosizioniRESTConsumer posizioniRESTConsumer) {
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mPosizioniRESTConsumer = posizioniRESTConsumer;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
new Thread(() -> {
if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO, false)) {
this.executeEtichettaPosizione(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), true, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else {
onComplete.run();
}
}).start();
}
private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
.filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue()))
.single();
if (foundPosizione.isFlagMonoCollo()) {
this.mPosizioniRESTConsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> {
if (mtbColtList == null || mtbColtList.size() == 0) {
this.sendError(new NoLUFoundException());
} else if (mtbColtList.size() == 1) {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
onComplete.run();
//TAKE HERE
pickMerceULtoUL(mtbColt);
}, this::sendError);
} else {
this.sendError(new TooManyLUFoundInMonoLUPositionException());
}
}, this::sendError);
} else {
if (!UtilityString.equalsIgnoreCase(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep())) {
this.sendOnSpostamentoTraDepConfirmRequired(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep(), canContinue -> {
if (canContinue) {
updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione));
} else {
onComplete.run();
}
});
} else {
updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione));
}
}
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onBarcodeScanComplete) {
this.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.executeEtichettaLU(ean128Model.Sscc, false, onBarcodeScanComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
onBarcodeScanComplete.run();
}
}, this::sendError);
}
private void executeEtichettaLU(String sscc, boolean isAnonima, Runnable onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
if (mtbColt == null && !isAnonima) {
this.sendError(new NoLUFoundException());
} else if (mtbColt != null && (/*mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO ||*/ mtbColt.getGestioneEnum() == GestioneEnum.VENDITA)) {
this.sendError(new InvalidLUGestioneException(GestioneEnum.VENDITA));
} else {
if (mtbColt == null) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
onComplete.run();
pickMerceULtoUL(mtbColtAnonimo);
}, this::sendError);
} else {
onComplete.run();
pickMerceULtoUL(mtbColt);
}
}
}, this::sendError);
}
private void pickMerceULtoUL(MtbColt destMtbColt) {
MtbColt sourceMtbColt = mCurrentMtbColt.getValue();
if (!UtilityString.equalsIgnoreCase(sourceMtbColt.getCodMdep(), destMtbColt.getCodMdep())) {
this.sendError(new Exception("Impossibile spostare la merce tra UL di due depositi differenti"));
return;
}
List<MtbColr> mtbColrsToPick = Stream.of(sourceMtbColt.getMtbColr())
.filter(x -> x.getQtaCol().floatValue() > 0)
.toList();
if (mtbColrsToPick.size() == 0) {
this.sendError(new NoArtsInLUException());
return;
}
this.sendOnArtsChooseRequired(mtbColrsToPick, pickedAarts -> {
List<MtbColr> destNewMtbColr = new ArrayList<>();
askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> {
MtbColt clonedSourceTestata = (MtbColt) sourceMtbColt.clone();
clonedSourceTestata.setMtbColr(new ObservableArrayList<>());
clonedSourceTestata.getMtbColr().addAll(destNewMtbColr);
this.sendOnLoadingStarted();
this.mColliMagazzinoRESTConsumer.spostaArtsTraUL(
clonedSourceTestata,
destMtbColt,
this::sendOnDataSaved,
this::sendError
);
}, this::sendOnLoadingEnded);
}, this::sendOnLoadingEnded);
}
private void askQuantities(Iterator<MtbColr> sourceMtbColrs, List<MtbColr> destMtbColr, Runnable onComplete, Runnable onAbort) {
if (sourceMtbColrs.hasNext()) {
askSingleQuantity(sourceMtbColrs.next(), mtbColr -> {
destMtbColr.add(mtbColr);
askQuantities(sourceMtbColrs, destMtbColr, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void askSingleQuantity(MtbColr mtbColr, RunnableArgs<MtbColr> onComplete, Runnable onAbort) {
this.sendOnItemDispatched(mtbColr.getMtbAart(),
mtbColr.getNumCnf(),
mtbColr.getQtaCnf(),
mtbColr.getQtaCol(),
mtbColr.getQtaCol(),
mtbColr.getNumCnf(),
mtbColr.getQtaCnf(),
mtbColr.getPartitaMag(),
mtbColr.getDataScadPartitaD(),
false,
false,
pickedQuantity -> {
mtbColr
.setQtaCol(pickedQuantity.getQtaTot())
.setQtaCnf(pickedQuantity.getQtaCnf())
.setNumCnf(pickedQuantity.getNumCnf())
.setDatetimeRow(UtilityDate.getDateInstance());
onComplete.run(mtbColr);
});
}
public void updatePosizione(MtbDepoPosizione mtbDepoPosizione, boolean shouldAskLivello) {
if (shouldAskLivello) {
this.sendOnLivelloPosizioneRequired(mtbDepoPosizione, newPosizione -> {
if (newPosizione == null) {
updatePosizione(mtbDepoPosizione, shouldAskLivello);
} else {
updatePosizione(newPosizione, false);
}
});
} else {
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.changePosizione(mCurrentMtbColt.getValue(), mtbDepoPosizione, () -> {
this.sendOnLoadingEnded();
this.sendOnDataSaved();
}, this::sendError);
}
}
public MutableLiveData<MtbColt> getCurrentMtbColt() {
return mCurrentMtbColt;
}
public VersamentoMerceViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
private void sendOnDataSaved() {
if (this.mListener != null) mListener.onDataSaved();
}
private void sendOnLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) {
if (this.mListener != null)
mListener.onLivelloPosizioneRequired(posizione, onComplete);
}
private void sendOnArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
if (this.mListener != null)
mListener.onArtsChooseRequired(mtbColrList, onComplete, onAbort);
}
private void sendOnSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete) {
if (this.mListener != null)
mListener.onSpostamentoTraDepConfirmRequired(sourceCodMdep, destinationCodMdep, onComplete);
}
private void sendOnItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgs<PickedQuantityDTO> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(
mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaAvailable,
totalNumCnfAvailable,
qtaCnfAvailable,
partitaMag,
dataScad,
canOverflowOrderQuantity,
canBatchLotBeChanged,
onComplete);
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete);
void onSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete);
void onArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort);
void onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgs<PickedQuantityDTO> onComplete);
void onDataSaved();
void onError(Exception ex);
}
}

View File

@@ -1,13 +0,0 @@
package it.integry.integrywmsnative.gest.versamento_merce.core;
import android.content.Context;
public class VersamentoMerceHelper {
private Context mContext;
public VersamentoMerceHelper(Context context) {
this.mContext = context;
}
}

View File

@@ -1,474 +0,0 @@
package it.integry.integrywmsnative.gest.versamento_merce.viewmodel;
import android.app.Dialog;
import android.text.Html;
import android.text.SpannableString;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.fragment.app.FragmentActivity;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.barcode_base_android_library.model.BarcodeType;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.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.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding;
import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper;
import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
public class VersamentoMerceViewModel {
private FragmentActivity mContext;
private FragmentMainVersamentoMerceBinding mBinding;
private VersamentoMerceHelper mHelper;
public ObservableField<MtbColt> mtbColt = new ObservableField<>();
private Runnable mOnVersamentoCompleted;
public void init(FragmentActivity context, FragmentMainVersamentoMerceBinding binding, VersamentoMerceHelper helper, Runnable onVersamentoCompleted) {
mContext = context;
mBinding = binding;
mHelper = helper;
mOnVersamentoCompleted = onVersamentoCompleted;
BarcodeManager.enable();
}
public void openLU() {
DialogScanOrCreateLU.make(mContext, true, false, true, false, (mtbColt, created) -> {
if (mtbColt == null) {
((IPoppableActivity) mContext).pop();
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)) {
setMtbColt(mtbColt);
} else if (mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) {
setMtbColt(mtbColt);
} else {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU).show();
}
}).show();
}
public void setMtbColt(MtbColt mtbColt) {
this.mtbColt.set(mtbColt);
}
public void resetMtbColt() {
this.mtbColt.set(null);
openLU();
}
public RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
if (UtilityBarcode.isEtichettaPosizione(data)) {
progressDialog.show();
this.executeEtichettaPosizione(data, progressDialog);
} else if (data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA) {
//searchArtInt(data.getStringValue());
} else if (UtilityBarcode.isEtichettaAnonima(data)) {
this.executeEtichettaLU(data.getStringValue(), true, progressDialog);
} else if (UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaEan128(data, progressDialog);
} else {
BarcodeManager.enable();
}
};
private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
.filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue()))
.single();
if (foundPosizione.isFlagMonoCollo()) {
PosizioniRESTConsumer.getBancaliInPosizioneStatic(foundPosizione, mtbColtList -> {
if (mtbColtList == null || mtbColtList.size() == 0) {
progressDialog.dismiss();
BarcodeManager.enable();
DialogCommon.showNoULFound(mContext, null);
} else if (mtbColtList.size() == 1) {
ColliMagazzinoRESTConsumer.getByTestataStatic(mtbColtList.get(0), true, false, mtbColt -> {
//TAKE HERE
pickMerceULtoUL(mtbColt, progressDialog);
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
} else {
progressDialog.dismiss();
BarcodeManager.enable();
showTooMuchULFound();
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
} else {
updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione), progressDialog);
}
}
private void showTooMuchULFound() {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)),
null, null).show();
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
BarcodeRESTConsumer.decodeEan128Static(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.executeEtichettaLU(ean128Model.Sscc, false, progressDialog);
} else {
DialogCommon.showNoULFound(mContext, null);
progressDialog.dismiss();
BarcodeManager.enable();
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
progressDialog.dismiss();
BarcodeManager.enable();
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaLU(String sscc, boolean isAnonima, Dialog progressDialog) {
ColliMagazzinoRESTConsumer.getBySSCCStatic(sscc, true, false, mtbColt -> {
if (mtbColt == null && !isAnonima) {
DialogCommon.showNoULFound(mContext, null);
BarcodeManager.enable();
progressDialog.dismiss();
} else if(mtbColt != null && (/*mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO ||*/ mtbColt.getGestioneEnum() == GestioneEnum.VENDITA)) {
showWrongGestioneUL();
BarcodeManager.enable();
progressDialog.dismiss();
} else {
if (mtbColt == null && isAnonima) {
ColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
pickMerceULtoUL(mtbColtAnonimo, progressDialog);
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
} else {
pickMerceULtoUL(mtbColt, progressDialog);
}
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
}
private void updatePosizione(MtbDepoPosizione mtbDepoPosizione, boolean shouldAskLivello, Dialog progressDialog) {
if (shouldAskLivello) {
DialogAskLivelloPosizione.make(mContext, mtbDepoPosizione, false, newPosizione -> {
if (newPosizione == null) {
updatePosizione(mtbDepoPosizione, shouldAskLivello, progressDialog);
} else {
updatePosizione(newPosizione, false, progressDialog);
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
} else {
ColliMagazzinoRESTConsumer.changePosizione(mtbColt.get(), mtbDepoPosizione, () -> {
progressDialog.dismiss();
BarcodeManager.enable();
DialogCommon.showDataSaved(mContext, mOnVersamentoCompleted);
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable();
});
}
}
private void pickMerceULtoUL(MtbColt destMtbColt, Dialog progressDialog) {
MtbColt sourceMtbColt = mtbColt.get();
List<MtbColr> mtbColrsToPick = Stream.of(mtbColt.get().getMtbColr())
.filter(x -> x.getQtaCol().floatValue() > 0)
.toList();
DialogChooseArtsFromListaArts.make(mContext, mtbColrsToPick, pickedAarts -> {
progressDialog.dismiss();
List<MtbColr> destNewMtbColr = new ArrayList<>();
askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> {
BarcodeManager.enable();
if (destNewMtbColr != null && destNewMtbColr.size() > 0) {
MtbColt clonedSourceTestata = (MtbColt) sourceMtbColt.clone();
MtbColt clonedDestTestata = (MtbColt) destMtbColt.clone();
ObservableArrayList<MtbColr> mtbColrSourceObservableField = new ObservableArrayList<>();
ObservableArrayList<MtbColr> mtbColrDestObservableField = new ObservableArrayList<>();
for (int i = 0; i < destNewMtbColr.size(); i++) {
MtbColr cloneMtbColr = (MtbColr) destNewMtbColr.get(i).clone();
boolean destroyMtbColrReferences = false;
//Se le gestioni sono uguali faccio uno storno sulla sorgente e non lavoro con
//i riferimenti
if ((sourceMtbColt.getGestioneEnum() == destMtbColt.getGestioneEnum() && sourceMtbColt.getGestioneEnum() == GestioneEnum.VENDITA) ||
(sourceMtbColt.getGestioneEnum() == GestioneEnum.VENDITA && sourceMtbColt.getSegno() == -1 && destMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE)) {
destroyMtbColrReferences = true;
MtbColr stornoSourceMtbColr = (MtbColr) destNewMtbColr.get(i).clone();
stornoSourceMtbColr
.setGestione((String) null)
.setNumCollo(null)
.setSerCollo(null)
.setDataCollo(null)
.setGestioneRif(null)
.setNumColloRif(null)
.setSerColloRif(null)
.setDataColloRif((String) null)
.setCausale(MtbColr.Causale.VERSAMENTO)
.setUtente(SettingsManager.i().getUser().getFullname())
.setQtaCol(stornoSourceMtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setNumCnf(stornoSourceMtbColr.getNumCnf().multiply(new BigDecimal(-1)));
mtbColrSourceObservableField.add(stornoSourceMtbColr);
}
if (!destroyMtbColrReferences) {
cloneMtbColr
.setGestioneRif(cloneMtbColr.getGestione())
.setSerColloRif(cloneMtbColr.getSerCollo())
.setNumColloRif(cloneMtbColr.getNumCollo())
.setDataColloRif(cloneMtbColr.getDataColloS());
}
if (sourceMtbColt.getGestioneEnum() == GestioneEnum.VENDITA && sourceMtbColt.getSegno() == +1) {
cloneMtbColr.setCodJcom(null);
}
cloneMtbColr
.setGestione((String) null)
.setSerCollo(null)
.setNumCollo(null)
.setDataCollo(null)
.setCausale(MtbColr.Causale.VERSAMENTO)
.setUtente(SettingsManager.i().getUser().getFullname());
mtbColrDestObservableField.add(cloneMtbColr);
}
clonedSourceTestata.setMtbColr(mtbColrSourceObservableField);
clonedDestTestata.setMtbColr(mtbColrDestObservableField);
saveLUs(clonedSourceTestata, clonedDestTestata);
}
}, () -> {
progressDialog.dismiss();
BarcodeManager.enable();
});
}, () -> {
progressDialog.dismiss();
BarcodeManager.enable();
}).show();
}
private void askQuantities(Iterator<MtbColr> sourceMtbColrs, List<MtbColr> destMtbColr, Runnable onComplete, Runnable onAbort) {
if (sourceMtbColrs.hasNext()) {
askSingleQuantity(sourceMtbColrs.next(), mtbColr -> {
destMtbColr.add(mtbColr);
askQuantities(sourceMtbColrs, destMtbColr, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void askSingleQuantity(MtbColr mtbColr, RunnableArgs<MtbColr> onComplete, Runnable onAbort) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbColr.getMtbAart())
.setInitialNumCnf(mtbColr.getNumCnf())
.setInitialQtaCnf(mtbColr.getQtaCnf())
.setInitialQtaTot(mtbColr.getQtaCol())
.setTotalQtaAvailable(mtbColr.getQtaCol())
.setTotalNumCnfAvailable(mtbColr.getNumCnf())
.setQtaCnfAvailable(mtbColr.getQtaCnf())
.setPartitaMag(mtbColr.getPartitaMag())
.setDataScad(mtbColr.getDataScadPartitaD())
.setCanOverflowOrderQuantity(false)
.setCanPartitaMagBeChanged(false)
.setCanLUBeClosed(false);
DialogInputQuantityV2View
.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);
mtbColr
.setQtaCol(resultDTO.getQtaTot())
.setQtaCnf(resultDTO.getQtaCnf())
.setNumCnf(resultDTO.getNumCnf())
.setDatetimeRow(UtilityDate.getDateInstance());
onComplete.run(mtbColr);
}, onAbort)
.show(mContext.getSupportFragmentManager(), "tag");
// DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
// .setBatchLot(mtbColr.getPartitaMag())
// .setDataScad(mtbColr.getDataScadPartitaD())
// .setMtbAart(mtbColr.getMtbAart())
// .setQtaTot(mtbColr.getQtaCol())
// .setQtaOrd(mtbColr.getQtaCol())
// .setQtaDaEvadere(new BigDecimal(-1))
// .setQtaEvasa(BigDecimal.ZERO)
// .setCanPartitaMagBeChanged(false)
// .setCanDataScadBeChanged(false)
// .setMaxQta(mtbColr.getQtaCol());
//
// DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> {
// mtbColr
// .setQtaCol(quantityDTO.qtaTot.getBigDecimal())
// .setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
// .setNumCnf(quantityDTO.numCnf.getBigDecimal())
// .setDatetimeRow(UtilityDate.getDateInstance());
//
// onComplete.run(mtbColr);
// }, onAbort).show();
}
private void askULVenditaConfirm(RunnableArgs<Boolean> callback) {
DialogSimpleMessageHelper.makeWarningDialog(
mContext,
new SpannableString(mContext.getResources().getString(R.string.lu_gest_v_loading_alert)),
null,
() -> callback.run(true),
() -> callback.run(false)).show();
}
private void showWrongGestioneUL() {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_V_not_accepted_message).toString())),
null, null).show();
}
private void saveLUs(MtbColt mtbColt1, MtbColt mtbColt2) {
ArrayList<MtbColt> mtbColts = new ArrayList<>();
mtbColts.add(mtbColt1);
mtbColts.add(mtbColt2);
for (MtbColt mtbColt : mtbColts) {
mtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
for (int i = 0; i < mtbColt.getMtbColr().size(); i++) {
mtbColt.getMtbColr().get(i)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
}
}
ColliMagazzinoRESTConsumer.saveColliStatic(mtbColts, value -> {
DialogCommon.showDataSaved(mContext, () -> {
mOnVersamentoCompleted.run();
});
}, ex -> {
UtilityExceptions.defaultException(mContext, ex);
});
}
}

View File

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

View File

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

View File

@@ -3,48 +3,55 @@ package it.integry.integrywmsnative.view.dialogs;
import android.content.Context;
import android.text.SpannableString;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class DialogCommon {
public static void showNoArtFoundDialog(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeWarningDialog(context,
new SpannableString(context.getResources().getText(R.string.no_result_from_barcode)),
null, onPositiveClick).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_result_from_barcode)),
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
public static void showNoULFound(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeWarningDialog(context,
new SpannableString(context.getResources().getText(R.string.no_lu_found_message)),
null, onPositiveClick).show();
DialogSimpleMessageView.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_lu_found_message)),
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
public static void showNoOrderFound(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeWarningDialog(context,
new SpannableString(context.getResources().getText(R.string.no_orders_found_message)),
null, onPositiveClick).show();
DialogSimpleMessageView.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_orders_found_message)),
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
;
}
public static void showDataSaved(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeSuccessDialog(
context,
context.getResources().getString(R.string.completed),
new SpannableString(context.getResources().getString(R.string.data_saved)),
null, onPositiveClick).show();
public static void showDataSaved(@NotNull FragmentActivity context, @Nullable Runnable onPositiveClick) {
context.runOnUiThread(() -> {
DialogSimpleMessageView.makeSuccessDialog(
context.getResources().getString(R.string.completed),
new SpannableString(context.getResources().getString(R.string.data_saved)),
null, onPositiveClick)
.show(context.getSupportFragmentManager(), "tag");
});
}
public static void showRestError(@NotNull Context context, Exception ex, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeErrorDialog(context,
new SpannableString(ex.getMessage()), null, onPositiveClick).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(ex.getMessage()), null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
}

View File

@@ -1,109 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.WindowManager;
import androidx.databinding.DataBindingUtil;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogAskClienteBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel;
public class DialogAskCliente {
private Context mContext;
private Dialog mDialog;
private DialogAskClienteBinding mBinding;
public static Dialog makeBase(final Context context, RunnableArgsss<DialogConsts.Results, VtbDest, String> onComplete) {
return new DialogAskCliente(context, onComplete).mDialog;
}
public DialogAskCliente(Context context, RunnableArgsss<DialogConsts.Results, VtbDest, String> onComplete) {
mContext = context;
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_cliente, null, false);
List<Map.Entry<Integer, Class>> views = new ArrayList<>();
views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page1, DialogAskCliente_Page1ViewModel.class));
views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page2, DialogAskCliente_Page2ViewModel.class));
DialogAskClienteAdapter adapter = new DialogAskClienteAdapter(mContext, views);
mBinding.viewpager.setAdapter(adapter);
mBinding.viewpager.beginFakeDrag();
mBinding.viewpager.addOnPageChangeListener(adapter);
mDialog = new Dialog(mContext);
mDialog.setContentView(mBinding.getRoot());
mDialog.setCanceledOnTouchOutside(false);
// mDialog.setCancelable(false);
UtilityDialog.setTo90PercentWidth(mContext, mDialog);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
mDialog.setOnShowListener(dialog -> {
DialogAskCliente_Page1ViewModel viewModel1 = (DialogAskCliente_Page1ViewModel) adapter.getViewModel(R.layout.dialog_ask_cliente__page1);
DialogAskCliente_Page2ViewModel viewModel2 = (DialogAskCliente_Page2ViewModel) adapter.getViewModel(R.layout.dialog_ask_cliente__page2);
viewModel1
.setOnConfirmClickListener(() -> {
String codAnag = viewModel1.getCurrentCliente();
if(UtilityString.isNullOrEmpty(codAnag)) {
mDialog.dismiss();
onComplete.run(DialogConsts.Results.YES, null, null);
}
viewModel2.setCodAnag(codAnag);
mBinding.viewpager.setCurrentItem(mBinding.viewpager.getCurrentItem() + 1, true);
});
viewModel1.setOnAbortClickListener(() -> {
mDialog.dismiss();
onComplete.run(DialogConsts.Results.ABORT, null, null);
});
viewModel2.setOnConfirmClickListener(() -> {
DialogAskClienteDestinatarioDTO cliente = viewModel2.getCurrentDestinatario();
onComplete.run(DialogConsts.Results.YES, cliente != null ? cliente.toVtbDestModel() : null, viewModel1.getCurrentCommessa());
mDialog.dismiss();
});
viewModel2.setOnAbortClickListener(() -> {
mDialog.dismiss();
onComplete.run(DialogConsts.Results.ABORT, null, null);
});
});
}
}

View File

@@ -1,7 +1,6 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -15,13 +14,10 @@ import androidx.viewpager.widget.ViewPager;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.ui.DeactivatableViewPager;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.IDialogAskClienteViewModel;
@@ -58,9 +54,7 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O
viewModel = (IDialogAskClienteViewModel) viewModelClass.newInstance();
viewModel.setBinding(mBinding);
viewModel.setContext(mContext);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
} catch (IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
@@ -102,6 +96,7 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position != lastPage) {
if(lastPage != -1) mDatasetViews.get(lastPage).getValue().onDismiss();
viewPager.onPageChanged(mDatasetViews.get(position).getKey().getRoot());
mDatasetViews.get(position).getValue().onShow();
lastPage = position;
@@ -117,4 +112,8 @@ public class DialogAskClienteAdapter extends PagerAdapter implements ViewPager.O
public void onPageScrollStateChanged(int state) {
}
public void onDismiss() {
if(lastPage != -1) mDatasetViews.get(lastPage).getValue().onDismiss();
}
}

View File

@@ -0,0 +1,143 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.FragmentActivity;
import org.jetbrains.annotations.NotNull;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogAskClienteBinding;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel;
public class DialogAskClienteView extends BaseDialogFragment {
private final RunnableArgss<VtbDest, String> mOnComplete;
private final Runnable mOnAbort;
private DialogAskClienteAdapter mAdapter;
private FragmentActivity mContext;
private DialogAskClienteBinding mBindings;
private boolean mIsClienteSelected = false;
public static DialogAskClienteView newInstance(@NotNull RunnableArgss<VtbDest, String> onComplete, @NotNull Runnable onAbort) {
return new DialogAskClienteView( onComplete, onAbort);
}
private DialogAskClienteView(@NotNull RunnableArgss<VtbDest, String> onComplete, @NotNull Runnable onAbort) {
super();
this.mOnComplete = onComplete;
this.mOnAbort = onAbort;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.mContext = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_cliente, container, false);
mBindings.setLifecycleOwner(this);
getDialog().setCanceledOnTouchOutside(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
List<Map.Entry<Integer, Class>> views = new ArrayList<>();
views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page1, DialogAskCliente_Page1ViewModel.class));
views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page2, DialogAskCliente_Page2ViewModel.class));
mAdapter = new DialogAskClienteAdapter(mContext, views);
mBindings.viewpager.setAdapter(mAdapter);
mBindings.viewpager.beginFakeDrag();
mBindings.viewpager.addOnPageChangeListener(mAdapter);
mBindings.viewpager.setCurrentItem(0, false);
getDialog().setOnShowListener(d -> {
this.initView();
});
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
UtilityDialog.setTo90PercentWidth(this.mContext, this);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
private void initView() {
DialogAskCliente_Page1ViewModel viewModel1 = (DialogAskCliente_Page1ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page1);
DialogAskCliente_Page2ViewModel viewModel2 = (DialogAskCliente_Page2ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page2);
viewModel1
.setOnConfirmClickListener(() -> {
String codAnag = viewModel1.getCurrentCliente();
if(UtilityString.isNullOrEmpty(codAnag)) {
this.mIsClienteSelected = true;
dismiss();
mOnComplete.run(null, null);
}
viewModel2.setCodAnag(codAnag);
mBindings.viewpager.setCurrentItem(mBindings.viewpager.getCurrentItem() + 1, true);
});
viewModel2.setOnConfirmClickListener(() -> {
DialogAskClienteDestinatarioDTO cliente = viewModel2.getCurrentDestinatario();
this.mIsClienteSelected = true;
dismiss();
mOnComplete.run(cliente != null ? cliente.toVtbDestModel() : null, viewModel1.getCurrentCommessa());
});
viewModel1.setOnAbortClickListener(this::dismiss);
viewModel2.setOnAbortClickListener(this::dismiss);
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
mAdapter.onDismiss();
if(!mIsClienteSelected) {
this.mOnAbort.run();
}
super.onDismiss(dialog);
}
}

View File

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

View File

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

View File

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

View File

@@ -1,243 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.text.SpannableString;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import java.util.HashMap;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.databinding.DialogBaseBinding;
/**
* Created by GiuseppeS on 22/03/2018.
*/
public class DialogSimpleMessageHelper {
public enum TYPE {
INFO(1),
SUCCESS(2),
WARNING(3),
ERROR(4);
private int value;
TYPE(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public static TYPE fromInt(int value) {
for (TYPE b : TYPE.values()) {
if (b.value == value) return b;
}
return null;
}
}
private static Dialog makeBase(TYPE type, Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int colorBackgroundTitle = -1;
Drawable titleIconRes = null;
Dialog dialog = new Dialog(mContext);
switch (type) {
case INFO:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null);
break;
case SUCCESS:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null);
break;
case WARNING:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null);
break;
case ERROR:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null);
break;
}
DialogSimpleMessageViewModel viewModel = new DialogSimpleMessageViewModel(dialog);
viewModel
.setOnPositive(onPositiveClick)
.setOnNeutral(onNeutralClick)
.setOnNegative(onNegativeClick)
.setPositiveButtonText(mContext.getText(R.string.ok).toString())
.setNeutralButtonText(rNeutralButtonString != null && rNeutralButtonString != -1 ? mContext.getText(rNeutralButtonString).toString() : null)
.setNegativeButtonText(mContext.getText(R.string.no).toString());
DialogBaseBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_base, null, false);
mBinding.setViewmodel(viewModel);
Rect displayRectangle = new Rect();
Window window = ((Activity) mContext).getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
mBinding.titleContainer.setMinimumWidth((int) (displayRectangle.width() * 0.8f));
//Title VIEW
mBinding.titleText.setText(titleText);
ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE);
mBinding.titleIcon.setImageTintList(colorStateList);
mBinding.titleIcon.setImageDrawable(titleIconRes);
mBinding.titleContainer.setBackgroundColor(colorBackgroundTitle);
//Content View
mBinding.descriptionText.setText(messageText);
LinearLayout hashMapContainer = mBinding.dialogContentHashmap;
if (hashmapContent != null) {
for (int i = 0; i < hashmapContent.keySet().size(); i++) {
String currentKey = hashmapContent.keySet().toArray()[i].toString();
String currentValue = hashmapContent.get(currentKey);
RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, null);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue);
hashMapContainer.addView(singleMapContent);
}
}
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(mBinding.getRoot());
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return dialog;
}
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.INFO,
mContext,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return makeBase(TYPE.INFO,
mContext,
titleText,
messageText,
hashmapContent,
onPositiveClick,
onNegativeClick, -1, null);
}
public static Dialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.SUCCESS,
mContext,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return makeBase(TYPE.WARNING,
mContext,
mContext.getText(R.string.warning).toString(),
messageText,
hashmapContent,
onPositiveClick,
() -> {
if (onNegativeClick != null) onNegativeClick.run();
}, -1, null);
}
public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.WARNING,
mContext,
mContext.getText(R.string.warning).toString(),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static void showSimpleWarningDialog(Context context, String message) {
makeErrorDialog(
context,
new SpannableString(message),
null,
null).show();
}
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.ERROR,
mContext,
mContext.getText(R.string.ops).toString(),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static void showSimpleErrorDialog(Context context, String message) {
makeErrorDialog(
context,
new SpannableString(message),
null,
null).show();
}
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
return makeBase(TYPE.ERROR,
mContext,
mContext.getText(R.string.ops).toString(),
messageText,
hashmapContent,
onPositiveClick,
null, rNeutralButtonString, onNeutralClick);
}
}

View File

@@ -0,0 +1,289 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import java.util.HashMap;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.databinding.DialogBaseBinding;
/**
* Created by GiuseppeS on 22/03/2018.
*/
public class DialogSimpleMessageView extends BaseDialogFragment {
public enum TYPE {
INFO(1),
SUCCESS(2),
WARNING(3),
ERROR(4);
private int value;
TYPE(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public static TYPE fromInt(int value) {
for (TYPE b : TYPE.values()) {
if (b.value == value) return b;
}
return null;
}
}
private final TYPE mType;
private final String mTitleText;
private final Spanned mMessageText;
private final HashMap<String, String> mHashmapContent;
private final Runnable mOnPositiveClick;
private final Runnable mOnNegativeClick;
private final @StringRes Integer mRNeutralButtonString;
private final Runnable mOnNeutralClick;
private String positiveButtonText;
private String neutralButtonText;
private String negativeButtonText;
private DialogBaseBinding mBindings;
private Context mContext;
public static DialogSimpleMessageView newInstance(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap<String, String> hashmapContent , Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) {
return new DialogSimpleMessageView(type, titleText, messageText, hashmapContent, onPositiveClick, onNegativeClick, rNeutralButtonString, onNeutralClick);
}
private DialogSimpleMessageView(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap<String, String> hashmapContent , Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) {
super();
this.mType = type;
this.mTitleText = titleText;
this.mMessageText = messageText;
this.mHashmapContent = hashmapContent;
this.mOnPositiveClick = onPositiveClick;
this.mOnNegativeClick = onNegativeClick;
this.mRNeutralButtonString = rNeutralButtonString;
this.mOnNeutralClick = onNeutralClick;
}
@Override
public void onStart() {
super.onStart();
UtilityDialog.setTo90PercentWidth(this.mContext, this);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.mContext = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_base, container, false);
mBindings.setView(this);
mBindings.setLifecycleOwner(this);
getDialog().setCanceledOnTouchOutside(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
int colorBackgroundTitle = -1;
Drawable titleIconRes = null;
switch (mType) {
case INFO:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null);
break;
case SUCCESS:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null);
break;
case WARNING:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null);
break;
case ERROR:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null);
break;
}
this.positiveButtonText = mContext.getText(R.string.ok).toString();
this.negativeButtonText = mContext.getText(R.string.no).toString();
//Title VIEW
mBindings.titleText.setText(mTitleText);
ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE);
mBindings.titleIcon.setImageTintList(colorStateList);
mBindings.titleIcon.setImageDrawable(titleIconRes);
mBindings.titleContainer.setBackgroundColor(colorBackgroundTitle);
//Content View
mBindings.descriptionText.setText(mMessageText);
LinearLayoutCompat hashMapContainer = mBindings.dialogContentHashmap;
if (mHashmapContent != null) {
for (int i = 0; i < mHashmapContent.keySet().size(); i++) {
String currentKey = mHashmapContent.keySet().toArray()[i].toString();
String currentValue = mHashmapContent.get(currentKey);
RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, hashMapContainer);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue);
hashMapContainer.addView(singleMapContent);
}
}
return mBindings.getRoot();
}
public boolean isPositiveVisible() {
return mOnPositiveClick != null;
}
public boolean isNeutralVisible() {
return mOnNeutralClick != null;
}
public boolean isNegativeVisible() {
return mOnNegativeClick != null;
}
public String getPositiveButtonText() {
return positiveButtonText;
}
public String getNeutralButtonText() {
return mRNeutralButtonString != null && mRNeutralButtonString != -1 ? mContext.getText(mRNeutralButtonString).toString() : null;
}
public String getNegativeButtonText() {
return negativeButtonText;
}
public void onPositiveClick() {
dismiss();
if(mOnPositiveClick != null) mOnPositiveClick.run();
}
public void onNeutralClick() {
dismiss();
if(mOnNeutralClick != null) mOnNeutralClick.run();
}
public void onNegativeClick() {
dismiss();
if(mOnNegativeClick != null) mOnNegativeClick.run();
}
public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.INFO,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return newInstance(TYPE.INFO,
titleText,
messageText,
hashmapContent,
onPositiveClick,
onNegativeClick, -1, null);
}
public static DialogSimpleMessageView makeSuccessDialog(String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.SUCCESS,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return newInstance(TYPE.WARNING,
UtilityResources.getString(R.string.warning),
messageText,
hashmapContent,
onPositiveClick,
() -> {
if (onNegativeClick != null) onNegativeClick.run();
}, -1, null);
}
public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.WARNING,
UtilityResources.getString(R.string.warning),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.ERROR,
UtilityResources.getString(R.string.ops),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
return newInstance(TYPE.ERROR,
UtilityResources.getString(R.string.ops),
messageText,
hashmapContent,
onPositiveClick,
null, rNeutralButtonString, onNeutralClick);
}
}

View File

@@ -1,91 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Dialog;
public class DialogSimpleMessageViewModel {
private Dialog mDialog;
private Runnable onPositive;
private Runnable onNeutral;
private Runnable onNegative;
private String positiveButtonText;
private String neutralButtonText;
private String negativeButtonText;
public DialogSimpleMessageViewModel(Dialog dialog) {
mDialog = dialog;
}
public DialogSimpleMessageViewModel setOnPositive(Runnable onPositive) {
this.onPositive = onPositive;
return this;
}
public DialogSimpleMessageViewModel setOnNeutral(Runnable onNeutral) {
this.onNeutral = onNeutral;
return this;
}
public DialogSimpleMessageViewModel setOnNegative(Runnable onNegative) {
this.onNegative = onNegative;
return this;
}
public boolean isPositiveVisible() {
return onPositive != null;
}
public boolean isNeutralVisible() {
return onNeutral != null;
}
public boolean isNegativeVisible() {
return onNegative != null;
}
public String getPositiveButtonText() {
return positiveButtonText;
}
public DialogSimpleMessageViewModel setPositiveButtonText(String positiveButtonText) {
this.positiveButtonText = positiveButtonText;
return this;
}
public String getNeutralButtonText() {
return neutralButtonText;
}
public DialogSimpleMessageViewModel setNeutralButtonText(String neutralButtonText) {
this.neutralButtonText = neutralButtonText;
return this;
}
public String getNegativeButtonText() {
return negativeButtonText;
}
public DialogSimpleMessageViewModel setNegativeButtonText(String negativeButtonText) {
this.negativeButtonText = negativeButtonText;
return this;
}
public void onPositiveClick() {
mDialog.dismiss();
if(onPositive != null) onPositive.run();
}
public void onNeutralClick() {
mDialog.dismiss();
if(onNeutral != null) onNeutral.run();
}
public void onNegativeClick() {
mDialog.dismiss();
if(onNegative != null) onNegative.run();
}
}

View File

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

View File

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

View File

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

View File

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

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