Compare commits

..

3 Commits

Author SHA1 Message Date
d72f685e01 Finish v1.46.01(489) 2025-04-03 09:53:46 +02:00
ea1f39a9db -> v1.46.01 (489) 2025-04-03 09:53:42 +02:00
518e6f0853 Fix su loop nel caso di ricerca barcode kit in accettazione da bolla 2025-04-03 09:53:00 +02:00
312 changed files with 3622 additions and 5409 deletions

3
.gitignore vendored
View File

@@ -149,6 +149,3 @@ crashlytics.properties
crashlytics-build.properties crashlytics-build.properties
### AndroidStudio Patch ### ### AndroidStudio Patch ###
!/gradle/wrapper/gradle-wrapper.jar !/gradle/wrapper/gradle-wrapper.jar
copilot.*.xml
/.idea/dataSources.xml

View File

@@ -1,40 +1,5 @@
<component name="ProjectCodeStyleConfiguration"> <component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173"> <code_scheme name="Project" version="173">
<JavaCodeStyleSettings>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="false" module="true" />
<package name="android" withSubpackages="true" static="true" />
<package name="androidx" withSubpackages="true" static="true" />
<package name="com" withSubpackages="true" static="true" />
<package name="junit" withSubpackages="true" static="true" />
<package name="net" withSubpackages="true" static="true" />
<package name="org" withSubpackages="true" static="true" />
<package name="java" withSubpackages="true" static="true" />
<package name="javax" withSubpackages="true" static="true" />
<package name="" withSubpackages="true" static="true" />
<emptyLine />
<package name="android" withSubpackages="true" static="false" />
<emptyLine />
<package name="androidx" withSubpackages="true" static="false" />
<emptyLine />
<package name="com" withSubpackages="true" static="false" />
<emptyLine />
<package name="junit" withSubpackages="true" static="false" />
<emptyLine />
<package name="net" withSubpackages="true" static="false" />
<emptyLine />
<package name="org" withSubpackages="true" static="false" />
<emptyLine />
<package name="java" withSubpackages="true" static="false" />
<emptyLine />
<package name="javax" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
<emptyLine />
</value>
</option>
</JavaCodeStyleSettings>
<JetCodeStyleSettings> <JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings> </JetCodeStyleSettings>

View File

@@ -4,10 +4,10 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-10-02T11:26:10.944286600Z"> <DropdownSelection timestamp="2025-03-17T09:16:48.549771200Z">
<Target type="DEFAULT_BOOT"> <Target type="DEFAULT_BOOT">
<handle> <handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=7da0808" /> <DeviceId pluginId="PhysicalDevice" identifier="serial=21088B8EFD" />
</handle> </handle>
</Target> </Target>
</DropdownSelection> </DropdownSelection>

View File

@@ -1,7 +1,6 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App"> <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App">
<module name="WMS.app" /> <module name="WMS.app.main" />
<option name="ANDROID_RUN_CONFIGURATION_SCHEMA_VERSION" value="1" />
<option name="DEPLOY" value="true" /> <option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" /> <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" /> <option name="DEPLOY_AS_INSTANT" value="false" />
@@ -9,17 +8,14 @@
<option name="PM_INSTALL_OPTIONS" value="" /> <option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" /> <option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" /> <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="ALLOW_ASSUME_VERIFIED" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" /> <option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" /> <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" /> <option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" /> <option name="MODE" value="default_activity" />
<option name="RESTORE_ENABLED" value="false" />
<option name="RESTORE_FILE" value="" />
<option name="RESTORE_FRESH_INSTALL_ONLY" value="false" />
<option name="CLEAR_LOGCAT" value="false" /> <option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" /> <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" /> <option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" /> <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" /> <option name="DEBUGGER_TYPE" value="Auto" />
@@ -63,7 +59,6 @@
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" /> <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers> </Profilers>
<option name="DEEP_LINK" value="" /> <option name="DEEP_LINK" value="" />
<option name="ACTIVITY" value="" />
<option name="ACTIVITY_CLASS" value="" /> <option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" /> <option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" /> <option name="SKIP_ACTIVITY_VALIDATION" value="false" />

View File

@@ -1,72 +0,0 @@
pipeline {
agent {
label 'master'
}
options {
buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '10'))
disableConcurrentBuilds()
}
environment {
// ANDROID_HOME = "/usr/local/android/sdk" // Cambia in base al tuo sistema
JAVA_HOME = tool 'JDK 17.0.6 x64' // Nome dello strumento configurato in Jenkins
PATH = "${env.JAVA_HOME}\\bin;${env.PATH}"
}
stages {
stage('Preparing') {
when {
expression {
return env.GIT_BRANCH == "master-beta"
}
}
steps {
bat "./gradlew addBetaSuffix"
}
}
stage('Build') {
steps {
bat "./gradlew assembleRelease"
archiveArtifacts artifacts: 'app/build/outputs/apk/release/', onlyIfSuccessful: true
}
}
stage('Publish') {
steps {
azureUpload allowAnonymousAccess: true, fileShareName: 'storage-ci', filesPath: 'app/build/outputs/apk/release/*.apk,app/build/outputs/apk/release/*.txt', removePrefixPath: 'app/build/outputs/apk/release/', storageCredentialId: '83a86793-c1d6-4776-b20f-1ff652a57fee', storageType: 'filestorage', uploadArtifactsOnlyIfSuccessful: true, verbose: true, virtualPath: 'wms'
}
}
}
post {
success {
script {
bat 'curl -k "https://devservices.studioml.it/ems-api/updateWMSApp?overrideForced=false"'
bat 'curl -k "https://devservices.studioml.it/ems-api/updateWMSApp?overrideForced=false&suffix=beta"'
bat 'curl -k "https://services.studioml.it/ems-api/updateWMSApp?overrideForced=false"'
bat 'curl -k "https://services.studioml.it/ems-api/updateWMSApp?overrideForced=false&suffix=beta"'
if (env.GIT_BRANCH == "master" || env.GIT_BRANCH == "master-beta") {
office365ConnectorSend adaptiveCards: true, color: '#008000', message: 'WMS è stato compilato con successo', status: 'SUCCESS', webhookUrl: 'https://default0b9c060c159c4e5f82a77459a72572.16.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/a73f903a4044474c84ad9a0d68a9a479/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=gXc43FQXqIq7Xpfvis2XgFoPl8lpg0Sf5HtuxZG_jeI'
}
}
}
unstable {
script {
if (env.GIT_BRANCH == "master" || env.GIT_BRANCH == "master-beta") {
office365ConnectorSend adaptiveCards: true, color: '#FFDE21', message: 'WMS è INSTABILE', status: 'UNSTABLE', webhookUrl: 'https://default0b9c060c159c4e5f82a77459a72572.16.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/a73f903a4044474c84ad9a0d68a9a479/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=gXc43FQXqIq7Xpfvis2XgFoPl8lpg0Sf5HtuxZG_jeI'
}
}
}
failure {
script {
if (env.GIT_BRANCH == "master" || env.GIT_BRANCH == "master-beta") {
office365ConnectorSend adaptiveCards: true, color: '#FF2C2C', message: 'Errore di compilazione su WMS', status: 'FAILURE', webhookUrl: 'https://default0b9c060c159c4e5f82a77459a72572.16.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/a73f903a4044474c84ad9a0d68a9a479/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=gXc43FQXqIq7Xpfvis2XgFoPl8lpg0Sf5HtuxZG_jeI'
}
}
}
}
}

View File

