-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #143 from G10-ISPC/Developer
Developer
- Loading branch information
Showing
71 changed files
with
1,774 additions
and
1,332 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"nm":"Main Scene","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/creator 1.30.0"},"layers":[{"ty":4,"nm":"Progress Bar","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250]},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":0},{"s":[360],"t":60}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"Progress Bar","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-87.47614999999999,0],[0,-87.47614999999999],[87.47614999999999,0],[0,87.47614999999999]],"o":[[87.47614999999999,0],[0,87.47614999999999],[-87.47614999999999,0],[0,-87.47614999999999]],"v":[[0,-158.5],[158.5,0],[0,158.5],[-158.5,0]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":32},"c":{"a":0,"k":[0.5294,0.2745,1]}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Path","e":{"a":0,"k":6},"o":{"a":0,"k":0},"s":{"a":0,"k":22},"m":1}],"ind":1},{"ty":4,"nm":"Progress Bar","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250]},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":0},{"s":[360],"t":60}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"Progress Bar","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-87.47614999999999,0],[0,-87.47614999999999],[87.47614999999999,0],[0,87.47614999999999]],"o":[[87.47614999999999,0],[0,87.47614999999999],[-87.47614999999999,0],[0,-87.47614999999999]],"v":[[0,-158.5],[158.5,0],[0,158.5],[-158.5,0]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":32},"c":{"a":0,"k":[0.7294,0.6078,0.9882]}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Path","e":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[22],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":30},{"s":[22],"t":60}]},"s":{"a":0,"k":16},"m":1}],"ind":2},{"ty":4,"nm":"Progress Track","sr":1,"st":0,"op":150,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[250,250]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"Progress Track","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-87.47614999999999,0],[0,-87.47614999999999],[87.47614999999999,0],[0,87.47614999999999]],"o":[[87.47614999999999,0],[0,87.47614999999999],[-87.47614999999999,0],[0,-87.47614999999999]],"v":[[0,-158.5],[158.5,0],[0,158.5],[-158.5,0]]}}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":32},"c":{"a":0,"k":[0.8392,0.9961,0.9451]}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Path","e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}],"ind":3}],"v":"5.7.0","fr":30,"op":60,"ip":0,"assets":[]} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
146 changes: 78 additions & 68 deletions
146
app/src/main/java/com/example/riccoapp/AdminActivity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,102 +1,112 @@ | ||
package com.example.riccoapp; | ||
|
||
import android.content.SharedPreferences; | ||
import android.os.Bundle; | ||
import android.view.View; | ||
import android.widget.Button; | ||
import android.widget.EditText; | ||
import android.widget.Toast; | ||
import androidx.appcompat.app.AppCompatActivity; | ||
import androidx.lifecycle.ViewModelProvider; | ||
import androidx.recyclerview.widget.LinearLayoutManager; | ||
import androidx.recyclerview.widget.RecyclerView; | ||
import com.example.riccoapp.adapter.ProductAdapterAdmin; | ||
import com.example.riccoapp.api.Product; | ||
import java.util.ArrayList; | ||
|
||
public class AdminActivity extends AppCompatActivity implements EditarProductoDialog.OnProductoEditadoListener, ProductoAdapter.OnProductoClickListener { | ||
public class AdminActivity extends AppCompatActivity implements ProductAdapterAdmin.OnProductoClickListener { | ||
|
||
private RecyclerView recyclerView; | ||
private ProductoAdapter productoAdapter; | ||
private ArrayList<Producto> listaProductos; | ||
private EditText editNombre, editDescripcion, editPrecio; | ||
private ProductoViewModel productoViewModel; | ||
private ProductAdapterAdmin productoAdapter; | ||
private EditText edtNombre, edtDescripcion, edtPrecio; | ||
private Button btnAgregar; | ||
|
||
@Override | ||
protected void onCreate(Bundle savedInstanceState) { | ||
super.onCreate(savedInstanceState); | ||
setContentView(R.layout.activity_admin); | ||
|
||
// Inicializa la lista de productos | ||
listaProductos = new ArrayList<>(); | ||
// Añade algunos productos a la lista (ejemplo) | ||
listaProductos.add(new Producto("Producto 1", "Descripción 1", 10.0)); | ||
listaProductos.add(new Producto("Producto 2", "Descripción 2", 15.0)); | ||
// Inicialización de los campos de texto para nombre, descripción y precio | ||
edtNombre = findViewById(R.id.nombre_producto); | ||
edtDescripcion = findViewById(R.id.descripcion_producto); | ||
edtPrecio = findViewById(R.id.precio_producto); | ||
btnAgregar = findViewById(R.id.btnAddProduct); | ||
|
||
// Configura el RecyclerView | ||
recyclerView = findViewById(R.id.recyclerViewProductos); // Asegúrate de que el ID coincida con el XML | ||
// Configura el RecyclerView con un LinearLayoutManager | ||
RecyclerView recyclerView = findViewById(R.id.recyclerViewProductos); | ||
productoAdapter = new ProductAdapterAdmin(new ArrayList<>(), this); | ||
recyclerView.setLayoutManager(new LinearLayoutManager(this)); | ||
productoAdapter = new ProductoAdapter(listaProductos, this); | ||
recyclerView.setAdapter(productoAdapter); | ||
|
||
// Referencias a los campos de texto para agregar productos | ||
editNombre = findViewById(R.id.nombre_producto); | ||
editDescripcion = findViewById(R.id.descripcion_producto); | ||
editPrecio = findViewById(R.id.precio_producto); | ||
|
||
// Configura el botón de agregar producto | ||
Button btnAddProduct = findViewById(R.id.btnAddProduct); | ||
btnAddProduct.setOnClickListener(v -> agregarProducto()); | ||
} | ||
|
||
// Método para agregar un nuevo producto | ||
private void agregarProducto() { | ||
String nombre = editNombre.getText().toString().trim(); | ||
String descripcion = editDescripcion.getText().toString().trim(); | ||
String precioStr = editPrecio.getText().toString().trim(); | ||
|
||
// Validar que no se dejen campos vacíos | ||
if (nombre.isEmpty() || descripcion.isEmpty() || precioStr.isEmpty()) { | ||
Toast.makeText(this, "Por favor, completa todos los campos", Toast.LENGTH_SHORT).show(); | ||
return; | ||
} | ||
|
||
double precio = Double.parseDouble(precioStr); | ||
Producto nuevoProducto = new Producto(nombre, descripcion, precio); | ||
listaProductos.add(nuevoProducto); // Agregar el nuevo producto a la lista | ||
productoAdapter.notifyItemInserted(listaProductos.size() - 1); // Notificar que un nuevo producto fue insertado | ||
|
||
// Limpiar los campos de entrada | ||
editNombre.setText(""); | ||
editDescripcion.setText(""); | ||
editPrecio.setText(""); | ||
|
||
Toast.makeText(this, "Producto añadido", Toast.LENGTH_SHORT).show(); | ||
// Configura el ViewModel para la gestión de productos | ||
productoViewModel = new ViewModelProvider(this).get(ProductoViewModel.class); | ||
|
||
// Observa los productos y actualiza la lista del RecyclerView cuando cambien | ||
productoViewModel.getProductos().observe(this, products -> { | ||
productoAdapter.updateList(products); | ||
}); | ||
|
||
// Evento de clic del botón "Agregar Producto" | ||
btnAgregar.setOnClickListener(view -> { | ||
String nombre = edtNombre.getText().toString().trim(); // Obtiene el nombre del producto | ||
String descripcion = edtDescripcion.getText().toString().trim(); // Obtiene la descripción del producto | ||
String precioStr = edtPrecio.getText().toString().trim(); // Obtiene el precio como cadena de texto | ||
|
||
// Validación: todos los campos deben estar llenos | ||
if (nombre.isEmpty() || descripcion.isEmpty() || precioStr.isEmpty()) { | ||
Toast.makeText(AdminActivity.this, "Todos los campos son obligatorios", Toast.LENGTH_SHORT).show(); | ||
return; // Detiene la ejecución si falta algún campo | ||
} | ||
|
||
double precio; | ||
// Validación: el precio debe ser un número válido | ||
try { | ||
precio = Double.parseDouble(precioStr); | ||
} catch (NumberFormatException e) { | ||
Toast.makeText(AdminActivity.this, "Precio inválido", Toast.LENGTH_SHORT).show(); | ||
return; // Detiene la ejecución si el precio no es un número válido | ||
} | ||
|
||
// Si todas las validaciones pasan, crea un nuevo producto | ||
Product product = new Product(nombre, descripcion, precio); | ||
productoViewModel.addProducto(product); // Agrega el producto a través del ViewModel | ||
|
||
// Limpia los campos de texto después de agregar el producto | ||
edtNombre.setText(""); | ||
edtDescripcion.setText(""); | ||
edtPrecio.setText(""); | ||
|
||
// Muestra un mensaje de éxito | ||
Toast.makeText(AdminActivity.this, "Producto agregado exitosamente", Toast.LENGTH_SHORT).show(); | ||
}); | ||
} | ||
|
||
// Método para manejar la edición del producto | ||
// Este método es parte de la implementación de la interfaz OnProductoClickListener | ||
@Override | ||
public void onProductoEditado(Producto productoEditado, int posicion) { | ||
// Actualizar el producto en la posición exacta de la lista | ||
listaProductos.set(posicion, productoEditado); | ||
productoAdapter.notifyItemChanged(posicion); // Notifica al adaptador que hubo un cambio | ||
Toast.makeText(this, "Producto actualizado", Toast.LENGTH_SHORT).show(); | ||
} | ||
|
||
// Método para abrir el diálogo de edición | ||
public void abrirDialogoEdicion(Producto producto, int posicion) { | ||
// Cuando se presiona el botón para editar un producto | ||
EditarProductoDialog dialogo = new EditarProductoDialog(producto, posicion); | ||
dialogo.show(getSupportFragmentManager(), "EditarProductoDialog"); | ||
public void onEditarClick(int position) { | ||
// No es necesario implementar nada aquí; la lógica de edición está en el adaptador | ||
} | ||
|
||
// Método para manejar el clic en el botón Editar | ||
// Este método maneja la acción de guardar un producto editado | ||
@Override | ||
public void onEditarClick(int position) { | ||
abrirDialogoEdicion(listaProductos.get(position), position); | ||
public void onGuardarClick(int position, String nuevoNombre, String nuevaDescripcion, double nuevoPrecio) { | ||
Product updatedProduct = productoAdapter.getProductAt(position); // Obtiene el producto desde el adaptador | ||
if (updatedProduct != null) { | ||
// Actualiza el producto con los nuevos valores | ||
updatedProduct.setNombre_producto(nuevoNombre); | ||
updatedProduct.setDescripcion(nuevaDescripcion); | ||
updatedProduct.setPrecio(nuevoPrecio); | ||
// Informa al ViewModel para actualizar el producto en la base de datos o almacenamiento | ||
productoViewModel.updateProducto(updatedProduct.getId_producto(), updatedProduct); // Usa el ID correcto | ||
} | ||
} | ||
|
||
// Método para manejar el clic en el botón Borrar | ||
// Este método maneja la acción de borrar un producto | ||
@Override | ||
public void onBorrarClick(int position) { | ||
listaProductos.remove(position); // Eliminar el producto de la lista | ||
productoAdapter.notifyItemRemoved(position); // Notificar al adaptador que se eliminó un elemento | ||
Toast.makeText(this, "Producto eliminado", Toast.LENGTH_SHORT).show(); | ||
Product productToDelete = productoAdapter.getProductAt(position); // Obtiene el producto desde el adaptador | ||
if (productToDelete != null) { | ||
// Informa al ViewModel para eliminar el producto | ||
productoViewModel.deleteProducto(productToDelete.getId_producto()); // Usa el ID correcto | ||
} | ||
} | ||
} | ||
|
Oops, something went wrong.