94 lines
3.6 KiB
Kotlin
94 lines
3.6 KiB
Kotlin
package com.example.basurapp
|
|
|
|
import android.os.Bundle
|
|
import android.view.View
|
|
import android.widget.ArrayAdapter
|
|
import android.widget.Toast
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.lifecycle.lifecycleScope
|
|
import com.example.basurapp.api.ApiClient
|
|
import com.example.basurapp.databinding.ActivityAddAddressBinding
|
|
import com.example.basurapp.models.Address
|
|
import com.example.basurapp.models.ColoniaRuta
|
|
import com.google.firebase.auth.FirebaseAuth
|
|
import com.google.firebase.firestore.FirebaseFirestore
|
|
import kotlinx.coroutines.launch
|
|
|
|
class AddAddressActivity : AppCompatActivity() {
|
|
|
|
private lateinit var binding: ActivityAddAddressBinding
|
|
private val auth: FirebaseAuth by lazy { FirebaseAuth.getInstance() }
|
|
private val db: FirebaseFirestore by lazy { FirebaseFirestore.getInstance() }
|
|
|
|
private var coloniasList: List<ColoniaRuta> = emptyList()
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
binding = ActivityAddAddressBinding.inflate(layoutInflater)
|
|
setContentView(binding.root)
|
|
|
|
loadColonias()
|
|
|
|
binding.btnSave.setOnClickListener {
|
|
saveAddress()
|
|
}
|
|
}
|
|
|
|
private fun loadColonias() {
|
|
binding.progressBar.visibility = View.VISIBLE
|
|
lifecycleScope.launch {
|
|
try {
|
|
coloniasList = ApiClient.api.getColoniasRutas()
|
|
val names = coloniasList.map { it.colonia }
|
|
val adapter = ArrayAdapter(this@AddAddressActivity, android.R.layout.simple_dropdown_item_1line, names)
|
|
binding.actvColonia.setAdapter(adapter)
|
|
binding.progressBar.visibility = View.GONE
|
|
} catch (e: Exception) {
|
|
binding.progressBar.visibility = View.GONE
|
|
Toast.makeText(this@AddAddressActivity, "Error cargando colonias: ${e.localizedMessage}", Toast.LENGTH_LONG).show()
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun saveAddress() {
|
|
val street = binding.etStreet.text?.toString()?.trim().orEmpty()
|
|
val number = binding.etNumber.text?.toString()?.trim().orEmpty()
|
|
val coloniaSelected = binding.actvColonia.text?.toString()?.trim().orEmpty()
|
|
val reference = binding.etReference.text?.toString()?.trim().orEmpty()
|
|
|
|
if (street.isEmpty() || number.isEmpty() || coloniaSelected.isEmpty()) {
|
|
Toast.makeText(this, "Completa calle, número y colonia", Toast.LENGTH_SHORT).show()
|
|
return
|
|
}
|
|
|
|
// Validar que la colonia exista en el catálogo
|
|
val validColonia = coloniasList.any { it.colonia.equals(coloniaSelected, ignoreCase = true) }
|
|
if (!validColonia) {
|
|
Toast.makeText(this, "Selecciona una colonia válida de la lista", Toast.LENGTH_SHORT).show()
|
|
return
|
|
}
|
|
|
|
val uid = auth.currentUser?.uid ?: return
|
|
val addressId = db.collection("addresses").document().id
|
|
val address = Address(
|
|
id = addressId,
|
|
userId = uid,
|
|
street = street,
|
|
number = number,
|
|
neighborhood = coloniaSelected,
|
|
city = "Celaya",
|
|
reference = reference
|
|
)
|
|
|
|
binding.btnSave.isEnabled = false
|
|
db.collection("addresses").document(addressId).set(address)
|
|
.addOnSuccessListener {
|
|
Toast.makeText(this, "Dirección guardada", Toast.LENGTH_SHORT).show()
|
|
finish()
|
|
}
|
|
.addOnFailureListener { e ->
|
|
binding.btnSave.isEnabled = true
|
|
Toast.makeText(this, e.localizedMessage ?: "Error", Toast.LENGTH_SHORT).show()
|
|
}
|
|
}
|
|
} |