From 89a4cff1edb0e033282be1a374078683a43a2a09 Mon Sep 17 00:00:00 2001 From: Sergio De la torre Date: Wed, 10 Jul 2024 10:59:10 +0200 Subject: [PATCH] feat Ticketobservation refs #7541 --- .../java/es/verdnatura/domain/SalixService.kt | 6 + .../delivery/activity/SignedActivity.kt | 162 +++++++++++++----- .../feature/delivery/model/ClientTicket.kt | 3 +- .../delivery/viewmodels/DeliveryViewModel.kt | 19 +- app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 8 files changed, 144 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/es/verdnatura/domain/SalixService.kt b/app/src/main/java/es/verdnatura/domain/SalixService.kt index 92896985..81202cee 100644 --- a/app/src/main/java/es/verdnatura/domain/SalixService.kt +++ b/app/src/main/java/es/verdnatura/domain/SalixService.kt @@ -26,6 +26,7 @@ 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.RouteDelivery import es.verdnatura.presentation.view.feature.delivery.model.RouteInfo +import es.verdnatura.presentation.view.feature.delivery.model.TicketObservation import es.verdnatura.presentation.view.feature.diadeventa.model.ItemShelvingSaleDate import es.verdnatura.presentation.view.feature.historicoarticulo.model.ItemHistoricoVO import es.verdnatura.presentation.view.feature.historicoshelving.model.ItemShelvingLog @@ -231,6 +232,11 @@ interface SalixService { @Body params: Any ): Call + @GET("TicketObservations") + fun getTicketObservations( + @Query("filter") filter: String, + ): Call> + @POST("TicketObservations/upsertWithWhere") fun updateNoteFromDropOff( @Query("where") where: Any? = null, diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/activity/SignedActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/activity/SignedActivity.kt index bbd1bd1a..fdb2f7e6 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/activity/SignedActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/activity/SignedActivity.kt @@ -3,10 +3,14 @@ package es.verdnatura.presentation.view.feature.delivery.activity import android.Manifest import android.content.pm.PackageManager import android.graphics.Bitmap +import android.graphics.drawable.Drawable import android.location.Location +import android.view.View +import android.widget.ImageView import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityCompat import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.gms.location.LocationResult import com.google.android.gms.location.LocationServices import com.google.gson.Gson @@ -18,11 +22,18 @@ import es.verdnatura.domain.toast import es.verdnatura.presentation.base.BaseActivity import es.verdnatura.presentation.base.LocationUpdateCallback import es.verdnatura.presentation.base.database +import es.verdnatura.presentation.common.GeneralAdapter +import es.verdnatura.presentation.common.GeneralItem +import es.verdnatura.presentation.common.OnGeneralItemRowClickListener +import es.verdnatura.presentation.common.OnOptionsSelectedListener import es.verdnatura.presentation.common.SignListener +import es.verdnatura.presentation.common.ToolBarAdapterTooltip import es.verdnatura.presentation.view.component.CustomDialog +import es.verdnatura.presentation.view.component.CustomDialogList import es.verdnatura.presentation.view.feature.delivery.model.ClientTicketSalix import es.verdnatura.presentation.view.feature.delivery.model.MyLocation import es.verdnatura.presentation.view.feature.delivery.model.SignedTickets +import es.verdnatura.presentation.view.feature.delivery.model.TicketObservation import es.verdnatura.presentation.view.feature.delivery.viewmodels.DeliveryViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -44,9 +55,11 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba private lateinit var ticketsSet: HashSet private lateinit var clientTicket: ClientTicketSalix private lateinit var db: DeliveryDatabase + private lateinit var deliveryViewModel: DeliveryViewModel + private lateinit var listClaimTicketObservations : List override fun init() { - + deliveryViewModel = DeliveryViewModel(application as MobileApplication) when (intent.getStringExtra("objectSigned")) { "ticket" -> { @@ -58,28 +71,53 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba } } + setEvents() (application as MobileApplication).setSignListener(this) db = database(this.applicationContext) + } private fun setToolBar() { - binding.mainToolbar.toolbarTitle.text = getString(R.string.sign) + // binding.mainToolbar.toolbarIcons.visibility = View.GONE + + val listIcons: ArrayList = ArrayList() + val iconObservation = ImageView(this) + iconObservation.setImageResource(R.drawable.ic_claim_ui) + iconObservation.tooltipText = "Muestra las observaciones de reclamaciones" + listIcons.add(iconObservation) + + + + binding.mainToolbar.toolbarIcons.adapter = + ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { + + override fun onOptionsItemSelected(item: Drawable) { + when (item) { + iconObservation.drawable -> { + showNotes(listClaimTicketObservations) + } + } + } + + }) + + binding.mainToolbar.toolbarIcons.layoutManager = + LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) + } private fun showDialogConfirm() { val customDialog = CustomDialog(this) customDialog.setTitle(getString(R.string.confirm)) - .setDescription(getString(R.string.sureSign)) - .setOkButton(getString(R.string.ok)) { + .setDescription(getString(R.string.sureSign)).setOkButton(getString(R.string.ok)) { reviewDistance() customDialog.dismiss() }.setKoButton(getString(R.string.cancel)) { customDialog.dismiss() - } - .show() + }.show() } private fun reviewDistance() { @@ -98,13 +136,11 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba if (locationCurrent.distanceTo(locationClient) > 100) { val customDialogDistance = CustomDialog(this) - customDialogDistance.setTitle(getString(R.string.confirm)) - .setDescription( + customDialogDistance.setTitle(getString(R.string.confirm)).setDescription( getString(R.string.locationDiferent) + getString(R.string.distance) + locationCurrent.distanceTo( locationClient ) - ) - .setOkButton(getString(R.string.keep)) { + ).setOkButton(getString(R.string.keep)) { uploadImage(MyLocation(locationClient.longitude, locationClient.latitude)) customDialogDistance.dismiss() @@ -112,8 +148,7 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba }.setKoButton(getString(R.string.modify)) { uploadImage(lastLocationCurrent) customDialogDistance.dismiss() - } - .show() + }.show() } else { uploadImage(MyLocation(locationClient.longitude, locationClient.latitude)) } @@ -133,39 +168,80 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba private fun setViews(clientTicketList: ClientTicketSalix) { - if (clientTicketList != null) { + binding.nameAddress.text = clientTicketList.nickname + ticketsSet = HashSet() + var sum = 0 + for (exp in clientTicketList.tickets) { + ticketsSet.add(exp.Id) + sum += exp.Packages - binding.nameAddress.text = clientTicketList.nickname - ticketsSet = HashSet() - var sum = 0 - for (exp in clientTicketList.tickets) { - ticketsSet.add(exp.Id) - sum += exp.Packages - } - binding.idTickets.text = ticketsSet.toList().toString() - binding.totalPackages.text = sum.toString() } + //Tarea 7541 + + /* deliveryViewModel.getTicketObservations(ticketsSet.toList()) + deliveryViewModel.responseObservations.observe(this) { + listClaimTicketObservations = it + if (it.isNotEmpty()) { + showNotes(it) + setToolBar() + } + }*/ + binding.idTickets.text = ticketsSet.toList().toString() + binding.totalPackages.text = sum.toString() + + } + + private fun showNotes(listClaimObservations: List) { + val ticketNotes: MutableList = mutableListOf() + //Tarea 6275 + for (item in listClaimObservations) { + + ticketNotes.add( + GeneralItem( + text = "${item.ticketFk}:${item.description}", code = "" + ) + ) + } + val customDialogList = CustomDialogList(this) + + customDialogList.setValueVisibility(View.GONE) + customDialogList.setTitle(getString(R.string.notesClaim)).setKoButton( + getString( + R.string.accept + ) + ) { + customDialogList.dismiss() + }.hideDialog().show() + + val listObservationsAdapter = + GeneralAdapter(ticketNotes, object : OnGeneralItemRowClickListener { + override fun OnGeneralItemRowClickListener(item: GeneralItem) { + + customDialogList.dismiss() + } + + }) + + customDialogList.getRecyclerView().adapter = listObservationsAdapter + customDialogList.getRecyclerView().layoutManager = + LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) } private fun uploadImage(location: MyLocation) { - val deliveryViewModel = DeliveryViewModel(application as MobileApplication) val drawing = binding.ink.bitmap - val file = File(BitMapToString(drawing, tickets = ticketsSet.toList())) + val file = File(bitMapToString(drawing, tickets = ticketsSet.toList())) val queryMap: MutableMap = HashMap() queryMap["tickets"] = ticketsSet.toString() queryMap["location"] = Gson().toJson(location) - queryMap["signedTime"] = - SimpleDateFormat("yyyy-LL-dd HH:mm", Locale.getDefault()).format( - Date() - ) + queryMap["signedTime"] = SimpleDateFormat("yyyy-LL-dd HH:mm", Locale.getDefault()).format( + Date() + ) - var mySign = - SignedTickets( - queryMap, - baseContext.externalCacheDir.toString() + "/" + file.name - ) + val mySign = SignedTickets( + queryMap, baseContext.externalCacheDir.toString() + "/" + file.name + ) deliveryViewModel.saveSign( mySign.fileName, mySign.queryMapList, @@ -189,7 +265,7 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba } @Throws(IOException::class) - fun BitMapToString(bitmap: Bitmap, tickets: List): String { + fun bitMapToString(bitmap: Bitmap, tickets: List): String { var fileNameSign = baseContext.externalCacheDir.toString() + "/sign" for (ticket in tickets) { fileNameSign += "_$ticket" @@ -213,9 +289,7 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba private fun setLocation() { ActivityCompat.requestPermissions( - this, - arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), - 111 + this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 111 ) fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) locationUpdateCallback = this @@ -224,9 +298,7 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba } override fun onRequestPermissionsResult( - requestCode: Int, - permissions: Array, - grantResults: IntArray + requestCode: Int, permissions: Array, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) @@ -243,7 +315,7 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba setMessage(getString(R.string.manuallyPermission)) setPositiveButton( "Aceptar" - ) { dialog, which -> + ) { _, _ -> finish() } @@ -261,18 +333,16 @@ class SignedActivity : BaseActivity(), LocationUpdateCallba setMessage(getString(R.string.advicePermission)) setPositiveButton( getString(R.string.accept) - ) { dialog, which -> + ) { dialog, _ -> dialog.dismiss() ActivityCompat.requestPermissions( - activity, - arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), - 111 + activity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 111 ) } setNegativeButton( getString(R.string.cancel) - ) { dialog, which -> + ) { _, _ -> finish() } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/ClientTicket.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/ClientTicket.kt index a3a4cc84..376def87 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/ClientTicket.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/model/ClientTicket.kt @@ -57,8 +57,7 @@ data class Ticket( data class TicketObservation ( var ticketFk: Long, - var description: String, - var observationTypeFk: Int + var description: String ) @Entity(tableName = "signedPending") diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt index 4f541677..3aae4786 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/delivery/viewmodels/DeliveryViewModel.kt @@ -23,6 +23,7 @@ import es.verdnatura.presentation.view.feature.delivery.model.RouteDeliveryList import es.verdnatura.presentation.view.feature.delivery.model.RouteInfo import es.verdnatura.presentation.view.feature.delivery.model.RouteList import es.verdnatura.presentation.view.feature.delivery.model.Ticket +import es.verdnatura.presentation.view.feature.delivery.model.TicketObservation import okhttp3.MediaType import okhttp3.MultipartBody import okhttp3.RequestBody @@ -76,6 +77,8 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { val responseNotes: LiveData = _responseNotes var loadNotes: LiveData> = _responseNotes.map { Event(it) } + private val _responseObservations by lazy { MutableLiveData>() } + val responseObservations: LiveData> = _responseObservations private val _expeditionList by lazy { MutableLiveData() } val expeditionList: LiveData = _expeditionList @@ -87,6 +90,20 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { private val _responseStateList by lazy { MutableLiveData() } val responseStateList: LiveData = _responseStateList + fun getTicketObservations( + listTickets: List + + ) { + salix.getTicketObservations( + filter = """{ "where": { "observationTypeFk": 11,"ticketFk": { "inq": $listTickets } }, + | "fields":["description", "ticketFk"]}""".trimMargin() + ).enqueue(object : SalixCallback>(context) { + override fun onSuccess(response: Response>) { + _responseObservations.value = response.body() + + } + }) + } fun companyGetFiscaldata( userId: Int @@ -302,8 +319,6 @@ class DeliveryViewModel(val context: Context) : BaseViewModel(context) { }) } - - fun updateNotesFromDropOff( ticketFK: Long, description: String diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3f133d4a..816c6e72 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -836,5 +836,6 @@ Error al introducir cantidad %1$s %2$s La impresora seleccionada es solo para emergencias.¿Estás seguro? + Notas de reclamaciones diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c0506e5d..d7895b04 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -836,5 +836,6 @@ Error al introducir cantidad %1$s %2$s La impresora seleccionada es solo para emergencias.¿Estás seguro? + Notas de reclamaciones diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 0e513929..9d191e70 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -836,5 +836,6 @@ Error al introducir cantidad %1$s %2$s La impresora seleccionada es solo para emergencias.¿Estás seguro? + Notas de reclamaciones diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e0dd7cd8..6a63f64f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -838,5 +838,6 @@ Error al introducir cantidad %1$s %2$s La impresora seleccionada es solo para emergencias.¿Estás seguro? + Notas de reclamaciones