diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..9ded98f --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "tobermory.es6-string-html", + "esbenp.prettier-vscode" + ] +} \ No newline at end of file diff --git a/src/app_modules.js b/src/app_modules.js index f9ba4ff..b3505e4 100644 --- a/src/app_modules.js +++ b/src/app_modules.js @@ -3,6 +3,28 @@ try { } catch { console.log('ScreenLock Failed'); } + +// Configuración de precios del café (cargado desde DB) +window.PRECIOS_CAFE = { + servicio_base: 10, + leche_pequena: 15, + leche_grande: 25, + cafe: 25, + colacao: 25, +}; + +// Cargar precios desde la base de datos al iniciar +if (typeof DB !== 'undefined') { + DB.get('config', 'precios_cafe').then((precios) => { + if (precios) { + Object.assign(window.PRECIOS_CAFE, precios); + console.log('Precios del café cargados:', window.PRECIOS_CAFE); + } + }).catch(() => { + console.log('Usando precios por defecto'); + }); +} + const debounce = (id, callback, wait, args) => { // debounce with trailing callback // First call runs immediately, then locks for 'wait' ms @@ -700,36 +722,44 @@ function SC_parse(json) { } function SC_parse_short(json) { - var valores = "Servicio base (10c)\n"; + const precios = window.PRECIOS_CAFE || { + servicio_base: 10, + leche_pequena: 15, + leche_grande: 25, + cafe: 25, + colacao: 25, + }; + + var valores = `Servicio base (${precios.servicio_base}c)\n`; Object.entries(json).forEach((entry) => { valores += "" + entry[0] + ': ' + entry[1] + ' '; var combo = entry[0] + ';' + entry[1]; switch (entry[0]) { case 'Leche': - // Leche pequeña = 10c + // Leche pequeña if ( json['Tamaño'] == 'Pequeño' && ['de Vaca', 'Sin lactosa', 'Vegetal', 'Almendras'].includes(json['Leche']) ) { - valores += '(P = 10c)'; + valores += `(P = ${precios.leche_pequena}c)`; } - // Leche grande = 20c + // Leche grande if ( json['Tamaño'] == 'Grande' && ['de Vaca', 'Sin lactosa', 'Vegetal', 'Almendras'].includes(json['Leche']) ) { - valores += '(G = 20c)'; + valores += `(G = ${precios.leche_grande}c)`; } break; case 'Selección': - // Café = 20c + // Café if (['Café con leche', 'Solo café (sin leche)'].includes(json['Selección'])) { - valores += '(20c)'; + valores += `(${precios.cafe}c)`; } - // ColaCao = 20c + // ColaCao if (json['Selección'] == 'ColaCao con leche') { - valores += '(20c)'; + valores += `(${precios.colacao}c)`; } default: break; @@ -743,35 +773,50 @@ function SC_parse_short(json) { function SC_priceCalc(json) { var precio = 0; var valores = ''; - // Servicio base = 10c - precio += 10; - valores += 'Servicio base = 10c\n'; - // Leche pequeña = 10c + + // Usar precios configurables + const precios = window.PRECIOS_CAFE || { + servicio_base: 10, + leche_pequena: 15, + leche_grande: 25, + cafe: 25, + colacao: 25, + }; + + // Servicio base + precio += precios.servicio_base; + valores += `Servicio base = ${precios.servicio_base}c\n`; + + // Leche pequeña if ( json['Tamaño'] == 'Pequeño' && ['de Vaca', 'Sin lactosa', 'Vegetal', 'Almendras'].includes(json['Leche']) ) { - precio += 15; - valores += 'Leche pequeña = 15c\n'; + precio += precios.leche_pequena; + valores += `Leche pequeña = ${precios.leche_pequena}c\n`; } - // Leche grande = 20c + + // Leche grande if ( json['Tamaño'] == 'Grande' && ['de Vaca', 'Sin lactosa', 'Vegetal', 'Almendras'].includes(json['Leche']) ) { - precio += 25; - valores += 'Leche grande = 25c\n'; + precio += precios.leche_grande; + valores += `Leche grande = ${precios.leche_grande}c\n`; } - // Café = 20c + + // Café if (['Café con leche', 'Solo café (sin leche)'].includes(json['Selección'])) { - precio += 25; - valores += 'Café = 25c\n'; + precio += precios.cafe; + valores += `Café = ${precios.cafe}c\n`; } - // ColaCao = 20c + + // ColaCao if (json['Selección'] == 'ColaCao con leche') { - precio += 25; - valores += 'ColaCao = 25c\n'; + precio += precios.colacao; + valores += `ColaCao = ${precios.colacao}c\n`; } + valores += '
Total: ' + precio + 'c\n'; return [precio, valores]; } diff --git a/src/page/dataman.js b/src/page/dataman.js index 9df5e96..daad60f 100644 --- a/src/page/dataman.js +++ b/src/page/dataman.js @@ -17,6 +17,9 @@ PAGES.dataman = { case 'labels': PAGES.dataman.__labels(); break; + case 'precios': + PAGES.dataman.__precios(); + break; default: // Tab to edit } @@ -209,12 +212,88 @@ PAGES.dataman = { } }); }, + __precios: function () { + var form = safeuuid(); + + // Cargar precios actuales desde DB + DB.get('config', 'precios_cafe').then((raw) => { + TS_decrypt(raw, SECRET, (precios) => { + container.innerHTML = html` +

Configuración de Precios del Café

+
+
+ Precios Base (en céntimos) + +

+ +

+ +

+ +

+ +
+
+ + +
+ `; + + document.getElementById(form).onsubmit = (ev) => { + ev.preventDefault(); + var formData = new FormData(document.getElementById(form)); + var nuevosPrecios = { + servicio_base: parseInt(formData.get('servicio_base')) || 10, + leche_pequena: parseInt(formData.get('leche_pequena')) || 15, + leche_grande: parseInt(formData.get('leche_grande')) || 25, + cafe: parseInt(formData.get('cafe')) || 25, + colacao: parseInt(formData.get('colacao')) || 25, + }; + + DB.put('config', 'precios_cafe', nuevosPrecios).then(() => { + toastr.success('Precios guardados correctamente'); + // Actualizar variable global + if (window.PRECIOS_CAFE) { + Object.assign(window.PRECIOS_CAFE, nuevosPrecios); + } + setTimeout(() => setUrlHash('dataman'), 1000); + }).catch((e) => { + toastr.error('Error al guardar precios: ' + e.message); + }); + }; + }); + }).catch(() => { + // Si no hay precios guardados, usar valores por defecto + PAGES.dataman.__precios(); + }); + }, index: function () { container.innerHTML = html`

Administración de datos

Importar datos Exportar datos Imprimir etiquetas + ⚙️ Precios del café Ajustes `; },