Skip to content

Commit

Permalink
Merge pull request #143 from G10-ISPC/Developer
Browse files Browse the repository at this point in the history
Developer
  • Loading branch information
cosmarian authored Oct 24, 2024
2 parents 4255bc8 + a61d69e commit de1bfe0
Show file tree
Hide file tree
Showing 71 changed files with 1,774 additions and 1,332 deletions.
22 changes: 11 additions & 11 deletions .idea/other.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added APK/Ricco.apk
Binary file not shown.
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

// dependecia de splashscreen
dependencies {
implementation 'com.airbnb.android:lottie:3.7.0'
}


}
31 changes: 23 additions & 8 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:label=" "
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.RiccoApp"
tools:targetApi="31">

<activity
android:name=".item_hamburger"
android:exported="false" />
Expand All @@ -25,35 +26,49 @@
android:exported="false" />
<activity
android:name=".SplashActivity"
android:exported="false" />
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:name=".AboutActivity"
android:exported="false" />

<activity
android:name=".RegistroActivity"
android:exported="false" />

<activity
android:name=".loginActivity"
android:exported="false" />

<activity
android:name=".ContactoActivity"
android:exported="false" />

<activity
android:name=".ProductsActivity"
android:exported="false" />

<activity
android:name=".UserProfileActivity"
android:exported="false" />
<activity android:name=".AdminActivity" />


<activity android:name=".AdminActivity"></activity>

<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- Elimina este intent-filter de MainActivity para evitar conflictos -->
<!-- <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</intent-filter> -->
</activity>
</application>

</manifest>
</manifest>
1 change: 1 addition & 0 deletions app/src/main/assets/animation.json
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":[]}
Binary file added app/src/main/ic_launcher-playstore.png
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 app/src/main/java/com/example/riccoapp/AdminActivity.java
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
}
}
}

Loading

0 comments on commit de1bfe0

Please sign in to comment.