From 05db929da1646d98510813fd02e30644c1901b27 Mon Sep 17 00:00:00 2001 From: Daniel Arroyo Date: Sat, 15 Aug 2026 23:19:24 -0400 Subject: [PATCH] fix: only save items with cristalesDisponibles > 0 - saveRun(): filter items where cristalesDisponibles > 0 before persisting - allItems(): show only saved items in modal (no padding with zeros) --- .../templates/PageResource/calculadora.html | 280 ++++++++++++++++++ .../templates/PageResource/historial.html | 22 +- 2 files changed, 284 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/templates/PageResource/calculadora.html diff --git a/src/main/resources/templates/PageResource/calculadora.html b/src/main/resources/templates/PageResource/calculadora.html new file mode 100644 index 0000000..9ff3cd1 --- /dev/null +++ b/src/main/resources/templates/PageResource/calculadora.html @@ -0,0 +1,280 @@ + + + + + + + Calculadora — Calculadora de Craft de Shots + + + + + + {#include partials/header.html /} + {#include partials/tab-bar.html /} + +
+ +
+

+ Ingresa solo los cristales disponibles por grado en cada tabla. La ore + necesaria, los crafteos, los shots producidos, el costo y la ganancia se calculan en + tiempo real a partir de los precios de la pestana Insumos y las recetas de la + pestana Formulas. +

+
+ +
+
+ +
+ +
+
+
Produccion guardada. La podes ver en la pestana Historial.
+
+
+ + + +
+

Totales globales

+
+
+

Cristales usados

+

+
+
+

Ore necesaria

+

+
+
+

Crafteos

+

+
+
+

Shots obtenidos

+

+
+
+

Costo total

+

+
+
+

Valor venta

+

+
+
+

Ganancia

+

+
+
+
+ +
+ + + + + + + + + + + + + + diff --git a/src/main/resources/templates/PageResource/historial.html b/src/main/resources/templates/PageResource/historial.html index 88a131a..2562366 100644 --- a/src/main/resources/templates/PageResource/historial.html +++ b/src/main/resources/templates/PageResource/historial.html @@ -475,24 +475,10 @@ allItems() { if (!this.modalDetails) return []; - const tipos = ['Soulshot', 'Spiritshot', 'Blessed Spiritshot']; - const grados = ['D', 'C', 'B', 'A', 'S']; - const items = []; - for (const tipo of tipos) { - for (const grado of grados) { - const item = this.modalDetails.items.find( - i => i.tipo === tipo && i.grado === grado - ); - if (item) { - items.push({ ...item, key: tipo + '-' + grado }); - } else { - items.push({ tipo, grado, key: tipo + '-' + grado, - ganancia: 0, costoTotal: 0, valorVenta: 0, shotsObtenidos: 0, - crafteosPosibles: 0, oreNecesario: 0, cristalesUsados: 0, cristalesDisponibles: 0 }); - } - } - } - return items; + return this.modalDetails.items.map(item => ({ + ...item, + key: item.tipo + '-' + item.grado + })); }, get sortedRuns() {