// MainActivity.
java
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends AppCompatActivity {
private Button btnAddProduct, btnPurchase;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
btnAddProduct = findViewById([Link]);
btnPurchase = findViewById([Link]);
[Link](v -> {
Intent intent = new Intent([Link], [Link]);
startActivity(intent);
});
[Link](v -> {
Intent intent = new Intent([Link], [Link]);
startActivity(intent);
});
}
// [Link]
package [Link];
public class Product {
private String productId;
private String name;
private double purchasePrice;
private double salePrice;
public Product() {
// Constructor vacío requerido para Firebase
public Product(String productId, String name, double purchasePrice) {
[Link] = productId;
[Link] = name;
[Link] = purchasePrice;
[Link] = purchasePrice * 1.15; // 15% IVA
// Getters y setters
public String getProductId() { return productId; }
public void setProductId(String productId) { [Link] = productId; }
public String getName() { return name; }
public void setName(String name) { [Link] = name; }
public double getPurchasePrice() { return purchasePrice; }
public void setPurchasePrice(double purchasePrice) { [Link] = purchasePrice; }
public double getSalePrice() { return salePrice; }
public void setSalePrice(double salePrice) { [Link] = salePrice; }
}
// [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class AddProductActivity extends AppCompatActivity {
private EditText etProductName, etProductId, etPurchasePrice;
private TextView tvSalePrice;
private Button btnSave;
private DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_add_product);
// Inicializar Firebase
databaseReference = [Link]()
.getReferenceFromUrl("[Link]
.child("products");
// Inicializar vistas
etProductName = findViewById([Link]);
etProductId = findViewById([Link]);
etPurchasePrice = findViewById([Link]);
tvSalePrice = findViewById([Link]);
btnSave = findViewById([Link]);
// Calcular precio de venta automáticamente
[Link](new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
if (![Link]().isEmpty()) {
try {
double purchasePrice = [Link]([Link]());
double salePrice = purchasePrice * 1.15; // 15% IVA
[Link]([Link]("%.2f", salePrice));
} catch (NumberFormatException e) {
[Link]("0.00");
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
[Link](v -> saveProduct());
private void saveProduct() {
String name = [Link]().toString().trim();
String id = [Link]().toString().trim();
String purchasePriceStr = [Link]().toString().trim();
if ([Link]() || [Link]() || [Link]()) {
[Link](this, "Por favor complete todos los campos", Toast.LENGTH_SHORT).show();
return;
double purchasePrice = [Link](purchasePriceStr);
Product product = new Product(id, name, purchasePrice);
[Link](id).setValue(product)
.addOnSuccessListener(aVoid -> {
[Link]([Link], "Producto guardado exitosamente", Toast.LENGTH_SHORT).show();
finish();
})
.addOnFailureListener(e -> {
[Link]([Link], "Error al guardar: " + [Link](),
Toast.LENGTH_SHORT).show();
});
// [Link]
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];
public class PurchaseActivity extends AppCompatActivity {
private SearchView searchView;
private ListView listView;
private DatabaseReference databaseReference;
private ArrayList<Product> productList;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_purchase);
searchView = findViewById([Link]);
listView = findViewById([Link]);
productList = new ArrayList<>();
databaseReference = [Link]()
.getReferenceFromUrl("[Link]
.child("products");
// Configurar búsqueda
[Link](new [Link]() {
@Override
public boolean onQueryTextSubmit(String query) {
searchProducts(query);
return true;
@Override
public boolean onQueryTextChange(String newText) {
searchProducts(newText);
return true;
});
private void searchProducts(String query) {
[Link]("name")
.startAt(query)
.endAt(query + "\uf8ff")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
[Link]();
for (DataSnapshot snapshot : [Link]()) {
Product product = [Link]([Link]);
if (product != null) {
[Link](product);
// Aquí deberías actualizar tu ListView con un adaptador personalizado
@Override
public void onCancelled(DatabaseError databaseError) {
// Manejar error
});