diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 6d0ee1c2..5815a4a6 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 49029d75..d32fcd14 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -40,6 +40,16 @@
+
+
+ @style/AppTheme
+
+
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -55,6 +65,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -75,11 +90,21 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -90,6 +115,16 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -125,6 +160,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -155,6 +195,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -170,6 +215,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -195,11 +245,21 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -220,6 +280,16 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -230,6 +300,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
Landscape
@@ -286,6 +361,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -296,6 +376,11 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
@@ -321,16 +406,36 @@
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
+
+
+ @style/AppTheme
+
+
@style/AppTheme
+
+
+ @style/AppTheme
+
+
+
+
+ @style/AppTheme
+
+
@@ -373,103 +478,40 @@
-
+
+
+
-
+
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
@@ -574,7 +616,7 @@
@@ -635,63 +677,63 @@
- {
+ "keyToString": {
+ "Android App.app.executor": "Run",
+ "ApkExportedModule": "Gestor_Almacén.app",
+ "DEBUGGABLE_DEVICE": "zebra_technologies-tc21-21114523025303",
+ "DEBUGGABLE_PROCESS": "es.verdnatura.sfusion",
+ "DEBUGGER_ID": "Auto",
+ "ExportApk.ApkPathForGestor_Almacén.app": "C:\\Users\\sergiodt\\AndroidStudioProjects\\vn-warehouseManager\\app",
+ "Gradle.vn-warehouseManager [clean].executor": "Run",
+ "Gradle.vn-warehouseManager.executor": "Run",
+ "KotlinFunctionFindUsagesOptions.isSearchForTextOccurrences": "true",
+ "PROJECT_TRUSTED_KEY": "true",
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.cidr.known.project.marker": "true",
+ "RunOnceActivity.readMode.enableVisualFormatting": "true",
+ "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "SHOW_ALL_PROCESSES": "false",
+ "ScreenRecorder.SavePath": "C:\\Users\\sergiodt",
+ "android-custom-viewC:/Users/sergiodt/.gradle/caches/modules-2/files-2.1/androidx.recyclerview/recyclerview/1.2.1/f0f93e67af3f7417bdd560d5142f6dec4fe629c3/recyclerview-1.2.1-sources.jar!/androidx/recyclerview/widget/RecyclerView.java_SELECTED": "RecyclerView",
+ "android-custom-viewC:/Users/sergiodt/AppData/Local/Android/Sdk/sources/android-29/android/widget/TextView.java_SELECTED": "TextView",
+ "android-custom-viewC:/Users/sergiodt/AppData/Local/Android/Sdk/sources/android-33/android/view/View.java_SELECTED": "View",
+ "android-custom-viewC:/Users/sergiodt/AppData/Local/Android/Sdk/sources/android-34/android/view/View.java_SELECTED": "View",
+ "android-custom-viewC:/Users/sergiodt/AppData/Local/Android/Sdk/sources/android-34/android/widget/CompoundButton.java_SELECTED": "CompoundButton",
+ "android-custom-viewC:/Users/sergiodt/AppData/Local/Android/Sdk/sources/android-34/android/widget/TextView.java_SELECTED": "TextView",
+ "cf.first.check.clang-format": "false",
+ "cidr.known.project.marker": "true",
+ "com.developerphil.adbidea.selecteddevices": "G65TY9DQN7X4BIE6",
+ "com.google.services.firebase.aqiPopupShown": "true",
+ "git-widget-placeholder": "dev__6078",
+ "ignore.virus.scanning.warn.message": "true",
+ "kotlin-language-version-configured": "true",
+ "last_directory_selection": "C:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app/src/main/res/drawable",
+ "last_opened_file_path": "C:/Users/sergiodt/AndroidStudioProjects/vn-warehouseManager/app",
+ "project.structure.last.edited": "Project",
+ "project.structure.proportion": "0.17",
+ "project.structure.side.proportion": "0.2",
+ "rearrange.code.on.save": "true",
+ "run.code.analysis.last.selected.profile": "pProject Default",
+ "settings.editor.selected.configurable": "preferences.pluginManager"
},
- "keyToStringList": {
- "ExportApk.BuildVariants": [
- "betaRelease"
+ "keyToStringList": {
+ "ExportApk.BuildVariants": [
+ "generalRelease"
],
- "com.android.tools.idea.sqlite.queryhistory": [
- "select * from expedition where routeFk=182933;",
- "select * from expedition;",
- "select * from expeditionPending;",
- "select * from expedition where id = 7753995;\n\n",
- "\nselect * from expedition where id = 7753995;"
+ "com.android.tools.idea.sqlite.queryhistory": [
+ "select * from expedition where routeFk=182933;",
+ "select * from expedition;",
+ "select * from expeditionPending;",
+ "select * from expedition where id = 7753995;\n\n",
+ "\nselect * from expedition where id = 7753995;"
],
- "kotlin-gradle-user-dirs": [
- "C:\\Users\\sergiodt\\.gradle"
+ "kotlin-gradle-user-dirs": [
+ "C:\\Users\\sergiodt\\.gradle"
]
}
-}]]>
+}
@@ -699,18 +741,18 @@
+
-
+
-
@@ -720,11 +762,11 @@
+
+
+
-
-
-
@@ -873,6 +915,13 @@
+
+
+
C:\Users\sergiodt\AppData\Roaming\Subversion
@@ -1228,7 +1277,7 @@
1709725795643
-
+
@@ -1356,22 +1405,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1381,32 +1414,48 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/domain/SalixCallback.kt
- 72
-
+ 76
+
file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/domain/SalixCallback.kt
- 82
+ 86
file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/domain/SalixCallback.kt
- 81
+ 85
file://$PROJECT_DIR$/app/src/main/java/es/verdnatura/domain/SalixCallback.kt
- 83
+ 87
diff --git a/app/build.gradle b/app/build.gradle
deleted file mode 100644
index 37c34a2d..00000000
--- a/app/build.gradle
+++ /dev/null
@@ -1,169 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-kapt'
-apply plugin: 'com.google.gms.google-services'
-apply plugin: 'com.google.firebase.crashlytics'
-apply plugin: 'com.google.devtools.ksp'
-
-
-android {
- namespace = "es.verdnatura"
- compileSdk 34
- defaultConfig {
- applicationId "es.verdnatura"
- minSdkVersion 26
- targetSdkVersion 33 // se deja con target si no Play Protect la bloquea
- versionCode 330
- versionName = "24.38"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
-
- buildTypes {
- release {
- /*debuggable false
- shrinkResources true
- minifyEnabled true*/
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
-
- //package de la app general = "package_name": "es.verdnatura"
- //package de la app beta = "package_name": "es.verdnatura.sfusion"
-
- applicationVariants.all { variant ->
- variant.outputs.all { output ->
- def flavorName = variant.productFlavors[0].name
- def apkName
-
- if (flavorName == "beta") {
- apkName = "vn-pickingBeta.apk"
- } else if (flavorName == "general") {
- apkName = "vn-picking.apk"
- } else {
- apkName = "vn-picking.apk"
- }
-
- output.outputFileName = apkName
- }
- }
- }
-
- flavorDimensions += "version"
- productFlavors {
- create("beta") {
- applicationIdSuffix = ".sfusion"
- }
- create("general") {
- //versionNameSuffix = "General"
- }
- }
-
- buildFeatures {
- viewBinding = true
-
- }
- /*kotlinOptions {
- jvmTarget = "1.8"
- }
- buildFeatures {
- compose = true
- }
- kotlin {
- jvmToolchain(8)
- }
- composeOptions {
- kotlinCompilerExtensionVersion = "1.4.3"
- }
- */
- dataBinding {
- enabled = true
- }
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_17
- targetCompatibility JavaVersion.VERSION_17
- }
-
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.google.firebase:firebase-crashlytics-ktx:19.0.3'
- implementation 'com.google.firebase:firebase-analytics-ktx:22.0.2'
- implementation 'com.google.android.gms:play-services-location:21.3.0'
- implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7'
- implementation 'androidx.navigation:navigation-ui-ktx:2.7.7'
- implementation 'androidx.core:core-ktx:1.13.1'
- kapt "androidx.room:room-compiler:2.6.1"
- implementation 'androidx.room:room-ktx:2.6.1'
- debugImplementation fileTree(dir: 'libs/debug', include: ['*.jar'])
- releaseImplementation fileTree(dir: 'libs/release', include: ['*.jar'])
-
- //canvas
- implementation 'com.simplify:ink:1.0.0'
-
- // Kotlin and Android
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.7.0'
- implementation 'androidx.core:core-ktx:1.13.1'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- implementation 'androidx.legacy:legacy-support-v4:1.0.0'
- implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
-
-//tests
- testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.2.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
- implementation 'com.google.android.material:material:1.12.0'
- implementation 'com.squareup.retrofit2:retrofit:2.3.0'
- implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
- implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
- implementation "com.airbnb.android:lottie:$lottieVersion"
- implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
-
- //Fragments
- implementation("androidx.fragment:fragment-ktx:1.8.2")
-
- // Architecture components
- implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.4"
- implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.4"
- implementation "androidx.legacy:legacy-support-v4:1.0.0"
-
- //Koin new resolve
- implementation "io.insert-koin:koin-core:$koin"
- implementation "io.insert-koin:koin-android:$koin"
- implementation "io.insert-koin:koin-androidx-scope:$koin"
- implementation "io.insert-koin:koin-androidx-viewmodel:$koin"
-
- // Image libraries
- implementation "io.coil-kt:coil:$coil"
- implementation "com.github.bumptech.glide:glide:$glide"
- implementation "com.github.bumptech.glide:okhttp3-integration:$glide"
- //kapt "com.github.bumptech.glide:compiler:$glide"
- ksp("com.github.bumptech.glide:ksp:$glide")
-
- // Add the Firebase Crashlytics SDK.
- implementation 'com.google.firebase:firebase-analytics:22.0.2'
-
- //search
- implementation 'com.github.mirrajabi:search-dialog:1.1'
-
- //logs
- implementation 'com.jakewharton.timber:timber:4.7.1'
-
- //pickerImage
- implementation 'com.github.esafirm:android-image-picker:3.0.0-beta5'
-
- //preferences
- implementation("androidx.datastore:datastore-preferences:1.1.1")
- implementation 'androidx.datastore:datastore-core:1.1.1'
-
-
- // Compose
- /* implementation(platform("androidx.compose:compose-bom:2024.02.01"))
- implementation("androidx.compose.ui:ui")
- implementation("androidx.compose.material:material")
- implementation("androidx.compose.runtime:runtime")
- implementation("androidx.activity:activity-compose:1.8.2")
- implementation("androidx.compose.ui:ui-graphics")
- implementation("androidx.compose.ui:ui-tooling-preview")*/
-}
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 00000000..97becf18
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,143 @@
+plugins {
+ id("com.android.application")
+ id("kotlin-android")
+ id("kotlin-kapt")
+ id("com.google.gms.google-services")
+ id("com.google.firebase.crashlytics")
+ id("com.google.devtools.ksp")
+}
+
+android {
+ namespace = "es.verdnatura"
+ compileSdk = 35
+
+ defaultConfig {
+ applicationId = "es.verdnatura"
+ minSdk = 26
+ targetSdk = 33 // se deja con target si no Play Protect la bloquea
+ versionCode = 358
+ versionName = "24.46"
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+
+ buildTypes {
+ getByName("release") {
+ //debuggable = false
+ //shrinkResources = true
+ //minifyEnabled = true
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
+ )
+ }
+ }
+ //package de la app general = "package_name": "es.verdnatura"
+ //package de la app beta = "package_name": "es.verdnatura.sfusion"
+
+ applicationVariants.all { variant ->
+ variant.outputs.all { output ->
+ val flavorName = variant.productFlavors[0].name
+ val buildTypeName = variant.buildType.name
+
+ val apkName = when (flavorName) {
+ "beta" -> "vn-pickingBeta-${buildTypeName}.apk"
+ else -> "vn-picking-${buildTypeName}.apk"
+ }
+ output.outputFile.renameTo(File(output.outputFile.parentFile, apkName))
+ true
+ }
+
+ }
+ flavorDimensions += "version"
+ productFlavors {
+ create("beta") {
+ applicationIdSuffix = ".sfusion"
+ }
+ create("general") {}
+ }
+
+ buildFeatures {
+ viewBinding = true
+ //compose = true
+
+ /*kotlinOptions {
+ jvmTarget = "1.8"
+ }
+ buildFeatures {
+ compose = true
+ }
+
+ composeOptions {
+ kotlinCompilerExtensionVersion = "1.4.3"
+ }
+ */
+ dataBinding = true
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+ /* composeOptions {
+ kotlinCompilerExtensionVersion = "1.5.15"
+ }*/
+ /* kotlin {
+ jvmToolchain(17)
+ }
+ kotlinOptions {
+ jvmTarget = "17"
+ }*/
+
+ dependencies {
+ implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
+ implementation(libs.firebase.crashlytics.ktx)
+ implementation(libs.firebase.analytics.ktx)
+ implementation(libs.play.services.location)
+ implementation(libs.navigation.fragment.ktx)
+ implementation(libs.androidx.navigation.ui.ktx)
+ implementation(libs.androidx.core.ktx)
+ implementation(libs.androidx.recyclerview)
+ implementation(libs.androidx.room.ktx)
+ kapt(libs.androidx.room.compiler)
+ implementation(libs.ink)
+ implementation(libs.kotlin.stdlib.jdk7)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.androidx.core.ktx)
+ implementation(libs.androidx.constraintlayout)
+ implementation(libs.androidx.legacy.support.v4)
+ implementation(libs.androidx.lifecycle.extensions)
+ implementation(libs.material)
+ implementation(libs.retrofit)
+ implementation(libs.converter.gson)
+ implementation(libs.converter.scalars)
+ implementation(libs.lottie)
+ implementation(libs.androidx.swiperefreshlayout)
+ implementation(libs.androidx.fragment.ktx)
+ implementation(libs.androidx.lifecycle.viewmodel.ktx)
+ implementation(libs.androidx.lifecycle.livedata.ktx)
+ implementation(libs.androidx.legacy.support.v4)
+ implementation(libs.koin.core)
+ implementation(libs.koin.android)
+ implementation(libs.koin.androidx.scope)
+ implementation(libs.koin.androidx.viewmodel)
+ implementation(libs.glide)
+ implementation(libs.okhttp3.integration)
+ ksp(libs.glide.ksp)
+ implementation(libs.firebase.analytics)
+ implementation(libs.android.image.picker)
+ implementation(libs.androidx.datastore.preferences)
+ implementation(libs.androidx.datastore.core)
+ implementation(libs.zxing.android.embedded) { isTransitive = false }
+ implementation(libs.core)
+
+ // Compose
+ //implementation(libs.androidx.compose.bom)
+ /* implementation("androidx.compose.ui:ui")
+ implementation("androidx.compose.material:material")
+ implementation("androidx.compose.runtime:runtime")
+ implementation("androidx.activity:activity-compose:1.8.2")
+ implementation("androidx.compose.ui:ui-graphics")
+ implementation("androidx.compose.ui:ui-tooling-preview") */
+ }
+}
+
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 39cb9403..58f2fc33 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,6 +1,6 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
+# proguardFiles setting in build.gradle.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
diff --git a/app/src/main/java/es/verdnatura/MobileApplication.kt b/app/src/main/java/es/verdnatura/MobileApplication.kt
index 8b81fa96..fbe56783 100644
--- a/app/src/main/java/es/verdnatura/MobileApplication.kt
+++ b/app/src/main/java/es/verdnatura/MobileApplication.kt
@@ -44,7 +44,6 @@ class MobileApplication : Application(), InteceptorListener {
signListener = listener
}
- // lateinit var silex: VerdnaturaService
lateinit var salix: SalixService
var userId: Int? = null
var userName: String? = null
diff --git a/app/src/main/java/es/verdnatura/dataStore/DataStoreLocal.kt b/app/src/main/java/es/verdnatura/dataStore/DataStoreLocal.kt
index 45ef7c9c..1077b911 100644
--- a/app/src/main/java/es/verdnatura/dataStore/DataStoreLocal.kt
+++ b/app/src/main/java/es/verdnatura/dataStore/DataStoreLocal.kt
@@ -124,7 +124,7 @@ class DataStoreLocal(var mobileApplication: MobileApplication) {
SECTORFKDEFAULT
}
)
-
+
if (operator.sector?.isOnReservationMode != null) {
editDataStoreKey(
SECTORISONRESERVATIONMODE,
@@ -178,7 +178,10 @@ class DataStoreLocal(var mobileApplication: MobileApplication) {
editDataStoreKey(
RESERVATIONMODE, operator.isOnReservationMode
)
-
+ editDataStoreKey(
+ ITEMPACKING,
+ operator.itemPackingTypeFk
+ )
}
suspend fun isPreferenceExists(key: String): Boolean {
diff --git a/app/src/main/java/es/verdnatura/db/database.kt b/app/src/main/java/es/verdnatura/db/database.kt
index 5de0a7be..54fc4f0b 100644
--- a/app/src/main/java/es/verdnatura/db/database.kt
+++ b/app/src/main/java/es/verdnatura/db/database.kt
@@ -1,7 +1,16 @@
package es.verdnatura.db
import android.content.Context
-import androidx.room.*
+import androidx.room.Dao
+import androidx.room.Database
+import androidx.room.Delete
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
+import androidx.room.Query
+import androidx.room.Room
+import androidx.room.RoomDatabase
+import androidx.room.TypeConverter
+import androidx.room.TypeConverters
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import es.verdnatura.presentation.view.feature.delivery.model.ClientTicketSalix
@@ -68,6 +77,9 @@ interface ExpedicionDao {
@Query("DELETE FROM expeditionPending WHERE code = :codeState")
suspend fun getDeleteByState(codeState: String)
+
+ @Query("DELETE FROM expeditionPending")
+ suspend fun getDeleteAllState()
}
@Dao
diff --git a/app/src/main/java/es/verdnatura/domain/Extensions.kt b/app/src/main/java/es/verdnatura/domain/Extensions.kt
index 98f784dd..9e739a20 100644
--- a/app/src/main/java/es/verdnatura/domain/Extensions.kt
+++ b/app/src/main/java/es/verdnatura/domain/Extensions.kt
@@ -2,11 +2,16 @@ package es.verdnatura.domain
import android.content.Context
import android.graphics.Color
+import android.graphics.drawable.GradientDrawable
import android.os.Build
import android.text.Html
+import android.view.Gravity
+import android.view.LayoutInflater
import android.widget.EditText
+import android.widget.TextView
import android.widget.Toast
import androidx.annotation.RequiresApi
+import es.verdnatura.R
import java.text.SimpleDateFormat
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@@ -14,7 +19,15 @@ import java.util.Date
import java.util.Locale
fun List.formatWithQuotes(): String {
- return "[" + joinToString(", ") { if (it is String) "\"$it\"" else it.toString() } + "]"
+ return "[" + joinToString(", ") {
+ when {
+ it is String && (it.trim().startsWith("{") && it.trim()
+ .endsWith("}")) -> "\"$it\""
+
+ it is String -> "\"$it\""
+ else -> it.toString()
+ }
+ } + "]"
}
@RequiresApi(Build.VERSION_CODES.N)
@@ -33,6 +46,28 @@ fun Any.toast(
return toast.apply { show() }
}
+fun Context.showToastCenterWithBackground(textToShow: String) {
+ val inflater = LayoutInflater.from(this)
+ val layout = inflater.inflate(R.layout.ticket_toast_layout, null)
+ val text = layout.findViewById(R.id.toast_text)
+ text.text = "$textToShow"
+ text.setTextColor(this.getColor(R.color.verdnatura_orange_salix))
+ text.textSize = 18f
+
+ val background = GradientDrawable().apply {
+ setColor(Color.parseColor("#000000"))
+ cornerRadius = 16f
+ }
+ layout.background = background
+
+ Toast(this).apply {
+ duration = Toast.LENGTH_LONG
+ view = layout
+ setGravity(Gravity.CENTER, 0, 0)
+ show()
+ }
+}
+
fun T?.notNull(f: (it: T) -> Unit) {
if (this != null) f(this)
}
@@ -45,6 +80,7 @@ fun String.isParking(): Boolean {
val regex = Regex("^[^ ]+-[^ ]+$")
return this.length > 4 && regex.matches(this)
}
+
fun String.isShelving(): Boolean {
val regex = Regex("\\S{0,4}")
return regex.matches(this)
diff --git a/app/src/main/java/es/verdnatura/domain/SalixService.kt b/app/src/main/java/es/verdnatura/domain/SalixService.kt
index b8652197..dda92e6d 100644
--- a/app/src/main/java/es/verdnatura/domain/SalixService.kt
+++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt
@@ -5,6 +5,7 @@ import es.verdnatura.presentation.common.ExpeditionPrintOut
import es.verdnatura.presentation.common.ItemBarCodeSalix
import es.verdnatura.presentation.common.ItemShelving
import es.verdnatura.presentation.common.PackingSiteSalix
+import es.verdnatura.presentation.common.PickupResponse
import es.verdnatura.presentation.common.SaleTrackingSalix
import es.verdnatura.presentation.common.TicketState
import es.verdnatura.presentation.view.feature.ajustes.model.Printers
@@ -25,6 +26,10 @@ import es.verdnatura.presentation.view.feature.delivery.model.DeliveryInfo
import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoLoadUnload
import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoLog
import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoSummary
+import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionWithTicket
+import es.verdnatura.presentation.view.feature.delivery.model.RouteAction
+import es.verdnatura.presentation.view.feature.delivery.model.RouteComplement
+import es.verdnatura.presentation.view.feature.delivery.model.RouteComplementAdd
import es.verdnatura.presentation.view.feature.delivery.model.RouteDelivery
import es.verdnatura.presentation.view.feature.delivery.model.RouteInfo
import es.verdnatura.presentation.view.feature.delivery.model.TicketObservation
@@ -69,7 +74,6 @@ import es.verdnatura.presentation.view.feature.sacador.model.TicketStateSalix
import es.verdnatura.presentation.view.feature.ubicador.model.ItemBuy
import es.verdnatura.presentation.view.feature.ubicador.model.ItemShelvingNewer
import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicador
-import es.verdnatura.presentation.view.feature.ubicador.model.ItemUbicadorVO
import es.verdnatura.presentation.view.feature.workermistake.model.DepartmentMistake
import es.verdnatura.presentation.view.feature.workermistake.model.ExpeditionMistakeSalix
import es.verdnatura.presentation.view.feature.workermistake.model.MistakeType
@@ -140,6 +144,11 @@ interface SalixService {
@Query("filter") filter: String
): Call>
+ @POST("Applications/buy_getUltimate/execute-func")
+ fun buyUltimate(
+ @Query("params") params: Any, @Query("schema") schema: String = "vn"
+ ): Call
+
@GET("Buyers")
fun getBuyers(
@Query("filter") filter: String
@@ -181,10 +190,22 @@ interface SalixService {
fun getRoutes(
): Call>
- @GET("Workers/findOne")
+ @POST("Expeditions/moveExpeditions")
+ fun moveExpeditions(
+ @Query("clientId") clientId: Number,
+ @Query("warehouseId") warehouseId: Number,
+ @Query("addressId") addressId: Number,
+ @Query("agencyModeId") agencyModeId: Number,
+ @Query("routeId") routeId: Number,
+ @Query("expeditionIds") expeditionIds: ArrayList,
+ @Query("landed") landed: String
+
+ ): Call
+
+ @GET("Workers/Summary")
fun getNameWorker(
@Query("filter") filter: String
- ): Call
+ ): Call>
@POST("Applications/{routine}/execute-proc")
fun executeProc(
@@ -440,6 +461,12 @@ interface SalixService {
@Query("barcode") barcode: Number, @Query("warehouseFk") warehouseFk: Int
): Call
+ @POST("Applications/report_print/execute-proc")
+ fun printItem(
+ @Query("params") params: Any? = null,
+ @Query("schema") schema: String = "vn"
+ ): Call
+
@POST("Applications/itemPlacementSupplyAiming/execute-proc")
fun itemPlacementSupplyAiming(
@Query("params") params: Any? = null, @Query("schema") schema: String = "vn"
@@ -515,10 +542,10 @@ interface SalixService {
@Query("params") params: Any? = null, @Query("schema") schema: String = "vn"
): Call
- @POST("Applications/machine_getWorkerPlate/execute-proc")
- fun machineGetWorkerPlate(
- @Query("params") params: Any? = null, @Query("schema") schema: String = "vn"
- ): Call>
+ /* @POST("Applications/machine_getWorkerPlate/execute-proc")
+ fun machineGetWorkerPlate(
+ @Query("params") params: Any? = null, @Query("schema") schema: String = "vn"
+ ): Call>*/
@POST("Applications/sectorCollection_get/execute-proc")
fun sectorCollectionGet(
@@ -540,9 +567,34 @@ interface SalixService {
@Query("params") params: Any, @Query("schema") schema: String = "vn"
): Call>
+ @GET("RouteActions")
+ fun getRouteAction(
+ @Query("filter") filter: Any = """{"fields": {"id": true,"name": true,"price":true},"order": "name"}"""
+ ): Call>
+
+ @GET("Expeditions")
+ fun getDataFromExpedition(
+ @Query("filter") filter: Any,
+ ): Call>
+
+ @POST("RouteComplements")
+ fun addRouteComplements(
+ @Body params: RouteComplementAdd
+ ): Call
+
+ @GET("RouteComplements")
+ fun getRouteComplements(
+ @Query("filter") filter: Any
+ ): Call>
+
+ @DELETE("RouteComplements/{id}")
+ fun routeComplementDelete(
+ @Path("id") id: Number
+ ): Call
+
@POST("Applications/sectorCollection_new/execute-proc")
fun sectorCollectionNew(
- @Query("params") params: Any, @Query("schema") schema: String = "vn"
+ @Query("params") filter: Any, @Query("schema") schema: String = "vn"
): Call
@POST("Applications/ticketStateToday_setState/execute-proc")
@@ -560,6 +612,11 @@ interface SalixService {
@Query("filter") filter: Any, @Query("schema") schema: String = "vn"
): Call>
+ @GET("Tickets")
+ fun ticketIsPickup(
+ @Query("filter") filter: Any, @Query("schema") schema: String = "vn"
+ ): Call>
+
@POST("Applications/workerMachinery_isRegistered/execute-func")
fun workerMachineryIsRegistered(
@Query("params") params: Any, @Query("schema") schema: String = "vn"
@@ -643,18 +700,17 @@ interface SalixService {
@Query("params") params: Any,
): Call>
- @POST("Applications/itemShelving_get/execute-proc")
- fun itemShelvingList(
- @Query("schema") schema: String = "vn",
- @Query("params") params: Any,
- ): Call>
-
@POST("Applications/itemShelving_get/execute-proc")
fun itemShelvingListNew(
@Query("schema") schema: String = "vn",
@Query("params") params: Any,
): Call>
+ @GET("Shelvings")
+ fun itemShelvingGet(
+ @Query("filter") filter: Any,
+ ): Call>
+
@POST("Applications/expedition_scan/execute-proc")
fun expeditionScan(
@Query("schema") schema: String = "srt",
diff --git a/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt b/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt
index c3494307..8215f29c 100644
--- a/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt
+++ b/app/src/main/java/es/verdnatura/domain/userCases/UserCases.kt
@@ -1,12 +1,20 @@
package es.verdnatura.domain.userCases
-
import es.verdnatura.domain.SalixService
import retrofit2.Call
-
class GetItemFromBarcodeUseCase(private val salixService: SalixService) {
fun execute(barcode: String): Call {
return salixService.barcodesToItem(barcode)
}
}
+
+class GetItemPrintItemUseCase(private val salixService: SalixService) {
+ fun execute(params: Any?): Call {
+ return salixService.printItem(params)
+ }
+
+ fun executeBuyUltimate(params: Any): Call {
+ return salixService.buyUltimate(params)
+ }
+}
diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt
index 7357c0a0..2ec9bf35 100644
--- a/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt
+++ b/app/src/main/java/es/verdnatura/presentation/base/BaseActivity.kt
@@ -18,7 +18,7 @@ import com.google.android.gms.location.LocationCallback
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.Priority
import es.verdnatura.MobileApplication
-import timber.log.Timber.d
+import es.verdnatura.domain.toast
interface LocationUpdateCallback {
fun onLocationReceived(location: LocationResult)
@@ -36,7 +36,7 @@ abstract class BaseActivity : AppCompatActivity() {
var locationUpdateCallback: LocationUpdateCallback? = null
protected lateinit var binding: T
- private lateinit var fusedLocationClient:FusedLocationProviderClient
+ private lateinit var fusedLocationClient: FusedLocationProviderClient
private val locationRequest =
com.google.android.gms.location.LocationRequest.Builder(
Priority.PRIORITY_LOW_POWER,
@@ -50,8 +50,8 @@ abstract class BaseActivity : AppCompatActivity() {
setContentView(getLayoutId())
try {
initDataBinding()
- }catch (ex:Exception){
- d(ex.message.toString())
+ } catch (ex: Exception) {
+ ex.message!!.toast(context = this)
}
mobileApplication = application as MobileApplication
init()
@@ -62,7 +62,6 @@ abstract class BaseActivity : AppCompatActivity() {
open fun addBindingVariables() {}
abstract fun init()
-
private fun initDataBinding() {
binding = DataBindingUtil.setContentView(this, getLayoutId())
binding.lifecycleOwner = this
diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt
index 979ffe90..0498151d 100644
--- a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt
+++ b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt
@@ -69,10 +69,10 @@ abstract class BaseFragment(
addBindingVariables()
}
- fun textScanned_filterDouble(textScanned: String): String {
+ fun textScannedFilterDouble(textScanned: String): String {
if (textScanned.length > 13) {
- var size = textScanned.length
+ val size = textScanned.length
if (textScanned.substring((size / 2), size) == textScanned.substring(0, size / 2)
) {
return textScanned.substring(0, size / 2)
@@ -149,8 +149,8 @@ abstract class BaseFragment(
fun getInfoVersionNameApp(): String {
val manager: PackageManager = requireContext().packageManager
val info: PackageInfo = manager.getPackageInfo(requireContext().packageName, 0)
- mobileApplication.versionName = info.versionName
- return info.versionName
+ mobileApplication.versionName = info.versionName.toString()
+ return mobileApplication.versionName
}
fun getDevicePDA(): Int? {
diff --git a/app/src/main/java/es/verdnatura/presentation/common/GeneralAdapter.kt b/app/src/main/java/es/verdnatura/presentation/common/GeneralAdapter.kt
index eb39382f..59e04f60 100644
--- a/app/src/main/java/es/verdnatura/presentation/common/GeneralAdapter.kt
+++ b/app/src/main/java/es/verdnatura/presentation/common/GeneralAdapter.kt
@@ -7,9 +7,10 @@ import androidx.recyclerview.widget.RecyclerView
import es.verdnatura.databinding.ItemGeneralRowBinding
class GeneralAdapter(
- private val items: List,
- private val OnGeneralItemRowClickListener: OnGeneralItemRowClickListener,
- // private var showDelete: Boolean = false
+ private var items: List,
+ private val onDeleteItemRowClickListener: OnGeneralItemRowClickListener? = null,
+ private var showDelete: Boolean = false,
+ private val onRowClickListener: OnGeneralRowClickListener? = null
) : RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {
@@ -23,10 +24,6 @@ class GeneralAdapter(
override fun onBindViewHolder(holder: ItemHolder, position: Int) {
holder.bind(items[position])
- holder.binding.root.setOnClickListener {
- OnGeneralItemRowClickListener.onGeneralItemRowClickListener(items[position])
- }
-
}
inner class ItemHolder(
@@ -36,11 +33,31 @@ class GeneralAdapter(
fun bind(item: GeneralItem) {
binding.apply {
this.item = item
- /*if (showDelete) itemImage.visibility = View.VISIBLE
- else itemImage.visibility = View.GONE*/
+ if (showDelete) itemImage.visibility = View.VISIBLE
+ else itemImage.visibility = View.GONE
itemCode.visibility = View.GONE
}
+ binding.itemImage.setOnClickListener {
+ onDeleteItemRowClickListener?.onGeneralItemRowClickListener(item)
+ }
+ binding.itemCode.setOnClickListener {
+ onRowClickListener?.onRowClickListener(item)
+ }
+ binding.itemTitle.setOnClickListener {
+ onRowClickListener?.onRowClickListener(item)
+ }
+
}
}
+
+ fun updateItems(list: List) {
+ items = list
+ notifyDataSetChanged()
+ }
+
+ fun setShowDelete(hasVisibility: Boolean) {
+ showDelete = hasVisibility
+ notifyDataSetChanged()
+ }
}
diff --git a/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt b/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt
new file mode 100644
index 00000000..03049540
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/common/PrinterDialogManager.kt
@@ -0,0 +1,69 @@
+package es.verdnatura.presentation.common
+
+import android.app.AlertDialog
+import android.content.Context
+import android.text.InputType
+import android.view.View
+import es.verdnatura.R
+import es.verdnatura.presentation.view.component.CustomDialogList
+
+class PrinterDialogManager(private val context: Context) {
+ fun showPrintDialog(
+ item: Long,
+ itemName: String,
+ onPrintClick: (Long, String, Int?, Int) -> Unit
+ ) {
+ val customDialogList = CustomDialogList(context)
+ customDialogList.getEditText().setRawInputType(InputType.TYPE_CLASS_NUMBER)
+ customDialogList.getEditTextThree().setRawInputType(InputType.TYPE_CLASS_NUMBER)
+
+ customDialogList.setTitle(context.getString(R.string.itemName, item, itemName))
+ .setOkButton(context.getString(R.string.printQr)) {
+ handlePrintClick(item, customDialogList, onPrintClick, "qr")
+ }
+ .setOkTwoButton(context.getString(R.string.printBarcode)) {
+ handlePrintClick(item, customDialogList, onPrintClick, "barcode")
+
+ }
+ .setKoButton(context.getString(R.string.cancel)) {
+ customDialogList.dismiss()
+ }
+ .setHintValueThree(context.getString(R.string.labelNumber))
+ .setHintValue(context.getString(R.string.optionalPacking))
+ .setTextThree(View.VISIBLE)
+ .show()
+ customDialogList.getFocusThree()
+ }
+
+ private fun handlePrintClick(
+ item: Long,
+ customDialogList: CustomDialogList,
+ onPrintClick: (Long, String, Int?, Int) -> Unit,
+ labelType: String
+ ) {
+ onPrintClick(
+ item,
+ labelType,
+ if (customDialogList.getValue().isEmpty()) null else customDialogList.getValue()
+ .toInt(),
+ if (customDialogList.getValueOptional()
+ .isEmpty()
+ ) 1 else customDialogList.getValueOptional().toInt()
+ )
+ customDialogList.dismiss()
+ }
+}
+
+class LabelDialogHelper(private val context: Context) {
+ fun showLabelDialog(
+ onItemSelected: (Int) -> Unit,
+ ) {
+ val builder = AlertDialog.Builder(context)
+ builder.setTitle(context.getString(R.string.selectLabeltoPrint))
+ val labelCount = Array(10) { (it + 1).toString() }
+ builder.setItems(labelCount) { _, which ->
+ onItemSelected(which + 1)
+ }
+ builder.create().show()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt b/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt
index 6c9d4049..92ee45f4 100644
--- a/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt
+++ b/app/src/main/java/es/verdnatura/presentation/common/SalixBackItems.kt
@@ -96,4 +96,26 @@ data class ExpeditionPrintOut(
val expeditionFk: Long,
val itemFk: Int,
val isChecked: Boolean
+)
+
+data class PickupResponse(
+ val routeFk: Int,
+ val route: Route?
+)
+
+data class Route(
+ val id: Int,
+ val agencyModeFk: Int,
+ val agencyMode: AgencyMode?
+)
+
+data class AgencyMode(
+ val id: Int,
+ val deliveryMethodFk: Int,
+ val deliveryMethod: DeliveryMethod?
+)
+
+data class DeliveryMethod(
+ val id: Int,
+ val code: String?
)
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt b/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt
index c5d5bec6..facac1e2 100644
--- a/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt
+++ b/app/src/main/java/es/verdnatura/presentation/common/UICallbacks.kt
@@ -10,6 +10,7 @@ import es.verdnatura.presentation.view.feature.buscaritem.model.ItemLocationVO
import es.verdnatura.presentation.view.feature.claim.fragment.reubication.model.Reubication
import es.verdnatura.presentation.view.feature.delivery.model.ClientTicketSalix
import es.verdnatura.presentation.view.feature.delivery.model.ExpeditionInfoSummary
+import es.verdnatura.presentation.view.feature.delivery.model.RouteComplement
import es.verdnatura.presentation.view.feature.delivery.model.RouteInfo
import es.verdnatura.presentation.view.feature.delivery.model.Ticket
import es.verdnatura.presentation.view.feature.historicoarticulo.model.ItemHistoricoVO
@@ -50,6 +51,10 @@ interface OnMistakeWorkerClickListener {
fun onMistakeWorkerClickListener(item: WorkerFromMistake)
}
+interface OnSalarySupplementClickListener {
+ fun onSalarySupplementClickListener(item: RouteComplement)
+}
+
interface HideBottomNavigation {
fun hideBottomNavigation(entryPoint: String)
}
@@ -102,6 +107,10 @@ interface OnGeneralItemRowClickListener {
fun onGeneralItemRowClickListener(item: GeneralItem)
}
+interface OnGeneralRowClickListener {
+ fun onRowClickListener(item: GeneralItem)
+}
+
interface OnImageTrashClickListener {
fun onImageTrashClickListener(item: Any)
}
@@ -263,6 +272,10 @@ interface OnTicketClickListener {
fun onTicketClickListener(sale: SaleVO)
}
+interface OnTicketColorListener {
+ fun onTicketColorListener(sale: SaleVO)
+}
+
interface OnTicketClickSaleListener {
fun onTicketClickListener(sale: Sale)
}
@@ -271,6 +284,10 @@ interface OnSaleReserveClickListener {
fun onSaleReserveListener(sale: Sale)
}
+interface OnAddItemClickListener {
+ fun onAddItemClickListener(sale: Sale)
+}
+
interface OnBuyerSelectedListener {
fun onBuyerSelected(userFk: String)
}
diff --git a/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt b/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt
index 074d0eaa..a25ea5e2 100644
--- a/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt
+++ b/app/src/main/java/es/verdnatura/presentation/common/UIExtensions.kt
@@ -10,6 +10,8 @@ import android.graphics.drawable.Drawable
import android.media.AudioManager
import android.os.Build
import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
import android.text.InputType
import android.view.View
import android.view.ViewGroup
@@ -27,6 +29,10 @@ import com.bumptech.glide.request.transition.Transition
import java.text.DecimalFormat
import java.text.ParseException
import java.text.SimpleDateFormat
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.format.DateTimeFormatter
import java.util.Calendar
import java.util.Locale
@@ -153,8 +159,12 @@ fun Activity.showKeyboardIn() {
}
fun Context.hideKeyboard(view: View) {
- val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
- inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
+ Handler(Looper.getMainLooper()).postDelayed({
+ val inputMethodManager =
+ getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
+ inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
+ }, 100L)
+
}
fun Context.showKeyboard() {
@@ -213,7 +223,7 @@ fun PackageManager.getPackageInfoCompat(packageName: String, flags: Int = 0): Pa
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong()))
} else {
- getPackageInfo(packageName, flags)
+ getPackageInfo(packageName, flags)
}
fun convertToDateString(date: String?): String? {
@@ -221,8 +231,18 @@ fun convertToDateString(date: String?): String? {
if (date.isNullOrEmpty()) {
return date
}
- val formatoEntrada = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault()) // Formato de entrada
- val formatoSalida = SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()) // Formato de salida
+ val formatoEntrada =
+ SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault()) // Formato de entrada
+ val formatoSalida = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) // Formato de salida
val dateToConvert = formatoEntrada.parse(date) // Convertir fecha de String a objeto Date
return formatoSalida.format(dateToConvert!!) // Convertir fecha a String con formato deseado
}
+
+fun getDayBounds(dateString: String): Pair {
+ val formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
+ val date = LocalDate.parse(dateString, formatter)
+ val startOfDay = date.atTime(LocalTime.MIN)
+ val endOfDay = date.atTime(LocalTime.MAX)
+
+ return Pair(startOfDay, endOfDay)
+}
diff --git a/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt
new file mode 100644
index 00000000..eb9bdf47
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableAdapter.kt
@@ -0,0 +1,87 @@
+package es.verdnatura.presentation.view.commom
+
+import android.content.Context
+import android.graphics.Color
+import android.text.Spannable
+import android.text.SpannableString
+import android.text.style.ForegroundColorSpan
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.appcompat.widget.SearchView
+import androidx.recyclerview.widget.RecyclerView
+import es.verdnatura.domain.toast
+
+class SearchableAdapter(
+ private var listElements: MutableList,
+ private var context: Context,
+ private val onItemClick: (NameWithId) -> Unit,
+) : RecyclerView.Adapter() {
+
+ private var listElementsFiltered = listElements.toMutableList()
+ private var currentQuery: String = ""
+ private lateinit var searchView: SearchView
+
+ inner class NameViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val nameText: TextView = itemView.findViewById(android.R.id.text1)
+
+ fun bind(nameWithId: NameWithId, query: String) {
+ val spannableString = SpannableString(nameWithId.name)
+ try {
+ if (query.isNotEmpty()) {
+ val startIndex = nameWithId.name.indexOf(query, ignoreCase = true)
+ if (startIndex >= 0) {
+ val endIndex = startIndex + query.length
+ spannableString.setSpan(
+ ForegroundColorSpan(Color.RED),
+ startIndex,
+ endIndex,
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+ )
+ }
+ }
+ nameText.text = spannableString
+ itemView.setOnClickListener {
+ onItemClick(nameWithId)
+ }
+ } catch (ex: Exception) {
+ ex.message?.toast(context)
+ }
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NameViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(android.R.layout.simple_list_item_1, parent, false)
+ return NameViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: NameViewHolder, position: Int) {
+ val nameWithId = listElementsFiltered[position]
+ holder.bind(nameWithId, currentQuery)
+ }
+
+ fun filter(query: String) {
+ currentQuery = query
+ listElementsFiltered = if (query.isEmpty()) {
+ listElements.toMutableList()
+ } else {
+ listElements.filter { it.name.contains(query, ignoreCase = true) }
+ .toMutableList()
+ }
+ notifyDataSetChanged()
+ }
+
+ override fun getItemCount(): Int = listElementsFiltered.size
+
+ fun updateList(newList: MutableList) {
+ listElements = newList
+ filter("")
+ }
+}
+
+data class NameWithId(
+ val id: Number,
+ val name: String
+)
diff --git a/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableRecyclerView.kt b/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableRecyclerView.kt
new file mode 100644
index 00000000..b44a7043
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/view/commom/SearchableRecyclerView.kt
@@ -0,0 +1,80 @@
+package es.verdnatura.presentation.view.commom
+
+import android.content.Context
+import android.graphics.Color
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.LinearLayout
+import androidx.appcompat.widget.SearchView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import es.verdnatura.R
+
+class SearchableRecyclerView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : LinearLayout(context, attrs, defStyleAttr) {
+
+ val searchView: SearchView
+ private val recyclerView: RecyclerView
+ lateinit var adapter: SearchableAdapter
+ private var allItems: MutableList = mutableListOf()
+
+ init {
+ LayoutInflater.from(context).inflate(R.layout.component_searchable_dialog, this, true)
+ searchView = findViewById(R.id.search_view)
+ recyclerView = findViewById(R.id.recycler_viewer)
+ recyclerView.layoutManager = LinearLayoutManager(context)
+ recyclerView.setBackgroundColor(Color.WHITE)
+ searchView.setBackgroundColor(Color.WHITE)
+ searchView.setOnCloseListener {
+ visibility = View.GONE
+ true
+ }
+
+ searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
+ override fun onQueryTextSubmit(query: String?): Boolean {
+ return false
+ }
+
+ override fun onQueryTextChange(newText: String?): Boolean {
+ if (::adapter.isInitialized) adapter.filter(newText ?: "")
+ return true
+ }
+ })
+ }
+
+ fun setAdapter(adapter: SearchableAdapter, items: MutableList) {
+ this.adapter = adapter
+ this.allItems = items
+ recyclerView.adapter = adapter
+ adapter.notifyDataSetChanged()
+ }
+
+ fun setOnCloseListener(listener: () -> Boolean) {
+ searchView.setOnCloseListener { listener() }
+ }
+
+ fun setVisibility() {
+ searchView.visibility = View.VISIBLE
+ recyclerView.visibility = View.VISIBLE
+ }
+
+ fun setSearchHint(searchHint: String): SearchableRecyclerView {
+ searchView.queryHint = searchHint
+ searchView.setIconifiedByDefault(true)
+ searchView.isIconified = false
+ searchView.post {
+ searchView.requestFocus()
+ }
+
+ return this
+ }
+
+ fun setSearchHintWithoutFocus(searchHint: String): SearchableRecyclerView {
+ searchView.queryHint = searchHint
+ return this
+ }
+}
diff --git a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt
index 51970ec1..aaeaa032 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogList.kt
@@ -8,49 +8,43 @@ import com.google.android.material.textfield.TextInputEditText
import es.verdnatura.R
import es.verdnatura.databinding.ComponentCustomListDialogBinding
-//import kotlinx.android.synthetic.main.component_custom_list_dialog.*
-
-
class CustomDialogList(context: Context) : Dialog(context, R.style.DialogTheme) {
-
private var binding: ComponentCustomListDialogBinding =
ComponentCustomListDialogBinding.inflate(layoutInflater)
init {
-
setContentView(binding.root)
getEditText().requestFocus()
- //setContentView(R.layout.component_custom_list_dialog)
}
fun getRecyclerView(): RecyclerView {
-
return binding.itemRecyclerview
- //return item_recyclerview
}
fun getEditText(): TextInputEditText {
return binding.customDialogValue
- //return custom_dialog_value
}
fun getEditTextTwo(): TextInputEditText {
return binding.customDialogValueTwo
- //return custom_dialog_value_two
+ }
+
+ fun getEditTextThree(): TextInputEditText {
+ return binding.customDialogValueThree
}
fun getValue(): String {
return binding.customDialogValue.text.toString()
- //return custom_dialog_value.text.toString()
+ }
+
+ fun getValueOptional(): String {
+ return binding.customDialogValueThree.text.toString()
}
fun setValue(value: String): CustomDialogList {
binding.customDialogValue.setText(value)
binding.textinputlayoutUsername.visibility = View.VISIBLE
-
- /*custom_dialog_value.setText(value)
- textinputlayout_username.visibility = View.VISIBLE*/
return this
}
@@ -61,96 +55,97 @@ class CustomDialogList(context: Context) : Dialog(context, R.style.DialogTheme)
fun getValueTwo(): String {
return binding.customDialogValueTwo.text.toString()
- //return custom_dialog_value_two.text.toString()
}
fun setValueTwo(value: String): CustomDialogList {
binding.customDialogValueTwo.setText(value)
binding.textinputlayoutTwo.visibility = View.VISIBLE
-
- /* custom_dialog_value_two.setText(value)
- textinputlayout_two.visibility = View.VISIBLE*/
return this
}
fun setTitle(title: String): CustomDialogList {
binding.customDialogTitle.visibility = View.VISIBLE
binding.customDialogTitle.text = title
- /* custom_dialog_title.visibility = View.VISIBLE
- custom_dialog_title.text = title*/
return this
}
fun setDescription(title: String): CustomDialogList {
binding.customDialogDescription.visibility = View.VISIBLE
binding.customDialogDescription.text = title
-
- /*custom_dialog_description.visibility = View.VISIBLE
- custom_dialog_description.text = title*/
return this
}
-
fun setOkButton(text: String, onButtonClicked: () -> Unit): CustomDialogList {
binding.customDialogButtonOk.visibility = View.VISIBLE
binding.customDialogButtonOk.text = text
-
- /*custom_dialog_button_ok.visibility = View.VISIBLE
- custom_dialog_button_ok.text = text
- custom_dialog_button_ok.setOnClickListener { onButtonClicked() }*/
binding.customDialogButtonOk.setOnClickListener { onButtonClicked() }
return this
}
- fun setKoButton(text: String, onButtonClicked: () -> Unit): CustomDialogList {
+ fun setOkTwoButton(text: String, onButtonClicked: () -> Unit): CustomDialogList {
+ binding.customDialogButtonOkTwo.visibility = View.VISIBLE
+ binding.customDialogButtonOkTwo.text = text
+ binding.customDialogButtonOkTwo.setOnClickListener { onButtonClicked() }
+ return this
+ }
+ fun setKoButton(text: String, onButtonClicked: () -> Unit): CustomDialogList {
binding.customDialogButtonKo.visibility = View.VISIBLE
binding.customDialogButtonKo.text = text
- /*custom_dialog_button_ko.visibility = View.VISIBLE
- custom_dialog_button_ko.text = text*/
binding.customDialogButtonKo.setOnClickListener {
onButtonClicked()
dismiss()
}
-
return this
}
fun setHintValue(text: String): CustomDialogList {
-
binding.customDialogValue.hint = text
-// custom_dialog_value.hint = text
return this
}
fun setHintValueTwo(text: String): CustomDialogList {
binding.customDialogValueTwo.hint = text
- //custom_dialog_value_two.hint = text
return this
}
- fun setTextTwoGone(): CustomDialogList {
- binding.textinputlayoutTwo.visibility = View.GONE
- //textinputlayout_two.visibility = View.GONE
+ fun setHintValueThree(text: String): CustomDialogList {
+ binding.customDialogValueThree.hint = text
+ return this
+ }
+
+ fun setTextTwoVisibility(visibility: Int): CustomDialogList {
+ binding.textinputlayoutTwo.visibility = visibility
+ return this
+ }
+
+ fun setTextThree(visibility: Int): CustomDialogList {
+ binding.textinputlayoutThree.visibility = visibility
return this
}
fun hideDialog(): CustomDialogList {
binding.customDialogValue.visibility = View.GONE
- //custom_dialog_value.visibility = View.GONE
+ return this
+ }
+
+ fun showDialog(): CustomDialogList {
+ binding.customDialogValue.visibility = View.VISIBLE
return this
}
fun hideDescription(): CustomDialogList {
binding.customDialogDescription.visibility = View.GONE
-
return this
}
- fun hideTextInput(visibility:Int = View.INVISIBLE): CustomDialogList {
+ fun hideTextInput(visibility: Int = View.INVISIBLE): CustomDialogList {
binding.textinputlayoutUsername.visibility = visibility
-
return this
}
+
+ fun getFocusThree() {
+ binding.customDialogValueThree.requestFocus()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogThreeButtons.kt b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogThreeButtons.kt
index 74e1ba91..8186e76b 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogThreeButtons.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/component/CustomDialogThreeButtons.kt
@@ -7,10 +7,10 @@ import com.google.android.material.textfield.TextInputEditText
import es.verdnatura.R
import es.verdnatura.databinding.ComponentCustomThreeDialogBinding
+class CustomDialogThreeButtons(context: Context) : Dialog(context, R.style.DialogTheme) {
-class CustomDialogThreeButtons (context: Context) : Dialog(context, R.style.DialogTheme) {
-
- private var binding: ComponentCustomThreeDialogBinding = ComponentCustomThreeDialogBinding.inflate(layoutInflater)
+ private var binding: ComponentCustomThreeDialogBinding =
+ ComponentCustomThreeDialogBinding.inflate(layoutInflater)
init {
@@ -18,53 +18,52 @@ class CustomDialogThreeButtons (context: Context) : Dialog(context, R.style.Dial
//setContentView(R.layout.component_custom_three_dialog)
}
-
fun setTitle(title: String): CustomDialogThreeButtons {
- binding.customDialogTitle.visibility= View.VISIBLE
- binding.customDialogTitle.text=title
- /* custom_dialog_title.visibility = View.VISIBLE
- custom_dialog_title.text = title*/
+ binding.customDialogTitle.visibility = View.VISIBLE
+ binding.customDialogTitle.text = title
+ /* custom_dialog_title.visibility = View.VISIBLE
+ custom_dialog_title.text = title*/
return this
}
fun setDescription(description: String): CustomDialogThreeButtons {
- binding.customDialogDescription.visibility= View.VISIBLE
- binding.customDialogDescription.text=description
+ binding.customDialogDescription.visibility = View.VISIBLE
+ binding.customDialogDescription.text = description
- /* custom_dialog_description.visibility = View.VISIBLE
- custom_dialog_description.text = description*/
+ /* custom_dialog_description.visibility = View.VISIBLE
+ custom_dialog_description.text = description*/
return this
}
fun setOkButton(text: String, onButtonClicked: () -> Unit): CustomDialogThreeButtons {
binding.customDialogButtonOk.visibility = View.VISIBLE
- binding.customDialogButtonOk.text =text
+ binding.customDialogButtonOk.text = text
binding.customDialogButtonOk.setOnClickListener { onButtonClicked() }
- /* custom_dialog_button_ok.visibility = View.VISIBLE
- custom_dialog_button_ok.text = text
- custom_dialog_button_ok.setOnClickListener { onButtonClicked() }*/
+ /* custom_dialog_button_ok.visibility = View.VISIBLE
+ custom_dialog_button_ok.text = text
+ custom_dialog_button_ok.setOnClickListener { onButtonClicked() }*/
return this
}
-
- fun getValue() : String {
+ fun getValue(): String {
return binding.customDialogValue.text.toString()
//return custom_dialog_value.text.toString()
}
- fun getEditText() : TextInputEditText {
+ fun getEditText(): TextInputEditText {
return binding.customDialogValue
//return custom_dialog_value
}
- fun setValue(value : String): CustomDialogThreeButtons{
+
+ fun setValue(value: String): CustomDialogThreeButtons {
binding.customDialogValue.setText(value)
binding.textinputlayout.visibility = View.VISIBLE
- /* custom_dialog_value.setText(value)
- textinputlayout.visibility = View.VISIBLE*/
+ /* custom_dialog_value.setText(value)
+ textinputlayout.visibility = View.VISIBLE*/
return this
}
@@ -117,10 +116,15 @@ class CustomDialogThreeButtons (context: Context) : Dialog(context, R.style.Dial
return this
}
- fun setCustomDialogValue(visibility:Int){
- binding.customDialogValue.visibility=visibility
+ fun setCustomDialogValue(visibility: Int) {
+ binding.customDialogValue.visibility = visibility
}
- fun setFocusDialogValue(){
+
+ fun setFocusDialogValue() {
binding.customDialogValue.requestFocus()
}
+
+ fun setHintDialogValue(text: String) {
+ binding.customDialogValue.hint = text
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt
index c4e7d529..5787f391 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesFragment.kt
@@ -32,6 +32,8 @@ import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.OnAjustesItemClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
import es.verdnatura.presentation.common.ToolBarAdapterTooltip
+import es.verdnatura.presentation.view.commom.NameWithId
+import es.verdnatura.presentation.view.commom.SearchableAdapter
import es.verdnatura.presentation.view.component.CustomDialog
import es.verdnatura.presentation.view.feature.ajustes.adapter.SettingsAdapter
import es.verdnatura.presentation.view.feature.ajustes.model.AjustesItemVO
@@ -75,51 +77,96 @@ class AjustesFragment :
binding.mainToolbar.toolbarTitle.text = getString(R.string.settings)
hideBackButton(binding.mainToolbar)
getUserData()
- binding.userText.text = mobileApplication.userName
- binding.itemVersion.text = requireActivity().packageManager.getPackageInfo(
- requireActivity().packageName, 0
- ).versionName!!
- binding.androididText.text =
- mobileApplication.dataStoreApp.readDataStoreKey(ANDROID_ID)
- binding.serialNumber.text = mobileApplication.serialNumber
pasilleroViewModel = PasilleroViewModel(mobileApplication)
setToolBar()
super.init()
}
+ private fun setSearchable(listNames: MutableList) {
+ val adapter =
+ SearchableAdapter(
+ listElements = listNames,
+ context = requireContext()
+ ) { elementSelected ->
+ sectorListVO.forEach {
+ if (it.id == elementSelected.id) {
+ runBlocking {
+ mobileApplication.dataStoreApp.editDataStoreKey(
+ PRINTERNAME, getString(R.string.noprinter)
+ )
+ mobileApplication.dataStoreApp.editDataStoreKey(PRINTERFK, -1)
+ mobileApplication.dataStoreApp.editDataStoreKey(
+ SECTORDESCRIP, it.description
+ )
+ mobileApplication.dataStoreApp.editDataStoreKey(
+ SECTORFK, it.id
+ )
+ it.warehouseFk?.let { it1 ->
+ mobileApplication.dataStoreApp.editDataStoreKey(
+ WAREHOUSEFK, it1
+ )
+ }
+ }
+ viewModel.settingsItem[0].sectorFk = it.id
+ viewModel.settingsItem[0].selected = it.description
+ viewModel.workerUpdateOperatorSalix(
+ "sector", mobileApplication.userId!!, it.id, null
+ )
+ settingsAdapter!!.notifyItemChanged(0)
+ return@forEach
+ }
+ }
+ binding.searchableRecyclerView.visibility = View.GONE
+ }
+
+ binding.searchableRecyclerView.setAdapter(adapter, listNames)
+ binding.searchableRecyclerView.visibility = View.VISIBLE
+ binding.searchableRecyclerView.setSearchHintWithoutFocus(getString(R.string.sectorSearch))
+ }
+
private fun setToolBar() {
val listIcons: ArrayList = ArrayList()
val iconInfo = ImageView(context)
iconInfo.setImageResource(R.drawable.ic_info_delivery)
+ val iconLogout = ImageView(context)
+ iconLogout.setImageResource(R.drawable.ic_logout)
listIcons.add(iconInfo)
+ listIcons.add(iconLogout)
binding.mainToolbar.toolbarIcons.adapter =
ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener {
override fun onOptionsItemSelected(item: Drawable) {
- customDialog.setTitle(getString(R.string.info))
- .setDescription(
- getString(R.string.version) + ":\t" +
- requireActivity().packageManager.getPackageInfo(
- requireActivity().packageName, 0
- ).versionName!! + "(${getVersionCode()})" + "\n" +
- getString(R.string.user) + ":\t" +
- mobileApplication.userName + "\n" +
- getString(R.string.androidid) + ":\t" +
- mobileApplication.dataStoreApp.readDataStoreKey(
- ANDROID_ID
- ) + "\n" +
- if (!mobileApplication.serialNumber.isNullOrBlank()) {
- getString(R.string.serialNumber) + "\t" +
- mobileApplication.serialNumber
- } else ""
+ when (item) {
+ iconInfo.drawable -> {
+ customDialog.setTitle(getString(R.string.info))
+ .setDescription(
+ getString(R.string.version) + ":\t" +
+ requireActivity().packageManager.getPackageInfo(
+ requireActivity().packageName, 0
+ ).versionName!! + "(${getVersionCode()})" + "\n" +
+ getString(R.string.user) + ":\t" +
+ mobileApplication.userName + "\n" +
+ getString(R.string.androidid) + ":\t" +
+ mobileApplication.dataStoreApp.readDataStoreKey(
+ ANDROID_ID
+ ) + "\n" +
+ if (!mobileApplication.serialNumber.isNullOrBlank()) {
+ getString(R.string.serialNumber) + "\t" +
+ mobileApplication.serialNumber
+ } else ""
- )
- .setOkButton(getString(R.string.Close)) {
- customDialog.dismiss()
- }.show()
+ )
+ .setOkButton(getString(R.string.Close)) {
+ customDialog.dismiss()
+ }.show()
+ }
+ iconLogout.drawable -> {
+ ma.onMyBackPressed()
+ }
+ }
}
})
binding.mainToolbar.toolbarIcons.layoutManager =
@@ -177,6 +224,23 @@ class AjustesFragment :
CodeWorkerAction.STOP
)
+ getString(R.string.holdpositionAuto) -> {
+
+ runBlocking {
+ mobileApplication.dataStoreApp.editDataStoreKey(
+ HOLDPOSITION,
+ viewModel.settingsItem[5].selected != getString(R.string.yes)
+ )
+ }
+ viewModel.settingsItem[5].holdPosition =
+ !viewModel.settingsItem[5].holdPosition
+ viewModel.settingsItem[5].selected =
+ if (viewModel.settingsItem[5].holdPosition) getString(R.string.yes) else getString(
+ R.string.no
+ )
+ settingsAdapter!!.notifyItemChanged(5)
+ }
+
else -> {}
}
@@ -206,11 +270,13 @@ class AjustesFragment :
}
// modificar
listSectores.sort()
- val array = arrayOfNulls(listSectores.size)
sectorListVO = it.list
- showDialogForAll(
- listSectores.toArray(array), getString(R.string.selectSector)
- )
+ setSearchable(sectorListVO.map {
+ NameWithId(
+ id = it.id,
+ name = it.description
+ )
+ } as MutableList)
} else {
customDialog.setTitle(getString(R.string.sectors))
@@ -297,16 +363,6 @@ class AjustesFragment :
private fun getUserData() {
loginViewModel = LoginViewModel(requireActivity().applicationContext)
- /* try {
- loginViewModel.operatorGetData(mobileApplication.userId!!)
- } catch (_: Exception) {
- ma.messageWithSound(
- message = getString(R.string.errorGetData), isError = true, isPlayed = true
- )
- }
- loginViewModel.workerOperator.observe(this@AjustesFragment) { iti ->
- runBlocking { mobileApplication.dataStoreApp.saveDataOperator(iti) }
- }*/
handleUserCall()
loginViewModel.handleUserResponse.observe(this@AjustesFragment) { iti ->
runBlocking { mobileApplication.dataStoreApp.saveWorkerData(iti) }
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt
index c20a4863..8ac8ca71 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/ajustes/fragment/AjustesViewModel.kt
@@ -100,14 +100,17 @@ class AjustesViewModel(val context: Context) : BaseViewModel(context) {
action = false
)
)
- /*Tarea 5443
- _settingsItem.add(
- AjustesItemVO(
- "Bajar línea al revisar",
- holdPosition = holdPosition,
- action = true
- )
- )*/
+ //Tarea 5443
+ _settingsItem.add(
+ AjustesItemVO(
+ context.getString(R.string.holdpositionAuto),
+ holdPosition = holdPosition,
+ selected = if (holdPosition) context.getString(R.string.yes) else context.getString(
+ R.string.no
+ ),
+ action = true
+ )
+ )
_settingsItem.add(
AjustesItemVO(
@@ -124,11 +127,11 @@ class AjustesViewModel(val context: Context) : BaseViewModel(context) {
context.getString(R.string.runActivityStop), action = true
)
)
- _settingsItem.add(
- AjustesItemVO(
- context.getString(R.string.closeSession), action = true
- )
- )
+ /* _settingsItem.add(
+ AjustesItemVO(
+ context.getString(R.string.closeSession), action = true
+ )
+ )*/
}
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt
index 842bc292..b3b03808 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardFragment.kt
@@ -11,6 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.google.gson.Gson
import es.verdnatura.R
import es.verdnatura.databinding.FragmentItemCardBinding
+import es.verdnatura.domain.ConstAndValues.PRINTERFK
import es.verdnatura.domain.ConstAndValues.WAREHOUSEFK
import es.verdnatura.domain.notNull
import es.verdnatura.domain.toast
@@ -19,7 +20,9 @@ import es.verdnatura.presentation.common.OnBarcodeRowClickListener
import es.verdnatura.presentation.common.OnClickDynamic
import es.verdnatura.presentation.common.OnItemCardRowClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
+import es.verdnatura.presentation.common.PrinterDialogManager
import es.verdnatura.presentation.common.ToolBarAdapterTooltip
+import es.verdnatura.presentation.common.hideKeyboard
import es.verdnatura.presentation.common.itemScanValue
import es.verdnatura.presentation.common.loadUrl
import es.verdnatura.presentation.view.component.CustomDialogDynamicButtons
@@ -53,6 +56,8 @@ class ItemCardFragment(
private var quantityToDiscard = 0
private var itemInfoG: ItemCardVO? = null
private var positionToReturnY = 0
+ private var originalScan: String? = null
+ private var buyToPrint: Long? = null
companion object {
fun newInstance(entryPoint: String) = ItemCardFragment(entryPoint)
@@ -95,16 +100,20 @@ class ItemCardFragment(
iconHistory.setImageResource(R.drawable.ic_history_black_24dp)
val iconSalix = ImageView(context)
iconSalix.setImageResource(R.drawable.ic_logo_salix)
+ val iconPrint = ImageView(context)
+ iconPrint.setImageResource(R.drawable.ic_print_black_24dp)
iconReload.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp)
iconHistory.tooltipText = getTooltip(R.drawable.ic_history_black_24dp)
iconSalix.tooltipText = getTooltip(R.drawable.ic_logo_salix)
+ // Tarea 7266
+ // iconPrint.tooltipText = getTooltip(R.drawable.ic_print_black_24dp)
listIcons.add(iconSalix)
listIcons.add(iconReload)
listIcons.add(iconHistory)
-
+ // listIcons.add(iconPrint)
binding.mainToolbar.toolbarIcons.adapter =
ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener {
@@ -112,6 +121,25 @@ class ItemCardFragment(
override fun onOptionsItemSelected(item: Drawable) {
when (item) {
+
+ iconPrint.drawable -> {
+
+ if (buyToPrint != null) {
+
+ val printerDialogManager = PrinterDialogManager(requireContext())
+ printerDialogManager.showPrintDialog(
+ itemInfoG!!.id.toLong(),
+ itemInfoG?.longName ?: ""
+ ) { id, labelType, copies, packing ->
+ printItem(id, labelType, copies, packing)
+ }
+ } else ma.messageWithSound(
+ getString(R.string.errorPrintBuy),
+ isError = true,
+ isPlayed = true
+ )
+ }
+
iconReload.drawable -> {
getItemCard(itemInfoG!!.id.toString())
}
@@ -152,20 +180,42 @@ class ItemCardFragment(
LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
}
+ private fun printItem(id: Long, labelType: String, packing: Int?, copies: Int?) {
+
+ try {
+
+ viewModel.printItem(
+ reportName = "LabelBuy",
+ printerFk = mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERFK
+ ),
+ userFk = mobileApplication.userId!!,
+ priority = "normal",
+ params = """{'copies':$copies,'id':$id,'labelType':'$labelType','packing':$packing}"""
+ )
+ } catch (ex: Exception) {
+ ma.messageWithSound(message = ex.message.toString(), isError = true, isPlayed = true)
+ }
+ customDialogList.dismiss()
+ hideKeyboard()
+ }
+
private fun setEvents() {
binding.editItemFk.requestFocus()
binding.editItemFk.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
- if (binding.editItemFk.text.toString().isNotEmpty()) try {
- getItemCard(
- itemScanValue(
+ if (binding.editItemFk.text.toString().isNotEmpty())
+ try {
+ originalScan = itemScanValue(
binding.editItemFk.text.toString(), arrayOf("buy"), "more"
).toString()
- )
- } catch (ex: Exception) {
- ma.messageWithSound(ex.message.toString(), isError = true, isPlayed = true)
- }
+ getItemCard(
+ originalScan!!
+ )
+ } catch (ex: Exception) {
+ ma.messageWithSound(ex.message.toString(), isError = true, isPlayed = true)
+ }
binding.editItemFk.setText("")
ma.hideKeyboard(binding.editItemFk)
@@ -196,7 +246,6 @@ class ItemCardFragment(
warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey(WAREHOUSEFK) as Int
itemFk = itemValueFk
-
viewModel.getItemCard(itemFk.toLong(), warehouseFk!!)
}
@@ -210,6 +259,19 @@ class ItemCardFragment(
binding.itemcardLayout.visibility = View.VISIBLE
setItemCard(it)
binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE
+ /* Tarea 7266
+ if (originalScan == null || it.id == originalScan!!.toInt()) {
+ viewModel.buyUltimate(
+ itemFk = it.id,
+ warehouseFk = mobileApplication.dataStoreApp.readDataStoreKey(
+ WAREHOUSEFK
+ ),
+ dated = LocalDate.now()
+ .format(DateTimeFormatter.ofPattern("yyyy-dd-MM"))
+ )
+ } else {
+ buyToPrint = originalScan!!.toLong()
+ }*/
} else {
binding.itemcardLayout.visibility = GONE
binding.mainToolbar.toolbarTitle.text = getString(R.string.itemCard)
@@ -237,6 +299,11 @@ class ItemCardFragment(
}
}
+ loadBuyUltimateResponse.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ buyToPrint = it
+ }
+ }
}
}
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt
index 64d4a1b8..630199d4 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/fragment/ItemCardViewModel.kt
@@ -7,6 +7,7 @@ import androidx.lifecycle.map
import es.verdnatura.domain.SalixCallback
import es.verdnatura.domain.formatWithQuotes
import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase
+import es.verdnatura.domain.userCases.GetItemPrintItemUseCase
import es.verdnatura.presentation.base.BaseViewModel
import es.verdnatura.presentation.common.Event
import es.verdnatura.presentation.common.ItemBarCodeSalix
@@ -25,6 +26,7 @@ import java.io.File
class ItemCardViewModel(var context: Context) : BaseViewModel(context) {
private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix)
+ private val printItemUseCase = GetItemPrintItemUseCase(salix)
private val _itemCard by lazy { MutableLiveData() }
val itemCard: LiveData
@@ -48,6 +50,10 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) {
val loadAddressLosesList: LiveData> =
_addressLosesList.map { Event(it) }
+ private val _buyUltimateResponse by lazy { MutableLiveData() }
+ val buyUltimateResponse: LiveData = _buyUltimateResponse
+ val loadBuyUltimateResponse: LiveData> = _buyUltimateResponse.map { Event(it) }
+
fun getItemCard(
itemFk: Number,
warehouseFk: Int,
@@ -63,6 +69,28 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) {
})
}
+ fun printItem(
+ reportName: String,
+ printerFk: Int,
+ userFk: Int,
+ params: Any,
+ priority: String
+
+ ) {
+
+ printItemUseCase.execute(
+ params = arrayListOf(
+ reportName,
+ printerFk,
+ userFk,
+ params,
+ priority
+ ).formatWithQuotes()
+ )
+ .enqueue(object : SalixCallback(context) {
+ })
+ }
+
fun itemGetSimilar(
itemFk: Int,
warehouseFk: Int,
@@ -210,4 +238,15 @@ class ItemCardViewModel(var context: Context) : BaseViewModel(context) {
}
})
}
+
+ fun buyUltimate(
+ itemFk: Int, warehouseFk: Int, dated: String
+ ) {
+ salix.buyUltimate(params = arrayListOf(itemFk, warehouseFk, dated).formatWithQuotes())
+ .enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _buyUltimateResponse.value = response.body()
+ }
+ })
+ }
}
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemCardVO.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemCardVO.kt
index a8789dc2..5c5ea34f 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemCardVO.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/articulo/model/ItemCardVO.kt
@@ -10,7 +10,7 @@ class ItemCardVO(
var size: Int? = null,
var stems: String? = null,
var itemCost: String? = null,
- var category:String? = null,
+ var category: String? = null,
var producer: String? = null,
var origin: String? = null,
var reserva: Int? = null,
@@ -46,13 +46,20 @@ class ItemCardRowVO(
class BarcodeVO(
var code: String?
)
+
data class ItemDetails(
var itemFk: Int? = null,
var vShelvingFK: String = "",
var itemCost: Double = 0.0,
var visible: Int = 0,
+ )
+
+data class ItemPrint(
+ val id: Int,
+ val labelType: String,
+ val packing: Int? = null,
+ val copies: Int? = 1
)
-
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt
index a9cdddd0..f95a65e5 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/buscaritem/fragment/BuscarItemFragment.kt
@@ -45,7 +45,7 @@ class BuscarItemFragment(
if (binding.editItemFk.text.toString().isNotEmpty()) try {
getLocations(
itemScanValue(
- binding.editItemFk.text.toString(), arrayOf("buy"), "more"
+ binding.editItemFk.text.toString(), arrayOf("buy"), "more"
)
)
} catch (ex: Exception) {
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt
index 9c0f3658..5002a4a1 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapter.kt
@@ -6,6 +6,8 @@ import android.graphics.Color
import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.View
+import android.view.View.GONE
+import android.view.View.VISIBLE
import android.view.ViewGroup
import androidx.core.content.ContextCompat.getColor
import androidx.core.graphics.drawable.DrawableCompat
@@ -13,6 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import es.verdnatura.R
import es.verdnatura.databinding.ItemArticleRowFragmentBinding
+import es.verdnatura.domain.ConstAndValues.CONTROLADOR
import es.verdnatura.domain.ConstAndValues.SACADOR
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnPackingClickListener
@@ -20,11 +23,12 @@ import es.verdnatura.presentation.common.OnPasillerosItemClickListener
import es.verdnatura.presentation.common.OnQuantityClickListener
import es.verdnatura.presentation.common.OnSaleClickListener
import es.verdnatura.presentation.common.OnTicketClickListener
+import es.verdnatura.presentation.common.OnTicketColorListener
import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
import es.verdnatura.presentation.view.feature.sacador.model.SaleVO
class SaleAdapter(
- private val items: List,
+ private var items: MutableList,
private val onPasillerosItemClickListener: OnPasillerosItemClickListener,
private val onQuantityClick: OnQuantityClickListener,
private val onSaleClickListener: OnSaleClickListener,
@@ -33,8 +37,9 @@ class SaleAdapter(
private var onTicketClick: OnTicketClickListener? = null,
private var SaleAdapter: SaleAdapter? = null,
private var type: String? = null,
+ private var onTicketColorClickListener: OnTicketColorListener? = null
- ) : RecyclerView.Adapter() {
+) : RecyclerView.Adapter() {
var context: Context? = null
var position: Int = 0
@@ -396,8 +401,32 @@ class SaleAdapter(
} else {
View.GONE
}*/
-
+ println("sale ${sale.parkingCode} : ${sale.isAdvanced}")
//ASIGNAMOS VALOR A LA VSITA
+ ticketFk.setTextColor(
+ getColor(
+ context!!,
+ if (sale.isAdvanced != null && sale.isAdvanced == 1) {
+ R.color.verdnatura_red_salix
+ } else {
+ R.color.verdnatura_black
+ }
+ )
+ )
+ parkingCode.visibility = if (sale.parkingCode == null) GONE else VISIBLE
+
+ itemTicketColor.setOnClickListener {
+ onTicketColorClickListener?.onTicketColorListener(sale)
+ }
+ if (type == SACADOR || type == CONTROLADOR) {
+ itemTicketColor.tooltipText = context!!.getString(R.string.filterLevelColor)
+ }
+
+ /* ticketFk.paintFlags = ticketFk.paintFlags or Paint.UNDERLINE_TEXT_FLAG
+ itemArticleItemFk.paintFlags =
+ itemArticleItemFk.paintFlags or Paint.UNDERLINE_TEXT_FLAG*/
+
+
this.sale = sale
}
@@ -468,4 +497,14 @@ class SaleAdapter(
// itemTicketColor.setBackgroundResource((R.drawable.rectangle))
}
+
+ fun updateSales(newSales: List) {
+ items = newSales.toMutableList()
+ notifyDataSetChanged() // Notifica al adaptador que los datos han cambiado
+ }
+
+ fun orderSales(newSales: List) {
+
+ notifyDataSetChanged() // Notifica al adaptador que los datos han cambiado
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt
index 185c1b28..61f19df0 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/adapter/SaleAdapterNew.kt
@@ -7,7 +7,6 @@ import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.View
import android.view.View.GONE
-import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.view.ViewGroup
import androidx.core.content.ContextCompat.getColor
@@ -20,6 +19,7 @@ import es.verdnatura.domain.ConstAndValues.PREITEMPICKERTEST
import es.verdnatura.domain.ConstAndValues.PREPARED
import es.verdnatura.domain.ConstAndValues.SACADOR
import es.verdnatura.domain.toast
+import es.verdnatura.presentation.common.OnAddItemClickListener
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnPackingClickSaleListener
import es.verdnatura.presentation.common.OnPasillerosItemClickListener
@@ -38,6 +38,7 @@ class SaleAdapterNew(
private var onTicketClick: OnTicketClickSaleListener? = null,
private var saleAdapter: SaleAdapterNew? = null,
private var onReserveSaleClick: OnSaleReserveClickListener? = null,
+ private var onAddItemClickListener: OnAddItemClickListener? = null,
private var type: String? = null,
) : RecyclerView.Adapter() {
@@ -70,7 +71,6 @@ class SaleAdapterNew(
) : RecyclerView.ViewHolder(binding.root) {
fun bind(sale: Sale) {
binding.apply {
- // if (sale.reservedQuantity == null) sale.reservedQuantity = 0
val childLayoutManager =
LinearLayoutManager(context!!, RecyclerView.HORIZONTAL, false)
@@ -148,12 +148,15 @@ class SaleAdapterNew(
layoutError.visibility = VISIBLE
txtError.text =
binding.root.context.getString(R.string.originalQuantity) + sale.originalQuantity
+ binding.addItem.visibility = VISIBLE
} else {
layoutError.visibility = GONE
+ binding.addItem.visibility = GONE
+
}
- binding.deleteReserve.visibility = if (sale.isAdded == 1) VISIBLE else INVISIBLE
+ binding.deleteReserve.visibility = if (sale.isAdded == 1) VISIBLE else GONE
if (sale.isAdded == 1) {
layoutError.visibility = VISIBLE
@@ -183,16 +186,7 @@ class SaleAdapterNew(
View.GONE
}
- if (sale.isParent) {/* itemArticleItemFk.visibility = View.INVISIBLE
- itemPackingText.visibility = View.INVISIBLE
- itemPackingItemFk.visibility = View.INVISIBLE
- itemArticleCel1.visibility = View.INVISIBLE
- itemArticleCel2.visibility = View.INVISIBLE
- itemArticleCel3.visibility = View.INVISIBLE
- itemArticleQuantity.visibility = View.INVISIBLE
- txtdeNew.visibility = View.INVISIBLE
- itemArticleQuantityPicked.visibility = View.INVISIBLE
- itemArticleQuantityLine3.visibility = View.VISIBLE*/
+ if (sale.isParent) {
packingTopicker.visibility = View.INVISIBLE
quantityReserved.visibility = View.INVISIBLE
itemArticleItemFkNew.visibility = View.INVISIBLE
@@ -200,16 +194,7 @@ class SaleAdapterNew(
imageErrorMessage.visibility = View.INVISIBLE
ivArrow.visibility = View.VISIBLE
- } else {/*itemArticleItemFk.visibility = View.VISIBLE
- itemPackingText.visibility = View.VISIBLE
- itemPackingItemFk.visibility = View.VISIBLE
- itemArticleCel1.visibility = View.VISIBLE
- itemArticleCel2.visibility = View.VISIBLE
- itemArticleCel3.visibility = View.VISIBLE
- itemArticleQuantity.visibility = View.VISIBLE
- txtdeNew.visibility = View.VISIBLE
- itemArticleQuantityPicked.visibility = View.VISIBLE
- itemArticleQuantityLine3.visibility = View.VISIBLE*/
+ } else {
imageErrorMessage.visibility = View.GONE
if (type != SACADOR && type != PREITEMPICKERTEST) {
@@ -347,9 +332,12 @@ class SaleAdapterNew(
}
binding.itemParkingCode.text =
- // if (type == PREITEMPICKERTEST) sale.parkingCodePrevia else sale.parkingCode
- sale.parkingCodePrevia
+ // if (type == PREPARED) sale.parkingCodePrevia else sale.parkingCode
+ sale.parkingCode ?: sale.parkingCodePrevia
+ binding.addItem.setOnClickListener {
+ onAddItemClickListener!!.onAddItemClickListener(sale)
+ }
println("parkingCodePrevia ${sale.parkingCodePrevia}")
println("parkingCode ${sale.parkingCode}")
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt
new file mode 100644
index 00000000..77ad2c28
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionCheckerViewModel.kt
@@ -0,0 +1,358 @@
+package es.verdnatura.presentation.view.feature.collection.fragment
+
+import android.content.Context
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.map
+import com.google.gson.JsonObject
+import es.verdnatura.MobileApplication
+import es.verdnatura.domain.SalixCallback
+import es.verdnatura.domain.formatWithQuotes
+import es.verdnatura.domain.toast
+import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase
+import es.verdnatura.presentation.base.BaseViewModel
+import es.verdnatura.presentation.base.getMessageFromAllResponse
+import es.verdnatura.presentation.base.nameofFunction
+import es.verdnatura.presentation.common.Event
+import es.verdnatura.presentation.common.PickupResponse
+import es.verdnatura.presentation.common.SaleTrackingReplaceSalix
+import es.verdnatura.presentation.common.TicketState
+import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity
+import es.verdnatura.presentation.view.feature.collection.mapper.map
+import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
+import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeListVO
+import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeVO
+import es.verdnatura.presentation.view.feature.workermistake.model.SaleMistakeSalix
+import retrofit2.Response
+
+class CollectionCheckerViewModel(val context: Context) : BaseViewModel(context) {
+ private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix)
+
+ //var isPaused: Boolean = false
+
+ private val _isPaused = MutableLiveData()
+ val isPaused: LiveData get() = _isPaused
+
+ private val _collectionTicketList by lazy { MutableLiveData() }
+ val collectionTicketList: LiveData = _collectionTicketList
+ val loadTicketList: LiveData> = _collectionTicketList.map { Event(it) }
+
+ private val _responseSaleReplace by lazy { MutableLiveData() }
+ val responseSaleReplace: LiveData = _responseSaleReplace
+ val loadSaleReplace: LiveData> = _responseSaleReplace.map { Event(it) }
+
+ private val _responseCollectionAddItem by lazy { MutableLiveData() }
+ val responseCollectionAddItem: LiveData = _responseCollectionAddItem
+ val loadResponseAddItem: LiveData> = _responseCollectionAddItem.map { Event(it) }
+
+ private val _responsePrint by lazy { MutableLiveData() }
+ val responsePrint: LiveData = _responsePrint
+ val loadPrint: LiveData> = _responsePrint.map { Event(it) }
+
+ private val _responseTicketState by lazy { MutableLiveData() }
+ val responseTicketState: LiveData = _responseTicketState
+ val loadTicketState: LiveData> = _responseTicketState.map { Event(it) }
+
+ private val _responseTicketIsPickup by lazy { MutableLiveData() }
+ val responseTicketIsPickup: LiveData = _responseTicketIsPickup
+ val loadTicketIsPickup: LiveData> = _responseTicketIsPickup.map { Event(it) }
+
+ private val _responseTicketClosure by lazy { MutableLiveData() }
+ val responseTicketClosure: LiveData = _responseTicketClosure
+ val loadTicketClousure: LiveData> = _responseTicketClosure.map { Event(it) }
+
+ private val _responseCollectionUnchecked by lazy { MutableLiveData() }
+ val responseCollectionUnchecked: LiveData = _responseCollectionUnchecked
+ val loadCollectionUnchecked: LiveData> =
+ _responseCollectionUnchecked.map { Event(it) }
+
+ private val _responseNew by lazy { MutableLiveData() }
+ val responseNew: LiveData = _responseNew
+ val loadAddNew: LiveData> = _responseNew.map { Event(it) }
+
+ private val _responseIncQuantity by lazy { MutableLiveData() }
+ val responseIncQuantity: LiveData = _responseIncQuantity
+ val loadIncQuantity: LiveData> = _responseIncQuantity.map { Event(it) }
+
+ private val _responseParking by lazy { MutableLiveData() }
+ val responseParking: LiveData = _responseParking
+ val loadParking: LiveData> = _responseParking.map { Event(it) }
+
+ private val _mistakeList by lazy { MutableLiveData() }
+ val mistakeList: LiveData = _mistakeList
+ val loadMistakes: LiveData> = _mistakeList.map { Event(it) }
+
+ fun getSales(
+ collectionFk: Number, print: String, source: String
+
+ ) {
+ salix.getSalesFromTicketOrCollection(
+ collectionOrTicketFk = collectionFk, print = print != "0", source = source
+ ).enqueue(object : SalixCallback(context) {
+ override fun onError(t: Throwable) {
+ _collectionTicketList.value = CollectionVO(
+ 0,
+ isError = true,
+ errorMessage = getMessageFromAllResponse(nameofFunction(this), t.message!!)
+ )
+ }
+
+ override fun onSuccess(response: Response) {
+ try {
+ _collectionTicketList.value = response.body()?.let { it.map(context) }
+ } catch (ex: Exception) {
+ ex.toast(context)
+ }
+
+ }
+ })
+ }
+
+ fun collectionGetId(
+ ticketFk: Int, print: String, type: String
+ ) {
+ salix.getCollectionId(
+ filter = """{"where":{"ticketFk":$ticketFk},"fields":"collectionFk"}"""
+ ).enqueue(object : SalixCallback>(context) {
+ override fun onError(t: Throwable) {
+ _collectionTicketList.value = CollectionVO(
+ 0,
+ isError = true,
+ errorMessage = getMessageFromAllResponse(nameofFunction(this), t.message!!)
+ )
+ }
+
+ override fun onSuccess(response: Response>) {
+
+ if (response.body()!!.isNotEmpty()) {
+
+ getSales(
+ response.body()!![0].entrySet().first().value.toString().toInt(),
+ print,
+ type
+ )
+
+ } else {
+ _collectionTicketList.value = CollectionVO(
+ 0, isError = false
+ )
+ }
+ }
+ })
+ }
+
+ fun saleTrackingUpdate(
+ saleFk: Int,
+ originalQuantity: Int,
+ code: String,
+ isChecked: String,
+ buyFk: Long,
+ isScanned: Boolean?
+ ) {
+ salix.saleTrackingUpdate(
+ SaleTrackingReplaceSalix(
+ saleFk, originalQuantity, code, isChecked != "0", buyFk, isScanned!!
+ )
+ ).enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _responseSaleReplace.value = true
+ }
+
+ override fun onError(t: Throwable) {
+ _responseSaleReplace.value = false
+ super.onError(t)
+ }
+ })
+ }
+
+ fun collectionStickerPrint(
+ collectionFk: Int, labelCount: Int?
+ ) {
+ salix.collectionStickerPrint(
+ arrayListOf(
+ collectionFk, labelCount
+ )
+ ).enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _responsePrint.value = true
+ }
+
+ })
+ }
+
+ fun collectionAddItem(
+ itemFk: Int, quantity: Int, ticketFk: Int
+ ) {
+
+ salix.addSale(
+ id = ticketFk, barcode = itemFk.toString(), quantity = quantity
+ ).enqueue(object : SalixCallback(context) {
+ override fun onError(t: Throwable) {
+
+ _responseNew.value = false
+ }
+
+ override fun onSuccess(response: Response) {
+ _responseNew.value = true
+
+ }
+ })
+ }
+
+ fun setParking(
+ ticketFk: Int, parking: String
+ ) {
+ salix.setParking(arrayListOf(ticketFk, parking).formatWithQuotes())
+ .enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _responseParking.value = true
+ super.onSuccess(response)
+ }
+ })
+ }
+
+ fun ticketStateTodaySetState(
+ ticketFk: Int, state: String
+ ) {
+ salix.ticketStateTodaySetState(arrayListOf(ticketFk, state).formatWithQuotes())
+ .enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _responseTicketState.value = TicketState()
+ super.onSuccess(response)
+ }
+ })
+ }
+
+ fun collectionIncreaseQuantitySalix(
+ saleFk: Int, quantity: String
+ ) {
+ salix.collectionIncreaseQuantitySalix(
+ SalixSaleQuantity(saleId = saleFk, quantity = quantity.toInt())
+ ).enqueue(object : SalixCallback(context) {
+
+ override fun onSuccess(response: Response) {
+ super.onSuccess(response)
+ _responseIncQuantity.value = true
+ }
+ })
+ }
+
+ fun saleMistakeAdd(
+ saleFk: Int, typeFk: Int
+ ) {
+ salix.saleMistakeAdd(
+ SaleMistakeSalix(
+ userFk = (context as MobileApplication).userId!!, saleFk = saleFk, typeFk = typeFk
+ )
+ ).enqueue(object : SalixCallback(context) {
+
+ })
+ }
+
+ fun mistakeType() {
+ salix.getMistakeTypes().enqueue(object : SalixCallback>(context) {
+ override fun onSuccess(response: Response>) {
+ if (response.body() != null) {
+ _mistakeList.value = response.body()?.let { MistakeTypeListVO(it) }
+ } else {
+ val listError: ArrayList = ArrayList()
+ listError.add(MistakeTypeVO(0, ""))
+ _mistakeList.value = MistakeTypeListVO(listError)
+ }
+ }
+
+ })
+ }
+
+ fun ticketIsOutClosureZone(
+ ticketFk: Int
+ ) {
+ salix.ticketIsOutClosureZone(
+ arrayListOf(ticketFk)
+ ).enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _responseTicketClosure.value = response.body()?.toString() ?: "false"
+
+ }
+
+ })
+ }
+
+ fun ticketState(
+ ticketFk: Int
+ ) {
+ salix.ticketState(
+ """{"where": {"ticketFk": "$ticketFk"},"include":[{"relation":"user","scope":{"fields":["username"]}}]}"""
+
+ ).enqueue(object : SalixCallback>(context) {
+ override fun onSuccess(response: Response>) {
+ _responseTicketState.value = if (response.body()!!.isEmpty()) {
+ TicketState()
+ } else {
+ response.body()!![0]
+ }
+ }
+
+ })
+ }
+
+ fun ticketIsPickup(
+ ticketFk: Number
+ ) {
+ salix.ticketIsPickup(
+ """{
+ "where": {
+ "id": $ticketFk
+ },
+ "fields": ["id", "routeFk"],
+ "include": [
+ {
+ "relation": "route",
+ "scope": {
+ "fields": ["id", "agencyModeFk"],
+ "include": {
+ "relation": "agencyMode",
+ "scope": {
+ "fields": ["id", "deliveryMethodFk","code"],
+ "where": {"code": "REC_ALG"},
+ "include": {
+ "relation": "deliveryMethod",
+ "scope": {
+ "fields": ["id", "code"]
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+ }""".trim()
+
+ ).enqueue(object : SalixCallback>(context) {
+ override fun onSuccess(response: Response>) {
+
+ _responseTicketIsPickup.value =
+ response.body()
+ ?.firstOrNull()?.route?.agencyMode?.deliveryMethod?.code == "PICKUP"
+
+ }
+
+ })
+ }
+
+ fun hasUncheckedTicket(
+ collectionFk: Int
+ ) {
+ salix.hasUncheckedTicket(collectionFk).enqueue(object : SalixCallback(context) {
+ override fun onSuccess(response: Response) {
+ _responseCollectionUnchecked.value = response.body()!!.toString()
+
+ }
+ })
+ }
+
+ fun setPausedState(paused: Boolean) {
+ _isPaused.value = paused
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt
index ab263c09..4c818e92 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragment.kt
@@ -1,6 +1,5 @@
package es.verdnatura.presentation.view.feature.collection.fragment
-import android.app.AlertDialog
import android.content.Context
import android.graphics.drawable.Drawable
import android.media.MediaPlayer
@@ -37,6 +36,7 @@ import es.verdnatura.domain.notNull
import es.verdnatura.domain.toast
import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.LabelDialogHelper
import es.verdnatura.presentation.common.OnBarcodeRowClickListener
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
@@ -410,7 +410,7 @@ class CollectionFragment(
if (!binding.scanInput.text.toString().isNullOrEmpty()) {
binding.mainToolbar.toolbarIcons.visibility = VISIBLE
//sergio:para ver si ha marcado dos veces el mismo ticket
- binding.scanInput.setText(textScanned_filterDouble(binding.scanInput.text!!.toString()))
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
//de momento solo está el qr de artículo
isScanned =
@@ -969,7 +969,7 @@ class CollectionFragment(
myGroupList
},*/
saleAdapter = SaleAdapter(
- myGroupList,
+ myGroupList as MutableList,
pasillerosItemClickListener!!,
object : OnQuantityClickListener {
@@ -2035,7 +2035,7 @@ class CollectionFragment(
"" + totalMark + "/" + total
if (totalMark == sales.size) {
- getString(R.string.Coleccióncompleta).toast(this.context, Toast.LENGTH_SHORT)
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
saleAdapter!!.notifyDataSetChanged()
if (canChangeState) changeTicketState()
@@ -2276,20 +2276,20 @@ class CollectionFragment(
}
}
if (isTicket) {
- val builder = AlertDialog.Builder(context)
- builder.setTitle(getString(R.string.selectLabeltoPrint))
- val labelCount = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
- builder.setItems(labelCount) { dialog, which ->
- viewModel.collectionStickerPrint(
- collectionFk = collection.collectionFk, labelCount = (which + 1)
- )
- (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
- PRINTERNAME
- )).toast(requireContext())
+ val labelDialogHelper = LabelDialogHelper(requireContext())
+ labelDialogHelper.showLabelDialog(
+ onItemSelected = { labelCount ->
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk,
+ labelCount = labelCount
+ )
+
+ (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERNAME
+ )).toast(requireContext())
+ }
+ )
- }
- val dialog = builder.create()
- dialog.show()
} else {
viewModel.collectionStickerPrint(
collectionFk = collection.collectionFk, null
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt
new file mode 100644
index 00000000..587e8b19
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentChecker.kt
@@ -0,0 +1,1198 @@
+package es.verdnatura.presentation.view.feature.collection.fragment
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.media.MediaPlayer
+import android.text.InputType.TYPE_CLASS_NUMBER
+import android.view.KeyEvent
+import android.view.KeyEvent.ACTION_DOWN
+import android.view.View.GONE
+import android.view.View.INVISIBLE
+import android.view.View.VISIBLE
+import android.view.WindowManager
+import android.view.inputmethod.EditorInfo
+import android.widget.ImageView
+import android.widget.Toast
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.google.gson.Gson
+import es.verdnatura.R
+import es.verdnatura.databinding.FragmentCollectionBinding
+import es.verdnatura.domain.ConstAndValues
+import es.verdnatura.domain.ConstAndValues.CONTROLADOR
+import es.verdnatura.domain.ConstAndValues.PRINTERNAME
+import es.verdnatura.domain.notNull
+import es.verdnatura.domain.showToastCenterWithBackground
+import es.verdnatura.domain.toast
+import es.verdnatura.presentation.base.BaseFragment
+import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.LabelDialogHelper
+import es.verdnatura.presentation.common.OnBarcodeRowClickListener
+import es.verdnatura.presentation.common.OnMistakeClickListener
+import es.verdnatura.presentation.common.OnOptionsSelectedListener
+import es.verdnatura.presentation.common.OnPackingClickListener
+import es.verdnatura.presentation.common.OnPasillerosItemClickListener
+import es.verdnatura.presentation.common.OnQuantityClickListener
+import es.verdnatura.presentation.common.OnSaleClickListener
+import es.verdnatura.presentation.common.OnTicketClickListener
+import es.verdnatura.presentation.common.OnTicketColorListener
+import es.verdnatura.presentation.common.ToolBarAdapterTooltip
+import es.verdnatura.presentation.common.hideKeyboard
+import es.verdnatura.presentation.common.itemScanIsQr
+import es.verdnatura.presentation.common.itemScanValue
+import es.verdnatura.presentation.view.component.CustomDialog
+import es.verdnatura.presentation.view.component.CustomDialogInput
+import es.verdnatura.presentation.view.component.CustomDialogList
+import es.verdnatura.presentation.view.component.CustomDialogThreeButtons
+import es.verdnatura.presentation.view.feature.articulo.adapter.BarcodeAdapter
+import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO
+import es.verdnatura.presentation.view.feature.collection.adapter.SaleAdapter
+import es.verdnatura.presentation.view.feature.main.activity.MainActivity
+import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
+import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
+import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeVO
+import es.verdnatura.presentation.view.feature.sacador.model.PlacementVO
+import es.verdnatura.presentation.view.feature.sacador.model.SaleVO
+import org.json.JSONObject
+
+// FALTA TESTEAR REVISORES DESPUÉS DE CAMPAÑA Y VER HOLDPOSITION
+@Suppress("UNUSED_ANONYMOUS_PARAMETER")
+class CollectionFragmentChecker(
+ var collection: CollectionVO = CollectionVO(0), var type: String = CONTROLADOR
+) : BaseFragment(CollectionCheckerViewModel::class) {
+
+ private var sales: List = listOf()
+ private var salesParent: List = listOf()
+ private var saleAdapter: SaleAdapter? = null
+ private var lm: LinearLayoutManager? = null
+ private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null
+ private lateinit var customDialogList: CustomDialogList
+ private var placementSupplyAdapter: BarcodeAdapter? = null
+ private var listPlacementSupply: ArrayList = ArrayList()
+ private var storedShelvingPosition: Int = 0
+ private lateinit var customDialogInput: CustomDialogInput
+ private lateinit var customDialogThreeButtons: CustomDialogThreeButtons
+ private var ticketSelected: Int = 0
+ private lateinit var customDialog: CustomDialog
+ var mperror: MediaPlayer? = null
+ var mpok: MediaPlayer? = null
+ private var tickets: ArrayList = ArrayList()
+ private var mistakeSale: SaleVO? = null
+ private var positionIncreaseQuantity = 0
+ private var quantityIncrease: Int = 0
+ private var isMarking = false
+ private lateinit var ticketScanTxt: String
+ private var lastScanned: Int = 0
+ private var buttonPushedGetCollection = false
+ private var isScanned: Boolean? = null
+ private var canChangeState = true
+ private var allTicketsChecked = false
+ private var myPosition = 0
+ private var isMarkedSalePrevious = false
+ private var inPause = false
+ private var hasFilterByLevel = false
+ private lateinit var myGroupList: List
+
+ companion object {
+ fun newInstance(collection: CollectionVO, type: String) =
+ CollectionFragmentChecker(collection, type)
+ }
+
+ override fun onAttach(context: Context) {
+ if (context is OnPasillerosItemClickListener) pasillerosItemClickListener = context
+ super.onAttach(context)
+ }
+
+ override fun getLayoutId(): Int = R.layout.fragment_collection
+
+ override fun onResume() {
+ super.onResume()
+ scanRequest()
+ }
+
+ override fun init() {
+ mperror = MediaPlayer.create((activity as MainActivity), R.raw.error)
+ mpok = MediaPlayer.create((activity as MainActivity), R.raw.ok)
+ customDialogList = CustomDialogList(requireContext())
+ customDialogInput = CustomDialogInput(requireContext())
+ customDialog = CustomDialog(requireContext())
+ customDialogThreeButtons = CustomDialogThreeButtons(requireContext())
+ ma.hideBottomNavigation(GONE)
+ setEvents()
+ setToolBar()
+ if (collection.tickets.isNotEmpty()) {
+ createCollectionList()
+ }
+ super.init()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ //viewModel.isPaused = true
+ viewModel.setPausedState(true)
+
+ }
+
+ private fun setToolBar() {
+ binding.mainToolbar.toolbarSubtitle.visibility = VISIBLE
+ binding.mainToolbar.toolbarIcons.visibility = VISIBLE
+ binding.mainToolbar.backButton.visibility = VISIBLE
+ binding.previaButton.visibility = INVISIBLE
+ binding.mainToolbar.toolbarTitle.text =
+ if (collection.collectionFk == 0) getString(R.string.review) else collection.collectionFk.toString()
+
+ val listIcons: ArrayList = ArrayList()
+ val iconPrint = ImageView(context)
+ iconPrint.setImageResource(R.drawable.ic_print_black_24dp)
+ val iconAdd = ImageView(context)
+ iconAdd.setImageResource(R.drawable.ic_playlist_add_black_24dp)
+ val iconViewCollection = ImageView(context)
+ iconViewCollection.setImageResource(R.drawable.ic_collection)
+ val iconWorker = ImageView(context)
+ iconWorker.setImageResource(R.drawable.ic_worker)
+ val iconParking = ImageView(context)
+ iconParking.setImageResource(R.drawable.ic_local_parking_black_24dp)
+ val iconUpdate = ImageView(context)
+ iconUpdate.setImageResource(R.drawable.ic_autorenew_black_24dp)
+
+ iconPrint.tooltipText = getTooltip(R.drawable.ic_print_black_24dp)
+ iconAdd.tooltipText = getTooltip(R.drawable.ic_playlist_add_black_24dp)
+ iconViewCollection.tooltipText = getTooltip(R.drawable.ic_collection)
+ iconParking.tooltipText = getTooltip(R.drawable.ic_local_parking_black_24dp)
+ iconUpdate.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp)
+
+ listIcons.add(iconPrint)
+ listIcons.add(iconViewCollection)
+ listIcons.add(iconWorker)
+ listIcons.add(iconAdd)
+ binding.previaButton.setOnClickListener {
+ showPrevia()
+ }
+
+
+ binding.mainToolbar.toolbarIcons.adapter =
+ ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener {
+ override fun onOptionsItemSelected(item: Drawable) {
+ if (collection.tickets.isNotEmpty())
+ when (item) {
+ iconViewCollection.drawable -> getCollection()
+ iconPrint.drawable -> print()
+ iconAdd.drawable -> addItem()
+ iconWorker.drawable -> showUser()
+ iconUpdate.drawable -> updateScreen()
+ iconParking.drawable -> pasillerosItemClickListener?.onPasillerosItemClickListener(
+ PasillerosItemVO(
+ title = R.string.Parking
+ ), ""
+ )
+ }
+
+ }
+ })
+ binding.mainToolbar.toolbarIcons.layoutManager =
+ LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
+ }
+
+ private fun updateScreen() {
+ canChangeState = false
+ viewModel.getSales(
+ collection.collectionFk, print = "0", type
+ )
+ }
+
+ private fun markPrevia(saleGroupScanned: String) {
+ for (indice in sales.indices) {
+ if (!sales[indice].saleGroupFk.isNullOrEmpty() && sales[indice].saleGroupFk == saleGroupScanned) {
+ markLine(indice)
+ mpok!!.start()
+
+ }
+ }
+ }
+
+ private fun showPrevia() {
+ customDialogList.getEditText().setRawInputType(TYPE_CLASS_NUMBER)
+ customDialogList.setTitle(getString(R.string.scanPreviousTicket))
+ .setOkButton(getString(R.string.end)) {
+ takeActionPrevia(customDialogList)
+
+ }.setValue("").show()
+
+ customDialogList.getEditText().requestFocus()
+ ma.hideKeyboard(customDialogList.getEditText())
+
+ customDialogList.getEditText().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
+ if (customDialogList.getValue().isNotEmpty()) {
+ isScanned =
+ event != null && event.action == ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
+ takeActionPrevia(customDialogList)
+ }
+ customDialogList.setValue("")
+ ma.hideKeyboard(customDialogList.getEditText())
+ return@setOnEditorActionListener true
+ }
+ false
+ }
+ hideKeyboard()
+ }
+
+ private fun takeActionPrevia(customDialogList: CustomDialogList) {
+ println("previaaaa ${customDialogList.getValue()}")
+
+ ma.hideKeyboard(customDialogList.getEditText())
+ try {
+ val saleGroupScanned = itemScanValue(
+ customDialogList.getValue(), arrayOf("saleGroup"), "id"
+ ).toString()
+
+ markPrevia(saleGroupScanned)
+ customDialogList.dismiss()
+ } catch (ex: Exception) {
+ ma.messageWithSound(
+ message = ex.message.toString(), isError = true, isPlayed = true, isToasted = true
+ )
+ }
+ }
+
+ private fun getCollection() {
+
+ buttonPushedGetCollection = if (!buttonPushedGetCollection) {
+ viewModel.collectionGetId(
+ collection.collectionFk, print = "0", type
+ )
+ true
+ } else {
+ viewModel.getSales(
+ lastScanned, print = "0", type
+
+ )
+ false
+ }
+ lastScanned = collection.collectionFk
+ }
+
+ private fun scanRequest() {
+ binding.scanInput.requestFocus()
+ requireActivity().hideKeyboard()
+ }
+
+ private fun showUser() {
+
+ ma.onPasillerosItemClickListener(
+ PasillerosItemVO(title = R.string.titleUserControlVehicle),
+ collection.tickets[0].sales[0].workerFk
+ )
+
+ }
+
+ private fun setEvents() {
+
+ binding.mainToolbar.backButton.setOnClickListener {
+ ma.onMyBackPressed()
+ }
+ requireActivity().hideKeyboard()
+ binding.scanInput.requestFocus()
+ binding.scanInput.setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {//ID=0 ACTION_NEXT ID=5 ACTION_UNESPECEFIED)
+ if (binding.scanInput.text.toString().isNotEmpty()) {
+
+ //sergio:para ver si ha marcado dos veces el mismo ticket
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
+ isScanned =
+ event != null && event.action == ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
+
+ if (itemScanIsQr(binding.scanInput.text.toString())) {
+
+ val myQr = ItemScanned(JSONObject(binding.scanInput.text.toString()))
+
+ when (myQr.table) {
+ "saleGroup" -> {
+ markPrevia(myQr.id.toString())
+ }
+
+ "buy" -> binding.scanInput.setText(myQr.more)
+ "ticket" -> findSale(myQr.id.toString())
+ }
+
+ } else {
+ if (sales.any { it.saleGroupFk == binding.scanInput.text.toString() }) {
+ markPrevia(binding.scanInput.text.toString())
+ } else {
+ findSale(binding.scanInput.text.toString())
+ }
+
+ }
+
+ buttonPushedGetCollection = false
+
+ }
+ binding.scanInput.setText("")
+ requireActivity().hideKeyboard()
+ return@setOnEditorActionListener true
+ }
+ true
+ }
+ requireActivity().hideKeyboard()
+ //No se pone source en la llamada para que no cambie el estado
+ binding.collectionSwipe.setOnRefreshListener {
+ canChangeState = false
+ isMarking = false
+ binding.collectionSwipe.isRefreshing = false
+ viewModel.getSales(
+ collection.collectionFk, print = "0", " "
+ )
+ buttonPushedGetCollection = false
+ binding.collectionSwipe.isRefreshing = false
+ }
+ }
+
+ override fun observeViewModel() {
+ with(viewModel) {
+
+ loadTicketList.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+
+ if (!it.isError) {
+ if (it.tickets.isNotEmpty()) {
+ collection = it
+ binding.previaButton.visibility = VISIBLE
+ binding.fragmentSacadorCollections.visibility = VISIBLE
+ createCollectionList()
+ } else {
+
+ binding.mainToolbar.toolbarSubtitle.text =
+ getString(R.string.summaryCount, 0, 0)
+ binding.fragmentSacadorCollections.visibility = INVISIBLE
+ binding.previaButton.visibility = INVISIBLE
+ }
+ } else {
+ customDialog.setTitle(getString(R.string.error))
+ .setDescription(it.errorMessage)
+ .setOkButton(getString(R.string.accept)) {
+ customDialog.dismiss()
+ if (activity != null) ma.onMyBackPressed()
+ }.show()
+ }
+
+ }
+ }
+ loadTicketIsPickup.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (it) {
+ val customDialogWarning = CustomDialog(requireContext())
+ customDialogWarning.setTitle(getString(R.string.ticketPickup))
+ customDialogWarning.setDescription(
+ getString(
+ R.string.ticketPickupDescr,
+ binding.mainToolbar.toolbarTitle.text
+ )
+ )
+ .setOkButton(getString(R.string.aware)) {
+ customDialogWarning.dismiss()
+ }
+ customDialogWarning.show()
+
+ }
+ }
+ }
+ loadParking.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ context.showToastCenterWithBackground(
+ getString(
+ R.string.parkingIn,
+ ticketScanTxt
+ )
+ )
+ }
+ }
+
+ loadPrint.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERNAME
+ )).toast(
+ requireContext()
+ )
+ }
+
+ }
+
+ loadAddNew.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (!it) {
+ customDialog.setTitle(getString(R.string.disponibility))
+ .setDescription(getString(R.string.errorCollectionNew))
+ .setKoButton(getString(R.string.close)) {
+ scanRequest()
+ customDialog.dismiss()
+ }.show()
+ } else {
+ viewModel.getSales(
+ collection.collectionFk, print = "0", type
+ )
+
+ }
+
+ }
+ }
+
+ loadTicketState.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if ((it.code == "ON_CHECKING" || it.code == "CHECKED") && it.user.id != mobileApplication.userId) {
+ val customDialogWarningChecking = CustomDialog(requireContext())
+ customDialogWarningChecking.setTitle(getString(R.string.info))
+ customDialogWarningChecking.setDescription(
+ if (it.code == "ON_CHECKING") {
+ getString(R.string.checkingByUser, it.user.username)
+ } else {
+ getString(R.string.checkedByUser, it.user.username)
+ }
+ ).setOkButton(getString(R.string.aware)) {
+ customDialogWarningChecking.dismiss()
+ }.show()
+ }
+ }
+ }
+
+ loadTicketClousure.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (it.toBoolean()) {
+ val customDialogWarning = CustomDialog(requireContext())
+ customDialogWarning.setTitle(getString(R.string.urgentWarning))
+ customDialogWarning.setDescription(getString(R.string.ticketWarning))
+ .setOkButton(getString(R.string.aware)) {
+ customDialogWarning.dismiss()
+ }.show()
+ }
+ }
+ }
+
+ loadIncQuantity.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ incresaseSuccesful()
+ }
+ }
+
+ //sergio: para si hay algun ticket por revisar antes de parkinear
+
+ loadCollectionUnchecked.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+
+ //sergio: devuelve false si no hay para revisar y <> false.
+ if (it != "false") {
+ customDialog.setTitle(getString(R.string.warning))
+ .setDescription(getString(R.string.pendingReviewParking) + (it))
+ .setOkButton(getString(R.string.accept)) {
+ customDialog.dismiss()
+
+ }.setKoButton(getString(R.string.review)) {
+ viewModel.getSales(
+ it.toInt(), print = "0", type
+ )
+ customDialog.dismiss()
+ }
+ customDialog.show()
+ } else {
+ viewModel.setParking(
+ ticketFk = tickets[0].toInt(), parking = ticketScanTxt
+ )
+ }
+
+ }
+ }
+
+ loadSaleReplace.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (!it) {
+ viewModel.getSales(
+ collection.collectionFk, print = "0", type
+ )
+
+ } else {
+ checkStateParent()
+ setTotalLines()
+ setListPosition()
+ }
+ }
+ }
+
+ loadMistakes.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ showMistakeList(it.list)
+ }
+ }
+
+ isPaused.observe(viewLifecycleOwner) {
+ inPause = it
+ }
+
+ }
+ }
+
+ //CREATE LIST
+ private fun createCollectionList() {
+ val salesList: ArrayList = ArrayList()
+ tickets = ArrayList()
+ var observations = ""
+ collection.tickets.forEach { ticket ->
+ ticket.sales.forEach { saleVO ->
+ salesList.add(saleVO)
+ if (tickets.firstOrNull { it == saleVO.ticketFk }.isNullOrEmpty()) tickets.add(
+ saleVO.ticketFk
+ )
+ }
+
+ observations =
+ observations.takeIf { it.isNotBlank() }?.plus(" ${ticket.observations}") ?: ""
+ }
+
+ if (!buttonPushedGetCollection) {
+ sales = salesList.sortedWith(compareBy { it.picked })
+ myGroupList = groupSaleGroup(salesList).sortedWith(compareBy { it.picked })
+ } else {
+ sales = salesList.sortedWith(
+ compareBy({ it.isControlled }, { it.picked })
+ )
+ myGroupList = groupSaleGroup(salesList).sortedWith(
+ compareBy({ it.isControlled }, { it.picked })
+ )
+ }
+
+ /*sales = salesList.sortedWith(
+ compareBy({ it.isControlled }, { it.picked })
+ )*/
+
+ /* myGroupList = groupSaleGroup(salesList).sortedWith(
+ compareBy({ it.isControlled }, { it.picked })
+ )*/
+
+ saleAdapter = SaleAdapter(
+ myGroupList as MutableList,
+ pasillerosItemClickListener!!,
+ object : OnQuantityClickListener {
+ override fun onQuantityClick(sale: SaleVO) {
+
+ myGroupList.forEachIndexed { index, saleVO ->
+ if (saleVO.saleFk == sale.saleFk) {
+ showQuantityDialog(index)
+ }
+ }
+
+ }
+ },
+ object : OnSaleClickListener {
+ override fun onSaleClick(sale: SaleVO) {
+
+ sales.forEachIndexed { index, saleVO ->
+ if (saleVO.saleFk == sale.saleFk) {
+ isScanned = false
+ markLine(index)
+ }
+
+ }
+ }
+
+ },
+ object : OnMistakeClickListener {
+ override fun onMistakeClickListener(sale: SaleVO) {
+
+ viewModel.mistakeType()
+ mistakeSale = sale
+
+ }
+ },
+ object : OnPackingClickListener {
+ override fun onPackingClick(sale: SaleVO) {
+ }
+ },
+ object : OnTicketClickListener {
+ override fun onTicketClickListener(sale: SaleVO) {
+
+ val entryPoint = Gson().toJson(
+ mutableMapOf(
+ "entryPoint" to sale.ticketFk, "web" to "${
+ mobileApplication.dataStoreApp.getServerSalix()
+ }/#!/ticket/${sale.ticketFk}/sale"
+ )
+ )
+ ma.onPasillerosItemClickListener(
+ PasillerosItemVO(
+ title = R.string.titleWebViewer,
+ ), entryPoint = entryPoint
+ )
+
+ }
+ },
+ type = type,
+ onTicketColorClickListener = object : OnTicketColorListener {
+ override fun onTicketColorListener(sale: SaleVO) {
+ hasFilterByLevel = !hasFilterByLevel
+
+ if (hasFilterByLevel) {
+ if (buttonPushedGetCollection) {
+ saleAdapter!!.updateSales(myGroupList.filter { it.level == sale.level } as MutableList)
+ myGroupList = myGroupList.filter { it.level == sale.level }
+ }
+ } else {
+ createCollectionList()
+ }
+
+ }
+ }
+ )
+
+ lm = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
+ binding.fragmentSacadorCollections.adapter = saleAdapter
+ binding.fragmentSacadorCollections.layoutManager = lm
+ setTotalLines()
+ printObservations(observations)
+ saleAdapter!!.notifyDataSetChanged()
+ }
+
+ private fun printObservations(observations: String) {
+ if (observations.trim().isNotEmpty()) {
+ customDialog.setTitle(getString(R.string.observations)).setDescription(observations)
+ .setOkButton(getString(R.string.accept)) {
+ customDialog.hide()
+ customDialog.dismiss()
+ }.show()
+ }
+ }
+
+ private fun findSale(txtscan: String) {
+ var index = 0
+ var isBreak = false
+ var isOk = false
+
+
+ try {
+ for (saleVO in sales) { // sales no tiene parent
+
+ if (saleVO.isControlled == "0") {
+
+ if (txtscan == saleVO.itemFk.toString()) {
+ if (mpok != null) mpok!!.start()
+ isOk = true
+ markLine(index)
+ break
+ }
+ //2- Por barcode
+ saleVO.barcodes.forEach { barcode ->
+
+ if (txtscan == barcode) {
+ if (mpok != null) mpok!!.start()
+ isOk = true
+ markLine(index)
+ isBreak = true
+ }
+ }
+
+ if (isBreak) break
+ }
+ index += 1
+ }
+ } catch (ex: Exception) {
+ getString(R.string.errorInput).toast(requireContext())
+ }
+ if (!isOk) {
+ if (txtscan.contains("-")) {
+
+ if (tickets.size > 0) {
+
+ ticketScanTxt = txtscan
+ viewModel.hasUncheckedTicket(
+ collectionFk = tickets[0].toInt()
+ )
+ }
+
+ } else {
+
+ isMarking = false
+ try {
+ val myScan = txtscan.toInt()
+ val hasItemSales = sales.any {
+ it.itemFk == txtscan.toInt()
+ }
+ if (!hasItemSales) {
+ binding.mainToolbar.toolbarTitle.text = txtscan
+ viewModel.getSales(
+ myScan, print = "0", "ON_CHECKING"
+ )
+ viewModel.ticketIsOutClosureZone(
+ myScan
+ )
+ viewModel.ticketState(myScan)
+ viewModel.ticketIsPickup(myScan)
+
+ } else {
+ mperror!!.start()
+ }
+
+ } catch (ex: Exception) {
+
+ getString(R.string.errorInput).toast(requireContext())
+ }
+
+ }
+ }
+ }
+
+ private fun markLine(position: Int) {
+
+ //Falta averiguar la saleFk donde está y modificar si es la hija.
+ //Busco al padre y ya está y esa es la posición , se puede cambiar antes porque si falla haré un getSales
+
+ val isParentPrevia =
+ myGroupList.any { it.saleGroupFk == sales[position].saleGroupFk && it.isParent }
+
+ if (sales[position].saleGroupFk == null || sales[position].saleGroupFk == "" || !isParentPrevia) {
+ myPosition = myGroupList.indexOfFirst { it.saleFk == sales[position].saleFk }
+ myGroupList[myPosition].isControlled =
+ if (myGroupList[myPosition].isControlled == "1") "0" else "1"
+ isMarkedSalePrevious = false
+ } else {
+ //buscar padre y marcar position
+ val myPositionParent =
+ myGroupList.indexOfFirst { it.saleGroupFk == sales[position].saleGroupFk && it.isParent }
+ myPosition = myPositionParent
+ val myList = myGroupList[myPositionParent].sonSales
+ val myPositionSon = myList.indexOfFirst { it.saleFk == sales[position].saleFk }
+
+ myGroupList[myPositionParent].sonSales[myPositionSon].isControlled =
+ if (myGroupList[myPositionParent].sonSales[myPositionSon].isControlled == "1") "0" else "1"
+ isMarkedSalePrevious = true
+
+ }
+ viewModel.saleTrackingUpdate(
+ saleFk = sales[position].saleFk,
+ isChecked = sales[position].isControlled,
+ originalQuantity = sales[position].pickedQuantity!!,
+ code = "CHECKED",
+ buyFk = 0,
+ isScanned = isScanned
+
+ )
+ checkStateParent()
+ saleAdapter!!.notifyItemChanged(myPosition)
+ canChangeState = true
+ isMarking = true
+ }
+
+ private fun checkStateParent() {
+ for (s in myGroupList) {
+ if (s.isParent) {
+ val totalLines = s.sonSales.size
+ val isPreviousPrepared = s.sonSales.filter { it.isPreviousPrepared == "1" }.size
+ val isPrepared = s.sonSales.filter { it.isPrepared == "1" }.size
+ val isControlled = s.sonSales.filter { it.isControlled == "1" }.size
+ val isPreControlled = s.sonSales.filter { it.isPreControlled == "1" }.size
+ if (totalLines == isPreviousPrepared) {
+ s.isPreviousPrepared = "1"
+ } else {
+ s.isPreviousPrepared = "0"
+ }
+ if (totalLines == isPrepared) {
+ s.isPrepared = "1"
+ } else {
+ s.isPrepared = "0"
+ }
+ if (totalLines == isControlled) {
+ s.isControlled = "1"
+ } else {
+ s.isControlled = "0"
+ }
+ if (totalLines == isPreControlled) {
+ s.isPreControlled = "1"
+ } else {
+ s.isPreControlled = "0"
+ }
+
+ }
+ }
+
+ }
+
+ private fun setListPosition() {
+
+ if (inPause) {
+ //viewModel.isPaused = false
+ viewModel.setPausedState(false)
+ } else {
+ if (mobileApplication.dataStoreApp.readDataStoreKey(
+ ConstAndValues.HOLDPOSITION
+ )
+ ) {
+ if (!myGroupList[myPosition].isParent) { // si no es previa movemos
+
+ /* lm!!.scrollToPositionWithOffset(myPosition, 0)
+ } else {*/
+ lm!!.scrollToPositionWithOffset(
+ if (myGroupList[myPosition].isControlled == "1") myPosition + 1 else myPosition,
+ 0
+ )
+ //}
+
+ } else {
+ lm!!.scrollToPositionWithOffset(myPosition, 0)
+ }
+ }
+ }
+ }
+
+ private fun reviewQuantityForRefreshingAndSorting(
+ quantityTotal: Int, quantityPicked: Int
+ ) {
+
+ if (quantityPicked < quantityTotal) {
+
+ viewModel.getSales(
+ collection.collectionFk, print = "0", "ON_CHECKING"
+ )
+
+ } else {
+ setListPosition()
+ }
+
+ }
+
+ private fun print() {
+
+ if (ma.havePrinter() && ma.haveSector()) {
+ showDialogLabelCount()
+
+ } else {
+
+ ma.messageWithSound(
+ getString(R.string.printerFault),
+ isError = true,
+ true,
+ getString(R.string.printError),
+ false
+ )
+
+ }
+
+ }
+
+ private fun addItem() {
+ listPlacementSupply = ArrayList()
+ collection.tickets.forEach {
+ listPlacementSupply.add(BarcodeVO(code = it.ticketFk))
+ }
+ if (listPlacementSupply.size == 1) {
+ ticketSelected = listPlacementSupply[0].code!!.toInt()
+ }
+ customDialogList.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
+ customDialogList.getEditTextTwo().inputType = TYPE_CLASS_NUMBER
+ customDialogList.getEditText().setRawInputType(TYPE_CLASS_NUMBER)
+ customDialogList.setTitle(getString(R.string.Agregarartículoparaticket) + " " + ticketSelected)
+ .setOkButton(getString(R.string.Agregar)) {
+
+ if (ticketSelected == 0) {
+ getString(R.string.Seleccionaunticketdelaista).toast(requireContext())
+ } else if (customDialogList.getValue().isEmpty() || customDialogList.getValueTwo()
+ .isEmpty()
+ ) {
+ getString(R.string.Todosloscampossonobligatorios).toast(requireContext())
+ } else {
+
+ viewModel.collectionAddItem(
+ itemFk = customDialogList.getValue().toInt(),
+ ticketFk = ticketSelected,
+ quantity = customDialogList.getValueTwo().toInt()
+ )
+
+
+ scanRequest()
+ customDialogList.dismiss()
+ }
+
+ }.setKoButton(getString(R.string.close)) {
+ scanRequest()
+ customDialogList.dismiss()
+ }.setHintValue(getString(R.string.Artículo)).setValue("")
+ .setHintValueTwo(getString(R.string.Cantidad)).setValueTwo("").show()
+ customDialogList.getEditText().requestFocus()
+ requireActivity().hideKeyboard()
+
+ customDialogList.getEditText().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
+ if (customDialogList.getValue().isNotEmpty()) {
+ try {
+ customDialogList.setValue(
+ itemScanValue(
+ customDialogList.getValue(), arrayOf("buy"), "more"
+ ).toString()
+ )
+
+ } catch (e: Exception) {
+ ma.messageWithSound(e.message.toString(), isError = true, isPlayed = true)
+ }
+ customDialogList.getEditTextTwo().requestFocus()
+ }
+ //requireActivity().hideKeyboard()
+ return@setOnEditorActionListener true
+
+ }
+ false
+
+ }
+
+
+ customDialogList.getEditTextTwo().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
+ if (customDialogList.getValueTwo().isNotEmpty()) {
+ if (ticketSelected == 0) {
+ getString(R.string.Seleccionaunticketdelaista).toast(requireContext())
+ } else if (customDialogList.getValue()
+ .isEmpty() || customDialogList.getValueTwo().isEmpty()
+ ) {
+ getString(R.string.Todosloscampossonobligatorios).toast(requireContext())
+ } else {
+
+ viewModel.collectionAddItem(
+ itemFk = customDialogList.getValue().toInt(),
+ ticketFk = ticketSelected,
+ quantity = customDialogList.getValueTwo().toInt(),
+ )
+ scanRequest()
+ customDialogList.dismiss()
+ }
+ }
+ requireActivity().hideKeyboard()
+ return@setOnEditorActionListener true
+ }
+ false
+ }
+
+ placementSupplyAdapter =
+ BarcodeAdapter(listPlacementSupply, object : OnBarcodeRowClickListener {
+ override fun onBarcodeRowClickListener(item: BarcodeVO) {
+ customDialogInput.setTitle(getString(R.string.ArtículoparaTicket) + " " + item.code!!)
+ ticketSelected = item.code!!.toInt()
+ customDialogList.setTitle(getString(R.string.Agregarartículoparaticket) + " " + ticketSelected)
+ }
+ }, showDelete = false)
+
+ customDialogList.getRecyclerView().adapter = placementSupplyAdapter
+
+ customDialogList.getRecyclerView().layoutManager =
+ LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
+
+ }
+
+ private fun setTotalLines() {
+
+ val totalMark = sales.count { (it.isControlled == "1") && !it.isParent }
+ binding.mainToolbar.toolbarTitle.text =
+ collection.collectionFk.takeIf { it != 0 }?.toString() ?: ""
+ binding.mainToolbar.toolbarSubtitle.text =
+ getString(R.string.summaryCount, totalMark, sales.size)
+
+ if (totalMark == sales.size) {
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
+ // saleAdapter!!.notifyDataSetChanged()
+
+ if (canChangeState) changeTicketState()
+ } else {
+ if (allTicketsChecked) {
+
+ sales.forEach {
+ if (it.isControlled == "0") {
+ viewModel.ticketStateTodaySetState(
+ ticketFk = it.ticketFk.toInt(), state = "ON_CHECKING"
+ )
+ }
+ }
+ allTicketsChecked = false
+ }
+ }
+ }
+
+ private fun showQuantityDialog(position: Int) {
+ try {
+
+ customDialogThreeButtons.setDescription(getString(R.string.itemSaleQuantity))
+ .setValue("").setOkButtonAdd(getString(R.string.modify)) {
+ try {
+ increaseQuantity(position, customDialogThreeButtons.getValue().toInt())
+ scanRequest()
+ customDialogThreeButtons.dismiss()
+ } catch (ex: Exception) {
+ ma.messageWithSound(
+ message = getString(R.string.errorInputQuantity),
+ isPlayed = true,
+ isError = true,
+ isToasted = true
+ )
+ }
+
+ }.setKoButton(getString(R.string.cancel)) {
+ scanRequest()
+ customDialogThreeButtons.dismiss()
+ }.show()
+ customDialogThreeButtons.setFocusDialogValue()
+ } catch (ex: Exception) {
+ getString(R.string.errorInput).toast(requireContext())
+ }
+ }
+
+ private fun incresaseSuccesful() {
+ try {
+ sales[positionIncreaseQuantity].quantity = quantityIncrease
+
+ } catch (e: Exception) {
+ e.message!!.toast(requireContext())
+ }
+ saleAdapter?.notifyDataSetChanged()
+ sales[positionIncreaseQuantity].originalQuantity = quantityIncrease
+ }
+
+ private fun increaseQuantity(position: Int, quantity: Int) {
+ positionIncreaseQuantity = position
+ quantityIncrease = quantity
+ viewModel.collectionIncreaseQuantitySalix(
+ saleFk = sales[position].saleFk, quantity = quantity.toString()
+ )
+
+ }
+
+ private fun changeTicketState() {
+ if (!inPause) tickets.forEach {
+ viewModel.ticketStateTodaySetState(
+ ticketFk = it.toInt(), state = "CHECKED"
+ )
+ }
+ allTicketsChecked = true
+
+ }
+
+ private fun showErrorMessage(text: String) {
+ customDialog.setTitle(getString(R.string.errorMarkLine)).setDescription(text)
+ .setKoButton(getString(R.string.close)) {
+ customDialog.dismiss()
+ }.show()
+ }
+
+ private fun showDialogLabelCount() {
+ var isTicket = false
+ for (t in collection.tickets) {
+ if (t.ticketFk.toInt() == (collection.collectionFk)) {
+ isTicket = true
+ }
+ }
+ if (isTicket) {
+ val labelDialogHelper = LabelDialogHelper(requireContext())
+ labelDialogHelper.showLabelDialog(
+ onItemSelected = { labelCount ->
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk,
+ labelCount = labelCount
+ )
+ val printerName =
+ mobileApplication.dataStoreApp.readDataStoreKey(PRINTERNAME)
+ (getString(R.string.Imprimiendo) + printerName).toast(requireContext())
+ }
+ )
+
+ } else {
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk, null
+ )
+
+ }
+
+ }
+
+ private fun showMistakeList(list: List) {
+ customDialogInput.dismiss()
+ listPlacementSupply = ArrayList()
+ list.forEach {
+ listPlacementSupply.add(BarcodeVO(code = it.description))
+ }
+
+ customDialogList.setTitle(getString(R.string.errorCause))
+ customDialogList.hideTextInput().setKoButton(getString(R.string.cancel)) {
+ scanRequest()
+ requireActivity().hideKeyboard()
+ listPlacementSupply.clear()
+ customDialogList.dismiss()
+
+ }.show()
+
+ placementSupplyAdapter =
+ BarcodeAdapter(listPlacementSupply, object : OnBarcodeRowClickListener {
+ override fun onBarcodeRowClickListener(item: BarcodeVO) {
+ list.forEach {
+ if (it.description == item.code) {
+
+ viewModel.saleMistakeAdd(
+ saleFk = mistakeSale?.saleFk!!, typeFk = it.id
+ )
+
+ getString(R.string.errorRegistered).toast(requireContext())
+ customDialogList.dismiss()
+ }
+ }
+
+ }
+ }, showDelete = false)
+
+ customDialogList.getRecyclerView().adapter = placementSupplyAdapter
+
+ customDialogList.getRecyclerView().layoutManager =
+ LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
+ }
+
+ private fun groupSaleGroup(salesList: ArrayList): MutableList {
+ val myMap = salesList.groupBy { it.saleGroupFk }
+ val myList: MutableList = mutableListOf()
+
+ for ((key, value) in myMap.entries) {
+ if (key.isNullOrEmpty()) { // si no tiene saleGroup se añaden las líneas
+ for (s in value) {
+ myList.add(s)
+ }
+ } else { // si tiene saleGroup se crea el padre con el tamaño e indicando que es padre, como ejemplo se toma el primer elemento
+ /*crea padre*/
+ if (value.size > 1) {
+ val mySale = SaleVO(
+ saleOrder = value[0].saleOrder,
+ workerFk = value[0].workerFk,
+ originalQuantity = null,
+ quantity = null,
+ rgb = null,
+ saleFk = value[0].saleFk,
+ saleGroupFk = value[0].saleGroupFk,
+ isPreControlled = value[0].isPreControlled,
+ isPrepared = value[0].isPrepared,
+ isPreviousPrepared = value[0].isPreviousPrepared,
+ isControlled = value[0].isControlled,
+ line3 = value[0].code ?: "", //6676
+ picked = value[0].picked,
+ ticketFk = value[0].ticketFk,
+ level = value[0].level
+ )//prime elemento//hay que hacer una copia si no queda la referencia
+ mySale.totalSales = value.size //total líneas
+ mySale.isParent = true
+ value as MutableList
+ mySale.sonSales =
+ value.sortedWith(compareBy { it.picked }) as MutableList
+ mySale.line1 = "Previa: ${mySale.saleGroupFk}"
+ mySale.line2 = "Líneas: ${value.size}"
+ mySale.line3 = value[0].code ?: ""
+ mySale.placements = listOf(PlacementVO(shelving = value[0].code ?: ""))
+
+ myList.add(mySale)
+ } else {
+ for (s in value) {
+ myList.add(s)
+ }
+ }
+
+ }
+
+ }
+ return myList
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentCheckerPreviousNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentCheckerPreviousNew.kt
new file mode 100644
index 00000000..75a1b15f
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentCheckerPreviousNew.kt
@@ -0,0 +1,870 @@
+package es.verdnatura.presentation.view.feature.collection.fragment
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.media.MediaPlayer
+import android.os.Bundle
+import android.text.InputType
+import android.view.KeyEvent
+import android.view.View
+import android.view.WindowManager
+import android.view.inputmethod.EditorInfo
+import android.widget.EditText
+import android.widget.ImageView
+import android.widget.Toast
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.google.gson.Gson
+import es.verdnatura.R
+import es.verdnatura.databinding.FragmentCollectionNewBinding
+import es.verdnatura.domain.ConstAndValues.BASEURLSALIX
+import es.verdnatura.domain.ConstAndValues.SECTORFK
+import es.verdnatura.domain.notNull
+import es.verdnatura.domain.showToastCenterWithBackground
+import es.verdnatura.domain.toast
+import es.verdnatura.presentation.base.BaseFragment
+import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.OnBarcodeRowClickListener
+import es.verdnatura.presentation.common.OnMistakeClickListener
+import es.verdnatura.presentation.common.OnOptionsSelectedListener
+import es.verdnatura.presentation.common.OnPackingClickSaleListener
+import es.verdnatura.presentation.common.OnPasillerosItemClickListener
+import es.verdnatura.presentation.common.OnSaleClickSaleListener
+import es.verdnatura.presentation.common.OnTicketClickSaleListener
+import es.verdnatura.presentation.common.ToolBarAdapterTooltip
+import es.verdnatura.presentation.common.hideKeyboard
+import es.verdnatura.presentation.common.itemScanIsQr
+import es.verdnatura.presentation.common.itemScanValue
+import es.verdnatura.presentation.view.component.CustomDialog
+import es.verdnatura.presentation.view.component.CustomDialogInput
+import es.verdnatura.presentation.view.component.CustomDialogList
+import es.verdnatura.presentation.view.component.CustomDialogThreeButtons
+import es.verdnatura.presentation.view.feature.articulo.adapter.BarcodeAdapter
+import es.verdnatura.presentation.view.feature.articulo.model.BarcodeVO
+import es.verdnatura.presentation.view.feature.collection.ItemVO
+import es.verdnatura.presentation.view.feature.collection.adapter.SaleAdapterNew
+import es.verdnatura.presentation.view.feature.collection.mapper.map
+import es.verdnatura.presentation.view.feature.main.activity.MainActivity
+import es.verdnatura.presentation.view.feature.pasillero.model.PasillerosItemVO
+import es.verdnatura.presentation.view.feature.sacador.model.CollectionTicket
+import es.verdnatura.presentation.view.feature.sacador.model.Sale
+import es.verdnatura.presentation.view.feature.sacador.model.SaleVO
+import kotlinx.coroutines.runBlocking
+import org.json.JSONObject
+
+@Suppress("UNUSED_ANONYMOUS_PARAMETER")
+class CollectionFragmentCheckerPreviousNew(
+) : BaseFragment(
+ CollectionViewModelCheckerPreviosNew::class
+) {
+ private var sales: List = listOf()
+ private var saleAdapter: SaleAdapterNew? = null
+ private var lm: LinearLayoutManager? = null
+ private var storedPosition: Int = 0
+ private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null
+ private lateinit var customDialogList: CustomDialogList
+ private var placementSupplyAdapter: BarcodeAdapter? = null
+ private var listPlacementSupply: ArrayList = ArrayList()
+ private lateinit var customDialogInput: CustomDialogInput
+ private lateinit var customDialogThreeButtons: CustomDialogThreeButtons
+ private lateinit var customDialogThreeButtonsQuantity: CustomDialogThreeButtons
+ private var ticketSelected: Int = 0
+ private lateinit var customDialog: CustomDialog
+ var mperror: MediaPlayer? = null
+ var mpok: MediaPlayer? = null
+ private var storedBackPosition: Int = 0
+ private var tickets: ArrayList = ArrayList()
+ private var lastScanned: Int = 0
+ private var positionUnmarked = -1
+ private var isScanned: Boolean? = null
+ private var positionConfirm = 0
+ private var quantityConfirm = 0
+ private lateinit var myGroupList: List
+ private var quantityReserveToCheckItemScan = 0
+ private lateinit var collection: CollectionTicket
+
+ companion object {
+ fun newInstance(
+ ) = CollectionFragmentCheckerPreviousNew()
+ }
+
+ override fun onAttach(context: Context) {
+ if (context is OnPasillerosItemClickListener) pasillerosItemClickListener = context
+ super.onAttach(context)
+ }
+
+ override fun getLayoutId(): Int = R.layout.fragment_collection_new
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ mperror = MediaPlayer.create((activity as MainActivity), R.raw.error)
+ mpok = MediaPlayer.create((activity as MainActivity), R.raw.ok)
+ super.onCreate(savedInstanceState)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ scanRequest()
+ }
+
+ override fun init() {
+ customDialogList = CustomDialogList(requireContext())
+ customDialogInput = CustomDialogInput(requireContext())
+ customDialog = CustomDialog(requireContext())
+ customDialogThreeButtons = CustomDialogThreeButtons(requireContext())
+ customDialogThreeButtonsQuantity = CustomDialogThreeButtons(requireContext())
+ ma.hideBottomNavigation(View.GONE)
+ setEvents()
+ setToolBar()
+ if (::collection.isInitialized) {
+ viewModel.getCollectionTickets(
+ collection.collectionFk, print = false
+ )
+ }
+
+ super.init()
+ }
+
+ private fun setToolBar() {
+ binding.mainToolbar.toolbarSubtitle.visibility = View.VISIBLE
+ binding.mainToolbar.toolbarIcons.visibility = View.VISIBLE
+ binding.mainToolbar.backButton.visibility = View.VISIBLE
+ binding.mainToolbar.toolbarTitle.text = getString(R.string.preControlNew)
+
+ val listIcons: ArrayList = ArrayList()
+ val iconAdd = ImageView(context)
+ iconAdd.setImageResource(R.drawable.ic_playlist_add_black_24dp)
+ val iconParking = ImageView(context)
+ iconParking.setImageResource(R.drawable.ic_local_parking_black_24dp)
+ val iconUpdate = ImageView(context)
+ iconUpdate.setImageResource(R.drawable.ic_autorenew_black_24dp)
+
+ iconAdd.tooltipText = getTooltip(R.drawable.ic_playlist_add_black_24dp)
+ iconParking.tooltipText = getTooltip(R.drawable.ic_local_parking_black_24dp)
+ iconUpdate.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp)
+
+ listIcons.add(iconAdd)
+ listIcons.add(iconParking)
+ listIcons.add(iconUpdate)
+
+ binding.mainToolbar.toolbarIcons.adapter =
+ ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener {
+ override fun onOptionsItemSelected(item: Drawable) {
+
+ when (item) {
+ iconAdd.drawable -> addItem()
+ iconUpdate.drawable -> updateScreen()
+ iconParking.drawable -> pasillerosItemClickListener?.onPasillerosItemClickListener(
+ PasillerosItemVO(
+ title = R.string.Parking
+ ), ""
+ )
+ }
+
+ }
+ })
+ binding.mainToolbar.toolbarIcons.layoutManager =
+ LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
+ }
+
+ private fun updateScreen() {
+ viewModel.getCollectionTickets(
+ collection.collectionFk, print = false
+ )
+ }
+
+ private fun scanRequest() {
+ binding.scanInput.requestFocus()
+ hideKeyboards()
+ }
+
+ private fun setEvents() {
+
+ binding.mainToolbar.backButton.setOnClickListener {
+ ma.onMyBackPressed()
+ }
+ //ESCANER =========
+
+ binding.scanInput.requestFocus()
+ binding.scanInput.setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {//ID=0 ACTION_NEXT ID=5 ACTION_UNESPECEFIED)
+ if (binding.scanInput.text.toString().isNotEmpty()) {
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
+ isScanned =
+ event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
+ if (itemScanIsQr(binding.scanInput.text.toString())) {
+ val myQr = ItemScanned(JSONObject(binding.scanInput.text.toString()))
+ when (myQr.table) {
+ "saleGroup" -> {
+ binding.scanInput.setText(myQr.id.toString())
+ }
+
+ "buy" -> binding.scanInput.setText(myQr.more)
+ }
+
+ } else {
+ ma.hideKeyboard(binding.scanInput)
+ if (::collection.isInitialized) {
+ findSale(binding.scanInput.text.toString())
+ } else {
+ viewModel.getCollectionTickets(
+ collectionFk = binding.scanInput.text.toString().toLong(), false
+ )
+ }
+ }
+ }
+ binding.scanInput.setText("")
+ hideKeyboards()
+ return@setOnEditorActionListener true
+ }
+ true
+ }
+
+ hideKeyboards()
+
+ //LISTA =========
+ binding.collectionSwipe.setOnRefreshListener {
+ binding.collectionSwipe.isRefreshing = false
+ updateScreen()
+ binding.collectionSwipe.isRefreshing = false
+
+ }
+ }
+
+ private fun hideKeyboards() {
+ try {
+ requireActivity().hideKeyboard()
+ } catch (e: Exception) {
+ println(e.message)
+ }
+ }
+
+ override fun observeViewModel() {
+
+ with(viewModel) {
+
+ loadCollectionTicketSalix.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (!it.isError) {
+
+ if (it.tickets.isNotEmpty()) {
+ collection = it
+ createCollectionList()
+
+ } else {
+ binding.mainToolbar.toolbarSubtitle.text = "0/0"
+ }
+ } else {
+ customDialog.setTitle(getString(R.string.error))
+ .setDescription(it.errorMessage)
+ .setOkButton(getString(R.string.accept)) {
+ customDialog.dismiss()
+ if (activity != null) ma.onMyBackPressed()
+ }.show()
+ }
+
+ }
+ }
+ loadExistsResponse.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (it.exists) {
+ markLine(it.position, it.quantity, true)
+ } else {
+ getString(R.string.updateSalesReserve).toast(
+ requireContext()
+ )
+ viewModel.getCollectionTickets(collection.collectionFk, false)
+ }
+ }
+ }
+
+ loadResponseAddItem.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ updateScreen()
+ }
+
+ }
+
+ loadPicked.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ myGroupList[positionConfirm].isPicked = 1
+ saleAdapter!!.notifyItemChanged(positionConfirm)
+ lm!!.scrollToPositionWithOffset(positionConfirm, 0)
+ //lm!!.scrollToPositionWithOffset(storedBackPosition + 1, 0)
+ setTotalLines()
+
+ }
+ }
+
+ loadUnpicked.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+
+ myGroupList[positionUnmarked].isPicked = 0
+ myGroupList[positionUnmarked].reservedQuantity = quantityConfirm
+ saleAdapter!!.notifyItemChanged(positionUnmarked)
+ lm!!.scrollToPositionWithOffset(positionUnmarked, 0)
+
+ }
+ }
+
+ responseCode.observe(viewLifecycleOwner) {
+
+ if (it == null) {
+ showErrorMessage(text = getString(R.string.codeNotExist))
+ if (mperror != null) mperror?.start()
+ } else {
+ if (checkItemScan(it.toString(), positionConfirm)) {
+ scanRequest()
+ customDialogList.dismiss()
+ mpok?.start()
+ markLine(positionConfirm, quantityReserveToCheckItemScan, false)
+ } else {
+ customDialogList.setValueTwo("")
+ showErrorMessage(text = getString(R.string.lineNotExist))
+ if (mperror != null) mperror?.start()
+ }
+ }
+
+ }
+
+ }
+ }
+
+ private fun createCollectionList() {
+ binding.mainToolbar.toolbarTitle.text = collection.collectionFk.toString()
+
+ collection.map(requireContext())
+ val salesList: ArrayList = ArrayList()
+
+ tickets = ArrayList()
+ var observations = ""
+
+ collection.tickets.forEach { ticket ->
+
+ if (observations.isNotEmpty()) observations = observations + " " + ticket.observations
+ ticket.sales.forEach { sale ->
+
+ salesList.add(sale)
+ }
+ }
+
+ myGroupList =
+ salesList.sortedWith(compareBy { it.pickingOrderPrevia }.thenBy { it.itemFk })
+ saleAdapter = SaleAdapterNew(myGroupList, pasillerosItemClickListener!!,
+
+ object : OnSaleClickSaleListener {
+ override fun onSaleClick(sale: Sale) {
+
+ val position =
+ myGroupList.indexOfFirst { it.itemShelvingSaleFk == sale.itemShelvingSaleFk }
+ if (position > -1) {
+ if (sale.isPicked == 1) {
+ unMarkLine(position, myGroupList[position])
+ } else {
+ showScanner(position, sale)
+ }
+ }
+
+ }
+
+ }, object : OnMistakeClickListener {
+ override fun onMistakeClickListener(sale: SaleVO) {
+ }
+ }, object : OnPackingClickSaleListener {
+ override fun onPackingClick(sale: Sale) {
+
+ if (!sale.code.isNullOrEmpty()) ma.onPasillerosItemClickListener(
+ PasillerosItemVO(
+ title = R.string.titleUbicator,
+ ), entryPoint = sale.code
+ )
+ }
+ }, object : OnTicketClickSaleListener {
+ override fun onTicketClickListener(sale: Sale) {
+ val entryPoint = Gson().toJson(
+ mutableMapOf(
+ "entryPoint" to sale.ticketFk, "web" to "${
+ mobileApplication.dataStoreApp.readDataStoreKey(
+ BASEURLSALIX
+ )
+ }/#!/ticket/${sale.ticketFk}/sale"
+ )
+ )
+ ma.onPasillerosItemClickListener(
+ PasillerosItemVO(
+ title = R.string.titleWebViewer,
+ ), entryPoint = entryPoint
+ )
+ }
+ }, type = "PRESACADOR"
+ )
+
+
+ lm = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
+ binding.fragmentSacadorCollections.adapter = saleAdapter
+ binding.fragmentSacadorCollections.layoutManager = lm
+
+ setTotalLines()
+ setListPosition()
+ setScrollListener(lm!!)
+ printObservations(observations)
+ }
+
+ private fun setScrollListener(lm: LinearLayoutManager) {
+ binding.fragmentSacadorCollections.clearOnScrollListeners()
+ binding.fragmentSacadorCollections.addOnScrollListener(object :
+ RecyclerView.OnScrollListener() {
+ override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
+ // storedBackPosition = lm.findFirstVisibleItemPosition()
+ storedPosition = lm.findFirstVisibleItemPosition()
+ super.onScrolled(recyclerView, dx, dy)
+ }
+ })
+ }
+
+ private fun printObservations(observations: String) {
+ if (observations.trim().isNotEmpty()) {
+ customDialog.setTitle(getString(R.string.observations)).setDescription(observations)
+ .setOkButton(getString(R.string.accept)) {
+ customDialog.hide()
+ customDialog.dismiss()
+ }.show()
+ }
+ }
+
+ private fun findSale(txtscan: String) {
+ /*
+ for (tickets in collection.tickets) {
+ //0-Salegroup
+ for (sale in tickets.sales){
+ if (sale == "0") {
+ //1- Por itemFk
+ if (txtscan == saleVO.itemFk.toString()) {
+ if (mpok != null) mpok!!.start()
+ isOk = true
+ markLine(index, type)
+ break
+ }
+ //2- Por barcode
+ if (saleVO.barcodes.isNotEmpty())
+ saleVO.barcodes.forEach { barcode ->
+
+ if (txtscan == barcode) {
+ if (mpok != null) mpok!!.start()
+ isOk = true
+ markLine(index, type)
+ isBreak = true
+ }
+ }
+
+ if (isBreak) break
+ }
+ index += 1
+ }
+ */
+ }
+
+ private fun findSale(txtscan: String, position: Int, sale: Sale) {
+
+ storedPosition = position
+
+ if (sale.code!!.uppercase() == txtscan.uppercase()) {
+ mpok!!.start()
+ printShelvingResult(position)
+ } else {
+ mperror!!.start()
+ }
+
+ }
+
+ private fun markLine(position: Int, quantity: Int, isItemShelvingSaleEmpty: Boolean?) {
+
+ isScanned = null
+ positionConfirm = position
+ quantityConfirm = quantity
+
+ runBlocking {
+ val sectorFk = mobileApplication.dataStoreApp.readDataStoreKey(SECTORFK)
+ viewModel.itemShelvingSaleSetQuantity(
+ myGroupList[position].itemShelvingSaleFk,
+ quantity,
+ isItemShelvingSaleEmpty = isItemShelvingSaleEmpty,
+ sectorFk = if (sectorFk == -1) null else sectorFk,
+ shelvingFk = myGroupList[position].code!!
+ )
+ }
+ // storedBackPosition = position
+
+ }
+
+ private fun setListPosition() {
+
+ //if (storedPosition == 0 && storedBackPosition == 0) { // se inicia lista, se busca porqué item vamos.
+ if (storedPosition == 0) {
+ for (indice in myGroupList.indices) {
+ if (myGroupList[indice].isPicked == 0) {
+ //storedPosition = indice
+ lm!!.scrollToPositionWithOffset(indice - 1, 0)
+ break
+ }
+ }
+
+ } else {
+ // lm!!.scrollToPositionWithOffset(storedBackPosition, 0)
+ lm!!.scrollToPositionWithOffset(storedPosition, 0)
+ }
+ }
+
+ private fun unMarkLine(position: Int, sale: Sale) {
+
+ customDialog.setTitle(getString(R.string.unmarkLine)).setDescription(
+ getString(R.string.goUnmark) + sale.itemFk + getString(
+ R.string.sure
+ )
+ ).setOkButton(getString(R.string.unmark)) {
+ if (!sale.isParent && sale.reservedQuantity == 0 && sale.originalQuantity != sale.saleQuantity) {
+ getString(R.string.unmarkError).toast(requireContext())
+ } else {
+ //storedBackPosition = position
+ //storedPosition = position
+ // setListPosition()
+ viewModel.itemShelvingSaleUnpicked(myGroupList[position].itemShelvingSaleFk)
+ sale.isPicked = 0
+ positionUnmarked = position
+ setTotalLines()
+ scanRequest()
+ }
+
+
+ customDialog.dismiss()
+ }.setKoButton(getString(R.string.cancel)) {
+ scanRequest()
+ customDialog.dismiss()
+ }.show()
+
+ }
+
+ private fun printShelvingResult(pos: Int) {
+
+ storedPosition = pos
+ customDialogList.getEditTextTwo().inputType = InputType.TYPE_CLASS_TEXT
+ customDialogList.getEditTextTwo().setRawInputType(InputType.TYPE_CLASS_NUMBER)
+ customDialogList.getEditText().setRawInputType(InputType.TYPE_CLASS_NUMBER)
+ customDialogList.getEditTextTwo().requestFocus()
+ val shelving = myGroupList[pos].code
+ val item = myGroupList[pos].itemFk
+ val longName = myGroupList[pos].longName
+ val totalReserved = myGroupList[pos].reservedQuantity
+
+ try {
+ customDialogList.setTitle("$shelving($item) $totalReserved de $longName").setOkButton(
+ getString(
+ R.string.take
+ )
+ ) {
+ customDialogTakeAction(pos, totalReserved, false)
+
+ }.setKoButton(getString(R.string.close)) {
+ requireActivity().hideKeyboard(customDialogList.getEditTextTwo())
+ customDialogList.dismiss()
+ scanRequest()
+
+ }.setHintValue(getString(R.string.quantitySelect)).setValue(totalReserved.toString())
+ .setHintValueTwo(getString(R.string.scanItem)).setValueTwo("").show()
+
+ customDialogList.getEditTextTwo().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
+
+ customDialogTakeAction(
+ pos,
+ totalReserved,
+ event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
+ )
+
+ return@setOnEditorActionListener true
+
+ }
+ false
+ }
+ } catch (e: Exception) {
+ ma.messageWithSound(e.message.toString(), isError = true, true)
+ }
+ }
+
+ private fun customDialogTakeAction(
+ position: Int, totalReserved: Int, isItemScanned: Boolean?
+ ) {
+ isScanned = isItemScanned
+ if (customDialogList.getValueTwo().isNotEmpty()) {
+
+ customDialogList.setValueTwo(
+ itemScanValue(
+ customDialogList.getValueTwo(), arrayOf("buy"), "more"
+ ).toString()
+ )
+ val quantityToReserve = customDialogList.getValue().toInt()
+
+ if (quantityToReserve < totalReserved) {
+
+ if (customDialogList.getValueTwo() in myGroupList[position].Barcodes || customDialogList.getValueTwo() == myGroupList[position].itemFk.toString()) {
+ customDialogList.dismiss()
+ showQuestionUbicationEmpty(position, quantityToReserve)
+ } else {
+ ma.messageWithSound(
+ message = getString(R.string.errorItem),
+ isError = true,
+ isPlayed = true,
+ isToasted = false
+ )
+ }
+ }
+
+ if (quantityToReserve > totalReserved) {
+ ma.hideKeyboard(customDialogList.getEditTextTwo())
+ getString(R.string.quantityHigh).toast(requireContext())
+ }
+ if (quantityToReserve == totalReserved) {
+ try {
+ if (checkItemScan(customDialogList.getValueTwo(), position)) {
+
+ markLine(position, quantityToReserve, false)
+
+ mpok?.start()
+ ma.hideKeyboard(customDialogList.getEditTextTwo())
+ customDialogList.dismiss()
+ requireContext().showToastCenterWithBackground(myGroupList[position].ticketFk.toString())
+ scanRequest()
+
+ } else {
+
+ quantityReserveToCheckItemScan = quantityToReserve
+ viewModel.getIdFromCodeSalix(
+ code = customDialogList.getValueTwo(),
+ )
+ customDialogList.dismiss()
+ }
+ } catch (ex: Exception) {
+ getString(R.string.errorInput).toast(requireContext())
+ }
+
+ }
+
+ } else {
+ getString(R.string.scanItemValidate).toast(requireContext())
+ }
+ }
+
+ private fun checkItemScan(valueToCheck: String, position: Int): Boolean {
+ println("CheckItemScan $valueToCheck")
+ val saleToCheck = myGroupList[position]
+ println("CheckItemScan saleTocheck$saleToCheck")
+ println("CheckItemScan saleTocheck Item ${saleToCheck.itemFk}")
+ println("CheckItemScan saleTocheck ItemBarcodes ${saleToCheck.Barcodes}")
+ if (saleToCheck.itemFk.toString() == valueToCheck) return true
+ else {
+ saleToCheck.Barcodes.forEach { barcode ->
+ if (barcode == valueToCheck) return true
+ }
+ }
+
+ return false
+ }
+
+ private fun showQuestionUbicationEmpty(position: Int, quantity: Int = 0) {
+ customDialogThreeButtonsQuantity.setTitle(
+ getString(
+ R.string.changeQuantity, quantity, myGroupList[position].itemFk
+ )
+ ).setDescription(getString(R.string.questionItemShelving, myGroupList[position].itemFk))
+ .setValue("").setCustomDialogValue(View.GONE)
+ customDialogThreeButtonsQuantity.setOkButtonAdd(text = getString(R.string.yes)) {
+ scanRequest()
+ customDialogThreeButtonsQuantity.dismiss()
+ getString(R.string.errorQuantityShelving).toast(requireContext())
+ customDialogThreeButtonsQuantity.dismiss()
+ showQuestionUbicationEmpty(position, quantity)
+ }.setOkButtonTwo(getString(R.string.no)) {
+ scanRequest()
+ customDialogThreeButtonsQuantity.dismiss()
+ if (quantity == 0) {
+ viewModel.itemShelvingSaleExists(
+ myGroupList[position].itemShelvingSaleFk, position, quantity
+ )
+ } else {
+ markLine(position, quantity, true)
+ }
+ }.setKoButton(getString(R.string.cancel)) {
+ scanRequest()
+ customDialogThreeButtonsQuantity.dismiss()
+ }.show()
+ customDialogThreeButtons.setFocusDialogValue()
+ }
+
+ private fun addItem() {
+ listPlacementSupply = ArrayList()
+ collection.tickets.forEach {
+ listPlacementSupply.add(BarcodeVO(code = it.ticketFk.toString()))
+ }
+ if (listPlacementSupply.size == 1) {
+ ticketSelected = listPlacementSupply[0].code!!.toInt()
+ }
+ customDialogList.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
+ customDialogList.getEditTextTwo().inputType = InputType.TYPE_CLASS_NUMBER
+ customDialogList.getEditText().setRawInputType(InputType.TYPE_CLASS_NUMBER)
+ customDialogList.setTitle(getString(R.string.Agregarartículoparaticket) + " " + ticketSelected)
+ .setOkButton(getString(R.string.Agregar)) {
+ customDialogAddItem()
+ }.setKoButton(getString(R.string.close)) {
+ scanRequest()
+ customDialogList.dismiss()
+ }.setHintValue(getString(R.string.Artículo)).setValue("")
+ .setHintValueTwo(getString(R.string.Cantidad)).setValueTwo("").show()
+ customDialogList.getEditText().requestFocus()
+ requireActivity().hideKeyboard()
+
+ customDialogList.getEditText().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
+ if (customDialogList.getValue().isNotEmpty()) {
+ try {
+ customDialogList.setValue(
+ itemScanValue(
+ customDialogList.getValue(), arrayOf("buy"), "more"
+ ).toString()
+ )
+
+ } catch (e: Exception) {
+ ma.messageWithSound(e.message.toString(), isError = true, true)
+ }
+ customDialogList.getEditTextTwo().requestFocus()
+ }
+
+ return@setOnEditorActionListener true
+
+ }
+ false
+
+ }
+
+ customDialogList.getEditTextTwo().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {
+ customDialogAddItem()
+ return@setOnEditorActionListener true
+
+ }
+ false
+ }
+
+ placementSupplyAdapter =
+ BarcodeAdapter(listPlacementSupply, object : OnBarcodeRowClickListener {
+ override fun onBarcodeRowClickListener(item: BarcodeVO) {
+ customDialogInput.setTitle(getString(R.string.ArtículoparaTicket) + " " + item.code!!)
+ ticketSelected = item.code!!.toInt()
+ customDialogList.setTitle(getString(R.string.Agregarartículoparaticket) + " " + ticketSelected)
+ }
+ }, showDelete = false)
+
+ customDialogList.getRecyclerView().adapter = placementSupplyAdapter
+
+ customDialogList.getRecyclerView().layoutManager =
+ LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
+
+ }
+
+ private fun customDialogAddItem() {
+
+ if (customDialogList.getValueTwo().isNotEmpty()) {
+ if (ticketSelected == 0) {
+ getString(R.string.Seleccionaunticketdelaista).toast(requireContext())
+ } else if (customDialogList.getValue().isEmpty() || customDialogList.getValueTwo()
+ .isEmpty()
+ ) {
+ getString(R.string.Todosloscampossonobligatorios).toast(requireContext())
+ } else {
+ val saleGroupSelected =
+ collection.tickets.find { it.ticketFk == ticketSelected }?.sales?.get(0)?.saleGroupFk
+ ?: 0
+
+ runBlocking {
+ viewModel.collectionAddWithReservation(
+ customDialogList.getValue().toInt(),
+ customDialogList.getValueTwo().toInt(),
+ ticketSelected,
+ saleGroupFk = saleGroupSelected,
+ sectorFk = mobileApplication.dataStoreApp.readDataStoreKey(SECTORFK)
+ )
+ }
+ customDialogList.dismiss()
+ hideKeyboards()
+ scanRequest()
+ }
+ } else {
+ getString(R.string.scanItem).toast(requireContext())
+ }
+
+ }
+
+ private fun toastDisponibility(item: ItemVO) {
+ if (item.available.isEmpty()) {
+ item.available = "0"
+ }
+ customDialog.setTitle(getString(R.string.itemPoints) + item.id)
+ .setDescription(getString(R.string.available) + ":" + item.available)
+ .setOkButton(getString(R.string.accept)) {
+ scanRequest()
+ customDialog.dismiss()
+ }.show()
+
+ }
+
+ private fun setTotalLines() {
+ val totalMark = myGroupList.count { it.isPicked == 1 }
+ binding.mainToolbar.toolbarTitle.text =
+ if (collection.collectionFk != 0) collection.collectionFk.toString() else ""
+ binding.mainToolbar.toolbarSubtitle.text =
+ getString(R.string.totalsPicker, totalMark, myGroupList.size)
+ if (totalMark == myGroupList.size) {
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
+ viewModel.saleTrackingAddPrevOK(collection.collectionFk)
+ }
+ }
+
+ private fun showScanner(index: Int, sale: Sale) {
+ customDialogInput.getEditText().inputType = InputType.TYPE_CLASS_TEXT
+ customDialogInput.setTitle("" + sale.itemFk)
+ .setDescription(getString(R.string.scanWagonForItem))
+ .setOkButton(getString(R.string.accept)) {
+ findSaleAction(index, sale)
+ }.setKoButton(getString(R.string.cancel)) {
+ closeCustomDialog(binding.scanInput, customDialogInput)
+ }.setValue("").show()
+
+
+ customDialogInput.getEditText().setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0) {
+ findSaleAction(index, sale)
+ return@setOnEditorActionListener false
+ }
+ false
+ }
+ customDialogInput.getEditText().requestFocus()
+ }
+
+ private fun findSaleAction(index: Int, sale: Sale) {
+ if (customDialogInput.getValue().isNotEmpty()) {
+ findSale(customDialogInput.getValue(), index, sale)
+ }
+ closeCustomDialog(binding.scanInput, customDialogInput)
+ }
+
+ private fun closeCustomDialog(scanInput: EditText, customDialogInput: CustomDialogInput) {
+ requireContext().hideKeyboard(customDialogInput.getEditText())
+ scanInput.requestFocus()
+ customDialogInput.dismiss()
+ scanInput.requestFocus()
+ }
+
+ private fun showErrorMessage(title: String = getString(R.string.errorMarkLine), text: String) {
+ customDialog.setTitle(title).setDescription(text).setKoButton(getString(R.string.close)) {
+ customDialog.dismiss()
+ }.show()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt
index 60281503..6704e57f 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPicker.kt
@@ -1,6 +1,5 @@
package es.verdnatura.presentation.view.feature.collection.fragment
-import android.app.AlertDialog
import android.content.Context
import android.graphics.drawable.Drawable
import android.media.MediaPlayer
@@ -38,6 +37,7 @@ import es.verdnatura.domain.notNull
import es.verdnatura.domain.toast
import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.LabelDialogHelper
import es.verdnatura.presentation.common.OnBarcodeRowClickListener
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
@@ -46,6 +46,7 @@ import es.verdnatura.presentation.common.OnPasillerosItemClickListener
import es.verdnatura.presentation.common.OnQuantityClickListener
import es.verdnatura.presentation.common.OnSaleClickListener
import es.verdnatura.presentation.common.OnTicketClickListener
+import es.verdnatura.presentation.common.OnTicketColorListener
import es.verdnatura.presentation.common.ToolBarAdapterTooltip
import es.verdnatura.presentation.common.hideKeyboard
import es.verdnatura.presentation.common.itemScanIsQr
@@ -126,11 +127,14 @@ class CollectionFragmentPicker(
private var recylerViewState: Parcelable? = null
private var isScanned: Boolean? = null
private var myPosition: Int = 0
+ private var changePosition = false
private lateinit var myGroupList: List
private var canChangeState = true
private var isVerifiedCollection = false
+ private var hasFilterByLevel = false
+
companion object {
fun newInstance(collection: CollectionVO, type: String) =
CollectionFragmentPicker(collection, type)
@@ -377,7 +381,7 @@ class CollectionFragmentPicker(
if (!binding.scanInput.text.toString().isNullOrEmpty()) {
//sergio:para ver si ha marcado dos veces el mismo ticket
- binding.scanInput.setText(textScanned_filterDouble(binding.scanInput.text!!.toString()))
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
//de momento solo está el qr de artículo
isScanned =
@@ -841,7 +845,7 @@ class CollectionFragmentPicker(
} else {
// pintar línea
saleAdapter!!.notifyDataSetChanged()
- myPosition = storedPosition
+ myPosition = storedBackPosition
ReviewQuantityForRefreshingAndSorting(
sales[storedPosition].quantity!!.toInt(),
@@ -926,7 +930,7 @@ class CollectionFragmentPicker(
}
saleAdapter = SaleAdapter(
- myGroupList,
+ myGroupList as MutableList,
pasillerosItemClickListener!!,
object : OnQuantityClickListener {
@@ -1001,17 +1005,25 @@ class CollectionFragmentPicker(
}
}
},
- type = type
+ type = type,
+ onTicketColorClickListener = object : OnTicketColorListener {
+ override fun onTicketColorListener(sale: SaleVO) {
+ hasFilterByLevel = !hasFilterByLevel
+
+ if (hasFilterByLevel) {
+ saleAdapter!!.updateSales(myGroupList.filter { it.level == sale.level } as MutableList)
+ myGroupList = myGroupList.filter { it.level == sale.level }
+ } else {
+ createCollectionList()
+
+ }
+ }
+ }
)
-
-
lm = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
-
-
binding.fragmentSacadorCollections.adapter = saleAdapter
-
binding.fragmentSacadorCollections.layoutManager = lm
setTotalLines()
//Tarea #4628
@@ -1111,6 +1123,7 @@ class CollectionFragmentPicker(
RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
storedBackPosition = lm.findFirstVisibleItemPosition()
+ myPosition = lm.findFirstVisibleItemPosition()
super.onScrolled(recyclerView, dx, dy)
}
})
@@ -1368,7 +1381,7 @@ class CollectionFragmentPicker(
}
//nuevo
- var mySale = sales[position].saleFk
+ val mySale = sales[position].saleFk
for (indice in myGroupList.indices) {
if (!myGroupList[indice].isParent && myGroupList[indice].saleFk == mySale) {
@@ -1533,11 +1546,11 @@ class CollectionFragmentPicker(
if (!myGroupList[indice].isParent && myGroupList[indice].saleFk == mySale) {
storedBackPosition = indice
+ myPosition = storedBackPosition
}
}
storedBackPosition = position
- myPosition = position
setListPosition(position, false)
if (type != PRECHECKER) {
@@ -2075,7 +2088,7 @@ class CollectionFragmentPicker(
"" + totalMark + "/" + total
if (totalMark == sales.size) {
- getString(R.string.Coleccióncompleta).toast(this.context, Toast.LENGTH_SHORT)
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
saleAdapter!!.notifyDataSetChanged()
if (!goBack) ticketCollection_setUsedShelves()
@@ -2341,20 +2354,19 @@ class CollectionFragmentPicker(
}
}
if (isTicket) {
- val builder = AlertDialog.Builder(context)
- builder.setTitle(getString(R.string.selectLabeltoPrint))
- val labelCount = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
- builder.setItems(labelCount) { dialog, which ->
- viewModel.collectionStickerPrint(
- collectionFk = collection.collectionFk, labelCount = (which + 1)
- )
- (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
- PRINTERNAME
- )).toast(requireContext())
+ val labelDialogHelper = LabelDialogHelper(requireContext())
+ labelDialogHelper.showLabelDialog(
+ onItemSelected = { labelCount ->
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk,
+ labelCount = labelCount
+ )
- }
- val dialog = builder.create()
- dialog.show()
+ (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERNAME
+ )).toast(requireContext())
+ }
+ )
} else {
viewModel.collectionStickerPrint(
collectionFk = collection.collectionFk, null
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerNew.kt
index f4d80f81..a27361ee 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerNew.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerNew.kt
@@ -1,6 +1,5 @@
package es.verdnatura.presentation.view.feature.collection.fragment
-import android.app.AlertDialog
import android.content.Context
import android.graphics.drawable.Drawable
import android.media.MediaPlayer
@@ -27,6 +26,7 @@ import es.verdnatura.domain.notNull
import es.verdnatura.domain.toast
import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.LabelDialogHelper
import es.verdnatura.presentation.common.OnBarcodeRowClickListener
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
@@ -259,7 +259,7 @@ class CollectionFragmentPickerNew(
binding.scanInput.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {//ID=0 ACTION_NEXT ID=5 ACTION_UNESPECEFIED)
if (binding.scanInput.text.toString().isNotEmpty()) {
- binding.scanInput.setText(textScanned_filterDouble(binding.scanInput.text!!.toString()))
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
isScanned =
event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
if (itemScanIsQr(binding.scanInput.text.toString())) {
@@ -405,29 +405,6 @@ class CollectionFragmentPickerNew(
}
- responseConfirmReservedItemShelvingSale.observe(viewLifecycleOwner) {
-
- myGroupList[positionConfirm].isPicked = 1
- saleAdapter!!.notifyDataSetChanged()
- lm!!.scrollToPositionWithOffset(storedPosition, 0)
- /* viewModel.collectionTicketGetSalix(
- collection.collectionFk, print = false
- )*/
-
- }
-
- /*
- responseItemShelvingSale.observe(viewLifecycleOwner) {
- myGroupList[positionConfirm].isPicked = 1
- myGroupList[positionConfirm].reservedQuantity = quantityConfirm
- viewModel.collectionTicketGetSalix(
- collection.collectionFk, print = false
- )
- lm!!.scrollToPositionWithOffset(positionConfirm, 0)
- ma.messageWithSound(
- getString(R.string.operationSuccess), it.isError, !it.isError, isToasted = false
- )
- }*/
loadUnpicked.observe(viewLifecycleOwner) { event ->
event.getContentIfNotHandled().notNull {
@@ -439,6 +416,18 @@ class CollectionFragmentPickerNew(
}
}
+ loadPicked.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
+ if (it) {
+ myGroupList[positionConfirm].isPicked = 1
+ saleAdapter!!.notifyItemChanged(positionConfirm)
+ lm!!.scrollToPositionWithOffset(positionConfirm, 0)
+ setTotalLines()
+ } else {
+ updateScreen()
+ }
+ }
+ }
responseItemShelvingSaleGroup.observe(viewLifecycleOwner) {
viewModel.collectionTicketGetSalix(
@@ -658,7 +647,10 @@ class CollectionFragmentPickerNew(
isMarking = true
viewModel.itemShelvingSaleSetQuantity(
- myGroupList[position].itemShelvingSaleFk, quantity, isItemShelvingSaleEmpty
+ myGroupList[position].itemShelvingSaleFk,
+ quantity,
+ isItemShelvingSaleEmpty,
+ shelvingFk = myGroupList[position].code!!
)
val mySale = sales[position].itemShelvingSaleFk
@@ -869,22 +861,7 @@ class CollectionFragmentPickerNew(
}.setOkButtonTwo(getString(R.string.no)) {
scanRequest()
customDialogThreeButtonsQuantity.dismiss()
- viewModel.itemShelvingSaleExists(
- myGroupList[position].itemShelvingSaleFk,
- myGroupList[position].itemShelvingFk,
- position,
- quantity
- )
- /* if (quantity == 0) {
- viewModel.itemShelvingSaleExists(
- myGroupList[position].itemShelvingSaleFk,
- myGroupList[position].itemShelvingFk,
- position,
- quantity
- )
- } else {
- markLine(position, quantity, true)
- }*/
+ markLine(position, quantity, true)
}.setKoButton(getString(R.string.cancel)) {
scanRequest()
customDialogThreeButtonsQuantity.dismiss()
@@ -1045,7 +1022,7 @@ class CollectionFragmentPickerNew(
getString(R.string.totalsPicker, totalMark, total)
if (totalMark == sales.size) {
- getString(R.string.Coleccióncompleta).toast(this.context, Toast.LENGTH_SHORT)
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
saleAdapter!!.notifyDataSetChanged()
changeTicketState()
@@ -1108,20 +1085,19 @@ class CollectionFragmentPickerNew(
}
}
if (isTicket) {
- val builder = AlertDialog.Builder(context)
- builder.setTitle(getString(R.string.selectLabeltoPrint))
- val labelCount = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
- builder.setItems(labelCount) { dialog, which ->
- viewModel.collectionStickerPrint(
- collectionFk = collection.collectionFk, labelCount = (which + 1)
- )
- (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
- PRINTERNAME
- )).toast(requireContext())
+ val labelDialogHelper = LabelDialogHelper(requireContext())
+ labelDialogHelper.showLabelDialog(
+ onItemSelected = { labelCount ->
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk,
+ labelCount = labelCount
+ )
- }
- val dialog = builder.create()
- dialog.show()
+ (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERNAME
+ )).toast(requireContext())
+ }
+ )
} else {
viewModel.collectionStickerPrint(
collectionFk = collection.collectionFk, null
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt
index d86f1111..779ff998 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPickerPreviousNew.kt
@@ -1,42 +1,39 @@
package es.verdnatura.presentation.view.feature.collection.fragment
-import android.app.AlertDialog
import android.content.Context
-import android.graphics.Color
import android.graphics.drawable.Drawable
-import android.graphics.drawable.GradientDrawable
import android.media.MediaPlayer
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.InputType
-import android.view.Gravity
import android.view.KeyEvent
-import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.ImageView
-import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.gson.Gson
import es.verdnatura.R
import es.verdnatura.databinding.FragmentCollectionNewBinding
-import es.verdnatura.domain.ConstAndValues
import es.verdnatura.domain.ConstAndValues.BASEURLSALIX
import es.verdnatura.domain.ConstAndValues.PREITEMPICKERTEST
import es.verdnatura.domain.ConstAndValues.PREPARED
import es.verdnatura.domain.ConstAndValues.PRESACADOR
+import es.verdnatura.domain.ConstAndValues.PRINTERNAME
import es.verdnatura.domain.ConstAndValues.SACADOR
import es.verdnatura.domain.ConstAndValues.SECTORFK
import es.verdnatura.domain.notNull
+import es.verdnatura.domain.showToastCenterWithBackground
import es.verdnatura.domain.toast
import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.LabelDialogHelper
+import es.verdnatura.presentation.common.OnAddItemClickListener
import es.verdnatura.presentation.common.OnBarcodeRowClickListener
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
@@ -73,6 +70,7 @@ import org.json.JSONObject
2- AL AÑADIR ITEM A A LA COLECCIÓN , EL SACADOR SALEGROUPFK Y SECTORFK SON NULOS.
3-VERIFICAR COLECCIÓN
4-IMPRIMIR
+5-EL SACADOR PUEDE MARCAR PREVIA, EL PRESACADOR NO.
variables:
isVerifiedCollection
@@ -135,6 +133,7 @@ class CollectionFragmentPickerPreviousNew(
}
override fun init() {
+ println("Sacando test")
customDialogList = CustomDialogList(requireContext())
customDialogInput = CustomDialogInput(requireContext())
customDialog = CustomDialog(requireContext())
@@ -223,7 +222,7 @@ class CollectionFragmentPickerPreviousNew(
binding.scanInput.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE || actionId == 0 || actionId == 5) {//ID=0 ACTION_NEXT ID=5 ACTION_UNESPECEFIED)
if (binding.scanInput.text.toString().isNotEmpty()) {
- binding.scanInput.setText(textScanned_filterDouble(binding.scanInput.text!!.toString()))
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
isScanned =
event != null && event.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER
if (itemScanIsQr(binding.scanInput.text.toString())) {
@@ -328,12 +327,16 @@ class CollectionFragmentPickerPreviousNew(
loadPicked.observe(viewLifecycleOwner) { event ->
event.getContentIfNotHandled().notNull {
- myGroupList[positionConfirm].isPicked = 1
- saleAdapter!!.notifyItemChanged(positionConfirm)
- lm!!.scrollToPositionWithOffset(positionConfirm, 0)
- //lm!!.scrollToPositionWithOffset(storedBackPosition + 1, 0)
- setTotalLines()
-
+ if (it) {
+ myGroupList[positionConfirm].isPicked = 1
+ saleAdapter!!.notifyItemChanged(positionConfirm)
+ lm!!.scrollToPositionWithOffset(positionConfirm, 0)
+ //lm!!.scrollToPositionWithOffset(storedBackPosition + 1, 0)
+ setTotalLines()
+ } else {
+ println("updating")
+ updateScreen()
+ }
}
}
@@ -348,24 +351,25 @@ class CollectionFragmentPickerPreviousNew(
}
}
- responseCode.observe(viewLifecycleOwner) {
+ loadResponseCode.observe(viewLifecycleOwner) { event ->
+ event.getContentIfNotHandled().notNull {
- if (it == null) {
- showErrorMessage(text = getString(R.string.codeNotExist))
- if (mperror != null) mperror?.start()
- } else {
- if (checkItemScan(it.toString(), positionConfirm)) {
- scanRequest()
- customDialogList.dismiss()
- mpok?.start()
- markLine(positionConfirm, quantityReserveToCheckItemScan, false)
- } else {
- customDialogList.setValueTwo("")
- showErrorMessage(text = getString(R.string.lineNotExist))
+ if (it == null) {
+ showErrorMessage(text = getString(R.string.codeNotExist))
if (mperror != null) mperror?.start()
+ } else {
+ if (checkItemScan(it.toString(), positionConfirm)) {
+ scanRequest()
+ customDialogList.dismiss()
+ mpok?.start()
+ markLine(positionConfirm, quantityReserveToCheckItemScan, false)
+ } else {
+ customDialogList.setValueTwo("")
+ showErrorMessage(text = getString(R.string.lineNotExist))
+ if (mperror != null) mperror?.start()
+ }
}
}
-
}
}
@@ -402,7 +406,7 @@ class CollectionFragmentPickerPreviousNew(
when (type) {
PREITEMPICKERTEST -> {
myGroupList =
- salesList.sortedWith(compareBy { it.pickingOrderPrevia }.thenBy { it.itemFk })
+ salesList.sortedWith(compareBy { it.pickingOrder }.thenBy { it.itemFk })
}
SACADOR -> {
@@ -464,6 +468,12 @@ class CollectionFragmentPickerPreviousNew(
showDeleteItemShelving(sale)
}
+ }, onAddItemClickListener = object : OnAddItemClickListener {
+
+ override fun onAddItemClickListener(sale: Sale) {
+ customDialogAddItemFromSale(sale)
+ }
+
}, type = type
)
@@ -528,29 +538,65 @@ class CollectionFragmentPickerPreviousNew(
var isFoundSale = false
//Se busca la matricula en las lineas
for (indice in myGroupList.indices) {
+ //como cuando es presacador no hay parent no entrará
+ if (myGroupList[indice].isParent && myGroupList[indice].saleGroupFk == txtscan.toInt()) {
+ isFoundSale = true
+ storedPosition = indice
+ viewModel.itemShelvingSaleSetSaleGroup(txtscan.toInt())
+ break
+ }
if (myGroupList[indice].isPicked != 1 && myGroupList[indice].code != null && myGroupList[indice].code!!.uppercase() == txtscan.uppercase()) {
- mpok!!.start()
isFoundSale = true
printShelvingResult(indice)
break
}
}
- if (!isFoundSale) mperror!!.start()
+ if (!isFoundSale) mperror!!.start() else mpok!!.start()
}
+ private fun markPrevia(saleGroupScanned: String): Boolean {
+
+ try {
+ for (indice in sales.indices) {
+ if (sales[indice].saleGroupFk != null && sales[indice].saleGroupFk == saleGroupScanned.toInt()) {
+ viewModel.itemShelvingSaleSetSaleGroup(saleGroupScanned.toInt())
+ storedPosition = indice
+ mpok!!.start()
+ return true
+
+ }
+ }
+ } catch (ex: Exception) {
+ return false
+ }
+ return false
+ }
+
private fun findSale(txtscan: String, position: Int, sale: Sale) {
storedPosition = position
- if (sale.code!!.uppercase() == txtscan.uppercase()) {
- mpok!!.start()
- printShelvingResult(position)
- } else {
- mperror!!.start()
- }
+ val isOk = markPrevia(txtscan)
+ if (isOk) {
+ //Se ha escanado un ticket y se ha marcado la previa
+ ma.messageWithSound(
+ getString(R.string.previousCollected),
+ isPlayed = false,
+ isError = false,
+ isToasted = true
+ )
+ } else {
+
+ if (sale.code!!.uppercase() == txtscan.uppercase()) {
+ mpok!!.start()
+ printShelvingResult(position)
+ } else {
+ mperror!!.start()
+ }
+ }
}
private fun markLine(position: Int, quantity: Int, isItemShelvingSaleEmpty: Boolean?) {
@@ -565,7 +611,8 @@ class CollectionFragmentPickerPreviousNew(
myGroupList[position].itemShelvingSaleFk,
quantity,
isItemShelvingSaleEmpty = isItemShelvingSaleEmpty,
- sectorFk = if (sectorFk == -1) null else sectorFk
+ sectorFk = if (sectorFk == -1) null else sectorFk,
+ shelvingFk = myGroupList[position].code!!
)
}
// storedBackPosition = position
@@ -708,8 +755,7 @@ class CollectionFragmentPickerPreviousNew(
mpok?.start()
ma.hideKeyboard(customDialogList.getEditTextTwo())
customDialogList.dismiss()
- showTicket(myGroupList[position].ticketFk)
-
+ requireContext().showToastCenterWithBackground(myGroupList[position].ticketFk.toString())
scanRequest()
} else {
@@ -731,24 +777,6 @@ class CollectionFragmentPickerPreviousNew(
}
}
- private fun showTicket(ticketFk: Int) {
- val inflater = LayoutInflater.from(requireContext())
- val layout = inflater.inflate(R.layout.ticket_toast_layout, null)
- val text = layout.findViewById(R.id.toast_text)
- text.text = "$ticketFk"
- text.setTextColor(requireContext().getColor(R.color.verdnatura_orange_salix))
- text.textSize = 18f
- val background = GradientDrawable()
- background.setColor(Color.parseColor("#000000"))
- background.cornerRadius = 16f
- layout.background = background
- val toast = Toast(requireContext())
- toast.duration = Toast.LENGTH_LONG
- toast.view = layout
- toast.setGravity(Gravity.CENTER, 0, 0)
- toast.show()
- }
-
private fun checkItemScan(valueToCheck: String, position: Int): Boolean {
println("CheckItemScan $valueToCheck")
val saleToCheck = myGroupList[position]
@@ -781,12 +809,13 @@ class CollectionFragmentPickerPreviousNew(
}.setOkButtonTwo(getString(R.string.no)) {
scanRequest()
customDialogThreeButtonsQuantity.dismiss()
- viewModel.itemShelvingSaleExists(
- myGroupList[position].itemShelvingSaleFk,
- myGroupList[position].itemShelvingFk,
- position,
- quantity
- )
+ /* viewModel.itemShelvingSaleExists(
+ myGroupList[position].itemShelvingSaleFk,
+ myGroupList[position].itemShelvingFk,
+ position,
+ quantity
+ )*/
+ markLine(position, quantity, true)
/* if (quantity == 0) {
/* viewModel.itemShelvingGet(
@@ -914,6 +943,44 @@ class CollectionFragmentPickerPreviousNew(
}
+ private fun customDialogAddItemFromSale(sale: Sale) {
+
+ customDialogThreeButtonsQuantity.setTitle(
+ "${getString(R.string.ticket)}${sale.ticketFk}"
+ ).setDescription(
+ getString(
+ R.string.addItemQuantity, sale.itemFk
+ )
+ )
+ customDialogThreeButtonsQuantity.setOkButtonAdd(text = getString(R.string.add)) {
+ ticketSelected = sale.ticketFk
+ if (customDialogThreeButtonsQuantity.getValue().isNotEmpty()) {
+ viewModel.collectionAddWithReservation(
+ sale.itemFk,
+ customDialogThreeButtonsQuantity.getValue().toInt(),
+ ticketSelected = sale.ticketFk,
+ saleGroupFk = if (type == PREPARED) null else collection.tickets.find { it.ticketFk == ticketSelected }?.sales?.get(
+ 0
+ )?.saleGroupFk
+ ?: 0,
+ sectorFk = if (type == PREPARED) null else mobileApplication.dataStoreApp.readDataStoreKey(
+ SECTORFK
+ )
+ )
+ customDialogThreeButtonsQuantity.setValue("")
+ customDialogThreeButtonsQuantity.dismiss()
+ hideKeyboardFragment()
+ } else {
+ getString(R.string.indicateQuantity).toast(requireContext())
+ }
+
+ }.setKoButton(getString(R.string.cancel)) {
+ scanRequest()
+ customDialogThreeButtonsQuantity.dismiss()
+ }.show()
+ customDialogThreeButtonsQuantity.getEditText().requestFocus()
+ }
+
private fun hideKeyboardFragment() {
Handler(Looper.getMainLooper()).postDelayed({
val inputMethodManager =
@@ -944,7 +1011,7 @@ class CollectionFragmentPickerPreviousNew(
binding.mainToolbar.toolbarSubtitle.text =
getString(R.string.totalsPicker, totalMark, myGroupList.size)
if (totalMark == myGroupList.size) {
- getString(R.string.Coleccióncompleta).toast(this.context, Toast.LENGTH_SHORT)
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
when (type) {
PREPARED -> {
tickets.forEach {
@@ -1149,20 +1216,18 @@ class CollectionFragmentPickerPreviousNew(
}
}
if (isTicket) {
- val builder = AlertDialog.Builder(context)
- builder.setTitle(getString(R.string.selectLabeltoPrint))
- val labelCount = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
- builder.setItems(labelCount) { dialog, which ->
- viewModel.collectionStickerPrint(
- collectionFk = collection.collectionFk, labelCount = (which + 1)
- )
- (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
- ConstAndValues.PRINTERNAME
- )).toast(requireContext())
-
- }
- val dialog = builder.create()
- dialog.show()
+ val labelDialogHelper = LabelDialogHelper(requireContext())
+ labelDialogHelper.showLabelDialog(
+ onItemSelected = { labelCount ->
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk,
+ labelCount = labelCount
+ )
+ (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERNAME
+ )).toast(requireContext())
+ }
+ )
} else {
viewModel.collectionStickerPrint(
collectionFk = collection.collectionFk, null
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt
index 65a53e99..702e9bba 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionFragmentPreChecker.kt
@@ -1,6 +1,5 @@
package es.verdnatura.presentation.view.feature.collection.fragment
-import android.app.AlertDialog
import android.content.Context
import android.graphics.drawable.Drawable
import android.media.MediaPlayer
@@ -38,6 +37,7 @@ import es.verdnatura.domain.toLong
import es.verdnatura.domain.toast
import es.verdnatura.presentation.base.BaseFragment
import es.verdnatura.presentation.common.ItemScanned
+import es.verdnatura.presentation.common.LabelDialogHelper
import es.verdnatura.presentation.common.OnBarcodeRowClickListener
import es.verdnatura.presentation.common.OnMistakeClickListener
import es.verdnatura.presentation.common.OnOptionsSelectedListener
@@ -205,8 +205,8 @@ class CollectionFragmentPreChecker(
val listIcons: ArrayList = ArrayList()
val iconPrint = ImageView(context)
iconPrint.setImageResource(R.drawable.ic_print_black_24dp)
- val iconAdd = ImageView(context)
- iconAdd.setImageResource(R.drawable.ic_playlist_add_black_24dp)
+ // val iconAdd = ImageView(context)
+ // iconAdd.setImageResource(R.drawable.ic_playlist_add_black_24dp)
val iconViewCollection = ImageView(context)
iconViewCollection.setImageResource(R.drawable.ic_collection)
val iconWorker = ImageView(context)
@@ -220,7 +220,7 @@ class CollectionFragmentPreChecker(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
iconPrint.tooltipText = getTooltip(R.drawable.ic_print_black_24dp)
- iconAdd.tooltipText = getTooltip(R.drawable.ic_playlist_add_black_24dp)
+ // iconAdd.tooltipText = getTooltip(R.drawable.ic_playlist_add_black_24dp)
iconViewCollection.tooltipText = getTooltip(R.drawable.ic_collection)
iconPhone.tooltipText = getTooltip(R.drawable.phone_call)
iconParking.tooltipText = getTooltip(R.drawable.ic_local_parking_black_24dp)
@@ -237,7 +237,7 @@ class CollectionFragmentPreChecker(
listIcons.add(iconWorker)
}
- listIcons.add(iconAdd)
+ // listIcons.add(iconAdd)
if (type == SACADOR) {
listIcons.add(iconUpdate)
@@ -255,7 +255,7 @@ class CollectionFragmentPreChecker(
when (item) {
iconPrint.drawable -> print()
- iconAdd.drawable -> addItem()
+ // iconAdd.drawable -> addItem()
iconWorker.drawable -> showUser()
iconUpdate.drawable -> updateScreen()
iconParking.drawable -> pasillerosItemClickListener?.onPasillerosItemClickListener(
@@ -362,7 +362,7 @@ class CollectionFragmentPreChecker(
if (!binding.scanInput.text.toString().isNullOrEmpty()) {
//sergio:para ver si ha marcado dos veces el mismo ticket
- binding.scanInput.setText(textScanned_filterDouble(binding.scanInput.text!!.toString()))
+ binding.scanInput.setText(textScannedFilterDouble(binding.scanInput.text!!.toString()))
//de momento solo está el qr de artículo
isScanned =
@@ -399,10 +399,10 @@ class CollectionFragmentPreChecker(
it.sales.forEach { at ->
if (at.saleGroupFk != saleGroup) {
viewModel.setParking(
- ticketFk = at.saleGroupFk.toInt(),
+ ticketFk = at.saleGroupFk!!.toInt(),
parking = myQr.more
)
- saleGroup = at.saleGroupFk
+ saleGroup = at.saleGroupFk!!
}
}
@@ -964,15 +964,16 @@ class CollectionFragmentPreChecker(
val isOnReservationMode = mobileApplication.dataStoreApp.readDataStoreKey(
ConstAndValues.RESERVATIONMODE
- )
- //lolass
- if (isOnReservationMode) {
+ ) || (mobileApplication.dataStoreApp.readDataStoreKey(
+ ConstAndValues.SECTORISONRESERVATIONMODE
+ ) == true)
- sales = salesList.filter {
+ sales = if (isOnReservationMode) {
+ salesList.filter {
it.sectorFk == mobileApplication.dataStoreApp.readDataStoreKey(SECTORFK)
}.sortedWith(compareBy({ it.saleOrder }))
} else {
- sales = salesList.filter {
+ salesList.filter {
it.sectorFk == mobileApplication.dataStoreApp.readDataStoreKey(SECTORFK)
}.sortedWith(compareBy({ it.picked }))
}
@@ -983,7 +984,7 @@ class CollectionFragmentPreChecker(
saleAdapter =
SaleAdapter(
- sales,
+ sales as MutableList,
pasillerosItemClickListener!!,
object : OnQuantityClickListener {
@@ -2014,7 +2015,7 @@ class CollectionFragmentPreChecker(
"" + totalMark + "/" + total
if (totalMark == sales.size) {
- getString(R.string.Coleccióncompleta).toast(this.context, Toast.LENGTH_SHORT)
+ getString(R.string.completCollection).toast(this.context, Toast.LENGTH_SHORT)
saleAdapter!!.notifyDataSetChanged()
if (!goBack)
@@ -2266,21 +2267,19 @@ class CollectionFragmentPreChecker(
}
}
if (isTicket) {
- val builder = AlertDialog.Builder(context)
- builder.setTitle(getString(R.string.selectLabeltoPrint))
- val labelCount = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
- builder.setItems(labelCount) { dialog, which ->
- viewModel.collectionStickerPrint(
- collectionFk = collection.collectionFk,
- labelCount = (which + 1)
- )
- (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
- PRINTERNAME
- )).toast(requireContext())
+ val labelDialogHelper = LabelDialogHelper(requireContext())
+ labelDialogHelper.showLabelDialog(
+ onItemSelected = { labelCount ->
+ viewModel.collectionStickerPrint(
+ collectionFk = collection.collectionFk,
+ labelCount = labelCount
+ )
- }
- val dialog = builder.create()
- dialog.show()
+ (getString(R.string.Imprimiendo) + mobileApplication.dataStoreApp.readDataStoreKey(
+ PRINTERNAME
+ )).toast(requireContext())
+ }
+ )
} else {
viewModel.collectionStickerPrint(
collectionFk = collection.collectionFk,
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt
index 10bf08db..cad89ad9 100644
--- a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModel.kt
@@ -180,8 +180,8 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) {
val loadAddNew: LiveData> = _responseNew.map { Event(it) }
private val _responseCode by lazy { MutableLiveData() }
- val responseCode: LiveData
- get() = _responseCode
+ val responseCode: LiveData = _responseCode
+ val loadResponseCode: LiveData> = _responseCode.map { Event(it) }
private val _responseIncQuantity by lazy { MutableLiveData() }
val responseIncQuantity: LiveData
@@ -431,10 +431,18 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) {
itemShelvingSaleFk: Int,
quantity: Int,
isItemShelvingSaleEmpty: Boolean?,
- sectorFk: Int? = null
+ sectorFk: Int? = null,
+ shelvingFk: String
) {
salix.itemShelvingSaleSetquantitySalix(
- params = arrayListOf(itemShelvingSaleFk, quantity, isItemShelvingSaleEmpty, sectorFk)
+ params = arrayListOf(
+ itemShelvingSaleFk,
+ quantity,
+ isItemShelvingSaleEmpty,
+ sectorFk,
+ shelvingFk
+
+ ).formatWithQuotes()
).enqueue(object : SalixCallback(context) {
override fun onSuccess(response: Response) {
@@ -444,6 +452,12 @@ class CollectionViewModel(val context: Context) : BaseViewModel(context) {
_responseCollectionAddItem.value = true
}
+
+ override fun onError(t: Throwable) {
+ _responseConfirmReservedItemShelvingSale.value = false
+ super.onError(t)
+
+ }
})
}
diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModelCheckerPreviosNew.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModelCheckerPreviosNew.kt
new file mode 100644
index 00000000..9fcb7339
--- /dev/null
+++ b/app/src/main/java/es/verdnatura/presentation/view/feature/collection/fragment/CollectionViewModelCheckerPreviosNew.kt
@@ -0,0 +1,922 @@
+package es.verdnatura.presentation.view.feature.collection.fragment
+
+import android.content.Context
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.map
+import com.google.gson.JsonObject
+import es.verdnatura.MobileApplication
+import es.verdnatura.domain.SalixCallback
+import es.verdnatura.domain.formatWithQuotes
+import es.verdnatura.domain.toast
+import es.verdnatura.domain.userCases.GetItemFromBarcodeUseCase
+import es.verdnatura.presentation.base.BaseViewModel
+import es.verdnatura.presentation.base.getMessageFromAllResponse
+import es.verdnatura.presentation.base.nameofFunction
+import es.verdnatura.presentation.common.Event
+import es.verdnatura.presentation.common.ResponseItemExistsItemShelvingSale
+import es.verdnatura.presentation.common.ResponseItemVO
+import es.verdnatura.presentation.common.SaleTrackingReplaceSalix
+import es.verdnatura.presentation.common.SaleTrackingSalix
+import es.verdnatura.presentation.common.TicketState
+import es.verdnatura.presentation.view.feature.collection.ItemVO
+import es.verdnatura.presentation.view.feature.collection.SalixSaleQuantity
+import es.verdnatura.presentation.view.feature.collection.mapper.map
+import es.verdnatura.presentation.view.feature.sacador.model.CollectionTicket
+import es.verdnatura.presentation.view.feature.sacador.model.CollectionVO
+import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeListVO
+import es.verdnatura.presentation.view.feature.sacador.model.MistakeTypeVO
+import es.verdnatura.presentation.view.feature.sacador.model.PlacementSupplyListVO
+import es.verdnatura.presentation.view.feature.sacador.model.PlacementSupplyVO
+import es.verdnatura.presentation.view.feature.workermistake.model.SaleMistakeSalix
+import es.verdnatura.presentation.view.feature.workermistake.model.SaleTrackingDelSalix
+import retrofit2.Response
+
+class CollectionViewModelCheckerPreviosNew(val context: Context) : BaseViewModel(context) {
+ private val getItemFromBarcodeUseCase = GetItemFromBarcodeUseCase(salix)
+ private val contextApp = context
+
+ private val _responseState by lazy { MutableLiveData() }
+ val responseState: LiveData
+ get() = _responseState
+
+ private val _collectionTicketList by lazy { MutableLiveData() }
+ val collectionTicketList: LiveData
+ get() = _collectionTicketList
+
+ private val _responseExistsItemShelvingSale by lazy { MutableLiveData() }
+ val responseExistsItemShelvingSale: LiveData
+ get() = _responseExistsItemShelvingSale
+
+ val loadExistsResponse: LiveData> =
+ _responseExistsItemShelvingSale.map { Event(it) }
+
+ private val _collectionTicketSalix by lazy { MutableLiveData() }
+ val collectionTicketSalix: LiveData
+ get() = _collectionTicketSalix
+
+ private val _getSalesResponse by lazy { MutableLiveData() }
+ val getSalesResponse: LiveData
+ get() = _getSalesResponse
+
+ val loadCollectionTicketSalix: LiveData> =
+ _collectionTicketSalix.map { Event(it) }
+
+ private val _placementSuppleyList by lazy { MutableLiveData() }
+ val placementSuppleyList: LiveData
+ get() = _placementSuppleyList
+
+ private val _response by lazy { MutableLiveData() }
+ val response: LiveData
+ get() = _response
+
+ private val _responseSaleMistakeAdd by lazy { MutableLiveData() }
+ val responseSaleMistakeAdd: LiveData
+ get() = _responseSaleMistakeAdd
+ val loadSaleMistakeAdd: LiveData> =
+ _responseSaleMistakeAdd.map { Event(it) }
+
+ private val _responseItemShelvingSaleSupplyAdd by lazy { MutableLiveData() }
+ val responseItemShelvingSaleSupplyAdd: LiveData
+ get() = _responseItemShelvingSaleSupplyAdd
+
+ private val _responseSaleReplace by lazy { MutableLiveData() }
+ val responseSaleReplace: LiveData
+ get() = _responseSaleReplace
+
+ private val _responseSaleTracking_mark by lazy { MutableLiveData() }
+ val responseSaleTracking_mark: LiveData
+ get() = _responseSaleTracking_mark
+
+ private val _responseConfirmReservedItemShelvingSale by lazy { MutableLiveData() }
+ val responseConfirmReservedItemShelvingSale: LiveData
+ get() = _responseConfirmReservedItemShelvingSale
+
+ val loadPicked: LiveData> =
+ _responseConfirmReservedItemShelvingSale.map { Event(it) }
+
+ private val _responseItemShelvingSale by lazy { MutableLiveData() }
+ val responseItemShelvingSale: LiveData
+ get() = _responseItemShelvingSale
+
+ private val _responseItemShelvingSaleUnPicked by lazy { MutableLiveData() }
+ val responseItemShelvingSaleUnPicked: LiveData
+ get() = _responseItemShelvingSaleUnPicked
+
+ val loadUnpicked: LiveData> = _responseItemShelvingSaleUnPicked.map { Event(it) }
+
+ private val _responseCollectionAddItem by lazy { MutableLiveData() }
+ val responseCollectionAddItem: LiveData
+ get() = _responseCollectionAddItem
+
+ private val _responseParking by lazy { MutableLiveData() }
+ val responseParking: LiveData
+ get() = _responseParking
+
+ val loadParking: LiveData> = _responseParking.map { Event(it) }
+
+ private val _responsePrint by lazy { MutableLiveData() }
+ val responsePrint: LiveData
+ get() = _responsePrint
+
+ private val _responseDel by lazy { MutableLiveData() }
+ val responseDel: LiveData
+ get() = _responseDel
+
+ private val _responseItemShelvingUpdate by lazy { MutableLiveData() }
+ val responseItemShelvingUpdate: LiveData
+ get() = _responseItemShelvingUpdate
+
+ private val _responseTicketState by lazy { MutableLiveData() }
+ val responseTicketState: LiveData = _responseTicketState
+
+ val loadTicketState: LiveData> = _responseTicketState.map { Event(it) }
+
+ private val _responseUsedShelves by lazy { MutableLiveData() }
+ val responseUsedShelves: LiveData
+ get() = _responseUsedShelves
+
+ private val _responseSaleGroup by lazy { MutableLiveData() }
+ val responseSaleGroup: LiveData
+ get() = _responseSaleGroup
+
+ val loadResponseSaleGroup: LiveData> =
+ _responseSaleGroup.map { Event(it) }
+
+ private val _responseItemShelvingSaleGroup by lazy { MutableLiveData() }
+ val responseItemShelvingSaleGroup: LiveData
+ get() = _responseItemShelvingSaleGroup
+
+ private val _responseTicketClosure by lazy { MutableLiveData() }
+ val responseTicketClosure: LiveData
+ get() = _responseTicketClosure
+ val loadTicketClousure: LiveData> =
+ _responseTicketClosure.map { Event(it) }
+
+ private val _responseCollectionUnchecked by lazy { MutableLiveData() }
+ val responseCollectionUnchecked: LiveData
+ get() = _responseCollectionUnchecked
+
+ private val _responseSplit by lazy { MutableLiveData