@@ -8,11 +8,10 @@ apply plugin: 'com.google.firebase.crashlytics'
//apply plugin: 'kotlin-android' //apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 553 def appVersionCode = 489
def appVersionName = '1.50.04' def appVersionName = '1.46.01'
signingConfigs { signingConfigs {
release { release {
@@ -35,7 +34,7 @@ android {
defaultConfig { defaultConfig {
applicationId "it.integry.integrywmsnative" applicationId "it.integry.integrywmsnative"
minSdkVersion 21 minSdkVersion 21
targetSdk 36 targetSdkVersion 35
versionCode appVersionCode versionCode appVersionCode
versionName appVersionName versionName appVersionName
// testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -52,18 +51,11 @@ android {
buildTypes { buildTypes {
debug { debug {
ext.enableCrashlytics = false ext.enableCrashlytics = false
// minifyEnabled true // Abilita la minimizzazione del codice
// shrinkResources true // Rimuove risorse non utilizzate
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
release { release {
// minifyEnabled true // Abilita la minimizzazione del codice minifyEnabled false
// shrinkResources true // Rimuove risorse non utilizzate
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release signingConfig signingConfigs.release
firebaseCrashlytics {
mappingFileUploadEnabled true
}
} }
} }
@@ -82,7 +74,12 @@ android {
} }
build {
doLast {
delete "$projectDir/build/outputs/apk/release/version.txt"
file("$projectDir/build/outputs/apk/release/version.txt").text = appVersionCode + '\n' + appVersionName + '\n' + 'forced=true'
}
}
gradle.projectsEvaluated { gradle.projectsEvaluated {
tasks.withType(JavaCompile.class).tap { tasks.withType(JavaCompile.class).tap {
@@ -95,7 +92,7 @@ android {
abortOnError false abortOnError false
} }
namespace 'it.integry.integrywmsnative' namespace 'it.integry.integrywmsnative'
compileSdk 36 compileSdk 35
} }
configurations { configurations {
@@ -104,33 +101,36 @@ configurations {
} }
dependencies { dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
// androidTestImplementation('androidx.test.espresso:espresso-core:3.6.1', { // androidTestImplementation('androidx.test.espresso:espresso-core:3.6.1', {
// exclude group: 'com.android.support', module: 'support-annotations' // exclude group: 'com.android.support', module: 'support-annotations'
// }) // })
// implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'com.github.lupaulus:logger:2.3.2' implementation 'com.github.lupaulus:logger:2.3.2'
//Firebase
// Import the Firebase BoM // Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:33.16.0') implementation platform('com.google.firebase:firebase-bom:33.9.0')
implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.android.gms:play-services-basement:18.7.1' implementation 'com.google.android.gms:play-services-basement:18.5.0'
//JJWT //JJWT
implementation 'io.jsonwebtoken:jjwt-api:0.13.0' implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.13.0' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.13.0' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'androidx.appcompat:appcompat:1.7.1' implementation 'com.google.guava:guava:33.4.0-android'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.12.0' implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.4.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation('androidx.preference:preference-ktx:1.2.1') { implementation('androidx.preference:preference-ktx:1.2.1') {
exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel' exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel'
@@ -138,18 +138,19 @@ dependencies {
} }
implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0" implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0"
implementation 'com.squareup.retrofit2:retrofit:3.0.0' implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.squareup.retrofit2:converter-gson:3.0.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.annimon:stream:1.2.2' implementation 'com.annimon:stream:1.2.2'
implementation 'androidx.lifecycle:lifecycle-runtime:2.9.3' implementation 'androidx.lifecycle:lifecycle-runtime:2.8.7'
implementation 'org.apache.commons:commons-text:1.14.0' implementation 'org.apache.commons:commons-text:1.9'
//MVVM //MVVM
def dagger2_version = '2.57.1' def dagger2_version = '2.55'
implementation "com.google.dagger:dagger:$dagger2_version" api "com.google.dagger:dagger:$dagger2_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version" annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version"
implementation "com.google.dagger:dagger-android:$dagger2_version" api "com.google.dagger:dagger-android:$dagger2_version"
implementation "com.google.dagger:dagger-android-support:$dagger2_version" api "com.google.dagger:dagger-android-support:$dagger2_version"
// if you use the support libraries // if you use the support libraries
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version" annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version"
@@ -161,7 +162,7 @@ dependencies {
implementation 'com.github.pedromassango:doubleClick:3.0' implementation 'com.github.pedromassango:doubleClick:3.0'
//SQLite ROOM //SQLite ROOM
def room_version = "2.7.2" def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version"
@@ -187,13 +188,14 @@ dependencies {
implementation 'com.github.harry1453:android-bluetooth-serial:v1.1.2' implementation 'com.github.harry1453:android-bluetooth-serial:v1.1.2'
// RxJava is also required. // RxJava is also required.
implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'org.greenrobot:eventbus:3.3.1'
//Barcode generator //Barcode generator
// implementation group: 'com.google.zxing', name: 'core', version: '3.5.3'
implementation 'com.journeyapps:zxing-android-embedded:4.3.0' implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
implementation("org.javatuples:javatuples:1.2")
} }
repositories { repositories {
@@ -201,49 +203,3 @@ repositories {
google() google()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }
tasks.register('addBetaSuffix') {
doLast {
def gradleFile = file("build.gradle")
def content = gradleFile.text
// Modifica appVersionName
content = content.replaceAll(/appVersionName\s*=\s*'(.*?)'/) { fullMatch, version ->
"appVersionName = '${version}-beta'"
}
// Modifica outputFileName
content = content.replaceAll(/output\.outputFileName\s*=\s*"(.*?)"/) { fullMatch, filename ->
"output.outputFileName = \"${filename.replace('.apk', '-beta.apk')}\""
}
// Modifica direttamente la riga che crea 'version.txt' in 'version-beta.txt'
content = content.replace(
"def versionFile = new File(outputDir, \"version.txt\")",
"def versionFile = new File(outputDir, \"version-beta.txt\")"
)
// Sovrascrivi il file
gradleFile.write(content)
}
}
tasks.register('createVersionFile') {
doLast {
def outputDir = file("${projectDir}/build/outputs/apk/release")
def versionFile = new File(outputDir, "version.txt")
// Cancella il file se esiste
if (versionFile.exists()) {
versionFile.delete()
}
// Crea il file con i contenuti desiderati
versionFile.write("${android.defaultConfig.versionCode}\n${android.defaultConfig.versionName}\nforced=true")
}
}
afterEvaluate {
tasks.assembleRelease.finalizedBy createVersionFile
}

View File

@@ -23,26 +23,3 @@
# If you keep the line number information, uncomment this to # If you keep the line number information, uncomment this to
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
# Prevent R8 from leaving Data object members always null
-keepclasseswithmembers class * {
<init>(...);
@com.google.gson.annotations.SerializedName <fields>;
}
# Per JJWT
-keep class io.jsonwebtoken.** { *; }
-keepnames class io.jsonwebtoken.* { *; }
-keepnames interface io.jsonwebtoken.* { *; }
# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
-keep class it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse { *; }
-keep class * extends it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse { *; }

View File

@@ -132,8 +132,6 @@ import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUComponen
import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUModule; import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUModule;
import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent;
import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsComponent;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListComponent; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListComponent;
@@ -142,8 +140,6 @@ import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBat
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule; import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent; import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule; import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeComponent;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeModule;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoComponent; import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoComponent;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoModule; import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoModule;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent; import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent;
@@ -252,9 +248,7 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
DialogAskLivelloPosizioneModule.class, DialogAskLivelloPosizioneModule.class,
VerificaGiacenzeModule.class, VerificaGiacenzeModule.class,
DialogExtraInfoModule.class, DialogExtraInfoModule.class,
DialogAskDepositoModule.class, DialogAskDepositoModule.class
DialogChooseArtFromListaArtsModule.class,
DialogDeviceEndOfLifeModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@@ -423,10 +417,6 @@ public interface MainApplicationComponent {
DialogAskDepositoComponent.Factory dialogAskDepositoComponent(); DialogAskDepositoComponent.Factory dialogAskDepositoComponent();
DialogChooseArtFromListaArtsComponent.Factory dialogChooseArtFromListaArtsComponent();
DialogDeviceEndOfLifeComponent.Factory dialogDeviceEndOfLifeComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@@ -56,6 +56,7 @@ import it.integry.integrywmsnative.core.sound.SoundAlertService;
import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.core.update.UpdatesManager;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer; import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -262,6 +263,12 @@ public class MainApplicationModule {
return new PosizioniRESTConsumer(restBuilder, systemRESTConsumer, executorService); return new PosizioniRESTConsumer(restBuilder, systemRESTConsumer, executorService);
} }
@Provides
@Singleton
ProdFabbisognoLineeProdRESTConsumer providesProdFabbisognoLineeProdRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
return new ProdFabbisognoLineeProdRESTConsumer(restBuilder, systemRESTConsumer);
}
@Provides @Provides
@Singleton @Singleton
DocInterniRESTConsumer provideDocInterniRESTConsumer(RESTBuilder restBuilder, MagazzinoRESTConsumer magazzinoRESTConsumer) { DocInterniRESTConsumer provideDocInterniRESTConsumer(RESTBuilder restBuilder, MagazzinoRESTConsumer magazzinoRESTConsumer) {
@@ -276,8 +283,8 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
GiacenzaPvRESTConsumer provideGiacenzaPvRESTConsumer(RESTBuilder restBuilder) { GiacenzaPvRESTConsumer provideGiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new GiacenzaPvRESTConsumer(restBuilder); return new GiacenzaPvRESTConsumer(restBuilder, executorService);
} }
@Provides @Provides
@@ -306,8 +313,8 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
DocumentRESTConsumer provideDocumentiRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { DocumentRESTConsumer provideDocumentiRESTConsumer(RESTBuilder restBuilder) {
return new DocumentRESTConsumer(restBuilder, executorService); return new DocumentRESTConsumer(restBuilder);
} }
@Provides @Provides

View File

@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.text.SpannableString; import android.text.SpannableString;
@@ -13,10 +12,8 @@ import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch;
import javax.inject.Inject; import javax.inject.Inject;
@@ -30,7 +27,6 @@ import it.integry.integrywmsnative.databinding.ActivitySplashBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.main.MainActivity; import it.integry.integrywmsnative.gest.main.MainActivity;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeView;
public class SplashActivity extends BaseActivity implements MainContext.Listener { public class SplashActivity extends BaseActivity implements MainContext.Listener {
@@ -69,24 +65,9 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
UtilityContext.initMainActivity(this); UtilityContext.initMainActivity(this);
LocalDate endSupportDate = LocalDate.of(2026, 1, 31);
boolean isOldAndroid = Build.VERSION.SDK_INT < Build.VERSION_CODES.O; initAppVersion();
initPermissions(this::init);
executorService.execute(() -> {
if (isOldAndroid)
showDeviceEndOfLifeMessage();
handler.post(() -> {
if (LocalDate.now().isBefore(endSupportDate) || !isOldAndroid) {
initAppVersion();
initPermissions(this::init);
} else {
this.finish();
}
});
});
} }
private void initAppVersion() { private void initAppVersion() {
@@ -124,21 +105,6 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
} }
} }
private void showDeviceEndOfLifeMessage() {
CountDownLatch latch = new CountDownLatch(1);
DialogDeviceEndOfLifeView.newInstance(latch::countDown)
.show(this.getSupportFragmentManager(), "dialog_device_end_of_life");
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
@Override @Override
public void onDBDataLoading(String item) { public void onDBDataLoading(String item) {
handler.post(() -> mBinding.loadingInfoTextview.setText("Caricamento " + item)); handler.post(() -> mBinding.loadingInfoTextview.setText("Caricamento " + item));

View File

@@ -24,4 +24,19 @@ public class CommonConst {
public static String RECOVER_COLLO_FILE = "recover_ul.json"; public static String RECOVER_COLLO_FILE = "recover_ul.json";
} }
public static class Mail {
public static String[] forErrorsDebug = {
"g.scorrano@integry.it",
"v.castellana@integry.it"
};
public static String[] forErrors = {
// "syslogs@integry.it",
"g.scorrano@integry.it",
"v.castellana@integry.it"
};
}
} }

View File

@@ -11,11 +11,11 @@ public class JwtUtils {
private final static String SIGNING_KEY = "gICy3bjD56i/YFnBZZKe5ibiz3Snsp08nybGGziCV4ZcvyXBbyqWUnJ2wTrRXhOuf/xdljPXX0yBaqdAgvKthQ=="; private final static String SIGNING_KEY = "gICy3bjD56i/YFnBZZKe5ibiz3Snsp08nybGGziCV4ZcvyXBbyqWUnJ2wTrRXhOuf/xdljPXX0yBaqdAgvKthQ==";
public static Claims parseJwt(String token) { public static Claims parseJwt(String token) {
Jws<Claims> jws = Jwts.parser() Jws<Claims> jws = Jwts.parserBuilder()
.verifyWith(Keys.hmacShaKeyFor(Decoders.BASE64.decode(SIGNING_KEY))) .setSigningKey(Keys.hmacShaKeyFor(Decoders.BASE64.decode(SIGNING_KEY)))
.build() .build()
.parseSignedClaims(token); .parseClaimsJws(token);
return jws.getPayload(); return jws.getBody();
} }
} }

View File

@@ -89,25 +89,11 @@ public class AppContext {
private void initLogger() { private void initLogger() {
Logger.addLogAdapter(new AndroidLogAdapter()); Logger.addLogAdapter(new AndroidLogAdapter());
File dataDir = mApplicationContext.getExternalFilesDir(null); logsFolder = new File(mApplicationContext.getExternalFilesDir(null).getAbsolutePath());
logsFolder = new File(dataDir, "logs");
if (!logsFolder.exists())
logsFolder.mkdirs();
//Temporary clean
File[] wrongFilesToBeDeleted = dataDir.listFiles((file, s) -> s.startsWith("logs_"));
if (wrongFilesToBeDeleted != null)
for (File fileToDelete : wrongFilesToBeDeleted) {
fileToDelete.delete();
}
removeOldLogs(logsFolder);
int maxBytesSize = 5 * 1024 * 1024; int maxBytesSize = 5 * 1024 * 1024;
Logger.addLogAdapter(new DiskLogAdapter(logsFolder, maxBytesSize)); Logger.addLogAdapter(new DiskLogAdapter(logsFolder, maxBytesSize));
removeOldLogs(logsFolder);
} }
private void removeOldLogs(File logsFolder) { private void removeOldLogs(File logsFolder) {

View File

@@ -1,6 +1,5 @@
package it.integry.integrywmsnative.core.data_recover; package it.integry.integrywmsnative.core.data_recover;
import java.time.LocalDate;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
@@ -11,7 +10,7 @@ public class ColliDataRecoverDTO {
private int id; private int id;
private int numCollo; private int numCollo;
private String serCollo; private String serCollo;
private LocalDate dataCollo; private String dataCollo;
private String gestioneCollo; private String gestioneCollo;
private String filtro; private String filtro;
@@ -44,11 +43,11 @@ public class ColliDataRecoverDTO {
return this; return this;
} }
public LocalDate getDataCollo() { public String getDataCollo() {
return dataCollo; return dataCollo;
} }
public ColliDataRecoverDTO setDataCollo(LocalDate dataCollo) { public ColliDataRecoverDTO setDataCollo(String dataCollo) {
this.dataCollo = dataCollo; this.dataCollo = dataCollo;
return this; return this;
} }

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.data_recover;
import android.content.Context; import android.content.Context;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils; import com.google.android.gms.common.util.IOUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
@@ -13,7 +14,6 @@ import java.io.InputStream;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.Random; import java.util.Random;
import javax.inject.Inject; import javax.inject.Inject;
@@ -65,9 +65,9 @@ public class ColliDataRecoverService {
} }
private ColliDataRecoverDTO getIfExists(int id) { private ColliDataRecoverDTO getIfExists(int id) {
Optional<ColliDataRecoverDTO> recoverDTOOptional = mtbColtsSessions.stream() Optional<ColliDataRecoverDTO> recoverDTOOptional = Stream.of(mtbColtsSessions)
.filter(x -> x.getId() == id) .filter(x -> x.getId() == id)
.findFirst(); .findSingle();
return recoverDTOOptional.isPresent() ? recoverDTOOptional.get() : null; return recoverDTOOptional.isPresent() ? recoverDTOOptional.get() : null;
@@ -85,7 +85,7 @@ public class ColliDataRecoverService {
ColliDataRecoverDTO recoverDTO = new ColliDataRecoverDTO() ColliDataRecoverDTO recoverDTO = new ColliDataRecoverDTO()
.setId(newId) .setId(newId)
.setDataCollo(mtbColtSession.getDataColloLD()) .setDataCollo(mtbColtSession.getDataColloS())
.setNumCollo(mtbColtSession.getNumCollo()) .setNumCollo(mtbColtSession.getNumCollo())
.setSerCollo(mtbColtSession.getSerCollo()) .setSerCollo(mtbColtSession.getSerCollo())
.setGestioneCollo(mtbColtSession.getGestione()) .setGestioneCollo(mtbColtSession.getGestione())

View File

@@ -4,6 +4,9 @@ import androidx.databinding.BaseObservable;
import java.math.BigDecimal; import java.math.BigDecimal;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
public class BindableFloat extends BaseObservable { public class BindableFloat extends BaseObservable {
private Float value; private Float value;
@@ -12,6 +15,10 @@ public class BindableFloat extends BaseObservable {
} }
public BigDecimal getBigDecimal() { public BigDecimal getBigDecimal() {
int numberOfDigits = UtilityNumber.countNumberOfDecimalDigits(get());
if(numberOfDigits > CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS) numberOfDigits = CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS;
return BigDecimal.valueOf(get()); return BigDecimal.valueOf(get());
} }

View File

@@ -11,7 +11,6 @@ import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.RadioButton; import android.widget.RadioButton;
import android.widget.RadioGroup; import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.appcompat.widget.AppCompatCheckBox; import androidx.appcompat.widget.AppCompatCheckBox;
@@ -38,8 +37,6 @@ import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
@@ -48,7 +45,6 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.LocaleDecimalKeyListener;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityNumber;
@@ -265,7 +261,7 @@ public class Converters {
BigDecimal value = null; BigDecimal value = null;
if (!UtilityString.isNullOrEmpty(s.toString())) if (!UtilityString.isNullOrEmpty(s.toString()))
value = UtilityNumber.parseBigDecimal(s.toString(), Locale.getDefault()); value = new BigDecimal(s.toString());
observableBigDecimal.set(value); observableBigDecimal.set(value);
} }
@@ -275,7 +271,7 @@ public class Converters {
} }
BigDecimal newValue = observableBigDecimal.get(); BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -296,7 +292,7 @@ public class Converters {
String newValueString = s.toString().trim(); String newValueString = s.toString().trim();
if (!UtilityString.isNullOrEmpty(newValueString)) if (!UtilityString.isNullOrEmpty(newValueString))
value = UtilityNumber.parseBigDecimal(newValueString, Locale.getDefault()); value = new BigDecimal(newValueString);
observableBigDecimal.set(value); observableBigDecimal.set(value);
} }
@@ -305,7 +301,7 @@ public class Converters {
view.addTextChangedListener(watcher); view.addTextChangedListener(watcher);
} }
BigDecimal newValue = observableBigDecimal.get(); BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -326,7 +322,7 @@ public class Converters {
String newValueString = s.toString().trim(); String newValueString = s.toString().trim();
if (!UtilityString.isNullOrEmpty(newValueString)) if (!UtilityString.isNullOrEmpty(newValueString))
value = UtilityNumber.parseBigDecimal(newValueString, Locale.getDefault()); value = new BigDecimal(newValueString);
observableBigDecimal.set(value); observableBigDecimal.set(value);
} }
@@ -335,7 +331,7 @@ public class Converters {
view.addTextChangedListener(watcher); view.addTextChangedListener(watcher);
} }
BigDecimal newValue = observableBigDecimal.get(); BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -354,8 +350,7 @@ public class Converters {
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
BigDecimal value = null; BigDecimal value = null;
if (!UtilityString.isNullOrEmpty(s.toString())) if (!UtilityString.isNullOrEmpty(s.toString()))
value = UtilityNumber.parseBigDecimal(s.toString(), Locale.getDefault()); value = new BigDecimal(s.toString());
bindableBigDecimal.set(value); bindableBigDecimal.set(value);
} }
}; };
@@ -363,7 +358,7 @@ public class Converters {
view.addTextChangedListener(watcher); view.addTextChangedListener(watcher);
} }
BigDecimal newValue = bindableBigDecimal.get(); BigDecimal newValue = bindableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -979,64 +974,4 @@ public class Converters {
view.setLayoutParams(layoutParams); view.setLayoutParams(layoutParams);
} }
/** }
* BindingAdapter per bindare una LocalDate diretta su una TextView con un formato specificato.
* Esempio di utilizzo in XML:
* app:localDateText="@{myLocalDate}" app:dateFormat="@{@string/my_date_format}"
*/
@BindingAdapter(value = {"localDateText", "dateFormat"}, requireAll = false)
public static void bindLocalDateText(TextView view, LocalDate date, String dateFormat) {
if (date == null) {
view.setText("");
return;
}
String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
view.setText(date.format(formatter));
}
@BindingAdapter(value = {"localDateTimeText", "dateFormat"}, requireAll = false)
public static void bindLocalDateText(TextView view, LocalDateTime date, String dateFormat) {
if (date == null) {
view.setText("");
return;
}
String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy hh:mm";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
view.setText(date.format(formatter));
}
/**
* BindingAdapter per bindare una ObservableField<LocalDate> su una TextView con un formato specificato.
* Esempio di utilizzo in XML:
* app:localDateObservableText="@{myObservableLocalDate}" app:dateFormat="@{@string/my_date_format}"
*/
@BindingAdapter(value = {"localDateObservableText", "dateFormat"}, requireAll = false)
public static void bindObservableLocalDateText(TextView view, ObservableField<LocalDate> observableDate, String dateFormat) {
if (observableDate == null) {
view.setText("");
return;
}
LocalDate date = observableDate.get();
if (date == null) {
view.setText("");
return;
}
String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
view.setText(date.format(formatter));
}
/**
* BindingAdapter che applica automaticamente il KeyListener localizzato
* ai campi con inputType numberDecimal, permettendo l'uso della virgola
* come separatore decimale in base al locale del dispositivo.
*/
@BindingAdapter("useLocaleDecimalInput")
public static void setLocaleDecimalInput(EditText view, boolean useLocaleInput) {
if (useLocaleInput) {
view.setKeyListener(LocaleDecimalKeyListener.getInstance());
}
}
}

View File

@@ -66,6 +66,9 @@ public class Ean128Service {
switch (aiModel.AI) { switch (aiModel.AI) {
case SSCC -> { case SSCC -> {
if (aiValue.length() > 0 && (aiValue.charAt(0) == '0' || aiValue.charAt(0) == '9')) {
aiValue = new StringBuilder(aiValue.substring(1));
}
model.Sscc = aiValue.toString(); model.Sscc = aiValue.toString();
} }
case GTIN -> { case GTIN -> {

View File

@@ -1,7 +1,7 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.util.Date;
import java.util.List; import java.util.List;
public class DtbDoct { public class DtbDoct {
@@ -10,7 +10,7 @@ public class DtbDoct {
private String codAnag; private String codAnag;
private String codDtip; private String codDtip;
private LocalDate dataDoc; private Date dataDoc;
private Integer numDoc; private Integer numDoc;
private String serDoc; private String serDoc;
private BigDecimal acconto; private BigDecimal acconto;
@@ -41,14 +41,14 @@ public class DtbDoct {
private String compilatoDa; private String compilatoDa;
private String userName; private String userName;
private String controllatoDa; private String controllatoDa;
private LocalDate dataChkDoc; private Date dataChkDoc;
private LocalDate dataDocVal; private Date dataDocVal;
private LocalDate dataInizTrasp; private Date dataInizTrasp;
private LocalDate dataIns; private Date dataIns;
private LocalDate dataOrd; private Date dataOrd;
private LocalDate dataReg; private Date dataReg;
private LocalDate dataRifScad; private Date dataRifScad;
private LocalDate dataUltMod; private Date dataUltMod;
private String descrizionePaga; private String descrizionePaga;
private String flagPrzScontati; private String flagPrzScontati;
private String gestione; private String gestione;
@@ -89,7 +89,7 @@ public class DtbDoct {
private String targa; private String targa;
private Integer postiPallet; private Integer postiPallet;
private BigDecimal tempMedia; private BigDecimal tempMedia;
private LocalDate dataCons; private Date dataCons;
private BigDecimal nolo; private BigDecimal nolo;
private BigDecimal nolo2; private BigDecimal nolo2;
private String conducente; private String conducente;
@@ -102,7 +102,7 @@ public class DtbDoct {
private String setDataDecorrenza2DataRic; private String setDataDecorrenza2DataRic;
private BigDecimal totSpese; private BigDecimal totSpese;
private String chkArtListino; private String chkArtListino;
private LocalDate dataCmov; private Date dataCmov;
private String reso; private String reso;
private Integer numCmovAutofattura; private Integer numCmovAutofattura;
private Object dtbTipi; private Object dtbTipi;
@@ -141,11 +141,11 @@ public class DtbDoct {
return this; return this;
} }
public LocalDate getDataDoc() { public Date getDataDoc() {
return dataDoc; return dataDoc;
} }
public DtbDoct setDataDoc(LocalDate dataDoc) { public DtbDoct setDataDoc(Date dataDoc) {
this.dataDoc = dataDoc; this.dataDoc = dataDoc;
return this; return this;
} }
@@ -420,74 +420,74 @@ public class DtbDoct {
return this; return this;
} }
public LocalDate getDataChkDoc() { public Date getDataChkDoc() {
return dataChkDoc; return dataChkDoc;
} }
public DtbDoct setDataChkDoc(LocalDate dataChkDoc) { public DtbDoct setDataChkDoc(Date dataChkDoc) {
this.dataChkDoc = dataChkDoc; this.dataChkDoc = dataChkDoc;
return this; return this;
} }
public LocalDate getDataDocVal() { public Date getDataDocVal() {
return dataDocVal; return dataDocVal;
} }
public DtbDoct setDataDocVal(LocalDate dataDocVal) { public DtbDoct setDataDocVal(Date dataDocVal) {
this.dataDocVal = dataDocVal; this.dataDocVal = dataDocVal;
return this; return this;
} }
public LocalDate getDataInizTrasp() { public Date getDataInizTrasp() {
return dataInizTrasp; return dataInizTrasp;
} }
public DtbDoct setDataInizTrasp(LocalDate dataInizTrasp) { public DtbDoct setDataInizTrasp(Date dataInizTrasp) {
this.dataInizTrasp = dataInizTrasp; this.dataInizTrasp = dataInizTrasp;
return this; return this;
} }
public LocalDate getDataIns() { public Date getDataIns() {
return dataIns; return dataIns;
} }
public DtbDoct setDataIns(LocalDate dataIns) { public DtbDoct setDataIns(Date dataIns) {
this.dataIns = dataIns; this.dataIns = dataIns;
return this; return this;
} }
public LocalDate getDataOrd() { public Date getDataOrd() {
return dataOrd; return dataOrd;
} }
public DtbDoct setDataOrd(LocalDate dataOrd) { public DtbDoct setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd; this.dataOrd = dataOrd;
return this; return this;
} }
public LocalDate getDataReg() { public Date getDataReg() {
return dataReg; return dataReg;
} }
public DtbDoct setDataReg(LocalDate dataReg) { public DtbDoct setDataReg(Date dataReg) {
this.dataReg = dataReg; this.dataReg = dataReg;
return this; return this;
} }
public LocalDate getDataRifScad() { public Date getDataRifScad() {
return dataRifScad; return dataRifScad;
} }
public DtbDoct setDataRifScad(LocalDate dataRifScad) { public DtbDoct setDataRifScad(Date dataRifScad) {
this.dataRifScad = dataRifScad; this.dataRifScad = dataRifScad;
return this; return this;
} }
public LocalDate getDataUltMod() { public Date getDataUltMod() {
return dataUltMod; return dataUltMod;
} }
public DtbDoct setDataUltMod(LocalDate dataUltMod) { public DtbDoct setDataUltMod(Date dataUltMod) {
this.dataUltMod = dataUltMod; this.dataUltMod = dataUltMod;
return this; return this;
} }
@@ -852,11 +852,11 @@ public class DtbDoct {
return this; return this;
} }
public LocalDate getDataCons() { public Date getDataCons() {
return dataCons; return dataCons;
} }
public DtbDoct setDataCons(LocalDate dataCons) { public DtbDoct setDataCons(Date dataCons) {
this.dataCons = dataCons; this.dataCons = dataCons;
return this; return this;
} }
@@ -969,11 +969,11 @@ public class DtbDoct {
return this; return this;
} }
public LocalDate getDataCmov() { public Date getDataCmov() {
return dataCmov; return dataCmov;
} }
public DtbDoct setDataCmov(LocalDate dataCmov) { public DtbDoct setDataCmov(Date dataCmov) {
this.dataCmov = dataCmov; this.dataCmov = dataCmov;
return this; return this;
} }

View File

@@ -97,8 +97,6 @@ public class MtbAart extends EntityBase {
private List<MtbUntMis> mtbUntMis; private List<MtbUntMis> mtbUntMis;
private List<MtbAartBarCode> mtbAartBarCode;
public enum UntMisRifPesoEnum { public enum UntMisRifPesoEnum {
C, C,
@@ -967,13 +965,6 @@ public class MtbAart extends EntityBase {
return getMtbUntMis() != null && !getMtbUntMis().isEmpty() ? getMtbUntMis().get(0) : null; return getMtbUntMis() != null && !getMtbUntMis().isEmpty() ? getMtbUntMis().get(0) : null;
} }
public List<MtbAartBarCode> getMtbAartBarCode() {
return mtbAartBarCode;
}
public void setMtbAartBarCode(List<MtbAartBarCode> mtbAartBarCode) {
this.mtbAartBarCode = mtbAartBarCode;
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {

View File

@@ -1,55 +0,0 @@
package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal;
public class MtbAartBarCode extends EntityBase {
private String codBarre;
private String codMart;
private BigDecimal qtaCnf;
private String flagPrimario;
private String tipoCodBarre;
public MtbAartBarCode() {
this.type = "mtb_aart_bar_code";
}
public String getCodBarre() {
return codBarre;
}
public void setCodBarre(String codBarre) {
this.codBarre = codBarre;
}
public String getCodMart() {
return codMart;
}
public void setCodMart(String codMart) {
this.codMart = codMart;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public void setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
}
public String getFlagPrimario() {
return flagPrimario;
}
public void setFlagPrimario(String flagPrimario) {
this.flagPrimario = flagPrimario;
}
public String getTipoCodBarre() {
return tipoCodBarre;
}
public void setTipoCodBarre(String tipoCodBarre) {
this.tipoCodBarre = tipoCodBarre;
}
}

View File

@@ -15,7 +15,7 @@ public class MtbColr extends EntityBase {
private String gestione; private String gestione;
private String serCollo; private String serCollo;
private Integer numCollo; private Integer numCollo;
private LocalDate dataCollo; private String dataCollo;
private Integer riga; private Integer riga;
private Integer rigaOrd; private Integer rigaOrd;
private String codMart; private String codMart;
@@ -27,7 +27,7 @@ public class MtbColr extends EntityBase {
private String serColloRif; private String serColloRif;
private String note; private String note;
private LocalDate dataOrd; private LocalDate dataOrd;
private LocalDate dataColloRif; private String dataColloRif;
private BigDecimal qtaCnf; private BigDecimal qtaCnf;
private BigDecimal qtaCol; private BigDecimal qtaCol;
private Integer numOrd; private Integer numOrd;
@@ -164,18 +164,21 @@ public class MtbColr extends EntityBase {
return this; return this;
} }
public String getDataColloS() {
public LocalDate getDataColloLD() {
return dataCollo; return dataCollo;
} }
public Date getDataColloD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataColloS());
}
public MtbColr setDataCollo(String dataCollo) { public MtbColr setDataCollo(String dataCollo) {
this.dataCollo = UtilityDate.recognizeLocalDateWithExceptionHandler(dataCollo); this.dataCollo = dataCollo;
return this; return this;
} }
public MtbColr setDataCollo(LocalDate dataCollo) { public MtbColr setDataCollo(Date dataCollo) {
this.dataCollo = dataCollo; setDataCollo(UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH));
return this; return this;
} }
@@ -284,24 +287,25 @@ public class MtbColr extends EntityBase {
} }
public String getDataColloRifS() { public String getDataColloRifS() {
return dataColloRif != null ? UtilityDate.COMMONS_DATE_FORMATS.DATE_DMY_SLASHED_FORMATTER.format(dataColloRif) : null; return dataColloRif;
} }
public Date getDataColloRifD() { public Date getDataColloRifD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataColloRifS()); return UtilityDate.recognizeDateWithExceptionHandler(getDataColloRifS());
} }
public LocalDate getDataColloRifLD() { public MtbColr setDataColloRif(String dataColloRif) {
return dataColloRif; this.dataColloRif = dataColloRif;
return this;
} }
public MtbColr setDataColloRif(String dataColloRif) { public MtbColr setDataColloRif(Date dataColloRif) {
this.dataColloRif = UtilityDate.recognizeLocalDateWithExceptionHandler(dataColloRif); this.dataColloRif = UtilityDate.formatDate(dataColloRif, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return this; return this;
} }
public MtbColr setDataColloRif(LocalDate dataColloRif) { public MtbColr setDataColloRif(LocalDate dataColloRif) {
this.dataColloRif = dataColloRif; this.dataColloRif = UtilityDate.formatDate(dataColloRif, UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH);
return this; return this;
} }

View File

@@ -22,6 +22,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
/** /**
@@ -30,7 +31,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
public class MtbColt extends EntityBase { public class MtbColt extends EntityBase {
private String gestione; private String gestione;
private LocalDate dataCollo; private String dataCollo;
private String serCollo; private String serCollo;
private Integer numCollo; private Integer numCollo;
private String rifOrd; private String rifOrd;
@@ -65,8 +66,6 @@ public class MtbColt extends EntityBase {
private BigDecimal altezzaCm; private BigDecimal altezzaCm;
private String codJcom; private String codJcom;
private String barcodeUl;
private final transient MutableLiveData<ObservableMtbTcol> mtbTCol = new MutableLiveData<>(); private final transient MutableLiveData<ObservableMtbTcol> mtbTCol = new MutableLiveData<>();
private Boolean disablePrint; private Boolean disablePrint;
@@ -85,7 +84,7 @@ public class MtbColt extends EntityBase {
public MtbColt() { public MtbColt() {
type = "mtb_colt"; type = "mtb_colt";
setDataCollo(LocalDate.now()); setDataCollo(UtilityDate.getDateInstance());
setSerCollo("/"); setSerCollo("/");
if (SettingsManager.i().isUserLoggedIn()) { if (SettingsManager.i().isUserLoggedIn()) {
@@ -144,13 +143,20 @@ public class MtbColt extends EntityBase {
} }
public String getDataColloHumanLong() { public String getDataColloHumanLong() {
if (dataCollo != null) { Date dataColloD = null;
return UtilityDate.COMMONS_DATE_FORMATS.DATE_DMY_HUMAN_FORMATTER.format(dataCollo); try {
dataColloD = getDataColloD();
} catch (Exception ex) {
UtilityLogger.error(ex);
}
if (dataColloD != null) {
return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN_LONG);
} else return null; } else return null;
} }
public String getDataColloS() { public String getDataColloS() {
return dataCollo != null ? UtilityDate.COMMONS_DATE_FORMATS.DATE_DMY_SLASHED_FORMATTER.format(dataCollo) : null; return dataCollo;
} }
public Date getDataColloD() { public Date getDataColloD() {
@@ -158,16 +164,21 @@ public class MtbColt extends EntityBase {
} }
public LocalDate getDataColloLD() { public LocalDate getDataColloLD() {
return dataCollo; return UtilityDate.recognizeLocalDateWithExceptionHandler(getDataColloS());
} }
public MtbColt setDataCollo(String dataCollo) { public MtbColt setDataCollo(String dataCollo) {
this.dataCollo = UtilityDate.recognizeLocalDateWithExceptionHandler(dataCollo); this.dataCollo = dataCollo;
return this;
}
public MtbColt setDataCollo(Date dataCollo) {
this.dataCollo = UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return this; return this;
} }
public MtbColt setDataCollo(LocalDate dataCollo) { public MtbColt setDataCollo(LocalDate dataCollo) {
this.dataCollo = dataCollo; this.dataCollo = UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH);
return this; return this;
} }
@@ -533,15 +544,6 @@ public class MtbColt extends EntityBase {
return this; return this;
} }
public String getBarcodeUl() {
return barcodeUl;
}
public MtbColt setBarcodeUl(String barcodeUl) {
this.barcodeUl = barcodeUl;
return this;
}
public ObservableMtbTcol getMtbTCol() { public ObservableMtbTcol getMtbTCol() {
return mtbTCol.getValue(); return mtbTCol.getValue();
} }
@@ -629,15 +631,9 @@ public class MtbColt extends EntityBase {
@Override @Override
public EntityBase clone() { public EntityBase clone() {
return clone(true);
}
public MtbColt clone(boolean withMtbColr) {
MtbColt mtbColt = (MtbColt) super.clone(); MtbColt mtbColt = (MtbColt) super.clone();
mtbColt.setMtbColr(new ObservableArrayList<>()); mtbColt.setMtbColr(new ObservableArrayList<>());
if(!withMtbColr) return mtbColt;
this.getMtbColr().stream() this.getMtbColr().stream()
.map(MtbColr::new) //Genera un clone .map(MtbColr::new) //Genera un clone
.forEach(mtbColr -> { .forEach(mtbColr -> {

View File

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Date; import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -305,7 +306,7 @@ public class MvwSitArtUdcDetInventario {
return new MtbColr() return new MtbColr()
.setCodJcom(getCodJcom()) .setCodJcom(getCodJcom())
.setCodMart(getCodMart()) .setCodMart(getCodMart())
.setDataCollo(getDataCollo()) .setDataCollo(UtilityDate.toDate(getDataCollo()))
.setNumCollo(getNumCollo()) .setNumCollo(getNumCollo())
.setSerCollo(getSerCollo()) .setSerCollo(getSerCollo())
.setGestione(getGestione()) .setGestione(getGestione())

View File

@@ -3,7 +3,7 @@ package it.integry.integrywmsnative.core.model.dto;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
public class AlreadyRegisteredUlDTO { public class AlreadyRegisteredUDCDTO {
private MtbColt mtbColt; private MtbColt mtbColt;
@@ -13,7 +13,7 @@ public class AlreadyRegisteredUlDTO {
return mtbColt; return mtbColt;
} }
public AlreadyRegisteredUlDTO setMtbColt(MtbColt mtbColt) { public AlreadyRegisteredUDCDTO setMtbColt(MtbColt mtbColt) {
this.mtbColt = mtbColt; this.mtbColt = mtbColt;
return this; return this;
} }
@@ -22,7 +22,7 @@ public class AlreadyRegisteredUlDTO {
return canBeRecovered; return canBeRecovered;
} }
public AlreadyRegisteredUlDTO setCanBeRecovered(boolean canBeRecovered) { public AlreadyRegisteredUDCDTO setCanBeRecovered(boolean canBeRecovered) {
this.canBeRecovered = canBeRecovered; this.canBeRecovered = canBeRecovered;
return this; return this;
} }

View File

@@ -28,7 +28,7 @@ public class AuthInterceptor implements Interceptor {
public Response intercept(@NonNull Chain chain) throws IOException { public Response intercept(@NonNull Chain chain) throws IOException {
var originalRequest = chain.request(); var originalRequest = chain.request();
if (SettingsManager.i().getUserSession() != null && SettingsManager.i().getUserSession().getAccessToken() != null) { if (SettingsManager.i().getUserSession() != null) {
var accessToken = SettingsManager.i().getUserSession().getAccessToken(); var accessToken = SettingsManager.i().getUserSession().getAccessToken();
var accessTokenExpiryDate = SettingsManager.i().getUserSession().getAccessTokenExpiryDate(); var accessTokenExpiryDate = SettingsManager.i().getUserSession().getAccessTokenExpiryDate();
@@ -55,22 +55,21 @@ public class AuthInterceptor implements Interceptor {
.protocol(Protocol.HTTP_1_1) .protocol(Protocol.HTTP_1_1)
.code(401) .code(401)
.message("Unauthorized") .message("Unauthorized")
.body(ResponseBody.create(okhttp3.MediaType.get("application/json"), new byte[0])) .body(ResponseBody.create(new byte[0], null))
.build(); .build();
} catch (Exception e) { } catch (Exception e) {
return chain.proceed(originalRequest); return chain.proceed(originalRequest);
} }
//Retrieve the new access token after refresh
accessToken = SettingsManager.i().getUserSession().getAccessToken();
}
// Add the access token to the request header // Add the access token to the request header
var authorizedRequest = originalRequest.newBuilder() var authorizedRequest = originalRequest.newBuilder()
.header("Authorization", "Bearer " + accessToken) .header("Authorization", "Bearer " + SettingsManager.i().getUserSession().getAccessToken())
.build(); .build();
return chain.proceed(authorizedRequest); return chain.proceed(authorizedRequest);
} else
return chain.proceed(originalRequest);
} else } else
return chain.proceed(originalRequest); return chain.proceed(originalRequest);
} }

View File

@@ -3,7 +3,7 @@ package it.integry.integrywmsnative.core.rest;
import java.io.IOException; import java.io.IOException;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityDate;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
import okhttp3.Interceptor; import okhttp3.Interceptor;
import okhttp3.Request; import okhttp3.Request;
@@ -18,28 +18,30 @@ public class HttpInterceptor implements Interceptor {
@Override @Override
public Response intercept(Chain chain) throws IOException { public Response intercept(Chain chain) throws IOException {
final String PROFILE_DB = SettingsManager.i().getUserSession() == null ? null : SettingsManager.i().getUserSession().getProfileDB(); final String PROFILE_DB = SettingsManager.i().getUserSession() == null ? null : SettingsManager.i().getUserSession().getProfileDB();
final String APP_TOKEN = "fa3a21af-606b-4129-a22b-aedc2a52c7b6"; final String APP_TOKEN = "fa3a21af-606b-4129-a22b-aedc2a52c7b6";
HttpUrl.Builder urlBuilder = chain.request().url().newBuilder(); final Request request = chain.request();
final HttpUrl url = request.url().newBuilder()
.addQueryParameter("profileDb", PROFILE_DB)
.build();
if (!UtilityString.isNullOrEmpty(PROFILE_DB)) Request.Builder builder = chain.request().newBuilder()
urlBuilder
.addQueryParameter("profileDb", PROFILE_DB);
HttpUrl url = urlBuilder.build();
final Request.Builder requestBuilder = chain.request().newBuilder();
Request.Builder builder = requestBuilder
.addHeader("Content-Type", "application/json") .addHeader("Content-Type", "application/json")
.addHeader("Accept", "*/*") .addHeader("Accept", "*/*")
.addHeader("x-app-token", APP_TOKEN); .addHeader("x-app-token", APP_TOKEN);
if (SettingsManager.i().getUserSession() != null &&
SettingsManager.i().getUserSession().getDepo() != null && String accessToken = null;
!UtilityString.isNullOrEmpty(SettingsManager.i().getUserSession().getDepo().getCodMdep()))
builder.addHeader("codMdep", SettingsManager.i().getUserSession().getDepo().getCodMdep()); //Nel caso in cui il token è scaduto e devo richiamare la refresh non bisogna passare il vecchio token
if(SettingsManager.i().getUserSession().getAccessTokenExpiryDate() != null &&
UtilityDate.getNowTime().isBefore(SettingsManager.i().getUserSession().getAccessTokenExpiryDate().minusSeconds(20))) {
accessToken = SettingsManager.i().getUserSession().getAccessToken();
}
if(accessToken != null)
builder.header("Authorization", "Bearer " + accessToken);
var newRequest = builder var newRequest = builder
.url(url) .url(url)

View File

@@ -37,19 +37,19 @@ public class RESTBuilder {
} }
public <T> T getService(final Class<T> service, int timeout) { public <T> T getService(final Class<T> service, int timeout) {
return getService(service, SettingsManager.i().getServer().getProtocol(), SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true, timeout); return getService(service, SettingsManager.i().getServer().getProtocol(), SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true, true, timeout);
} }
public <T> T getService(final Class<T> service, String protocol, String host, int port) { public <T> T getService(final Class<T> service, String protocol, String host, int port, boolean addInterceptors) {
return getService(service, protocol, host, port, true, 60); return getService(service, protocol, host, port, addInterceptors, true, 60);
} }
public <T> T getService(final Class<T> service, String protocol, String host, int port, boolean addEmsApi) { public <T> T getService(final Class<T> service, String protocol, String host, int port, boolean addInterceptors, boolean addEmsApi) {
return getService(service, protocol, host, port, addEmsApi, 60); return getService(service, protocol, host, port, addInterceptors, addEmsApi, 60);
} }
public <T> T getService(final Class<T> service, String protocol, String host, int port, boolean addEmsApi, int timeout) { public <T> T getService(final Class<T> service, String protocol, String host, int port, boolean addInterceptors, boolean addEmsApi, int timeout) {
OkHttpClient.Builder clientBuilder = getDefaultHttpClient(); OkHttpClient.Builder clientBuilder = getDefaultHttpClient();
timeout = 0; timeout = 0;
@@ -62,7 +62,7 @@ public class RESTBuilder {
clientBuilder.retryOnConnectionFailure(true); clientBuilder.retryOnConnectionFailure(true);
clientBuilder.addInterceptor(authInterceptor); clientBuilder.addInterceptor(authInterceptor);
clientBuilder.addInterceptor(new HttpInterceptor()); if (addInterceptors) clientBuilder.addInterceptor(new HttpInterceptor());
if (ADD_LOGGER_INTERCEPTOR) clientBuilder.addInterceptor(new HttpLoggerInterceptor()); if (ADD_LOGGER_INTERCEPTOR) clientBuilder.addInterceptor(new HttpLoggerInterceptor());
OkHttpClient client = clientBuilder.build(); OkHttpClient client = clientBuilder.build();

View File

@@ -132,7 +132,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
var codMarts = codMartToFind.parallelStream() var codMarts = codMartToFind.parallelStream()
.filter(Objects::nonNull) .filter(Objects::nonNull)
.distinct() .distinct()
.collect(Collectors.toUnmodifiableList()); .collect(Collectors.toUnmodifiableList());
ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class); ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class);
var response = articoloRESTConsumer var response = articoloRESTConsumer
.getByCodMart(new RetrieveArticoloByCodMartRequestDTO() .getByCodMart(new RetrieveArticoloByCodMartRequestDTO()
@@ -197,6 +197,17 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
return this.systemRESTConsumer.processSqlSynchronized("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList); return this.systemRESTConsumer.processSqlSynchronized("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList);
} }
public void getArtsGroups(List<String> groupsToFind, RunnableArgs<List<MtbGrup>> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var data = getArtsGroupsSynchronized(groupsToFind);
if (onComplete != null) onComplete.run(data);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
public List<MtbUntMis> getUntMisArtsSynchronized(List<String> inputUntMis) throws Exception { public List<MtbUntMis> getUntMisArtsSynchronized(List<String> inputUntMis) throws Exception {
List<HashMap<String, Object>> whereCondList = inputUntMis.parallelStream() List<HashMap<String, Object>> whereCondList = inputUntMis.parallelStream()

View File

@@ -11,7 +11,6 @@ import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -115,19 +114,8 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
return this.mEntityRESTConsumer.processEntityListSynchronized(mtbColtsToSave, true, MtbColt.class); return this.mEntityRESTConsumer.processEntityListSynchronized(mtbColtsToSave, true, MtbColt.class);
} }
public void createColloScaricoDaCarico(MtbColt sourceMtbColt, MtbDepoPosizione posizione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) { public void createColloScaricoDaCarico(MtbColt sourceMtbColt, MtbDepoPosizione posizione, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var mtbColt = createColloScaricoDaCaricoSynchronized(sourceMtbColt, posizione);
if (onComplete != null) onComplete.run(mtbColt);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
public MtbColt createColloScaricoDaCaricoSynchronized(MtbColt sourceMtbColt, MtbDepoPosizione posizione) throws Exception {
MtbColt newMtbColt = new MtbColt() MtbColt newMtbColt = new MtbColt()
.initDefaultFields(GestioneEnum.LAVORAZIONE) .initDefaultFields(GestioneEnum.LAVORAZIONE)
@@ -161,11 +149,11 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
mtbColrClone mtbColrClone
.setNumCollo(null) .setNumCollo(null)
.setDataCollo((LocalDate) null) .setDataCollo((String) null)
.setRiga(null) .setRiga(null)
.setGestione(GestioneEnum.LAVORAZIONE) .setGestione(GestioneEnum.LAVORAZIONE)
.setDataColloRif(sourceMtbColt.getDataColloLD()) .setDataColloRif(sourceMtbColt.getDataColloD())
.setNumColloRif(sourceMtbColt.getNumCollo()) .setNumColloRif(sourceMtbColt.getNumCollo())
.setGestioneRif(sourceMtbColt.getGestione()) .setGestioneRif(sourceMtbColt.getGestione())
.setSerColloRif(sourceMtbColt.getSerCollo()) .setSerColloRif(sourceMtbColt.getSerCollo())
@@ -176,7 +164,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
} }
return saveColloSynchronized(newMtbColt); saveCollo(newMtbColt, onComplete, onFailed);
} }
@@ -215,10 +203,10 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
MtbColr mtbColrClone = new MtbColr(); MtbColr mtbColrClone = new MtbColr();
mtbColrClone mtbColrClone
.setNumCollo(null) .setNumCollo(null)
.setDataCollo((LocalDate) null) .setDataCollo((String) null)
.setRiga(null) .setRiga(null)
.setGestione(GestioneEnum.LAVORAZIONE) .setGestione(GestioneEnum.LAVORAZIONE)
.setDataColloRif(sourceMtbColt.getDataColloLD()) .setDataColloRif(sourceMtbColt.getDataColloD())
.setNumColloRif(sourceMtbColt.getNumCollo()) .setNumColloRif(sourceMtbColt.getNumCollo())
.setGestioneRif(sourceMtbColt.getGestione()) .setGestioneRif(sourceMtbColt.getGestione())
.setSerColloRif(sourceMtbColt.getSerCollo()) .setSerColloRif(sourceMtbColt.getSerCollo())
@@ -373,7 +361,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
mtbColr.setGestione(mtbColt.getGestione()); mtbColr.setGestione(mtbColt.getGestione());
mtbColr.setSerCollo(mtbColt.getSerCollo()); mtbColr.setSerCollo(mtbColt.getSerCollo());
mtbColr.setNumCollo(mtbColt.getNumCollo()); mtbColr.setNumCollo(mtbColt.getNumCollo());
mtbColr.setDataCollo(mtbColt.getDataColloLD()); mtbColr.setDataCollo(mtbColt.getDataColloS());
} }
} }
@@ -409,7 +397,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
} }
} }
public MtbColt getByChiaveColloSynchronized(GestioneEnum gestione, int numCollo, LocalDate dataCollo, String serCollo, boolean onlyResiduo, boolean throwExcIfNull) throws Exception { public MtbColt getByChiaveColloSynchronized(GestioneEnum gestione, int numCollo, String dataCollo, String serCollo, boolean onlyResiduo, boolean throwExcIfNull) throws Exception {
MtbColt mtbColtToRetrieve = new MtbColt() MtbColt mtbColtToRetrieve = new MtbColt()
.setGestione(gestione) .setGestione(gestione)
.setNumCollo(numCollo) .setNumCollo(numCollo)
@@ -419,7 +407,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
return getByTestataSynchronized(mtbColtToRetrieve, onlyResiduo, throwExcIfNull); return getByTestataSynchronized(mtbColtToRetrieve, onlyResiduo, throwExcIfNull);
} }
public void getByChiaveCollo(GestioneEnum gestione, int numCollo, LocalDate dataCollo, String serCollo, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) { public void getByChiaveCollo(GestioneEnum gestione, int numCollo, String dataCollo, String serCollo, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToRetrieve = new MtbColt() MtbColt mtbColtToRetrieve = new MtbColt()
.setGestione(gestione) .setGestione(gestione)
.setNumCollo(numCollo) .setNumCollo(numCollo)

View File

@@ -3,7 +3,6 @@ package it.integry.integrywmsnative.core.rest.consumers;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -21,11 +20,9 @@ import retrofit2.Response;
public class DocumentRESTConsumer extends _BaseRESTConsumer { public class DocumentRESTConsumer extends _BaseRESTConsumer {
private final RESTBuilder restBuilder; private final RESTBuilder restBuilder;
private final ExecutorService executorService;
public DocumentRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) { public DocumentRESTConsumer(RESTBuilder restBuilder) {
this.restBuilder = restBuilder; this.restBuilder = restBuilder;
this.executorService = executorService;
} }
public void createDocsFromColli(List<LoadColliDTO> listColli, RunnableArgs<List<DtbDoct>> onComplete, RunnableArgs<Exception> onFailed) { public void createDocsFromColli(List<LoadColliDTO> listColli, RunnableArgs<List<DtbDoct>> onComplete, RunnableArgs<Exception> onFailed) {
@@ -43,22 +40,17 @@ public class DocumentRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public DtbDoct makeSynchronousCreateDocFromColliRequest(LoadColliDTO loadColliDTO) throws Exception { public void createDocFromColli(LoadColliDTO loadColliDTO, RunnableArgs<DtbDoct> onComplete, RunnableArgs<Exception> onFailed) {
DocumentiRESTConsumerService documentiRESTConsumerService = restBuilder.getService(DocumentiRESTConsumerService.class); DocumentiRESTConsumerService documentiRESTConsumerService = restBuilder.getService(DocumentiRESTConsumerService.class);
var response = documentiRESTConsumerService documentiRESTConsumerService.createDocFromColli(loadColliDTO).enqueue(new ManagedErrorCallback<>() {
.createDocFromColli(loadColliDTO) @Override
.execute(); public void onResponse(Call<ServiceRESTResponse<DtbDoct>> call, Response<ServiceRESTResponse<DtbDoct>> response) {
analyzeAnswer(response, "createDocFromColli", onComplete, onFailed);
}
return analyzeAnswer(response, "createDocFromColli"); @Override
} public void onFailure(Call<ServiceRESTResponse<DtbDoct>> call, @NonNull final Exception e) {
onFailed.run(e);
public void makeCreateDocFromColliRequest(LoadColliDTO loadColliDTO, RunnableArgs<DtbDoct> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var result = makeSynchronousCreateDocFromColliRequest(loadColliDTO);
if (onComplete != null) onComplete.run(result);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
} }
}); });
} }

View File

@@ -5,57 +5,37 @@ import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.pv.CloseVerificaRequestDTO;
import it.integry.integrywmsnative.core.rest.model.pv.DeleteRowVerificaRequestDTO;
import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO; import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO;
import it.integry.integrywmsnative.core.rest.model.pv.SaveNewRowVerificaRequestDTO; import it.integry.integrywmsnative.core.rest.model.pv.SaveNewVerificaRequestDTO;
import it.integry.integrywmsnative.core.rest.model.pv.UpdateRowVerificaRequestDTO;
public class GiacenzaPvRESTConsumer extends _BaseRESTConsumer { public class GiacenzaPvRESTConsumer extends _BaseRESTConsumer {
private final RESTBuilder restBuilder;
public GiacenzaPvRESTConsumer(RESTBuilder restBuilder) { private final RESTBuilder restBuilder;
private final ExecutorService executorService;
public GiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
this.restBuilder = restBuilder; this.restBuilder = restBuilder;
this.executorService = executorService;
} }
public List<GiacenzaPvDTO> retrieveGiacenzeSynchronized(String codMdep, String codMart) throws Exception {
public List<GiacenzaPvDTO> retrieveGiacenzeSynchronized(String codMdep) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 120); GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 120);
var response = giacenzaPvRESTConsumerService.retrieve(codMdep, codMart).execute(); var response = giacenzaPvRESTConsumerService.retrieve(codMdep)
.execute();
var giacenzeList = analyzeAnswer(response, "retrieve-giacenze-pv"); var giacenzeList = analyzeAnswer(response, "retrieve-giacenze-pv");
return giacenzeList != null ? giacenzeList : new ArrayList<>(); return giacenzeList != null ? giacenzeList : new ArrayList<>();
} }
public void saveNewRowSynchronized(SaveNewRowVerificaRequestDTO saveNewRowVerificaRequest) throws Exception { public void saveNewVerificaSynchronized(SaveNewVerificaRequestDTO saveNewVerificaRequest) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 0); GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 0);
var response = giacenzaPvRESTConsumerService.saveNewRowVerifica(saveNewRowVerificaRequest) var response = giacenzaPvRESTConsumerService.saveNewVerifica(saveNewVerificaRequest)
.execute(); .execute();
analyzeAnswer(response, "save-row-verifica-pv"); analyzeAnswer(response, "save-verifica-pv");
} }
public void updateRowSynchronized(UpdateRowVerificaRequestDTO updateRowVerificaRequest) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 0);
var response = giacenzaPvRESTConsumerService.updateRowVerifica(updateRowVerificaRequest)
.execute();
analyzeAnswer(response, "update-row-verifica-pv");
}
public void deleteRowSynchronized(DeleteRowVerificaRequestDTO deleteRowVerificaRequest) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 0);
var response = giacenzaPvRESTConsumerService.deleteRowVerifica(deleteRowVerificaRequest)
.execute();
analyzeAnswer(response, "delete-row-verifica-pv");
}
public void closeVerifica(CloseVerificaRequestDTO closeVerificaRequestDTO) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 0);
var response = giacenzaPvRESTConsumerService.closeVerifica(closeVerificaRequestDTO)
.execute();
analyzeAnswer(response, "close-verifica-pv");
}
} }

View File

@@ -3,11 +3,8 @@ package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.pv.CloseVerificaRequestDTO;
import it.integry.integrywmsnative.core.rest.model.pv.DeleteRowVerificaRequestDTO;
import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO; import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO;
import it.integry.integrywmsnative.core.rest.model.pv.SaveNewRowVerificaRequestDTO; import it.integry.integrywmsnative.core.rest.model.pv.SaveNewVerificaRequestDTO;
import it.integry.integrywmsnative.core.rest.model.pv.UpdateRowVerificaRequestDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
@@ -17,17 +14,9 @@ import retrofit2.http.Query;
public interface GiacenzaPvRESTConsumerService { public interface GiacenzaPvRESTConsumerService {
@GET("wms/pv/verifica_giacenze/retrieve") @GET("wms/pv/verifica_giacenze/retrieve")
Call<ServiceRESTResponse<List<GiacenzaPvDTO>>> retrieve(@Query("codMdep") String codMdep, @Query("codMart") String codMart); Call<ServiceRESTResponse<List<GiacenzaPvDTO>>> retrieve(@Query("codMdep") String codMdep);
@POST("wms/pv/verifica_giacenze/save_new_row")
Call<ServiceRESTResponse<Void>> saveNewRowVerifica(@Body SaveNewRowVerificaRequestDTO saveNewRowVerificaRequest);
@POST("wms/pv/verifica_giacenze/update_row") @POST("wms/pv/verifica_giacenze/save_new_verifica")
Call<ServiceRESTResponse<Void>> updateRowVerifica(@Body UpdateRowVerificaRequestDTO updateRowVerificaRequest); Call<ServiceRESTResponse<Void>> saveNewVerifica(@Body SaveNewVerificaRequestDTO saveNewVerificaRequest);
@POST("wms/pv/verifica_giacenze/delete_row")
Call<ServiceRESTResponse<Void>> deleteRowVerifica(@Body DeleteRowVerificaRequestDTO deleteRowVerificaRequest);
@POST("wms/pv/verifica_giacenze/close_verifica")
Call<ServiceRESTResponse<Void>> closeVerifica(@Body CloseVerificaRequestDTO closeVerificaRequest);
} }

View File

@@ -1,6 +1,5 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -9,8 +8,6 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.materiali.RecuperaMaterialiRequestDTO; import it.integry.integrywmsnative.core.rest.model.materiali.RecuperaMaterialiRequestDTO;
import it.integry.integrywmsnative.core.rest.model.materiali.VersaMaterialiRequestDTO;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULRestDTO;
@Singleton @Singleton
public class MaterialiRESTConsumer extends _BaseRESTConsumer { public class MaterialiRESTConsumer extends _BaseRESTConsumer {
@@ -23,28 +20,6 @@ public class MaterialiRESTConsumer extends _BaseRESTConsumer {
this.executorService = executorService; this.executorService = executorService;
} }
public List<HistoryVersamentoProdULRestDTO> makeSynchronousRetrieveLastVersamentiRequest(String codJfas) throws Exception {
var materialiRESTConsumerService = restBuilder.getService(MaterialiRESTConsumerService.class);
var response = materialiRESTConsumerService.retrieveLastVersamenti(codJfas)
.execute();
var data = analyzeAnswer(response, "retrieveLastVersamenti");
return data;
}
public void makeRetrieveLastVersamentiRequest(String codJfas, final RunnableArgs<List<HistoryVersamentoProdULRestDTO>> onComplete, final RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var response = makeSynchronousRetrieveLastVersamentiRequest(codJfas);
if (onComplete != null) onComplete.run(response);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
public MtbColt makeSynchronousRecuperaRequest(RecuperaMaterialiRequestDTO request) throws Exception { public MtbColt makeSynchronousRecuperaRequest(RecuperaMaterialiRequestDTO request) throws Exception {
var materialiRESTConsumerService = restBuilder.getService(MaterialiRESTConsumerService.class); var materialiRESTConsumerService = restBuilder.getService(MaterialiRESTConsumerService.class);
@@ -68,27 +43,4 @@ public class MaterialiRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void makeSynchronousVersaRequest(VersaMaterialiRequestDTO request) throws Exception {
var materialiRESTConsumerService = restBuilder.getService(MaterialiRESTConsumerService.class);
var response = materialiRESTConsumerService.versa(request)
.execute();
var data = analyzeAnswer(response, "versaMateriali");
// if (data == null) return null;
// return data.getUpdatedMtbColtScarico();
}
public void makeVersaRequest(VersaMaterialiRequestDTO request, final Runnable onComplete, final RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
makeSynchronousVersaRequest(request);
if (onComplete != null) onComplete.run();
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
} }

View File

@@ -1,27 +1,14 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.materiali.RecuperaMaterialiRequestDTO; import it.integry.integrywmsnative.core.rest.model.materiali.RecuperaMaterialiRequestDTO;
import it.integry.integrywmsnative.core.rest.model.materiali.RecuperaMaterialiResponseDTO; import it.integry.integrywmsnative.core.rest.model.materiali.RecuperaMaterialiResponseDTO;
import it.integry.integrywmsnative.core.rest.model.materiali.VersaMaterialiRequestDTO;
import it.integry.integrywmsnative.core.rest.model.materiali.VersaMaterialiResponseDTO;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULRestDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query;
public interface MaterialiRESTConsumerService { public interface MaterialiRESTConsumerService {
@POST("wms/materiali/versa")
Call<ServiceRESTResponse<VersaMaterialiResponseDTO>> versa(@Body VersaMaterialiRequestDTO request);
@GET("wms/materiali/retrieveLastVersamenti")
Call<ServiceRESTResponse<List<HistoryVersamentoProdULRestDTO>>> retrieveLastVersamenti(@Query("codJfas") String codJfas);
@POST("wms/materiali/recupera") @POST("wms/materiali/recupera")
Call<ServiceRESTResponse<RecuperaMaterialiResponseDTO>> recupera(@Body RecuperaMaterialiRequestDTO request); Call<ServiceRESTResponse<RecuperaMaterialiResponseDTO>> recupera(@Body RecuperaMaterialiRequestDTO request);

View File

@@ -66,14 +66,21 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
} }
public List<OrdineLavorazioneDTO> getOrdiniLavorazioneSynchronized(String flagEvaso) throws Exception { public void getOrdiniLavorazione(String flagEvaso, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = restBuilder.getService(MesRESTConsumerService.class); MesRESTConsumerService mesRESTConsumerService = restBuilder.getService(MesRESTConsumerService.class);
var response = mesRESTConsumerService.getOrdiniLavorazione(flagEvaso) mesRESTConsumerService.getOrdiniLavorazione(flagEvaso)
.execute(); .enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
var data = analyzeAnswer(response, "mes_v2/getOrdiniLavorazione"); @Override
return data; public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
} }
public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) { public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) {

View File

@@ -4,8 +4,11 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Optional; import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@@ -18,7 +21,6 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback; import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback;
@@ -26,7 +28,8 @@ import it.integry.integrywmsnative.core.rest.model.GetPickingListDTO;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.rest.model.uds.RetrieveAlreadyRegisteredUdsRequestDTO; import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import retrofit2.Call; import retrofit2.Call;
@@ -177,27 +180,44 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public List<AlreadyRegisteredUlDTO> getBancaliGiaRegistratiSynchronized(List<? extends OrdineInevasoDTO> orders, int segno) throws Exception { public void getBancaliGiaRegistrati(List<OrdineInevasoDTO> orders, GestioneEnum gestione, int segno, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
OrdiniRESTConsumerService service = restBuilder.getService(OrdiniRESTConsumerService.class); String whereCondGestione = "";
var request = new RetrieveAlreadyRegisteredUdsRequestDTO() if (gestione != null) {
.setOrdini(orders) whereCondGestione = "mtb_colt.gestione = " + UtilityDB.valueToString(gestione.getText()) + " ";
.setSegno(segno); } else {
whereCondGestione = "(mtb_colt.gestione = 'V' OR mtb_colt.gestione = 'L') ";
}
var response = service.retrieveAlreadyRegisteredUDS(request) String baseSql = "SELECT DISTINCT mtb_colt.* " +
.execute(); "FROM mtb_colt " +
var data = analyzeAnswer(response, "getBancaliGiaRegistrati"); " INNER JOIN mtb_colr ON " +
return data == null || data.getUdsList() == null ? new ArrayList<>() : data.getUdsList(); " mtb_colt.gestione = mtb_colr.gestione " +
} " AND mtb_colt.ser_collo = mtb_colr.ser_collo " +
" AND mtb_colt.data_collo = mtb_colr.data_collo " +
" AND mtb_colt.num_collo = mtb_colr.num_collo " +
" WHERE " + whereCondGestione +
" AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " +
" AND mtb_colt.data_doc IS NULL AND ";
public void getBancaliGiaRegistrati(List<OrdineInevasoDTO> orders, int segno, RunnableArgs<List<AlreadyRegisteredUlDTO>> onComplete, RunnableArgs<Exception> onFailed) { List<HashMap<String, Object>> whereCondMapList = new ArrayList<>();
executorService.execute(() -> { for (OrdineInevasoDTO ordineInevaso : orders) {
try { HashMap<String, Object> whereCondMap = new HashMap<>();
var result = getBancaliGiaRegistratiSynchronized(orders, segno); whereCondMap.put("mtb_colr.data_ord", ordineInevaso.getDataOrdD());
if (onComplete != null) onComplete.run(result); whereCondMap.put("mtb_colr.num_ord", ordineInevaso.getNumOrd());
} catch (Exception ex) { whereCondMap.put("mtb_colr.gestione", ordineInevaso.getGestione());
if (onFailed != null) onFailed.run(ex);
} whereCondMapList.add(whereCondMap);
}
baseSql += "(" + UtilityQuery.concatFieldListInWhereCond(whereCondMapList) + ")";
Type typeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {
}.getType();
this.mSystemRESTConsumer.<List<MtbColt>>processSql(baseSql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
}); });
} }

View File

@@ -5,8 +5,6 @@ import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.uds.RetrieveAlreadyRegisteredUdsRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.RetrieveAlreadyRegisteredUdsResponseDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.core.rest.model.GetPickingListDTO; import it.integry.integrywmsnative.core.rest.model.GetPickingListDTO;
import retrofit2.Call; import retrofit2.Call;
@@ -25,7 +23,4 @@ public interface OrdiniRESTConsumerService {
@GET("SM2GetOrdiniVenditaInevasi") @GET("SM2GetOrdiniVenditaInevasi")
Call<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>> getOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione); Call<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>> getOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione);
@POST("wms/spedizione/retrieveAlreadyRegisteredUDS")
Call<ServiceRESTResponse<RetrieveAlreadyRegisteredUdsResponseDTO>> retrieveAlreadyRegisteredUDS(@Body RetrieveAlreadyRegisteredUdsRequestDTO request);
} }

View File

@@ -125,12 +125,13 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
public void printClosedOrdersSynchronized(PrintOrderCloseDTO dto, String codMdep) throws Exception { public void printClosedOrdersSynchronized(PrintOrderCloseDTO dto, String codMdep) throws Exception {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
// return; return;
} }
PrinterRESTConsumerService printerService = restBuilder.getService(PrinterRESTConsumerService.class, 240); PrinterRESTConsumerService printerService = restBuilder.getService(PrinterRESTConsumerService.class, 240);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, dto);
var response = printerService.printClosedOrders(codMdep, dto).execute(); var response = callable.execute();
analyzeAnswer(response, "printCollo"); analyzeAnswer(response, "printCollo");
} }

View File

@@ -1,5 +1,8 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.gson.Gson; import com.google.gson.Gson;
@@ -14,6 +17,8 @@ import java.util.concurrent.ExecutorService;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback; import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback;
@@ -22,7 +27,9 @@ import it.integry.integrywmsnative.core.rest.model.MailRequestDTO;
import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityGson; import it.integry.integrywmsnative.core.utility.UtilityGson;
import it.integry.integrywmsnative.core.utility.UtilityString;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Response; import retrofit2.Response;
@@ -103,6 +110,36 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void sendErrorLogMail(String message, Runnable onComplete, RunnableArgs<Exception> onFailed) {
String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().getUserSession().getProfileDB()) ? "" : " [" + SettingsManager.i().getUserSession().getProfileDB() + "]";
String dest = "";
if (BuildConfig.DEBUG) {
dest = TextUtils.join(";", CommonConst.Mail.forErrorsDebug);
} else {
dest = TextUtils.join(";", CommonConst.Mail.forErrors);
}
MailRequestDTO mailDTO = new MailRequestDTO()
.setFrom("sender@integry.it")
.setFromName((BuildConfig.DEBUG ? "[DEBUG] " : "") + "WMS Android")
.setTo(dest)
.setSubject("Bug notification" + currentAzienda)
.setMsgText(message)
.setHtml(true);
sendMail(mailDTO, () -> {
if (onComplete != null) onComplete.run();
}, ex -> {
Log.e(SystemRESTConsumer.class.getName(), "", ex);
if (onFailed != null) onFailed.run(ex);
});
}
public void sendMailSynchronized(MailRequestDTO mailDTO) throws Exception { public void sendMailSynchronized(MailRequestDTO mailDTO) throws Exception {
SystemRESTConsumerService service = restBuilder.getService(SystemRESTConsumerService.class); SystemRESTConsumerService service = restBuilder.getService(SystemRESTConsumerService.class);
var response = service.sendMail(mailDTO).execute(); var response = service.sendMail(mailDTO).execute();

View File

@@ -1,13 +1,8 @@
package it.integry.integrywmsnative.core.rest.model; package it.integry.integrywmsnative.core.rest.model;
import com.google.gson.annotations.SerializedName;
public class AvailableCodMdepsDTO { public class AvailableCodMdepsDTO {
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
public String getCodMdep() { public String getCodMdep() {

View File

@@ -1,110 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.materiali;
import java.math.BigDecimal;
import java.time.LocalDate;
public class VersaMaterialiRequestDTO {
private String codMart;
private String partitaMag;
private BigDecimal numCnf;
private BigDecimal qtaCnf;
private BigDecimal qtaTot;
private Integer numCollo;
private LocalDate dataCollo;
private String gestione;
private String serCollo;
private String barcodeUl;
public String getCodMart() {
return codMart;
}
public VersaMaterialiRequestDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public VersaMaterialiRequestDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public VersaMaterialiRequestDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public VersaMaterialiRequestDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public VersaMaterialiRequestDTO setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public Integer getNumCollo() {
return numCollo;
}
public VersaMaterialiRequestDTO setNumCollo(Integer numCollo) {
this.numCollo = numCollo;
return this;
}
public LocalDate getDataCollo() {
return dataCollo;
}
public VersaMaterialiRequestDTO setDataCollo(LocalDate dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public String getGestione() {
return gestione;
}
public VersaMaterialiRequestDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public String getSerCollo() {
return serCollo;
}
public VersaMaterialiRequestDTO setSerCollo(String serCollo) {
this.serCollo = serCollo;
return this;
}
public String getBarcodeUl() {
return barcodeUl;
}
public VersaMaterialiRequestDTO setBarcodeUl(String barcodeUl) {
this.barcodeUl = barcodeUl;
return this;
}
}

View File

@@ -1,4 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.materiali;
public class VersaMaterialiResponseDTO {
}

View File

@@ -1,27 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.time.LocalDateTime;
public class CloseVerificaRequestDTO {
private String codMdep;
private LocalDateTime dataVerifica;
public String getCodMdep() {
return codMdep;
}
public CloseVerificaRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public LocalDateTime getDataVerifica() {
return dataVerifica;
}
public CloseVerificaRequestDTO setDataVerifica(LocalDateTime dataVerifica) {
this.dataVerifica = dataVerifica;
return this;
}
}

View File

@@ -1,37 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.time.LocalDateTime;
public class DeleteRowVerificaRequestDTO {
private String codMdep;
private LocalDateTime dataVerifica;
private VerificaGiacenzeRowDTO row;
public String getCodMdep() {
return codMdep;
}
public DeleteRowVerificaRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public LocalDateTime getDataVerifica() {
return dataVerifica;
}
public DeleteRowVerificaRequestDTO setDataVerifica(LocalDateTime dataVerifica) {
this.dataVerifica = dataVerifica;
return this;
}
public VerificaGiacenzeRowDTO getRow() {
return row;
}
public DeleteRowVerificaRequestDTO setRow(VerificaGiacenzeRowDTO row) {
this.row = row;
return this;
}
}

View File

@@ -1,38 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.time.LocalDateTime;
public class SaveNewRowVerificaRequestDTO {
private String codMdep;
private LocalDateTime dataVerifica;
private VerificaGiacenzeRowDTO row;
public String getCodMdep() {
return codMdep;
}
public SaveNewRowVerificaRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public LocalDateTime getDataVerifica() {
return dataVerifica;
}
public SaveNewRowVerificaRequestDTO setDataVerifica(LocalDateTime dataVerifica) {
this.dataVerifica = dataVerifica;
return this;
}
public VerificaGiacenzeRowDTO getRow() {
return row;
}
public SaveNewRowVerificaRequestDTO setRow(VerificaGiacenzeRowDTO row) {
this.row = row;
return this;
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.core.rest.model.pv;
public class SaveNewVerificaRequestDTO {
private VerificaGiacenzeDTO data;
public VerificaGiacenzeDTO getData() {
return data;
}
public SaveNewVerificaRequestDTO setData(VerificaGiacenzeDTO data) {
this.data = data;
return this;
}
}

View File

@@ -1,38 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.time.LocalDateTime;
public class UpdateRowVerificaRequestDTO {
private String codMdep;
private LocalDateTime dataVerifica;
private VerificaGiacenzeRowDTO row;
public String getCodMdep() {
return codMdep;
}
public UpdateRowVerificaRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public LocalDateTime getDataVerifica() {
return dataVerifica;
}
public UpdateRowVerificaRequestDTO setDataVerifica(LocalDateTime dataVerifica) {
this.dataVerifica = dataVerifica;
return this;
}
public VerificaGiacenzeRowDTO getRow() {
return row;
}
public UpdateRowVerificaRequestDTO setRow(VerificaGiacenzeRowDTO row) {
this.row = row;
return this;
}
}

View File

@@ -1,29 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.uds;
import java.util.List;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
public class RetrieveAlreadyRegisteredUdsRequestDTO {
private List<? extends OrdineInevasoDTO> ordini;
private int segno;
public List<? extends OrdineInevasoDTO> getOrdini() {
return ordini;
}
public RetrieveAlreadyRegisteredUdsRequestDTO setOrdini(List<? extends OrdineInevasoDTO> ordini) {
this.ordini = ordini;
return this;
}
public int getSegno() {
return segno;
}
public RetrieveAlreadyRegisteredUdsRequestDTO setSegno(int segno) {
this.segno = segno;
return this;
}
}

View File

@@ -1,19 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.uds;
import java.util.List;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO;
public class RetrieveAlreadyRegisteredUdsResponseDTO {
private List<AlreadyRegisteredUlDTO> udsList;
public List<AlreadyRegisteredUlDTO> getUdsList() {
return udsList;
}
public RetrieveAlreadyRegisteredUdsResponseDTO setUdsList(List<AlreadyRegisteredUlDTO> udsList) {
this.udsList = udsList;
return this;
}
}

View File

@@ -16,6 +16,7 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@Singleton @Singleton
public class InventarioService { public class InventarioService {
@@ -47,7 +48,7 @@ public class InventarioService {
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt.setGestione(inventario.getGestione()); mtbColt.setGestione(inventario.getGestione());
mtbColt.setDataCollo(inventario.getDataCollo()); mtbColt.setDataCollo(UtilityDate.toDate(inventario.getDataCollo()));
mtbColt.setSerCollo(inventario.getSerCollo()); mtbColt.setSerCollo(inventario.getSerCollo());
mtbColt.setNumCollo(inventario.getNumCollo()); mtbColt.setNumCollo(inventario.getNumCollo());
mtbColt.setSegno(inventario.getSegno()); mtbColt.setSegno(inventario.getSegno());
@@ -70,7 +71,7 @@ public class InventarioService {
MtbColr mtbColr = new MtbColr(); MtbColr mtbColr = new MtbColr();
mtbColr.setGestione(inventario.getGestione()); mtbColr.setGestione(inventario.getGestione());
mtbColr.setDataCollo(inventario.getDataCollo()); mtbColr.setDataCollo(UtilityDate.toDate(inventario.getDataCollo()));
mtbColr.setSerCollo(inventario.getSerCollo()); mtbColr.setSerCollo(inventario.getSerCollo());
mtbColr.setNumCollo(inventario.getNumCollo()); mtbColr.setNumCollo(inventario.getNumCollo());
mtbColr.setCodMart(inventario.getCodMart()); mtbColr.setCodMart(inventario.getCodMart());

View File

@@ -97,11 +97,6 @@ public class DBSettingsModel {
private List<String> allowedCodMgrpForArtCreation; private List<String> allowedCodMgrpForArtCreation;
private boolean flagAccettazioneGroupListForn = false; private boolean flagAccettazioneGroupListForn = false;
private boolean flagSpedizioneEnableFastPicking = false; private boolean flagSpedizioneEnableFastPicking = false;
private boolean flagAccettazioneBollaEditableQtaTot = true;
private boolean flagViewSwitchDepoButton = true;
private boolean flagProduzioneSkipAskVersamentoAutomatico;
private boolean flagAccettazioneViewLotto = false;
private boolean flagAccettazioneBollaMarkReceived = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@@ -820,47 +815,4 @@ public class DBSettingsModel {
public void setFlagSpedizioneEnableFastPicking(boolean flagSpedizioneEnableFastPicking) { public void setFlagSpedizioneEnableFastPicking(boolean flagSpedizioneEnableFastPicking) {
this.flagSpedizioneEnableFastPicking = flagSpedizioneEnableFastPicking; this.flagSpedizioneEnableFastPicking = flagSpedizioneEnableFastPicking;
} }
public boolean isFlagAccettazioneBollaEditableQtaTot() {
return flagAccettazioneBollaEditableQtaTot;
}
public void setFlagAccettazioneBollaEditableQtaTot(boolean flagAccettazioneBollaEditableQtaTot) {
this.flagAccettazioneBollaEditableQtaTot = flagAccettazioneBollaEditableQtaTot;
}
public boolean isFlagViewSwitchDepoButton() {
return flagViewSwitchDepoButton;
}
public void setFlagViewSwitchDepoButton(boolean flagViewSwitchDepoButton) {
this.flagViewSwitchDepoButton = flagViewSwitchDepoButton;
}
public boolean isFlagProduzioneSkipAskVersamentoAutomatico() {
return flagProduzioneSkipAskVersamentoAutomatico;
}
public DBSettingsModel setFlagProduzioneSkipAskVersamentoAutomatico(boolean flagProduzioneSkipAskVersamentoAutomatico) {
this.flagProduzioneSkipAskVersamentoAutomatico = flagProduzioneSkipAskVersamentoAutomatico;
return this;
}
public boolean isFlagAccettazioneViewLotto() {
return flagAccettazioneViewLotto;
}
public DBSettingsModel setFlagAccettazioneViewLotto(boolean flagAccettazioneViewLotto) {
this.flagAccettazioneViewLotto = flagAccettazioneViewLotto;
return this;
}
public boolean isFlagAccettazioneBollaMarkReceived() {
return flagAccettazioneBollaMarkReceived;
}
public DBSettingsModel setFlagAccettazioneBollaMarkReceived(boolean flagAccettazioneBollaMarkReceived) {
this.flagAccettazioneBollaMarkReceived = flagAccettazioneBollaMarkReceived;
return this;
}
} }

View File

@@ -39,6 +39,8 @@ public class SettingsManager {
private static SettingsModel settingsModelIstance; private static SettingsModel settingsModelIstance;
private static DBSettingsModel dbSettingsModelIstance; private static DBSettingsModel dbSettingsModelIstance;
private static boolean firstStart = false;
private static Context mContext; private static Context mContext;
private static SystemRESTConsumer mSystemRESTConsumer; private static SystemRESTConsumer mSystemRESTConsumer;
private static ImballiRESTConsumer mImballiRESTConsumer; private static ImballiRESTConsumer mImballiRESTConsumer;
@@ -63,15 +65,15 @@ public class SettingsManager {
public void init() { public void init() {
settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class); settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class);
if (settingsModelIstance == null) if (settingsModelIstance == null) {
settingsModelIstance = new SettingsModel(); settingsModelIstance = new SettingsModel();
if (settingsModelIstance.getServer() == null)
settingsModelIstance.setServer(new SettingsModel.Server()); settingsModelIstance.setServer(new SettingsModel.Server());
firstStart = true;
}
dbSettingsModelIstance = new DBSettingsModel(); dbSettingsModelIstance = new DBSettingsModel();
} }
public SettingsModel getSettings() { public SettingsModel getSettings() {
@@ -87,6 +89,10 @@ public class SettingsManager {
return dbSettingsModelIstance; return dbSettingsModelIstance;
} }
public static boolean isFirstStart() {
return firstStart;
}
public static boolean isInstanceAvailable() { public static boolean isInstanceAvailable() {
return i() != null; return i() != null;
} }
@@ -254,11 +260,6 @@ public class SettingsManager {
.setSection("ACCETTAZIONE") .setSection("ACCETTAZIONE")
.setKeySection("FLAG_DELETE_ROW_ON_CLOSE") .setKeySection("FLAG_DELETE_ROW_ON_CLOSE")
.setSetter(dbSettingsModelIstance::setFlagAccettazioneDeleteRowOnClose)); .setSetter(dbSettingsModelIstance::setFlagAccettazioneDeleteRowOnClose));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE")
.setKeySection("FLAG_VIEW_LOTTO")
.setSetter(dbSettingsModelIstance::setFlagAccettazioneViewLotto));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
@@ -306,12 +307,6 @@ public class SettingsManager {
.setSection("PRODUZIONE") .setSection("PRODUZIONE")
.setKeySection("VIEW_POSIZIONI") .setKeySection("VIEW_POSIZIONI")
.setSetter(dbSettingsModelIstance::setViewPosizioni)); .setSetter(dbSettingsModelIstance::setViewPosizioni));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("FLAG_SKIP_ASK_VERSAMENTO_AUTOMATICO")
.setSetter(dbSettingsModelIstance::setFlagProduzioneSkipAskVersamentoAutomatico)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
@@ -485,12 +480,6 @@ public class SettingsManager {
.setKeySection("FLAG_ASK_PRINT_UL") .setKeySection("FLAG_ASK_PRINT_UL")
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaAskPrintUl) .setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaAskPrintUl)
.setDefaultValue(false)); .setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ENABLE_MARK_RECEIVED")
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaMarkReceived)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA") .setSection("ACCETTAZIONE_BOLLA")
@@ -575,12 +564,6 @@ public class SettingsManager {
.setKeySection("ENABLE_FAST_PICKING") .setKeySection("ENABLE_FAST_PICKING")
.setSetter(dbSettingsModelIstance::setFlagSpedizioneEnableFastPicking) .setSetter(dbSettingsModelIstance::setFlagSpedizioneEnableFastPicking)
.setDefaultValue(false)); .setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_QTA_TOT_EDITABLE")
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaEditableQtaTot)
.setDefaultValue(true));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING") .setGestName("PICKING")
@@ -634,13 +617,6 @@ public class SettingsManager {
.setKeySection("ENABLE_ART_CREATION") .setKeySection("ENABLE_ART_CREATION")
.setSetter(dbSettingsModelIstance::setFlagEnableArtCreation)); .setSetter(dbSettingsModelIstance::setFlagEnableArtCreation));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("VIEW_SWITCH_DEPO_BUTTON")
.setSetter(dbSettingsModelIstance::setFlagViewSwitchDepoButton)
);
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SETUP") .setSection("SETUP")

View File

@@ -7,22 +7,18 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.text.Html;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import java.io.File; import java.io.File;
import java.util.Objects;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.helper.ContextHelper;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
@@ -30,14 +26,11 @@ import it.integry.integrywmsnative.core.utility.FileDownloader;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableView; import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableView;
@Singleton @Singleton
public class UpdatesManager { public class UpdatesManager {
private static final String TAG = "UpdatesManager";
private final ExecutorService executorService; private final ExecutorService executorService;
private final Handler handler; private final Handler handler;
private final SystemRESTConsumer systemRESTConsumer; private final SystemRESTConsumer systemRESTConsumer;
@@ -48,149 +41,109 @@ public class UpdatesManager {
this.systemRESTConsumer = systemRESTConsumer; this.systemRESTConsumer = systemRESTConsumer;
} }
public void executeCheck(@NonNull Context context, @NonNull FragmentManager fragmentManager, boolean forceReinstall) { public void executeCheck(Context context, boolean forceReinstall) {
executorService.execute(() -> { executorService.execute(() -> {
try { try {
final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() +
(SettingsManager.i().getServer().getPort() > 0 ? ":" + SettingsManager.i().getServer().getPort() : "") + "/ems-api/";
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
boolean betaEnabled = sharedPreferences.getBoolean(MainSettingsFragment.KEY_BUTTON_ENABLE_BETA, false); var betaEnabled = sharedPreferences.getBoolean(MainSettingsFragment.KEY_BUTTON_ENABLE_BETA, false);
LatestAppVersionInfoDTO latestData = systemRESTConsumer.retrieveUpdatesInfoSynchronized(betaEnabled); LatestAppVersionInfoDTO latestData = systemRESTConsumer.retrieveUpdatesInfoSynchronized(betaEnabled);
if (latestData == null) { if (latestData == null)
Log.d(TAG, "No update information received from server.");
return; return;
}
boolean isUpdateRequired = latestData.getLatestVersionCode() > BuildConfig.VERSION_CODE; if (latestData.getLatestVersionCode() < BuildConfig.VERSION_CODE)
boolean currentVersionIsBeta = BuildConfig.VERSION_NAME.toLowerCase().contains("beta");
boolean isChannelSwitch = currentVersionIsBeta != betaEnabled;
if (!isUpdateRequired && !forceReinstall && !isChannelSwitch) {
Log.d(TAG, "App is up to date.");
return; return;
}
// Se si passa da beta a stabile (o viceversa) o se è una reinstallazione forzata, boolean currentVersionIsBeta = BuildConfig.VERSION_NAME.contains("beta");
// l'aggiornamento non deve essere obbligatorio per non bloccare l'utente.
if (isChannelSwitch || forceReinstall) { if(!forceReinstall && currentVersionIsBeta == betaEnabled && latestData.getLatestVersionCode() == BuildConfig.VERSION_CODE)
return;
//Se sto passando da una beta a una stable e viceversa non obbligo l'utente a fare l'aggiornamento
if(currentVersionIsBeta != betaEnabled || forceReinstall) {
latestData.setForced(false); latestData.setForced(false);
} }
final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + String currentDownloadUrl = baseEndpoint + latestData.getUrl();
(SettingsManager.i().getServer().getPort() > 0 ? ":" + SettingsManager.i().getServer().getPort() : "") + "/ems-api/";
String downloadUrl = baseEndpoint + latestData.getUrl();
handler.post(() -> showUpdateAvailableDialog(context, fragmentManager, latestData, downloadUrl)); showDialog(context, latestData, () -> {
installAPK(context, currentDownloadUrl);
});
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Error during update check", e); handler.post(() -> {
// Se il check fallisce, non è un errore bloccante. L'utente può continuare a usare l'app. UtilityExceptions.defaultException(context, e);
});
} }
}); });
} }
private void showUpdateAvailableDialog(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull LatestAppVersionInfoDTO updatesData, @NonNull String downloadUrl) { private void showDialog(Context context, LatestAppVersionInfoDTO updatesData, Runnable onUpdateStart) {
DialogUpdateAvailableView dialog = DialogUpdateAvailableView.newInstance(updatesData, () -> { DialogUpdateAvailableView.newInstance(updatesData, onUpdateStart)
// L'utente ha accettato di aggiornare .show(((FragmentActivity)context).getSupportFragmentManager(), "dialog-updates");
downloadAndInstall(context, fragmentManager, downloadUrl, updatesData.isForced());
});
if (updatesData.isForced()) {
dialog.setCancelable(false);
}
dialog.show(fragmentManager, "dialog-updates");
} }
private void downloadAndInstall(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull String downloadUrl, boolean isForced) { private void installAPK(Context context, String downloadURL) {
DialogProgressView progressDialog = new DialogProgressView("Download", null, false);
if (isForced) { File destination = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
progressDialog.setCancelable(false);
} var progressDialogBuilder = new DialogProgressView("Download", null, false);
progressDialog.show(fragmentManager, "progress-dialog"); progressDialogBuilder.show(Objects.requireNonNull(ContextHelper.getFragmentManagerFromContext(context)), "tag");
var fileDownloader = new FileDownloader()
.setDestFolder(destination)
.setUrlString(downloadURL)
.setOnProgressUpdate(progress -> {
handler.post(() -> {
progressDialogBuilder.setProgress(progress);
});
})
.setOnDownloadCompleted(destPath -> {
handler.post(() -> {
progressDialogBuilder.dismiss();
if (!destination.exists()) {
UtilityExceptions.defaultException(context, new Exception("Errore durante il download dell'aggiornamento"));
return;
}
Uri fileLoc;
Intent intent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
fileLoc = GenericFileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider",
destPath);
} else {
intent = new Intent(Intent.ACTION_VIEW);
fileLoc = Uri.fromFile(destPath);
}
intent.setDataAndType(fileLoc, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
});
});
FileDownloader fileDownloader = new FileDownloader()
.setExecutorService(executorService)
.setDestFolder(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS))
.setUrlString(downloadUrl)
.setOnProgressUpdate(progress -> handler.post(() -> progressDialog.setProgress(progress)));
executorService.execute(() -> { executorService.execute(() -> {
try { try {
File apkFile = fileDownloader.download(); fileDownloader.download();
handler.post(() -> {
progressDialog.dismiss();
installApk(context, fragmentManager, apkFile, isForced);
});
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Download failed", e); progressDialogBuilder.dismissAllowingStateLoss();
handler.post(() -> { UtilityExceptions.defaultException(context, e);
progressDialog.dismissAllowingStateLoss();
handleUpdateError(fragmentManager, e, isForced);
});
} }
}); });
} }
private void installApk(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull File apkFile, boolean isForced) {
if (!apkFile.exists()) {
handleUpdateError(fragmentManager, new Exception("File APK non trovato dopo il download."), isForced);
return;
}
Uri fileUri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fileUri = GenericFileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider",
apkFile);
} else {
fileUri = Uri.fromFile(apkFile);
}
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setDataAndType(fileUri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
try {
context.startActivity(intent);
// Se l'aggiornamento è forzato, l'app si chiuderà per attendere l'installazione manuale.
if (isForced) {
// Diamo tempo all'utente di vedere l'installer di sistema prima di chiudere l'app.
handler.postDelayed(MainApplication::exit, 1000);
}
} catch (Exception e) {
Log.e(TAG, "Failed to start APK installation", e);
handleUpdateError(fragmentManager, e, isForced);
}
}
private void handleUpdateError(@NonNull FragmentManager fragmentManager, @NonNull Exception ex, boolean isForced) {
FirebaseCrashlytics.getInstance().recordException(ex);
String errorMessage = UtilityExceptions.recognizeExceptionMessage(ex);
handler.post(() -> {
String title = isForced ? "Aggiornamento Obbligatorio Fallito" : "Errore Aggiornamento";
Runnable onPositiveClick = null;
if (isForced) {
onPositiveClick = MainApplication::exit;
}
DialogSimpleMessageView dialog = DialogSimpleMessageView.newInstance(
isForced ? DialogSimpleMessageView.TYPE.ERROR : DialogSimpleMessageView.TYPE.WARNING,
title,
Html.fromHtml(errorMessage),
null,
onPositiveClick,
null,
null,
null);
if (isForced) {
dialog.setCancelable(false);
}
dialog.show(fragmentManager, "error-dialog");
});
}
} }

View File

@@ -9,9 +9,6 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicReference;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -21,87 +18,68 @@ public class FileDownloader {
private File destFolder; private File destFolder;
private RunnableArgs<Integer> onProgressUpdate; private RunnableArgs<Integer> onProgressUpdate;
private RunnableArgs<File> onDownloadCompleted;
private ExecutorService executorService;
public File download() throws Exception { public void download() throws Exception {
CountDownLatch countDownLatch = new CountDownLatch(1); InputStream input = null;
OutputStream output = null;
HttpURLConnection connection = null;
File downloadFile = null;
AtomicReference<File> result = new AtomicReference<>(); try {
AtomicReference<Exception> exceptionAtomicReference = new AtomicReference<>(); if (!destFolder.exists()) destFolder.mkdirs();
executorService.execute(() -> { URL url = new URL(urlString);
InputStream input = null; connection = (HttpURLConnection) url.openConnection();
OutputStream output = null; connection.connect();
HttpURLConnection connection = null; connection.setConnectTimeout(120 * 1000);
File downloadFile = null;
try { if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
if (!destFolder.exists()) destFolder.mkdirs(); throw new Exception("Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage());
URL url = new URL(urlString); input = connection.getInputStream();
connection = (HttpURLConnection) url.openConnection(); int totalBytesToDownload = connection.getContentLength();
connection.connect(); int downloadedBytes = 0;
connection.setConnectTimeout(120 * 1000);
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) String title = URLUtil.guessFileName(String.valueOf(url), null, null);
throw new Exception("Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage()); downloadFile = new File(destFolder, title);
input = connection.getInputStream(); if (downloadFile.exists())
int totalBytesToDownload = connection.getContentLength(); downloadFile.delete();
int downloadedBytes = 0;
String title = URLUtil.guessFileName(String.valueOf(url), null, null); output = new FileOutputStream(downloadFile);
downloadFile = new File(destFolder, title);
if (downloadFile.exists()) byte[] buf = new byte[1024];
downloadFile.delete(); int len;
while ((len = input.read(buf)) > 0) {
output.write(buf, 0, len);
output = new FileOutputStream(downloadFile); downloadedBytes += len;
if (onProgressUpdate != null)
byte[] buf = new byte[1024]; onProgressUpdate.run((downloadedBytes * 100) / totalBytesToDownload);
int len;
while ((len = input.read(buf)) > 0) {
output.write(buf, 0, len);
downloadedBytes += len;
if (onProgressUpdate != null)
onProgressUpdate.run((downloadedBytes * 100) / totalBytesToDownload);
}
result.set(downloadFile);
} catch (Exception e) {
if(downloadFile != null && downloadFile.exists())
downloadFile.delete();
exceptionAtomicReference.set(e);
} finally {
try {
if (output != null)
output.close();
if (input != null)
input.close();
} catch (IOException ignored) {
}
if (connection != null)
connection.disconnect();
countDownLatch.countDown();
} }
});
countDownLatch.await(); } catch (Exception e) {
if(downloadFile != null && downloadFile.exists())
downloadFile.delete();
throw e;
if(exceptionAtomicReference.get() != null) } finally {
throw exceptionAtomicReference.get(); try {
if (output != null)
output.close();
if (input != null)
input.close();
} catch (IOException ignored) {
}
if (connection != null)
connection.disconnect();
}
return result.get(); if (onDownloadCompleted != null) onDownloadCompleted.run(downloadFile);
} }
public FileDownloader setExecutorService(ExecutorService executorService) {
this.executorService = executorService;
return this;
}
public String getUrlString() { public String getUrlString() {
return urlString; return urlString;
@@ -125,4 +103,9 @@ public class FileDownloader {
this.onProgressUpdate = onProgressUpdate; this.onProgressUpdate = onProgressUpdate;
return this; return this;
} }
public FileDownloader setOnDownloadCompleted(RunnableArgs<File> onDownloadCompleted) {
this.onDownloadCompleted = onDownloadCompleted;
return this;
}
} }

View File

@@ -1,29 +0,0 @@
package it.integry.integrywmsnative.core.utility;
import android.text.method.DigitsKeyListener;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
/**
* KeyListener personalizzato che accetta numeri decimali
* usando il separatore decimale del locale corrente (virgola per italiano)
*/
public class LocaleDecimalKeyListener {
/**
* Ottiene un'istanza del KeyListener per il locale corrente
*/
public static DigitsKeyListener getInstance() {
return getInstance(Locale.getDefault());
}
/**
* Ottiene un'istanza del KeyListener per un locale specifico
*/
public static DigitsKeyListener getInstance(Locale locale) {
DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
char decimalSeparator = symbols.getDecimalSeparator();
return DigitsKeyListener.getInstance("0123456789" + decimalSeparator);
}
}

View File

@@ -78,7 +78,7 @@ public class UtilityBarcode {
public static boolean isEanPeso(BarcodeScanDTO barcodeScanDTO) { public static boolean isEanPeso(BarcodeScanDTO barcodeScanDTO) {
return (isEtichetta128(barcodeScanDTO) || isEan13(barcodeScanDTO)) && barcodeScanDTO.getStringValue().length() == 13 && barcodeScanDTO.getStringValue().startsWith("2"); return (isEtichetta128(barcodeScanDTO) || isEan13(barcodeScanDTO)) && barcodeScanDTO.getStringValue().startsWith("2");
} }
public static boolean isEan8(BarcodeScanDTO barcodeScanDTO) { public static boolean isEan8(BarcodeScanDTO barcodeScanDTO) {

View File

@@ -41,19 +41,6 @@ public class UtilityDate {
public static final String DM_HUMAN = "dd MMM"; public static final String DM_HUMAN = "dd MMM";
public static final String DMY_HUMAN = "dd MMM yyyy"; public static final String DMY_HUMAN = "dd MMM yyyy";
public static final String DMY_HUMAN_LONG = "dd MMMM yyyy"; public static final String DMY_HUMAN_LONG = "dd MMMM yyyy";
public static final DateTimeFormatter DATE_DMY_SLASHED_FORMATTER = DateTimeFormatter.ofPattern(DMY_SLASH)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATETIME_DMY_SLASHED_FORMATTER = DateTimeFormatter.ofPattern(DMY_TIME_SLASH)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATE_DMY_HUMAN_FORMATTER = DateTimeFormatter.ofPattern(DMY_HUMAN_LONG)
.withZone(ZoneId.systemDefault());
} }
public static Date recognizeDateWithExceptionHandler(String dateString) { public static Date recognizeDateWithExceptionHandler(String dateString) {

View File

@@ -38,7 +38,13 @@ public class UtilityExceptions {
Logger.e(ex, "Errore", (Object) ex.getStackTrace()); Logger.e(ex, "Errore", (Object) ex.getStackTrace());
} }
String errorMessage = recognizeExceptionMessage(ex); String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null) {
errorMessage = ex.getMessage();
if (ex.getCause() != null) errorMessage += "<br />" + ex.getCause().getMessage();
}
FragmentManager fm = ContextHelper.getFragmentManagerFromContext(context); FragmentManager fm = ContextHelper.getFragmentManagerFromContext(context);
@@ -62,15 +68,4 @@ public class UtilityExceptions {
} }
} }
public static String recognizeExceptionMessage(Exception ex) {
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null) {
errorMessage = ex.getMessage();
if (ex.getCause() != null) errorMessage += "<br />" + ex.getCause().getMessage();
}
return errorMessage;
}
} }

View File

@@ -1,7 +1,6 @@
package it.integry.integrywmsnative.core.utility; package it.integry.integrywmsnative.core.utility;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.util.Locale; import java.util.Locale;
@@ -10,8 +9,7 @@ import it.integry.integrywmsnative.core.CommonConst;
public class UtilityNumber { public class UtilityNumber {
// Locale italiano per la formattazione private static DecimalFormat decimalFormatInstance;
private static final Locale ITALIAN_LOCALE = new Locale("it", "IT");
public static String decimalToString(Float bigDecimal){ public static String decimalToString(Float bigDecimal){
if(bigDecimal == null) return "0"; if(bigDecimal == null) return "0";
@@ -25,59 +23,71 @@ public class UtilityNumber {
public static String decimalToString(BigDecimal bigDecimal, int decimal){ public static String decimalToString(BigDecimal bigDecimal, int decimal){
if(bigDecimal == null) return "0"; if(bigDecimal == null) return "0";
return decimalToString(bigDecimal.floatValue(), decimal);
// Usa stripTrailingZeros per rimuovere gli zeri finali
BigDecimal stripped = bigDecimal.stripTrailingZeros();
// Limita il numero di decimali visualizzati
int scale = Math.min(stripped.scale(), decimal);
stripped = stripped.setScale(scale, RoundingMode.DOWN);
// Configura il formato italiano con virgola come separatore decimale
DecimalFormatSymbols italianSymbols = new DecimalFormatSymbols(ITALIAN_LOCALE);
italianSymbols.setDecimalSeparator(',');
// Crea il pattern dinamico basato sul numero di decimali
StringBuilder patternBuilder = new StringBuilder("0");
if (scale > 0) {
patternBuilder.append(".");
for (int i = 0; i < scale; i++) {
patternBuilder.append("0");
}
}
DecimalFormat formatter = new DecimalFormat(patternBuilder.toString(), italianSymbols);
String result = formatter.format(stripped);
// Se il risultato termina con ',', rimuovilo (per i numeri interi)
if (result.endsWith(",")) {
result = result.substring(0, result.length() - 1);
}
return result;
} }
public static String decimalToString(float floatValue, int decimal) { public static String decimalToString(float floatValue, int decimal) {
return decimalToString(BigDecimal.valueOf(floatValue), decimal); DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault());
otherSymbols.setDecimalSeparator('.');
otherSymbols.setGroupingSeparator(',');
final DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMaximumFractionDigits(decimal);
decimalFormat.setDecimalFormatSymbols(otherSymbols);
decimalFormat.setGroupingUsed(false);
decimalFormat.setMinimumFractionDigits(Math.min(2, decimal));
return decimalFormat.format(floatValue);
} }
public static BigDecimal parseBigDecimal(String value, Locale locale) { public static DecimalFormat getNumberFormatInstance() {
if (value == null || value.trim().isEmpty()) return null;
try { if(decimalFormatInstance == null) {
DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale); DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault());
DecimalFormat format = new DecimalFormat(); otherSymbols.setDecimalSeparator('.');
format.setDecimalFormatSymbols(symbols); otherSymbols.setGroupingSeparator(',');
format.setParseBigDecimal(true);
return (BigDecimal) format.parse(value); decimalFormatInstance = new DecimalFormat();
} catch (Exception e) { decimalFormatInstance.setMaximumFractionDigits(CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS);
return null; decimalFormatInstance.setDecimalFormatSymbols(otherSymbols);
decimalFormatInstance.setGroupingUsed(false);
} }
return decimalFormatInstance;
} }
/** public static int countNumberOfDecimalDigits(Float value) {
* Parsa una stringa numerica italiana (con virgola come separatore decimale) String text = getNumberFormatInstance().format(Math.abs(value));
* e restituisce un BigDecimal int integerPlaces = text.indexOf('.');
*/ int decimalPlaces = text.length() - integerPlaces - 1;
public static BigDecimal parseItalianBigDecimal(String value) {
return parseBigDecimal(value, ITALIAN_LOCALE); return decimalPlaces;
}
public static String normalizeStringNumber(String numberString) {
return numberString.replaceAll(",", ".");
}
public static Float decimalToFloat(BigDecimal bigDecimalValue) {
float multiplier = (float) Math.pow(10, CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS);
Float floatValue = null;
if(bigDecimalValue != null) {
int intValue = (int) (bigDecimalValue.floatValue() * multiplier);
floatValue = Float.valueOf(intValue / multiplier);
}
return floatValue;
}
public static float truncateToDecimal(float v, int i) {
int delta = 10*i;
return ((int)v*delta)/delta;
} }
} }

View File

@@ -3,15 +3,9 @@ package it.integry.integrywmsnative.core.utility;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
import android.util.TypedValue;
import androidx.annotation.AttrRes;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.RawRes; import androidx.annotation.RawRes;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
@@ -75,23 +69,4 @@ public class UtilityResources {
return 0; return 0;
} }
// Funzione di utilità per ottenere un colore da un attributo del tema
public static @ColorRes int getColorResourceFromAttr(Context context, @AttrRes int attrRes) {
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(attrRes, typedValue, true);
return typedValue.data;
}
public static @ColorInt int getColorFromAttr(Context context, @AttrRes int attrRes) {
return ContextCompat.getColor(context, getColorResourceFromAttr(context, attrRes));
}
public static ColorStateList getColorStateListFromAttr(Context context, @AttrRes int attrRes) {
return ColorStateList.valueOf(getColorResourceFromAttr(context, attrRes));
}
} }

View File

@@ -2,17 +2,12 @@ package it.integry.integrywmsnative.gest.accettazione_bolla_elenco;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.PopupMenu;
import androidx.databinding.BindingAdapter;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
@@ -53,9 +48,6 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
private AppCompatTextView mAppBarTitle; private AppCompatTextView mAppBarTitle;
public BindableBoolean fabVisible = new BindableBoolean(false); public BindableBoolean fabVisible = new BindableBoolean(false);
public BindableBoolean fabMenuVisible = new BindableBoolean(false);
private PopupMenu fabPopupMenu;
private String mTextFilter; private String mTextFilter;
@@ -108,9 +100,6 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
this.initRecyclerView(); this.initRecyclerView();
if (SettingsManager.iDB().isFlagAccettazioneBollaMarkReceived())
this.initFab();
mToolbar.setRecyclerView(mBinding.accettazioneMainList); mToolbar.setRecyclerView(mBinding.accettazioneMainList);
return mBinding.getRoot(); return mBinding.getRoot();
@@ -122,7 +111,6 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
super.onStart(); super.onStart();
this.fabVisible.set(false); this.fabVisible.set(false);
this.fabMenuVisible.set(false);
mViewModel.init(); mViewModel.init();
} }
@@ -159,11 +147,8 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get()) .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false)); .forEach(y -> y.getSelectedObservable().set(false));
boolean rowSelected = Stream.of(mBolleInevaseMutableData) fabVisible.set(Stream.of(mBolleInevaseMutableData)
.anyMatch(y -> y.getSelectedObservable().get()); .anyMatch(y -> y.getSelectedObservable().get()));
fabVisible.set(rowSelected && !SettingsManager.iDB().isFlagAccettazioneBollaMarkReceived());
fabMenuVisible.set(rowSelected && SettingsManager.iDB().isFlagAccettazioneBollaMarkReceived());
}); });
adapter.setEmptyView(this.mBinding.bolleAccettazioneEmptyView); adapter.setEmptyView(this.mBinding.bolleAccettazioneEmptyView);
@@ -174,28 +159,6 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
mToolbar.setRecyclerView(this.mBinding.accettazioneMainList); mToolbar.setRecyclerView(this.mBinding.accettazioneMainList);
} }
private void initFab() {
fabPopupMenu = new PopupMenu(requireContext(), this.mBinding.accettazioneBollaFab,
(Gravity.END | Gravity.BOTTOM),
androidx.appcompat.R.attr.popupMenuStyle,
com.google.android.material.R.style.Widget_Material3_PopupMenu_ContextMenu);
fabPopupMenu.setForceShowIcon(true);
fabPopupMenu.getMenuInflater().inflate(R.menu.accettazione_bolla_fab_menu, fabPopupMenu.getMenu());
fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.open_document) {
this.dispatchBolle();
} else if (itemId == R.id.mark_document_received) {
this.setBolleReceived();
}
return false;
});
}
private void refreshList() { private void refreshList() {
List<TestataBollaAccettazioneDTO> tmpList = mViewModel.getBolleList().getValue(); List<TestataBollaAccettazioneDTO> tmpList = mViewModel.getBolleList().getValue();
@@ -260,23 +223,14 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
}).toList(); }).toList();
} }
public void openFabMenu() {
fabPopupMenu.show();
}
private void setBolleReceived() {
this.mViewModel.markDocumentReceived(getSelectedBolle());
}
public void dispatchBolle() { public void dispatchBolle() {
this.mViewModel.loadPicking(getSelectedBolle()); List<TestataBollaAccettazioneDTO> selectedBolle = Stream.of(this.mBolleInevaseMutableData)
}
private List<TestataBollaAccettazioneDTO> getSelectedBolle() {
return Stream.of(this.mBolleInevaseMutableData)
.filter(x -> x.getSelectedObservable().get()) .filter(x -> x.getSelectedObservable().get())
.map(MainAccettazioneBolleElencoListModel::getOriginalModel) .map(MainAccettazioneBolleElencoListModel::getOriginalModel)
.toList(); .toList();
this.mViewModel.loadPicking(selectedBolle);
} }
@Override @Override

