Ya casiii

This commit is contained in:
JaredAyala
2026-05-23 00:05:10 -06:00
parent ab11b001a4
commit ac0a312d58
20 changed files with 960 additions and 56 deletions

View File

@@ -0,0 +1,94 @@
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()
}
}
}