View File

@@ -1,15 +1,12 @@
package it.integry.integrywmsnative.gest.accettazione_bolla_elenco; package it.integry.integrywmsnative.gest.accettazione_bolla_elenco;
import androidx.databinding.ObservableInt;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.BolleAccettazioneRESTConsumer; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.BolleAccettazioneRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.SitBollaAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.SitBollaAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.TestataBollaAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.TestataBollaAccettazioneDTO;
@@ -37,10 +34,14 @@ public class MainAccettazioneBollaElencoViewModel {
}, this::sendError); }, this::sendError);
} }
public MutableLiveData<List<TestataBollaAccettazioneDTO>> getBolleList() { public MutableLiveData<List<TestataBollaAccettazioneDTO>> getBolleList() {
return bolleList; return bolleList;
} }
public void loadPicking(List<TestataBollaAccettazioneDTO> selectedBolle) { public void loadPicking(List<TestataBollaAccettazioneDTO> selectedBolle) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
@@ -52,10 +53,21 @@ public class MainAccettazioneBollaElencoViewModel {
}, this::sendError); }, this::sendError);
} }
public void markDocumentReceived(List<TestataBollaAccettazioneDTO> selectedBolle) {
this.sendOnLoadingStarted();
this.bolleAccettazioneRESTConsumer.markDocumentReceived(selectedBolle, this::sendOnLoadingEnded, this::sendError);
}
public MainAccettazioneBollaElencoViewModel setListener(MainAccettazioneBollaElencoViewModel.Listener listener) { public MainAccettazioneBollaElencoViewModel setListener(MainAccettazioneBollaElencoViewModel.Listener listener) {
this.listener = listener; this.listener = listener;
@@ -75,9 +87,10 @@ public class MainAccettazioneBollaElencoViewModel {
} }
private void sendOnPickingReady(List<TestataBollaAccettazioneDTO> bolle, List<SitBollaAccettazioneDTO> sitArts) { private void sendOnPickingReady(List<TestataBollaAccettazioneDTO> bolle, List<SitBollaAccettazioneDTO> sitArts) {
if (this.listener != null) listener.onPickingReady(bolle, sitArts); if(this.listener != null) listener.onPickingReady(bolle, sitArts);
} }
public interface Listener extends ILoadingListener { public interface Listener extends ILoadingListener {
void onError(Exception ex); void onError(Exception ex);

View File

@@ -2,19 +2,15 @@ package it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumerService;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback; import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.pv.SaveNewRowVerificaRequestDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.MarkDocumentReceivedRequestDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaRequestDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaRequestDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaResponseDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaResponseDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoBolleAccettazioneResponseDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoBolleAccettazioneResponseDTO;
@@ -58,7 +54,7 @@ public class BolleAccettazioneRESTConsumer extends _BaseRESTConsumer {
.enqueue(new ManagedErrorCallback<>() { .enqueue(new ManagedErrorCallback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<RetrieveElencoArticoliAccettazioneBollaResponseDTO>> call, Response<ServiceRESTResponse<RetrieveElencoArticoliAccettazioneBollaResponseDTO>> response) { public void onResponse(Call<ServiceRESTResponse<RetrieveElencoArticoliAccettazioneBollaResponseDTO>> call, Response<ServiceRESTResponse<RetrieveElencoArticoliAccettazioneBollaResponseDTO>> response) {
analyzeAnswer(response, "retrievePickingListBolle", data -> onComplete.run(data.getSitArticoli() == null ? new ArrayList<>() : data.getSitArticoli()), onFailed); analyzeAnswer(response, "retrievePickingListBolle", data -> onComplete.run(data.getSitArticoli()), onFailed);
} }
@Override @Override
@@ -68,19 +64,4 @@ public class BolleAccettazioneRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void markDocumentReceived(List<TestataBollaAccettazioneDTO> bolle, Runnable onComplete, RunnableArgs<Exception> onFailed) {
BolleAccettazioneRESTConsumerService service = restBuilder.getService(BolleAccettazioneRESTConsumerService.class);
service.markDocumentReceived(new MarkDocumentReceivedRequestDTO().setBolle(bolle))
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "markDocumentReceived", m -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
}
} }

View File

@@ -1,7 +1,6 @@
package it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest; package it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.MarkDocumentReceivedRequestDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaRequestDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaRequestDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaResponseDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoArticoliAccettazioneBollaResponseDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoBolleAccettazioneResponseDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.RetrieveElencoBolleAccettazioneResponseDTO;
@@ -18,6 +17,4 @@ public interface BolleAccettazioneRESTConsumerService {
@POST("wms/accettazione-bolla/retrievePickingList") @POST("wms/accettazione-bolla/retrievePickingList")
Call<ServiceRESTResponse<RetrieveElencoArticoliAccettazioneBollaResponseDTO>> retrievePickingListBolle(@Body RetrieveElencoArticoliAccettazioneBollaRequestDTO retrieveElencoArticoliAccettazioneBollaReques); Call<ServiceRESTResponse<RetrieveElencoArticoliAccettazioneBollaResponseDTO>> retrievePickingListBolle(@Body RetrieveElencoArticoliAccettazioneBollaRequestDTO retrieveElencoArticoliAccettazioneBollaReques);
@POST("wms/accettazione-bolla/markDocumentReceived")
Call<ServiceRESTResponse<Void>> markDocumentReceived(@Body MarkDocumentReceivedRequestDTO request);
} }

View File

@@ -1,17 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto;
import java.util.List;
public class MarkDocumentReceivedRequestDTO {
private List<TestataBollaAccettazioneDTO> bolle;
public List<TestataBollaAccettazioneDTO> getBolle() {
return bolle;
}
public MarkDocumentReceivedRequestDTO setBolle(List<TestataBollaAccettazioneDTO> bolle) {
this.bolle = bolle;
return this;
}
}

View File

@@ -42,7 +42,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.report.ReportManager;
@@ -452,12 +452,12 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
dialog.show(); dialog.show();
} }
public void startListaBancaliRegistratiActivity(List<AlreadyRegisteredUlDTO> mtbColts) { public void startListaBancaliRegistratiActivity(List<AlreadyRegisteredUDCDTO> mtbColts) {
Intent myIntent = ListaBancaliActivity.createIntent(this, Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts) Stream.of(mtbColts)
.map(AlreadyRegisteredUlDTO::getMtbColt) .map(AlreadyRegisteredUDCDTO::getMtbColt)
.toList(), .toList(),
input -> Stream.of(mtbColts) input -> Stream.of(mtbColts)
@@ -620,7 +620,6 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
.setDataScad(dataScad) .setDataScad(dataScad)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged) .setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(true) .setCanLUBeClosed(true)
.setQtaTotEditable(SettingsManager.iDB().isFlagAccettazioneBollaEditableQtaTot())
.setCanOverflowOrderQuantity(canOverflowQuantity) .setCanOverflowOrderQuantity(canOverflowQuantity)
.setDisableTracciabilitaCheck(SettingsManager.iDB().isFlagAccettazioneBollaDisableMandatoryTracciabilita()); .setDisableTracciabilitaCheck(SettingsManager.iDB().isFlagAccettazioneBollaDisableMandatoryTracciabilita());

View File

@@ -30,7 +30,7 @@ import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingL
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
@@ -160,7 +160,7 @@ public class AccettazioneBollaPickingViewModel {
} }
public void retrieveExistentLU(RunnableArgs<List<AlreadyRegisteredUlDTO>> onComplete) { public void retrieveExistentLU(RunnableArgs<List<AlreadyRegisteredUDCDTO>> onComplete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mAccettazioneBollaPickingRESTConsumer.retrieveAlreadyRegisteredUDC(this.mBolle, mtbColtList -> { this.mAccettazioneBollaPickingRESTConsumer.retrieveAlreadyRegisteredUDC(this.mBolle, mtbColtList -> {

View File

@@ -2,17 +2,17 @@ package it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
public class RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO { public class RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO {
private List<AlreadyRegisteredUlDTO> udcList; private List<AlreadyRegisteredUDCDTO> udcList;
public List<AlreadyRegisteredUlDTO> getUdcList() { public List<AlreadyRegisteredUDCDTO> getUdcList() {
return udcList; return udcList;
} }
public RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO setUdcList(List<AlreadyRegisteredUlDTO> udcList) { public RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO setUdcList(List<AlreadyRegisteredUDCDTO> udcList) {
this.udcList = udcList; this.udcList = udcList;
return this; return this;
} }

View File

@@ -9,7 +9,7 @@ import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback; import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback;
@@ -32,7 +32,7 @@ public class AccettazioneBollaPickingRESTConsumer extends _BaseRESTConsumer {
} }
public void retrieveAlreadyRegisteredUDC(List<TestataBollaAccettazioneDTO> bolle, RunnableArgs<List<AlreadyRegisteredUlDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void retrieveAlreadyRegisteredUDC(List<TestataBollaAccettazioneDTO> bolle, RunnableArgs<List<AlreadyRegisteredUDCDTO>> onComplete, RunnableArgs<Exception> onFailed) {
AccettazioneBollaPickingRESTConsumerService service = restBuilder.getService(AccettazioneBollaPickingRESTConsumerService.class); AccettazioneBollaPickingRESTConsumerService service = restBuilder.getService(AccettazioneBollaPickingRESTConsumerService.class);
var request = new RetrieveAlreadyRegisteredULAccettazioneBollaRequestDTO() var request = new RetrieveAlreadyRegisteredULAccettazioneBollaRequestDTO()

View File

@@ -114,7 +114,7 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
} else if (position % 2 == 1) { } else if (position % 2 == 1) {
holder.mBinding.getRoot().setBackgroundColor(Color.WHITE); holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
} else { } else {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBGLight)); holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
} }
holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE);

View File

@@ -78,6 +78,7 @@ public class MainAccettazioneOrdiniElencoFragment extends BaseFragment implement
@Override @Override
public void onSaveInstanceState(@NonNull Bundle outState) { public void onSaveInstanceState(@NonNull Bundle outState) {
onLoadingEnded();
outState.putString("mToolbar", DataCache.addItem(mToolbar)); outState.putString("mToolbar", DataCache.addItem(mToolbar));
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);

View File

@@ -36,7 +36,6 @@ public class SitArtOrdDTO {
private String descrizioneEstesaArt; private String descrizioneEstesaArt;
private String descrizioneEstesaOrd; private String descrizioneEstesaOrd;
private Date dataCons; private Date dataCons;
private String partitaMag;
public String getDescrizioneEstesaOrd() { public String getDescrizioneEstesaOrd() {
return descrizioneEstesaOrd; return descrizioneEstesaOrd;
@@ -302,13 +301,4 @@ public class SitArtOrdDTO {
this.dataCons = dataCons; this.dataCons = dataCons;
return this; return this;
} }
public String getPartitaMag() {
return partitaMag;
}
public SitArtOrdDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
} }

View File

@@ -11,6 +11,7 @@ import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
@@ -18,7 +19,6 @@ import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -45,7 +45,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.report.ReportManager;
@@ -157,17 +157,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
boolean useQtaOrd = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd(); boolean useQtaOrd = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd();
mViewModel.setListeners(this); mViewModel.setListeners(this);
mViewModel.init(mOrders, mSitArts, useQtaOrd);
this.onLoadingStarted();
executorService.execute(() -> {
try {
mViewModel.init(mOrders, mSitArts, useQtaOrd);
this.onLoadingEnded();
} catch (Exception e) {
this.onError(e);
}
});
} }
private void initFab() { private void initFab() {
@@ -379,7 +369,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
private void refreshList() { private void refreshList() {
handler.post(() -> { runOnUiThread(() -> {
List<PickingObjectDTO> tmpList; List<PickingObjectDTO> tmpList;
if (mAppliedFilterViewModel != null) { if (mAppliedFilterViewModel != null) {
@@ -693,23 +683,18 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
} }
private void showOrderByDialog() { private void showOrderByDialog() {
MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(this) AlertDialog dialog = new AlertDialog.Builder(this).setTitle(this.getText(R.string.action_orderBy)).setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), (dialog12, which) -> {
.setTitle(this.getText(R.string.action_orderBy)) mCurrentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which);
.setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), SettingsManager.i().getUserSession().setDefaultOrdinamentoPickingAccettazione(which);
(dialog12, which) -> { }).setPositiveButton(getText(R.string.ok), (dialog1, which) -> this.refreshList()).create();
mCurrentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which);
SettingsManager.i().getUserSession().setDefaultOrdinamentoPickingAccettazione(which);
})
.setPositiveButton(getText(R.string.ok), (dialog1, which) -> this.refreshList());
dialog.show(); dialog.show();
} }
public void startListaBancaliRegistratiActivity(List<AlreadyRegisteredUlDTO> mtbColts) { public void startListaBancaliRegistratiActivity(List<AlreadyRegisteredUDCDTO> mtbColts) {
Intent myIntent = ListaBancaliActivity.createIntent(this, Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(AlreadyRegisteredUlDTO::getMtbColt).toList(), Stream.of(mtbColts).map(AlreadyRegisteredUDCDTO::getMtbColt).toList(),
input -> Stream.of(mtbColts).filter(x -> x.getMtbColt() == input).findFirstOrElse(null).isCanBeRecovered(), input -> Stream.of(mtbColts).filter(x -> x.getMtbColt() == input).findFirstOrElse(null).isCanBeRecovered(),
@@ -787,7 +772,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onWarning(String warningText, Runnable action) { public void onWarning(String warningText, Runnable action) {
handler.post(() -> { this.runOnUiThread(() -> {
this.onLoadingEnded(); this.onLoadingEnded();
DialogSimpleMessageView DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action) .makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action)
@@ -815,7 +800,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onRowSaved() { public void onRowSaved() {
handler.post(() -> { runOnUiThread(() -> {
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT) Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R.color.green_500)) .setBackgroundTint(getResources().getColor(R.color.green_500))
.show(); .show();
@@ -824,7 +809,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onFilterCodMartApplied(String codMartToFilter) { public void onFilterCodMartApplied(String codMartToFilter) {
handler.post(() -> { runOnUiThread(() -> {
var codMarts = new ArrayList<String>(); var codMarts = new ArrayList<String>();
codMarts.add(codMartToFilter); codMarts.add(codMartToFilter);
@@ -834,7 +819,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onFilterPosizioneApplied(String posizioneToFilter) { public void onFilterPosizioneApplied(String posizioneToFilter) {
handler.post(() -> { runOnUiThread(() -> {
var posizioni = new ArrayList<String>(); var posizioni = new ArrayList<String>();
posizioni.add(posizioneToFilter); posizioni.add(posizioneToFilter);
@@ -845,7 +830,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) { public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) {
handler.post(() -> { runOnUiThread(() -> {
DialogVersamentoAutomaticoULDoneView.newInstance(versamentoAutomaticoULResponseDTO, onComplete).show(getSupportFragmentManager(), "tag"); DialogVersamentoAutomaticoULDoneView.newInstance(versamentoAutomaticoULResponseDTO, onComplete).show(getSupportFragmentManager(), "tag");
}); });
@@ -853,7 +838,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) { public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
handler.post(() -> { runOnUiThread(() -> {
String text = getResources().getString(R.string.alert_delete_mtb_colr); String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false)).show(getSupportFragmentManager(), "tag"); DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false)).show(getSupportFragmentManager(), "tag");
}); });
@@ -861,7 +846,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override @Override
public void onLUOpened(MtbColt mtbColt) { public void onLUOpened(MtbColt mtbColt) {
handler.post(() -> { runOnUiThread(() -> {
noLUPresent.set(false); noLUPresent.set(false);
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT) Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R.color.green_500)) .setBackgroundTint(getResources().getColor(R.color.green_500))

View File

@@ -1,9 +1,50 @@
package it.integry.integrywmsnative.gest.accettazione_ordini_picking; package it.integry.integrywmsnative.gest.accettazione_ordini_picking;
import dagger.Module; import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.ean128.Ean128Service;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliAccettazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.rest.AccettazioneOrdiniPickingRESTConsumer;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
@Module(subcomponents = AccettazioneOrdiniPickingComponent.class) @Module(subcomponents = AccettazioneOrdiniPickingComponent.class)
public class AccettazioneOrdiniPickingModule { public class AccettazioneOrdiniPickingModule {
@Provides
AccettazioneOrdiniPickingRESTConsumer providesAccettazionePickingRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
return new AccettazioneOrdiniPickingRESTConsumer(restBuilder, systemRESTConsumer);
}
@Provides
BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() {
return new BottomSheetFragmentLUContentViewModel();
}
@Provides
AccettazioneOrdiniPickingViewModel providesAccettazioneViewModel(
ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
AccettazioneOrdiniPickingRESTConsumer accettazioneOrdiniPickingRESTConsumer,
ColliAccettazioneRESTConsumer colliAccettazioneRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
Ean128Service ean128Service,
ImballiRESTConsumer imballiRESTConsumer) {
return new AccettazioneOrdiniPickingViewModel(articoloRESTConsumer,
barcodeRESTConsumer,
colliMagazzinoRESTConsumer,
accettazioneOrdiniPickingRESTConsumer,
colliAccettazioneRESTConsumer,
colliLavorazioneRESTConsumer,
ean128Service,
imballiRESTConsumer);
}
} }

View File

@@ -1,7 +1,5 @@
package it.integry.integrywmsnative.gest.accettazione_ordini_picking; package it.integry.integrywmsnative.gest.accettazione_ordini_picking;
import android.os.Handler;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@@ -13,8 +11,6 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
@@ -36,7 +32,7 @@ import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingL
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
@@ -76,8 +72,6 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.Tracciament
public class AccettazioneOrdiniPickingViewModel { public class AccettazioneOrdiniPickingViewModel {
private final ExecutorService executorService;
private final Handler handler;
private final ArticoloRESTConsumer mArticoloRESTConsumer; private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
@@ -102,9 +96,7 @@ public class AccettazioneOrdiniPickingViewModel {
private final List<HistoryMtbAartDTO> mHistoryUsedAarts = new ArrayList<>(); private final List<HistoryMtbAartDTO> mHistoryUsedAarts = new ArrayList<>();
@Inject @Inject
public AccettazioneOrdiniPickingViewModel(Handler handler, public AccettazioneOrdiniPickingViewModel(ArticoloRESTConsumer articoloRESTConsumer,
ExecutorService executorService,
ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
AccettazioneOrdiniPickingRESTConsumer accettazioneOrdiniPickingRESTConsumer, AccettazioneOrdiniPickingRESTConsumer accettazioneOrdiniPickingRESTConsumer,
@@ -112,8 +104,6 @@ public class AccettazioneOrdiniPickingViewModel {
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
Ean128Service ean128Service, Ean128Service ean128Service,
ImballiRESTConsumer imballiRESTConsumer) { ImballiRESTConsumer imballiRESTConsumer) {
this.handler = handler;
this.executorService = executorService;
this.mArticoloRESTConsumer = articoloRESTConsumer; this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
@@ -125,24 +115,23 @@ public class AccettazioneOrdiniPickingViewModel {
} }
public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, boolean useQtaOrd) throws Exception { public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, boolean useQtaOrd) {
this.mOrders = orders; this.mOrders = orders;
this.mUseQtaOrd = useQtaOrd; this.mUseQtaOrd = useQtaOrd;
List<SitArtOrdDTO> mSitArts = sitArts.stream() List<SitArtOrdDTO> mSitArts = Stream.of(sitArts)
.filter(x -> .filter(x ->
UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) &&
UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
.toList(); .toList();
var pickingList = getEmptyPickingList(mSitArts); getEmptyPickingList(mSitArts, this.mPickingList::postValue);
this.mPickingList.postValue(pickingList);
//Definizione della gestione collo di default //Definizione della gestione collo di default
Boolean isOrdTrasf = mOrders.stream() Boolean isOrdTrasf = Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::isOrdTrasf) .map(OrdineAccettazioneInevasoDTO::isOrdTrasf)
.filter(Objects::nonNull) .withoutNulls()
.distinct() .distinctBy(x -> x)
.findFirst() .findFirst()
.get(); .get();
@@ -156,10 +145,10 @@ public class AccettazioneOrdiniPickingViewModel {
//Definizione della gestione collo di default //Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = mOrders.stream() List<GestioneEnum> foundGestioni = Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::getGestioneEnum) .map(OrdineAccettazioneInevasoDTO::getGestioneEnum)
.filter(Objects::nonNull) .withoutNulls()
.distinct() .distinctBy(x -> x)
.toList(); .toList();
if (foundGestioni.size() == 1) { if (foundGestioni.size() == 1) {
@@ -168,7 +157,7 @@ public class AccettazioneOrdiniPickingViewModel {
} else } else
defaultGestioneOfUL = foundGestioni.get(0) == GestioneEnum.PRODUZIONE ? GestioneEnum.LAVORAZIONE : foundGestioni.get(0); defaultGestioneOfUL = foundGestioni.get(0) == GestioneEnum.PRODUZIONE ? GestioneEnum.LAVORAZIONE : foundGestioni.get(0);
} else { } else {
throw new InvalidLUMultiGestioneException(); this.sendError(new InvalidLUMultiGestioneException());
} }
switch (defaultGestioneOfUL) { switch (defaultGestioneOfUL) {
@@ -177,38 +166,39 @@ public class AccettazioneOrdiniPickingViewModel {
} }
} }
private List<PickingObjectDTO> getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList) throws Exception { private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = sitArtOrdList.stream() List<String> codMarts = Stream.of(sitArtOrdList)
.map(SitArtOrdDTO::getCodMart) .map(SitArtOrdDTO::getCodMart)
.collect(Collectors.toList()); .toList();
var listMtbAarts = this.mArticoloRESTConsumer.getByCodMartsSynchronized(codMarts); this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = sitArtOrdList.stream() List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> { .map(sitArtOrdDTO -> {
MtbAart mtbAart = null; MtbAart mtbAart = null;
for (MtbAart mtbAartItem : listMtbAarts) { for (MtbAart mtbAartItem : listMtbAarts) {
if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) { if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) {
mtbAart = mtbAartItem; mtbAart = mtbAartItem;
break; break;
}
} }
}
return new PickingObjectDTO() return new PickingObjectDTO()
.setSitArtOrdDTO(sitArtOrdDTO) .setSitArtOrdDTO(sitArtOrdDTO)
.setMtbAart(mtbAart); .setMtbAart(mtbAart);
}) })
.collect(Collectors.toList()); .toList();
return pickingList; onComplete.run(pickingList);
}, this::sendError);
} }
public MutableLiveData<List<PickingObjectDTO>> getPickingList() { public MutableLiveData<List<PickingObjectDTO>> getPickingList() {
return mPickingList; return mPickingList;
} }
public void retrieveExistentLU(RunnableArgs<List<AlreadyRegisteredUlDTO>> onComplete) { public void retrieveExistentLU(RunnableArgs<List<AlreadyRegisteredUDCDTO>> onComplete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mAccettazioneOrdiniPickingRESTConsumer.getBancaliGiaRegistrati(this.mOrders, mtbColtList -> { this.mAccettazioneOrdiniPickingRESTConsumer.getBancaliGiaRegistrati(this.mOrders, mtbColtList -> {
@@ -283,7 +273,7 @@ public class AccettazioneOrdiniPickingViewModel {
try { try {
numCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()); numCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue());
this.createNewLU( this.createNewLU(
barcodeScanDTO.getStringValue(), null,
numCollo, numCollo,
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, true, onComplete); CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, true, onComplete);
} catch (Exception ex) { } catch (Exception ex) {
@@ -569,9 +559,6 @@ public class AccettazioneOrdiniPickingViewModel {
dataScad = dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita()); dataScad = dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita());
} }
if (partitaMag == null && SettingsManager.iDB().isFlagAccettazioneViewLotto())
partitaMag = pickingObjectDTO.getSitArtOrdDTO().getPartitaMag();
if (partitaMag == null && dataScad == null) { if (partitaMag == null && dataScad == null) {
HistoryMtbAartDTO historyMtbAartDTO = this.getHistoryItemIfExists(pickingObjectDTO.getMtbAart().getCodMart()); HistoryMtbAartDTO historyMtbAartDTO = this.getHistoryItemIfExists(pickingObjectDTO.getMtbAart().getCodMart());
@@ -664,10 +651,8 @@ public class AccettazioneOrdiniPickingViewModel {
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) .setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart()); .setMtbAart(pickingObjectDTO.getMtbAart());
handler.post(() -> { pickingObjectDTO.getWithdrawMtbColrs().add(insertedMtbColr);
pickingObjectDTO.getWithdrawMtbColrs().add(insertedMtbColr); mCurrentMtbColt.getMtbColr().add(insertedMtbColr);
mCurrentMtbColt.getMtbColr().add(insertedMtbColr);
});
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
resetMatchedRows(); resetMatchedRows();
@@ -783,9 +768,7 @@ public class AccettazioneOrdiniPickingViewModel {
pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete); pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete);
} }
handler.post(() -> { this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
});
this.resetMatchedRows(); this.resetMatchedRows();
this.sendOnRowSaved(); this.sendOnRowSaved();

View File

@@ -2,17 +2,17 @@ package it.integry.integrywmsnative.gest.accettazione_ordini_picking.dto;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
public class RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO { public class RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO {
private List<AlreadyRegisteredUlDTO> udcList; private List<AlreadyRegisteredUDCDTO> udcList;
public List<AlreadyRegisteredUlDTO> getUdcList() { public List<AlreadyRegisteredUDCDTO> getUdcList() {
return udcList; return udcList;
} }
public RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO setUdcList(List<AlreadyRegisteredUlDTO> udcList) { public RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO setUdcList(List<AlreadyRegisteredUDCDTO> udcList) {
this.udcList = udcList; this.udcList = udcList;
return this; return this;
} }

View File

@@ -9,7 +9,7 @@ import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO; import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
@@ -33,7 +33,7 @@ public class AccettazioneOrdiniPickingRESTConsumer extends _BaseRESTConsumer {
this.systemRestConsumer = systemRESTConsumer; this.systemRestConsumer = systemRESTConsumer;
} }
public void getBancaliGiaRegistrati(List<OrdineAccettazioneInevasoDTO> ordiniToShow, RunnableArgs<List<AlreadyRegisteredUlDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void getBancaliGiaRegistrati(List<OrdineAccettazioneInevasoDTO> ordiniToShow, RunnableArgs<List<AlreadyRegisteredUDCDTO>> onComplete, RunnableArgs<Exception> onFailed) {
AccettazioneOrdiniPickingRESTConsumerService service = restBuilder.getService(AccettazioneOrdiniPickingRESTConsumerService.class); AccettazioneOrdiniPickingRESTConsumerService service = restBuilder.getService(AccettazioneOrdiniPickingRESTConsumerService.class);
var request = new RetrieveAlreadyRegisteredULAccettazioneOrdineRequestDTO() var request = new RetrieveAlreadyRegisteredULAccettazioneOrdineRequestDTO()

View File

@@ -22,7 +22,6 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupHeaderBinding; import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupHeaderBinding;
import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupItemBinding; import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupItemBinding;
@@ -113,9 +112,9 @@ public class AccettazioneOrdiniPickingListAdapter extends SectionedRecyclerViewA
} else if (pickingObjectDTO.getQtaEvasa().floatValue() > 0) { } else if (pickingObjectDTO.getQtaEvasa().floatValue() > 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
} else if (position % 2 == 1) { } else if (position % 2 == 1) {
holder.mBinding.getRoot().setBackgroundColor(0); holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
} else { } else {
holder.mBinding.getRoot().setBackgroundColor(UtilityResources.getColorResourceFromAttr(mContext, R.attr.colorLetturaFacilitataSurface)); holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
} }
holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE);

View File

@@ -45,7 +45,9 @@ public class DialogSelectDocInfo_FornitoreAdapter extends ArrayAdapter<DialogSel
@Override @Override
public String toString() { public String toString() {
return this.getOriginalModel().getDescrizione(); return this.getOriginalModel().getCodAnag() +
(this.getOriginalModel().getCodVdes() != null ? " - " + this.getOriginalModel().getCodVdes() : "") +
" ( " + this.getOriginalModel().getDescrizione() + " )";
} }
} }

View File

@@ -50,7 +50,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
public final ObservableField<MtbColt> mtbColt = new ObservableField<>(); public final ObservableField<MtbColt> mtbColt = new ObservableField<>();
public final ObservableField<String> descrizioneDepo = new ObservableField<>(); public final ObservableField<String> descrizioneDepo = new ObservableField<>();
public ObservableField<Boolean> fabVisible = new ObservableField<>(true); public ObservableField<Boolean> fabVisible = new ObservableField<>(true);
public Boolean recoverFabMenuVisible = false; public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false);
private PopupMenu fabPopupMenu; private PopupMenu fabPopupMenu;
private String mReportName; private String mReportName;
@@ -80,7 +80,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
recoverFabMenuVisible = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey))); mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey)));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
@@ -102,6 +102,8 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
mViewModel.setListener(this); mViewModel.setListener(this);
mViewModel.init(mtbColt.get(), mReportName); mViewModel.init(mtbColt.get(), mReportName);
recoverFabMenuVisible.set(canRecoverUL);
this.initRecyclerView(); this.initRecyclerView();
this.initColloInfo(); this.initColloInfo();
this.initFab(); this.initFab();
@@ -142,10 +144,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
fabPopupMenu.getMenu().removeItem(R.id.delete_ul); fabPopupMenu.getMenu().removeItem(R.id.delete_ul);
} }
if(!recoverFabMenuVisible) {
fabPopupMenu.getMenu().removeItem(R.id.recover_ul);
}
fabPopupMenu.setOnMenuItemClickListener(item -> { fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId(); int itemId = item.getItemId();

View File

@@ -1,17 +1,11 @@
package it.integry.integrywmsnative.gest.login.dto; package it.integry.integrywmsnative.gest.login.dto;
import com.google.gson.annotations.SerializedName;
import java.util.HashMap; import java.util.HashMap;
public class AuthTokenClaimsDTO { public class AuthTokenClaimsDTO {
@SerializedName("deviceId")
private long deviceId; private long deviceId;
@SerializedName("userDTO")
private User userDTO; private User userDTO;
@SerializedName("profilesData")
private HashMap<String, AuthTokenProfileDetails> profilesData; private HashMap<String, AuthTokenProfileDetails> profilesData;
public long getDeviceId() { public long getDeviceId() {
@@ -42,22 +36,11 @@ public class AuthTokenClaimsDTO {
} }
public class User { public class User {
@SerializedName("username")
private String username; private String username;
@SerializedName("email")
private Object email; private Object email;
@SerializedName("fullname")
private String fullname; private String fullname;
@SerializedName("keyGroup")
private int keyGroup; private int keyGroup;
@SerializedName("attivo")
private boolean attivo; private boolean attivo;
@SerializedName("type")
private String type; private String type;
public String getUsername() { public String getUsername() {
@@ -116,7 +99,6 @@ public class AuthTokenClaimsDTO {
} }
public static class AuthTokenProfileDetails { public static class AuthTokenProfileDetails {
@SerializedName("defaultDepo")
private AuthTokenDepoDetails defaultDepo; private AuthTokenDepoDetails defaultDepo;
public AuthTokenDepoDetails getDefaultDepo() { public AuthTokenDepoDetails getDefaultDepo() {
@@ -130,13 +112,8 @@ public class AuthTokenClaimsDTO {
} }
public static class AuthTokenDepoDetails { public static class AuthTokenDepoDetails {
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
@SerializedName("codJfas")
private String codJfas; private String codJfas;
public String getCodMdep() { public String getCodMdep() {

View File

@@ -1,20 +1,12 @@
package it.integry.integrywmsnative.gest.login.dto; package it.integry.integrywmsnative.gest.login.dto;
import com.google.gson.annotations.SerializedName;
import java.time.LocalDateTime; import java.time.LocalDateTime;
public class AuthenticationJwtResponseDTO { public class AuthenticationJwtResponseDTO {
@SerializedName("accessToken")
private String accessToken; private String accessToken;
@SerializedName("refreshToken")
private String refreshToken; private String refreshToken;
@SerializedName("expiryDate")
private LocalDateTime expiryDate; private LocalDateTime expiryDate;
@SerializedName("expireIn")
private long expireIn; private long expireIn;

View File

@@ -1,22 +1,11 @@
package it.integry.integrywmsnative.gest.login.dto; package it.integry.integrywmsnative.gest.login.dto;
import com.google.gson.annotations.SerializedName;
public class LoginAziendaDTO { public class LoginAziendaDTO {
@SerializedName("profileDb")
private String profileDb; private String profileDb;
@SerializedName("endpointRestApi")
private String endpointRestApi; private String endpointRestApi;
@SerializedName("phpApi")
private String phpApi; private String phpApi;
@SerializedName("repoPhoto")
private String repoPhoto; private String repoPhoto;
@SerializedName("endpointPvm")
private String endpointPvm; private String endpointPvm;
public String getProfileDb() { public String getProfileDb() {

View File

@@ -1,16 +1,9 @@
package it.integry.integrywmsnative.gest.login.dto; package it.integry.integrywmsnative.gest.login.dto;
import com.google.gson.annotations.SerializedName;
public class LoginRequestDTO { public class LoginRequestDTO {
@SerializedName("username")
private String username; private String username;
@SerializedName("password")
private String password; private String password;
@SerializedName("deviceId")
private String deviceId; private String deviceId;
public String getUsername() { public String getUsername() {

View File

@@ -1,16 +1,13 @@
package it.integry.integrywmsnative.gest.login.dto; package it.integry.integrywmsnative.gest.login.dto;
import com.google.gson.annotations.SerializedName;
import java.util.List; import java.util.List;
public class LoginResponseDTO { public class LoginResponseDTO {
@SerializedName("fullName")
private String fullName; private String fullName;
@SerializedName("availableProfiles")
private List<String> availableProfiles; private List<String> availableProfiles;
public String getFullName() { public String getFullName() {
return fullName; return fullName;
} }

View File

@@ -1,9 +1,6 @@
package it.integry.integrywmsnative.gest.login.dto; package it.integry.integrywmsnative.gest.login.dto;
import com.google.gson.annotations.SerializedName;
public class RefreshRequestDTO { public class RefreshRequestDTO {
@SerializedName("refreshToken")
private String refreshToken; private String refreshToken;
public String getRefreshToken() { public String getRefreshToken() {

View File

@@ -34,7 +34,7 @@ public class AuthenticationRESTConsumer extends _BaseRESTConsumer {
String host = CommonConst.Login.Azienda.host; String host = CommonConst.Login.Azienda.host;
int port = CommonConst.Login.Azienda.port; int port = CommonConst.Login.Azienda.port;
AuthenticationRESTConsumerService service = restBuilder.getService(AuthenticationRESTConsumerService.class, protocol, host, port); AuthenticationRESTConsumerService service = restBuilder.getService(AuthenticationRESTConsumerService.class, protocol, host, port, false, true);
service.loginAzienda(codAzienda).enqueue(new ManagedErrorCallback<>() { service.loginAzienda(codAzienda).enqueue(new ManagedErrorCallback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<LoginAziendaDTO>> call, Response<ServiceRESTResponse<LoginAziendaDTO>> response) { public void onResponse(Call<ServiceRESTResponse<LoginAziendaDTO>> call, Response<ServiceRESTResponse<LoginAziendaDTO>> response) {
@@ -67,7 +67,7 @@ public class AuthenticationRESTConsumer extends _BaseRESTConsumer {
public void authenticate(String protocol, String host, int port, String username, String password, String profileDb, String deviceSalt, RunnableArgs<AuthenticationJwtResponseDTO> onComplete, RunnableArgs<Exception> onFailed) { public void authenticate(String protocol, String host, int port, String username, String password, String profileDb, String deviceSalt, RunnableArgs<AuthenticationJwtResponseDTO> onComplete, RunnableArgs<Exception> onFailed) {
AuthenticationRESTConsumerService service = restBuilder.getService(AuthenticationRESTConsumerService.class, protocol, host, port); AuthenticationRESTConsumerService service = restBuilder.getService(AuthenticationRESTConsumerService.class, protocol, host, port, false);
LoginRequestDTO loginRequestDTO = new LoginRequestDTO() LoginRequestDTO loginRequestDTO = new LoginRequestDTO()
.setUsername(username) .setUsername(username)
@@ -94,7 +94,7 @@ public class AuthenticationRESTConsumer extends _BaseRESTConsumer {
public void retrieveAvailableProfiles(String protocol, String host, int port, String username, String password, RunnableArgs<List<String>> onComplete, RunnableArgs<Exception> onFailed) { public void retrieveAvailableProfiles(String protocol, String host, int port, String username, String password, RunnableArgs<List<String>> onComplete, RunnableArgs<Exception> onFailed) {
AuthenticationRESTConsumerService service = restBuilder.getService(AuthenticationRESTConsumerService.class, protocol, host, port); AuthenticationRESTConsumerService service = restBuilder.getService(AuthenticationRESTConsumerService.class, protocol, host, port, false);
service.retreiveAvailableProfiles(username, password) service.retreiveAvailableProfiles(username, password)
.enqueue(new ManagedErrorCallback<>() { .enqueue(new ManagedErrorCallback<>() {

View File

@@ -49,12 +49,8 @@ public class LoginViewModel {
FirebaseInstallations.getInstance().getId().addOnCompleteListener(fid -> { FirebaseInstallations.getInstance().getId().addOnCompleteListener(fid -> {
SettingsManager.i().createUserSession();
retrieveAvailableProfiles(protocol, host, port, username, password, selectedProfile -> { retrieveAvailableProfiles(protocol, host, port, username, password, selectedProfile -> {
if(selectedProfile == null) { SettingsManager.i().createUserSession();
this.sendOnLoadingEnded();
return;
}
authenticate(protocol, host, port, username, password, selectedProfile, fid.getResult(), fullName -> { authenticate(protocol, host, port, username, password, selectedProfile, fid.getResult(), fullName -> {
@@ -130,8 +126,6 @@ public class LoginViewModel {
} }
private void authenticate(String protocol, String host, int port, String username, String password, String profileDb, String deviceSalt, RunnableArgs<String> onComplete) { private void authenticate(String protocol, String host, int port, String username, String password, String profileDb, String deviceSalt, RunnableArgs<String> onComplete) {
mAuthenticationRESTConsumer.authenticate(protocol, host, port, username, password, profileDb, deviceSalt, sessionData -> { mAuthenticationRESTConsumer.authenticate(protocol, host, port, username, password, profileDb, deviceSalt, sessionData -> {
var claims = JwtUtils.parseJwt(sessionData.getAccessToken()); var claims = JwtUtils.parseJwt(sessionData.getAccessToken());

View File

@@ -93,7 +93,7 @@ public class MainActivity extends BaseActivity
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false);
setContentView(mBinding.getRoot()); setContentView(mBinding.getRoot());
updatesManager.executeCheck(this, getSupportFragmentManager(), false); updatesManager.executeCheck(this, false);
UtilityContext.initMainActivity(this); UtilityContext.initMainActivity(this);
setSupportActionBar(mBinding.appBarMain.toolbar); setSupportActionBar(mBinding.appBarMain.toolbar);
@@ -102,7 +102,7 @@ public class MainActivity extends BaseActivity
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, mBinding.drawerLayout, mBinding.appBarMain.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); this, mBinding.drawerLayout, mBinding.appBarMain.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
mBinding.drawerLayout.addDrawerListener(toggle); mBinding.drawerLayout.setDrawerListener(toggle);
toggle.syncState(); toggle.syncState();
@@ -122,16 +122,6 @@ public class MainActivity extends BaseActivity
startActivity(myIntent); startActivity(myIntent);
} }
public void toggleDrawer() {
if (mBinding.drawerLayout.isDrawerOpen(GravityCompat.START)) {
mBinding.drawerLayout.closeDrawer(GravityCompat.START);
} else {
mBinding.drawerLayout.openDrawer(GravityCompat.START);
}
}
@Override @Override
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
@@ -304,13 +294,9 @@ public class MainActivity extends BaseActivity
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
getSupportFragmentManager().popBackStack(); getSupportFragmentManager().popBackStack();
} }
mBinding.appBarMain.elevatedToolbar.setVisibility(getSupportFragmentManager().getBackStackEntryCount() > 1 ? View.VISIBLE : View.GONE);
} }
private void adaptViewToFragment(Fragment fragment) { private void adaptViewToFragment(Fragment fragment) {
mBinding.appBarMain.elevatedToolbar.setVisibility(fragment instanceof MainFragment ? View.GONE : View.VISIBLE);
if (fragment instanceof ISearchableFragment) { if (fragment instanceof ISearchableFragment) {
mBinding.appBarMain.mainSearch.setOnQueryTextListener((SearchView.OnQueryTextListener) fragment); mBinding.appBarMain.mainSearch.setOnQueryTextListener((SearchView.OnQueryTextListener) fragment);
mBinding.appBarMain.mainSearch.setVisibility(View.VISIBLE); mBinding.appBarMain.mainSearch.setVisibility(View.VISIBLE);

View File

@@ -1,7 +1,10 @@
package it.integry.integrywmsnative.gest.main; package it.integry.integrywmsnative.gest.main;
import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@@ -119,6 +122,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false); mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false);
mBindings.setView(this); mBindings.setView(this);
mBindings.easterEggHorrorBloodExpandableLayout.setExpanded(false, false);
return mBindings.getRoot(); return mBindings.getRoot();
} }
@@ -242,13 +246,6 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
} }
public void toggleDrawer() {
if (getActivity() != null && getActivity() instanceof MainActivity) {
((MainActivity) getActivity()).toggleDrawer();
}
}
private void collapseNoConnectionLayout() { private void collapseNoConnectionLayout() {
if (getActivity() != null) if (getActivity() != null)
getActivity().runOnUiThread(() -> mBindings.noConnectionTopLayout.collapse(true)); getActivity().runOnUiThread(() -> mBindings.noConnectionTopLayout.collapse(true));
@@ -287,8 +284,8 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
MenuConfiguration baseMenuConfiguration = new MenuConfiguration(); MenuConfiguration baseMenuConfiguration = new MenuConfiguration();
List<MenuConfiguration.MenuGroup> menuGroups = baseMenuConfiguration.getGroups(); List<MenuConfiguration.MenuGroup> menuGroups = baseMenuConfiguration.getGroups();
try { for (int i = 0; i < menuGroups.size(); i++) {
for (int i = 0; i < menuGroups.size(); i++) { try {
BaseMenuConfiguration.MenuGroup menuGroup = menuGroups.get(i); BaseMenuConfiguration.MenuGroup menuGroup = menuGroups.get(i);
@@ -316,12 +313,16 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
menuListAdapter.setClickListener(this::onMenuClick); menuListAdapter.setClickListener(this::onMenuClick);
mBindings.menuContainer.addView(groupBinding.getRoot()); mBindings.menuContainer.addView(groupBinding.getRoot());
}
}
} catch (Exception exception) {
UtilityExceptions.defaultException(requireActivity(), exception); }
} catch (Exception exception) {
UtilityExceptions.defaultException(requireActivity(), exception);
}
} }
} }
private void onMenuClick(MenuConfiguration.MenuItem menuItem) { private void onMenuClick(MenuConfiguration.MenuItem menuItem) {
@@ -338,6 +339,89 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
this.mOnPreDestroyList.add(onPreDestroy); this.mOnPreDestroyList.add(onPreDestroy);
} }
public void toggleEasterEggMode() {
easterEggToggle = !easterEggToggle;
int rootBgStart, rootBgEnd;
int profileBgStart, profileBgEnd;
float titleFlipStart, titleFlipEnd;
int animationTimeMillis = 0;
if (easterEggToggle) {
rootBgStart = Color.argb(255, 255, 255, 255);
rootBgEnd = Color.argb(255, 0, 0, 0);
profileBgStart = Color.argb(255, 26, 115, 232);
profileBgEnd = Color.argb(255, 211, 47, 47);
animationTimeMillis = 2500;
titleFlipStart = 1f;
titleFlipEnd = -1f;
} else {
rootBgStart = Color.argb(255, 0, 0, 0);
rootBgEnd = Color.argb(255, 255, 255, 255);
profileBgStart = Color.argb(255, 211, 47, 47);
profileBgEnd = Color.argb(255, 26, 115, 232);
animationTimeMillis = 750;
titleFlipStart = -1f;
titleFlipEnd = 1f;
}
mBindings.easterEggHorrorBloodExpandableLayout.setDuration(animationTimeMillis);
mBindings.easterEggHorrorBloodExpandableLayout.setExpanded(easterEggToggle, true);
View rootActivityView = requireActivity().findViewById(R.id.drawer_layout);
ObjectAnimator colorFadeRootBg = ObjectAnimator.ofObject(rootActivityView, "backgroundColor",
new ArgbEvaluator(),
rootBgStart,
rootBgEnd);
colorFadeRootBg.setDuration(animationTimeMillis);
colorFadeRootBg.start();
View toolbarActivityView = requireActivity().findViewById(R.id.toolbar);
ObjectAnimator colorFadeToolbarBg = ObjectAnimator.ofObject(toolbarActivityView, "backgroundColor",
new ArgbEvaluator(),
rootBgStart,
rootBgEnd);
colorFadeToolbarBg.setDuration(animationTimeMillis);
colorFadeToolbarBg.start();
ObjectAnimator colorFadeProfileBg = ObjectAnimator.ofObject(mBindings.profileRootContainer, "backgroundColor",
new ArgbEvaluator(),
profileBgStart,
profileBgEnd);
colorFadeProfileBg.setDuration(animationTimeMillis);
colorFadeProfileBg.start();
View toolbarTitleActivityView = requireActivity().findViewById(R.id.toolbar_title);
ObjectAnimator flipToolbarTitleX = ObjectAnimator.ofFloat(toolbarTitleActivityView, "scaleX",
titleFlipStart,
titleFlipEnd);
flipToolbarTitleX.setDuration(animationTimeMillis);
flipToolbarTitleX.start();
ObjectAnimator flipToolbarTitleY = ObjectAnimator.ofFloat(toolbarTitleActivityView, "scaleY",
titleFlipStart,
titleFlipEnd);
flipToolbarTitleY.setDuration(animationTimeMillis);
flipToolbarTitleY.start();
ObjectAnimator colorFadeTitleTextColor = ObjectAnimator.ofObject(toolbarTitleActivityView, "textColor",
new ArgbEvaluator(),
rootBgEnd,
rootBgStart);
colorFadeTitleTextColor.setDuration(animationTimeMillis);
colorFadeTitleTextColor.start();
}
public void changeUserDepo() { public void changeUserDepo() {
DialogSwitchUserDepoView.newInstance(SettingsManager.iDB().getAvailableCodMdep(), this::onUserDepoChanged) DialogSwitchUserDepoView.newInstance(SettingsManager.iDB().getAvailableCodMdep(), this::onUserDepoChanged)
.show(getParentFragmentManager(), "switch-user-depo"); .show(getParentFragmentManager(), "switch-user-depo");

View File

@@ -43,10 +43,10 @@ import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.JtbComt; import it.integry.integrywmsnative.core.model.JtbComt;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepo; import it.integry.integrywmsnative.core.model.MtbDepo;
import it.integry.integrywmsnative.core.model.MtbGrup; import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer;
@@ -806,7 +806,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
this.mOrdiniInevasiMutableData.stream() Stream.of(this.mOrdiniInevasiMutableData)
.forEach(x -> x.getSelectedObservable().set(false)); .forEach(x -> x.getSelectedObservable().set(false));
} }
@@ -842,7 +842,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
} }
@Override @Override
public void onOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<AlreadyRegisteredUlDTO> alreadyRegisteredMtbColts) { public void onOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<MtbColt> alreadyRegisteredMtbColts) {
List<String> codMarts = Stream.of(sitArts) List<String> codMarts = Stream.of(sitArts)
.distinctBy(SitArtOrdDTO::getCodMart) .distinctBy(SitArtOrdDTO::getCodMart)
.map(SitArtOrdDTO::getCodMart) .map(SitArtOrdDTO::getCodMart)
@@ -862,6 +862,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
() -> SpedizioneActivity.startActivity(getActivity(), () -> SpedizioneActivity.startActivity(getActivity(),
sitArts, sitArts,
orders, orders,
alreadyRegisteredMtbColts,
mCurrentGestioneCol, mCurrentGestioneCol,
mCurrentSegnoCol, mCurrentSegnoCol,
MtbColr.Causale.DEFAULT, MtbColr.Causale.DEFAULT,

View File

@@ -23,9 +23,9 @@ import it.integry.integrywmsnative.core.exception.NoOrderFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbGrup; import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUlDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
@@ -146,7 +146,8 @@ public class OrdiniUscitaElencoViewModel {
List<SitArtOrdDTO> finalSitArts = sitArts; List<SitArtOrdDTO> finalSitArts = sitArts;
this.mOrdiniRESTConsumer.getBancaliGiaRegistrati( this.mOrdiniRESTConsumer.getBancaliGiaRegistrati(
selectedOrdersBase.stream().map(x -> (OrdineInevasoDTO) x).collect(Collectors.toList()), Stream.of(selectedOrdersBase).map(x -> (OrdineInevasoDTO) x).toList(),
mCurrentGestioneCol,
mCurrentSegnoCol, mCurrentSegnoCol,
mtbColtList -> { mtbColtList -> {
this.sendOnOrdersDispatched(selectedOrdersBase, finalSitArts, mtbColtList); this.sendOnOrdersDispatched(selectedOrdersBase, finalSitArts, mtbColtList);
@@ -302,7 +303,7 @@ public class OrdiniUscitaElencoViewModel {
if (this.mListener != null) mListener.onOrderFiltered(filteredOrders); if (this.mListener != null) mListener.onOrderFiltered(filteredOrders);
} }
private void sendOnOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<AlreadyRegisteredUlDTO> alreadyRegisteredMtbColts) { private void sendOnOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<MtbColt> alreadyRegisteredMtbColts) {
if (this.mListener != null) if (this.mListener != null)
mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts); mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts);
} }
@@ -315,7 +316,7 @@ public class OrdiniUscitaElencoViewModel {
void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders); void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders);
void onOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<AlreadyRegisteredUlDTO> alreadyRegisteredMtbColts); void onOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<MtbColt> alreadyRegisteredMtbColts);
} }
} }

View File

@@ -251,9 +251,6 @@ public class OrdiniUscitaElencoFiltroViewModel {
.distinct() .distinct()
.toList(); .toList();
if(codMdeps.isEmpty())
return new ArrayList<>();
return Stream.of(Objects.requireNonNull(mtbDepoFullList)) return Stream.of(Objects.requireNonNull(mtbDepoFullList))
.filter(x -> codMdeps.contains(x.getCodMdep())) .filter(x -> codMdeps.contains(x.getCodMdep()))
.distinct() .distinct()

View File

@@ -30,6 +30,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.JtbComt; import it.integry.integrywmsnative.core.model.JtbComt;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
@@ -39,7 +40,6 @@ import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO; import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@@ -56,10 +56,7 @@ import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.Magazzin
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemsRequestDTO; import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemsRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@@ -338,8 +335,6 @@ public class PickingLiberoViewModel {
if (this.mFlagAskCliente) { if (this.mFlagAskCliente) {
var data = this.sendLUClienteRequired(); var data = this.sendLUClienteRequired();
if (data == null) return;
vtbDest = data.first; vtbDest = data.first;
codJcom = data.second; codJcom = data.second;
} }
@@ -575,7 +570,7 @@ public class PickingLiberoViewModel {
MtbColt sourceMtbColt = new MtbColt() MtbColt sourceMtbColt = new MtbColt()
.setNumCollo(mtbColr.getNumCollo()) .setNumCollo(mtbColr.getNumCollo())
.setGestione(mtbColr.getGestione()) .setGestione(mtbColr.getGestione())
.setDataCollo(mtbColr.getDataColloLD()) .setDataCollo(mtbColr.getDataColloD())
.setSerCollo(mtbColr.getSerCollo()) .setSerCollo(mtbColr.getSerCollo())
.setMtbColr(new ObservableArrayList<>()); .setMtbColr(new ObservableArrayList<>());
@@ -624,25 +619,42 @@ public class PickingLiberoViewModel {
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) throws Exception { public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) throws Exception {
final MtbColr mtbColr = new MtbColr()
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setCodJcom(this.mDefaultCommessa.getCodJcom());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
return; return;
} }
var insertUdsRowRequest = new InsertUDSRowRequestDTO() var value = mColliMagazzinoRESTConsumer.saveColloSynchronized(cloneMtbColt);
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setQtaTot(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setCodJcom(this.mDefaultCommessa.getCodJcom())
.setTargetMtbColt(mCurrentMtbColt.clone(false));
MtbColr savedMtbColr = mColliScaricoRESTConsumer.insertUDSRowSynchronized(insertUdsRowRequest); mtbColr
savedMtbColr.setMtbAart(pickingObjectDTO.getMtbAart()); .setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga())
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart());
mCurrentMtbColt.getMtbColr().add(savedMtbColr); mCurrentMtbColt.getMtbColr().add(mtbColr);
this.sendOnRowSaved(); this.sendOnRowSaved();
@@ -650,40 +662,6 @@ public class PickingLiberoViewModel {
} }
private void executeDepositChangeIfNeeded(MtbColt refMtbColt) throws Exception {
//Considero solo la prima UDC scansionata
boolean shouldChangeCodMdep = refMtbColt != null && !refMtbColt.getCodMdep().equalsIgnoreCase(mCurrentMtbColt.getCodMdep()) &&
mCurrentMtbColt.getMtbColr().isEmpty();
String newCodMdep = shouldChangeCodMdep ? refMtbColt.getCodMdep() : null;
if (shouldChangeCodMdep) {
mColliMagazzinoRESTConsumer.spostaUlSynchronized(mCurrentMtbColt, newCodMdep, null, false);
mCurrentMtbColt.setCodMdep(newCodMdep);
}
}
private void executeTipoUlChangeIfNeeded(MtbColt refMtbColt) throws Exception {
boolean shouldChangeCodTcol = refMtbColt != null && refMtbColt.getCodTcol() != null &&
!refMtbColt.getCodTcol().equalsIgnoreCase(mCurrentMtbColt.getCodTcol()) &&
mCurrentMtbColt.getMtbColr().isEmpty();
String newTipoUL = shouldChangeCodTcol ? refMtbColt.getCodTcol() : null;
ObservableMtbTcol newMtbTcol = SettingsManager.iDB().getInternalImballi().stream()
.filter(x -> x.getCodTcol().equalsIgnoreCase(newTipoUL))
.findFirst()
.orElse(null);
if (!UtilityString.isNullOrEmpty(newTipoUL) && newMtbTcol == null) {
throw new Exception("Impossibile riconoscere il tipo UL " + newTipoUL);
}
if (shouldChangeCodTcol && newMtbTcol != null) {
mColliMagazzinoRESTConsumer.updateTipoULSynchronized(mCurrentMtbColt, newMtbTcol.getCodTcol());
mCurrentMtbColt.setCodTcol(newMtbTcol.getCodTcol());
}
}
private MtbColt loadRifULFromMtbColr(MtbColr mtbColr) throws Exception { private MtbColt loadRifULFromMtbColr(MtbColr mtbColr) throws Exception {
//Se ho dei riferimenti ad una UL devo leggere la QTA ancora disponibile sulla Ul //Se ho dei riferimenti ad una UL devo leggere la QTA ancora disponibile sulla Ul
if (mtbColr != null && if (mtbColr != null &&
@@ -695,7 +673,7 @@ public class PickingLiberoViewModel {
MtbColt mtbColt = mColliMagazzinoRESTConsumer.getByChiaveColloSynchronized( MtbColt mtbColt = mColliMagazzinoRESTConsumer.getByChiaveColloSynchronized(
mtbColr.getGestioneRifEnum(), mtbColr.getGestioneRifEnum(),
mtbColr.getNumColloRif(), mtbColr.getNumColloRif(),
mtbColr.getDataColloRifLD(), mtbColr.getDataColloRifS(),
mtbColr.getSerColloRif(), mtbColr.getSerColloRif(),
true, true,
false); false);
@@ -787,25 +765,36 @@ public class PickingLiberoViewModel {
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) throws Exception { private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) throws Exception {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
MtbColr mtbColrClone = (MtbColr) mtbColrToUpdate.clone();
mtbColrClone.setMtbAart(null)
.setMtbPartitaMag(null);
var editUDSRowRequest = new EditUDSRowRequestDTO() MtbColt mtbColt = new MtbColt()
.setSourceMtbColr(mtbColrClone) .setNumCollo(mtbColrToUpdate.getNumCollo())
.setNewNumCnf(numCnf) .setDataCollo(mtbColrToUpdate.getDataColloS())
.setNewQtaCnf(qtaCnf) .setSerCollo(mtbColrToUpdate.getSerCollo())
.setNewQtaTot(qtaTot); .setGestione(mtbColrToUpdate.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
mColliScaricoRESTConsumer.editUDSRowSynchronized(editUDSRowRequest); final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.UPDATE);
mtbColr
.setNumCnf(numCnf)
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot)
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setDatetimeRow(UtilityDate.getDateInstance());
mtbColrToUpdate.setNumCnf(numCnf) mtbColt.getMtbColr().add(mtbColr);
var value = this.mColliMagazzinoRESTConsumer.saveColloSynchronized(mtbColt);
mtbColr.setNumCnf(numCnf)
.setQtaCnf(qtaCnf) .setQtaCnf(qtaCnf)
.setQtaCol(qtaTot); .setQtaCol(qtaTot);
handler.post(() -> { handler.post(() -> {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate); this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
this.mCurrentMtbColt.getMtbColr().add(mtbColrToUpdate); this.mCurrentMtbColt.getMtbColr().add(mtbColr);
}); });
this.sendOnRowSaved(); this.sendOnRowSaved();
@@ -818,10 +807,21 @@ public class PickingLiberoViewModel {
if (shouldDelete) { if (shouldDelete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
var deleteUdsRowRequest = new DeleteUDSRowRequestDTO() MtbColt mtbColt = new MtbColt()
.setMtbColrToDelete(mtbColrToDelete); .setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
mColliScaricoRESTConsumer.deleteUDSRowSynchronized(deleteUdsRowRequest); mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
mtbColt.getMtbColr().add(mtbColr);
var value = this.mColliMagazzinoRESTConsumer.saveColloSynchronized(mtbColt);
handler.post(() -> { handler.post(() -> {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
@@ -861,7 +861,7 @@ public class PickingLiberoViewModel {
if (this.mDefaultGestione == GestioneEnum.LAVORAZIONE && SettingsManager.iDB().isProduzioneGeneraDocScar()) { if (this.mDefaultGestione == GestioneEnum.LAVORAZIONE && SettingsManager.iDB().isProduzioneGeneraDocScar()) {
if (SettingsManager.iDB().getInternalCodAnags() == null || SettingsManager.iDB().getInternalCodAnags().isEmpty()) if(SettingsManager.iDB().getInternalCodAnags() == null || SettingsManager.iDB().getInternalCodAnags().isEmpty())
throw new Exception("Nessuna anagrafica aziendale configurata. Assicurarsi di aver abilitato il flag FLAG_USE_COD_ANAG_AZIENDALE."); throw new Exception("Nessuna anagrafica aziendale configurata. Assicurarsi di aver abilitato il flag FLAG_USE_COD_ANAG_AZIENDALE.");
closeUDSRequest closeUDSRequest

View File

@@ -4,8 +4,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.text.InputType;
import android.text.SpannableString; import android.text.SpannableString;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
@@ -53,7 +51,6 @@ 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.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView; import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@@ -71,9 +68,6 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Inject @Inject
DialogInputQuantityV2View mDialogInputQuantityV2View; DialogInputQuantityV2View mDialogInputQuantityV2View;
@Inject
Handler handler;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>(); private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>();
@@ -256,7 +250,10 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
public void createNewLU() { public void createNewLU() {
this.mBindings.mainFab.close(true); this.mBindings.mainFab.close(true);
this.onLoadingStarted(); this.onLoadingStarted();
this.mViewmodel.createNewLU(null, null, this::onLoadingEnded);
this.mViewmodel.createNewLU(null, null, () -> {
this.onLoadingEnded();
});
} }
public void removeListFilter() { public void removeListFilter() {
@@ -336,7 +333,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
mDialogInputQuantityV2View mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO) .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete(resultDTO -> { .setOnComplete(resultDTO -> {
if (resultDTO == null || resultDTO.isAborted()) { if(resultDTO == null || resultDTO.isAborted()) {
this.mViewmodel.resetMatchedRows(); this.mViewmodel.resetMatchedRows();
return; return;
} }
@@ -372,7 +369,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override @Override
public void onRowSaved() { public void onRowSaved() {
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT) Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R.color.green_500)) .setBackgroundTint(getResources().getColor(R. color. green_500))
.show(); .show();
} }
@@ -388,25 +385,21 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override @Override
public void onLUOpened(MtbColt mtbColt) { public void onLUOpened(MtbColt mtbColt) {
handler.post(() -> { noLUPresent.set(false);
noLUPresent.set(false);
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT) Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R.color.green_500)) .setBackgroundTint(getResources().getColor(R. color. green_500))
.show(); .show();
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
});
} }
@Override @Override
public void onLUClosed() { public void onLUClosed() {
handler.post(() -> { noLUPresent.set(true);
noLUPresent.set(true); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
if (this.mShouldCloseActivity) super.onBackPressed(); if (this.mShouldCloseActivity) super.onBackPressed();
});
} }
@Override @Override

View File

@@ -565,7 +565,7 @@ public class PickingResiViewModel {
.setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo())) .setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo()))
.setNumColloRif(mtbColrToDispatch.getNumCollo()) .setNumColloRif(mtbColrToDispatch.getNumCollo())
.setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione())) .setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione()))
.setDataColloRif(mtbColrToDispatch.getDataColloLD()); .setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS()));
if (mtbColrToDispatch.getPesoNettoKg() != null) { if (mtbColrToDispatch.getPesoNettoKg() != null) {
@@ -608,7 +608,7 @@ public class PickingResiViewModel {
this.mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { this.mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr mtbColr
.setDataCollo(value.getDataColloLD()) .setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo()) .setNumCollo(value.getNumCollo())
.setGestione(value.getGestione()) .setGestione(value.getGestione())
.setSerCollo(value.getSerCollo()) .setSerCollo(value.getSerCollo())
@@ -634,7 +634,7 @@ public class PickingResiViewModel {
MtbColt mtbColt = new MtbColt() MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToUpdate.getNumCollo()) .setNumCollo(mtbColrToUpdate.getNumCollo())
.setDataCollo(mtbColrToUpdate.getDataColloLD()) .setDataCollo(mtbColrToUpdate.getDataColloS())
.setSerCollo(mtbColrToUpdate.getSerCollo()) .setSerCollo(mtbColrToUpdate.getSerCollo())
.setGestione(mtbColrToUpdate.getGestione()) .setGestione(mtbColrToUpdate.getGestione())
.setMtbColr(new ObservableArrayList<>()); .setMtbColr(new ObservableArrayList<>());
@@ -682,7 +682,7 @@ public class PickingResiViewModel {
MtbColt mtbColt = new MtbColt() MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo()) .setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloLD()) .setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo()) .setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione()) .setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>()); .setMtbColr(new ObservableArrayList<>());

View File

@@ -102,7 +102,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
} else if (position % 2 == 1) { } else if (position % 2 == 1) {
holder.mBinding.getRoot().setBackgroundColor(Color.WHITE); holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
} else { } else {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBGLight)); holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
} }
holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE);

View File

@@ -11,6 +11,7 @@ import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter; import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type; import com.ravikoradiya.liveadapter.Type;
@@ -55,7 +56,6 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbiso
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import kotlin.Unit;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link Fragment} subclass.
@@ -119,39 +119,20 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
mViewModel.init();
this.onLoadingStarted();
executorService.execute(() -> {
try {
mViewModel.init();
this.onLoadingEnded();
} catch (Exception ex) {
this.onError(ex);
}
});
} }
private void initRecyclerView() { private void initRecyclerView() {
mViewModel.getOrdiniList().observe(getViewLifecycleOwner(), data -> { mViewModel.getOrdiniList().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
this.onLoadingStarted(); this.onLoadingStarted();
this.initMtbGrupsCache(() -> {
executorService.execute(() -> { this.initJtbComtCache(this::onLoadingEnded);
try {
this.initMtbGrupsCache();
this.initJtbComtCache();
this.onLoadingEnded();
handler.post(() -> {
mFilterViewModel.init(mViewModel.getOrdiniList().getValue());
this.refreshList(null);
});
} catch (Exception ex) {
this.onError(ex);
}
}); });
mFilterViewModel.init(mViewModel.getOrdiniList().getValue());
this.refreshList(null);
}); });
var itemTypeHeader = new Type<GroupTitleModel, FragmentProdFabbisognoLineeTitleItemBinding>(R.layout.fragment_prod_fabbisogno_linee_title_item, BR.item); var itemTypeHeader = new Type<GroupTitleModel, FragmentProdFabbisognoLineeTitleItemBinding>(R.layout.fragment_prod_fabbisogno_linee_title_item, BR.item);
@@ -161,13 +142,13 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
var item = x.getBinding().getItem(); var item = x.getBinding().getItem();
item.getSelected().set(!item.getSelected().get()); item.getSelected().set(!item.getSelected().get());
mProdFabbisognoItemModel.stream() Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) y).getOrdineLavorazioneDTO().getCodJfas().equals(item.getTitle())) .filter(y -> y instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) y).getOrdineLavorazioneDTO().getCodJfas().equals(item.getTitle()))
.forEach(y -> { .forEach(y -> {
((ProdFabbisognoLineeItemModelDto) y).getSelected().set(item.selected.get()); ((ProdFabbisognoLineeItemModelDto) y).getSelected().set(item.selected.get());
}); });
fabVisible.set(mProdFabbisognoItemModel.stream() fabVisible.set(Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto) .filter(y -> y instanceof ProdFabbisognoLineeItemModelDto)
.anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get())); .anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get()));
@@ -178,7 +159,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
var item = x.getBinding().getItem(); var item = x.getBinding().getItem();
item.getSelected().set(!item.getSelected().get()); item.getSelected().set(!item.getSelected().get());
fabVisible.set(mProdFabbisognoItemModel.stream() fabVisible.set(Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto) .filter(y -> y instanceof ProdFabbisognoLineeItemModelDto)
.anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get())); .anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get()));
@@ -188,10 +169,6 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
new LiveAdapter(mProdFabbisognoItemModel) new LiveAdapter(mProdFabbisognoItemModel)
.map(GroupTitleModel.class, itemTypeHeader) .map(GroupTitleModel.class, itemTypeHeader)
.map(ProdFabbisognoLineeItemModelDto.class, itemType) .map(ProdFabbisognoLineeItemModelDto.class, itemType)
.onNoData(noData -> {
mBindings.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE);
return Unit.INSTANCE;
})
.into(this.mBindings.inventarioList); .into(this.mBindings.inventarioList);
} }
@@ -214,6 +191,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
private List<Object> convertDataModelToListModel(List<ProdFabbisognoLineeItemModelDto> itemModel) { private List<Object> convertDataModelToListModel(List<ProdFabbisognoLineeItemModelDto> itemModel) {
Stream.of(itemModel)
.sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas()))
.toList();
List<Object> listaFinale = new ArrayList<>(); List<Object> listaFinale = new ArrayList<>();
String currentGroup = null; String currentGroup = null;
@@ -243,10 +224,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged);
mFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); mFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged);
List<FilterChipDTO> filterList = ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet().stream() List<FilterChipDTO> filterList = Stream.of(ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet())
.map(Map.Entry::getValue) .map(Map.Entry::getValue)
.sorted(Comparator.comparing(FilterChipDTO::getPosizione)) .sortBy(FilterChipDTO::getPosizione)
.collect(Collectors.toList()); .toList();
for (FilterChipDTO filterChipDTO : filterList) { for (FilterChipDTO filterChipDTO : filterList) {
@@ -322,11 +303,11 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
.setAllNumOrds(mFilterViewModel.getAllNumOrds()) .setAllNumOrds(mFilterViewModel.getAllNumOrds())
.setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds()) .setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds())
.setOnFilterApplied(mFilterViewModel::setNumOrdFilter) .setOnFilterApplied(mFilterViewModel::setNumOrdFilter)
.setPreSelectedNumOrds(Objects.requireNonNull(mViewModel.getOrdiniList().getValue()).stream() .setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrdiniList().getValue()))
.filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ? .filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentNumOrdsPredicate().get())) x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentNumOrdsPredicate().get()))
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd()) .map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.collect(Collectors.toList())); .toList());
case ProdFabbisognoLineeProdBindings.MGRP_FILTER_ID -> case ProdFabbisognoLineeProdBindings.MGRP_FILTER_ID ->
((FilterGruppoMercLayoutView) filterLayoutView) ((FilterGruppoMercLayoutView) filterLayoutView)
@@ -341,36 +322,42 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
} }
private void initMtbGrupsCache() throws Exception { private void initMtbGrupsCache(Runnable onComplete) {
var codMgrpArts = Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()).stream() var codMgrpArts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()))
.flatMap(x -> .flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ?
(x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ? x.getOrdineLavorazioneDTO().getAvailableClassMerc() : new ArrayList<>()))
x.getOrdineLavorazioneDTO().getAvailableClassMerc() : new ArrayList<OrdineLavorazioneDTO.AvailableClassMerc>()).stream())
.map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp) .map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp)
.filter(Objects::nonNull) .withoutNulls()
.distinct() .distinct()
.collect(Collectors.toList()); .toList();
this.mtbGrupCache = this.mArticoloRESTConsumer.getArtsGroupsSynchronized(codMgrpArts); this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> {
this.mtbGrupCache = mtbGrupCache;
onComplete.run();
}, this::onError);
} }
private void initJtbComtCache() throws Exception { private void initJtbComtCache(Runnable onComplete) {
if (this.mViewModel.getOrdiniList().getValue() == null) { if (this.mViewModel.getOrdiniList().getValue() == null) {
this.jtbComtCache = new ArrayList<>(); this.jtbComtCache = new ArrayList<>();
onComplete.run();
return; return;
} }
var jtbComts = Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()).stream() var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()))
.map(x -> x.getOrdineLavorazioneDTO().getCodJcom()) .flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getCodJcom()))
.filter(Objects::nonNull) .distinct().withoutNulls()
.distinct() .toList();
.collect(Collectors.toList());
if (jtbComts.isEmpty()) { if (jtbComts.isEmpty()) {
this.jtbComtCache = new ArrayList<>(); this.jtbComtCache = new ArrayList<>();
onComplete.run();
return; return;
} }
this.jtbComtCache = this.mCommessaRESTConsumer.getJtbComtsSynchronized(jtbComts); this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> {
this.jtbComtCache = jtbComtCache;
onComplete.run();
}, this::onError);
} }
@Override @Override
@@ -396,34 +383,27 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
.map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd())) .map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd()))
.collect(Collectors.toList())); .collect(Collectors.toList()));
LocalDate dataInizio = mProdFabbisognoItemModel.stream() LocalDate dataInizio = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrd()) .map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrd())
.min(Comparator.naturalOrder()) .min(Comparator.naturalOrder())
.orElse(null); .orElse(null);
LocalDate dataFine = mProdFabbisognoItemModel.stream() LocalDate dataFine = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrd()) .map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrd())
.max(Comparator.naturalOrder()) .max(Comparator.naturalOrder())
.orElse(null); .orElse(null);
List<MtbGrup> listMtbGrup = mProdFabbisognoItemModel.stream() List<MtbGrup> listMtbGrup = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get()) .filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.flatMap(x -> ((ProdFabbisognoLineeItemModelDto) x).getSelectedMtbGrup().stream()) .flatMap(x -> Stream.of(((ProdFabbisognoLineeItemModelDto) x).getSelectedMtbGrup()))
.collect(Collectors.toList()); .toList();
executorService.execute(() -> { this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine, onCompleteData -> {
try { startPickingActivity(listMtbGrup, onCompleteData);
onLoadingStarted();
var fabbisognoData = this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine);
onLoadingEnded();
startPickingActivity(listMtbGrup, fabbisognoData);
} catch (Exception e) {
this.onError(e);
}
}); });
} }
private void startPickingActivity(List<MtbGrup> listMtbGrup, List<ProdFabbisognoLineeProdDTO> fabbisognoList) { private void startPickingActivity(List<MtbGrup> listMtbGrup, List<ProdFabbisognoLineeProdDTO> fabbisognoList) {
@@ -434,10 +414,10 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
.map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd())) .map(x -> String.valueOf(((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd()))
.collect(Collectors.toList())); .collect(Collectors.toList()));
java.util.stream.Stream<ProdFabbisognoLineeProdDTO> streamSitArtOrd = fabbisognoList.stream(); Stream<ProdFabbisognoLineeProdDTO> streamSitArtOrd = Stream.of(fabbisognoList);
streamSitArtOrd = listMtbGrup != null && !listMtbGrup.isEmpty() ? streamSitArtOrd = listMtbGrup != null && !listMtbGrup.isEmpty() ?
streamSitArtOrd.filter(x -> listMtbGrup.stream().anyMatch(y -> y.getCodMgrp().equalsIgnoreCase(x.getCodMgrp()))) : streamSitArtOrd.filter(x -> Stream.of(listMtbGrup).anyMatch(y -> y.getCodMgrp().equalsIgnoreCase(x.getCodMgrp()))) :
streamSitArtOrd; streamSitArtOrd;
List<SitArtOrdDTO> sitArtOrdDTOS = streamSitArtOrd.map(x -> { List<SitArtOrdDTO> sitArtOrdDTOS = streamSitArtOrd.map(x -> {
@@ -459,13 +439,14 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
return sitArtOrdDTO; return sitArtOrdDTO;
}) })
.collect(Collectors.toList()); .toList();
boolean divideByGrpMerc = SettingsManager.iDB().isGroupPoductionByCommodityGroup(); boolean divideByGrpMerc = SettingsManager.iDB().isGroupPoductionByCommodityGroup();
SpedizioneActivity.startActivity(getActivity(), SpedizioneActivity.startActivity(getActivity(),
sitArtOrdDTOS, sitArtOrdDTOS,
new ArrayList<>(), new ArrayList<>(),
new ArrayList<>(),
GestioneEnum.LAVORAZIONE, GestioneEnum.LAVORAZIONE,
+1, +1,
MtbColr.Causale.VERSAMENTO, MtbColr.Causale.VERSAMENTO,

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