update
This commit is contained in:
239
index.html
239
index.html
@@ -613,7 +613,7 @@
|
|||||||
});
|
});
|
||||||
peerListEl.innerHTML = list.innerHTML;
|
peerListEl.innerHTML = list.innerHTML;
|
||||||
peerCountEl.innerText = peerCount;
|
peerCountEl.innerText = peerCount;
|
||||||
if (peerCount < 2){
|
if (peerCount < 3){
|
||||||
document.getElementById("connectStatus").src = "static/ico/connect_ko.svg"
|
document.getElementById("connectStatus").src = "static/ico/connect_ko.svg"
|
||||||
gun.opt({peers: RELAYS});
|
gun.opt({peers: RELAYS});
|
||||||
} else {
|
} else {
|
||||||
@@ -787,11 +787,50 @@
|
|||||||
gun.get(TABLE).on((data) => {var e = true})
|
gun.get(TABLE).on((data) => {var e = true})
|
||||||
</script>
|
</script>
|
||||||
<script id="app_modules">
|
<script id="app_modules">
|
||||||
|
|
||||||
try {
|
try {
|
||||||
navigator.wakeLock.request("screen");
|
navigator.wakeLock.request("screen");
|
||||||
} catch {
|
} catch {
|
||||||
console.log("ScreenLock Failed")
|
console.log("ScreenLock Failed")
|
||||||
}
|
}
|
||||||
|
String.prototype.toHex = function() {
|
||||||
|
|
||||||
|
var colors = [
|
||||||
|
"#ff0000",
|
||||||
|
"#ff00ff",
|
||||||
|
"#00ff00",
|
||||||
|
"#0000ff",
|
||||||
|
"#00ffff",
|
||||||
|
"#ffffff",
|
||||||
|
"#000000",
|
||||||
|
];
|
||||||
|
var color = this.charCodeAt(this.length - 1)
|
||||||
|
* this.charCodeAt(this.length - 2)
|
||||||
|
* this.charCodeAt(this.length - 3)
|
||||||
|
var cid = colors[color % colors.length]
|
||||||
|
console.log(color, cid)
|
||||||
|
return cid;
|
||||||
|
}
|
||||||
|
function stringToColour(str) {
|
||||||
|
console.log(str.toHex())
|
||||||
|
return str.toHex()
|
||||||
|
|
||||||
|
}
|
||||||
|
function colorIsDarkAdvanced(bgColor) {
|
||||||
|
let color = (bgColor.charAt(0) === '#') ? bgColor.substring(1, 7) : bgColor;
|
||||||
|
let r = parseInt(color.substring(0, 2), 16); // hexToR
|
||||||
|
let g = parseInt(color.substring(2, 4), 16); // hexToG
|
||||||
|
let b = parseInt(color.substring(4, 6), 16); // hexToB
|
||||||
|
let uicolors = [r / 255, g / 255, b / 255];
|
||||||
|
let c = uicolors.map((col) => {
|
||||||
|
if (col <= 0.03928) {
|
||||||
|
return col / 12.92;
|
||||||
|
}
|
||||||
|
return Math.pow((col + 0.055) / 1.055, 2.4);
|
||||||
|
});
|
||||||
|
let L = (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2]);
|
||||||
|
return L <= 0.179 ? '#FFFFFF' : '#000000';
|
||||||
|
}
|
||||||
function setLayeredImages(comanda, key) {
|
function setLayeredImages(comanda, key) {
|
||||||
// Base paths for each layer type (adjust paths as needed)
|
// Base paths for each layer type (adjust paths as needed)
|
||||||
const basePaths = {
|
const basePaths = {
|
||||||
@@ -812,7 +851,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Start div with relative positioning for layering
|
// Start div with relative positioning for layering
|
||||||
let html = `<div style="position: relative; width: 200px; height: 200px; background: white; display: inline-block;">`;
|
let html = `<div style="position: relative; width: 200px; height: 200px; background: white; display: inline-block; border: 1px dotted black;">`;
|
||||||
|
|
||||||
// Layer 1: Selección image
|
// Layer 1: Selección image
|
||||||
const selection = comanda["Selección"];
|
const selection = comanda["Selección"];
|
||||||
@@ -940,7 +979,8 @@
|
|||||||
parent,
|
parent,
|
||||||
options,
|
options,
|
||||||
defaultval,
|
defaultval,
|
||||||
change_cb = () => { }
|
change_cb = () => { },
|
||||||
|
label = "Persona"
|
||||||
) {
|
) {
|
||||||
var details_0 = document.createElement("details"); // children: img_0, summary_0
|
var details_0 = document.createElement("details"); // children: img_0, summary_0
|
||||||
//details_0.open = true;
|
//details_0.open = true;
|
||||||
@@ -958,7 +998,7 @@
|
|||||||
span_0.style.float = "right";
|
span_0.style.float = "right";
|
||||||
var p = SC_Personas[defaultval] || {};
|
var p = SC_Personas[defaultval] || {};
|
||||||
span_0.append(p.Nombre || "", " ", img_0);
|
span_0.append(p.Nombre || "", " ", img_0);
|
||||||
summary_0.append("Persona", span_0);
|
summary_0.append(label, span_0);
|
||||||
details_0.append(summary_0, document.createElement("br"));
|
details_0.append(summary_0, document.createElement("br"));
|
||||||
details_0.style.textAlign = "center";
|
details_0.style.textAlign = "center";
|
||||||
details_0.style.margin = "5px";
|
details_0.style.margin = "5px";
|
||||||
@@ -1310,6 +1350,50 @@
|
|||||||
});
|
});
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
function SC_parse_short(json) {
|
||||||
|
var valores = "<small style='font-size: 60%;'>Servicio base (10c)</small>\n";
|
||||||
|
|
||||||
|
Object.entries(json).forEach((entry) => {
|
||||||
|
valores += "<small style='font-size: 60%;'>" + entry[0] + ":</small> " + entry[1] + " ";
|
||||||
|
var combo = entry[0] + ";" + entry[1]
|
||||||
|
switch (entry[0]) {
|
||||||
|
case "Leche":
|
||||||
|
// Leche pequeña = 10c
|
||||||
|
if (
|
||||||
|
json["Tamaño"] == "Pequeño" &&
|
||||||
|
["de Vaca", "Sin lactosa", "Vegetal"].includes(json["Leche"])
|
||||||
|
) {
|
||||||
|
valores += "<small>(P = 10c)</small>";
|
||||||
|
}
|
||||||
|
// Leche grande = 20c
|
||||||
|
if (
|
||||||
|
json["Tamaño"] == "Grande" &&
|
||||||
|
["de Vaca", "Sin lactosa", "Vegetal"].includes(json["Leche"])
|
||||||
|
) {
|
||||||
|
valores += "<small>(G = 20c)</small>";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Selección":
|
||||||
|
// Café = 20c
|
||||||
|
if (
|
||||||
|
["Café con leche", "Solo café (sin leche)"].includes(
|
||||||
|
json["Selección"]
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
valores += "<small>(20c)</small>";
|
||||||
|
}
|
||||||
|
// ColaCao = 20c
|
||||||
|
if (json["Selección"] == "ColaCao con leche") {
|
||||||
|
valores += "<small>(20c)</small>";
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
valores += "\n"
|
||||||
|
});
|
||||||
|
return valores;
|
||||||
|
}
|
||||||
function SC_priceCalc(json) {
|
function SC_priceCalc(json) {
|
||||||
var precio = 0;
|
var precio = 0;
|
||||||
var valores = "";
|
var valores = "";
|
||||||
@@ -2252,6 +2336,7 @@
|
|||||||
}
|
}
|
||||||
setTimeout(() => {tts = true; console.log("TTS Enabled"); toastr.info("Texto a voz disponible")}, 6500)
|
setTimeout(() => {tts = true; console.log("TTS Enabled"); toastr.info("Texto a voz disponible")}, 6500)
|
||||||
const tablebody = safeuuid();
|
const tablebody = safeuuid();
|
||||||
|
const tablebody2 = safeuuid();
|
||||||
var btn_new = safeuuid();
|
var btn_new = safeuuid();
|
||||||
var tts_check = safeuuid();
|
var tts_check = safeuuid();
|
||||||
container.innerHTML = `
|
container.innerHTML = `
|
||||||
@@ -2263,23 +2348,45 @@
|
|||||||
<input type="checkbox" id="${tts_check}" style="height: 25px;width: 25px;">
|
<input type="checkbox" id="${tts_check}" style="height: 25px;width: 25px;">
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div id="scrolltable"><table>
|
<details style="background: beige; padding: 15px; border-radius: 15px; border: 2px solid black" open>
|
||||||
|
<summary>Todas las comandas</summary>
|
||||||
|
<div id="scrolltable">
|
||||||
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Zona</th>
|
|
||||||
<th>Persona</th>
|
<th>Persona</th>
|
||||||
<th style="${sc_nobtn};">Estado</th>
|
<th style="${sc_nobtn};">Estado</th>
|
||||||
<th>Comanda</th>
|
<th>Comanda</th>
|
||||||
<th>Precio</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="${tablebody}">
|
<tbody id="${tablebody}">
|
||||||
</tbody>
|
</tbody>
|
||||||
</table></div>
|
</table>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
<br>
|
||||||
|
<details style="background: lightpink; padding: 15px; border-radius: 15px; border: 2px solid black" open>
|
||||||
|
<summary>Deudas</summary>
|
||||||
|
<div id="scrolltable2">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Persona</th>
|
||||||
|
<th style="${sc_nobtn};">Estado</th>
|
||||||
|
<th>Comanda</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="${tablebody2}">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
tableScroll("#scrolltable") // id="scrolltable"
|
tableScroll("#scrolltable") // id="scrolltable"
|
||||||
|
tableScroll("#scrolltable2") // id="scrolltable2"
|
||||||
var tablebody_EL = document.getElementById(tablebody);
|
var tablebody_EL = document.getElementById(tablebody);
|
||||||
|
var tablebody2_EL = document.getElementById(tablebody);
|
||||||
var rows2 = {};
|
var rows2 = {};
|
||||||
function render() {
|
function render() {
|
||||||
function sorter(a, b) {
|
function sorter(a, b) {
|
||||||
@@ -2298,7 +2405,9 @@
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
var tablebody_EL = document.getElementById(tablebody);
|
var tablebody_EL = document.getElementById(tablebody);
|
||||||
|
var tablebody2_EL = document.getElementById(tablebody2);
|
||||||
tablebody_EL.innerHTML = "";
|
tablebody_EL.innerHTML = "";
|
||||||
|
tablebody2_EL.innerHTML = "";
|
||||||
var DefaultPersona = {
|
var DefaultPersona = {
|
||||||
Foto: "static/ico/user_generic.png",
|
Foto: "static/ico/user_generic.png",
|
||||||
Nombre: "Desconocido??",
|
Nombre: "Desconocido??",
|
||||||
@@ -2328,15 +2437,19 @@
|
|||||||
data.Persona = "135733281028030249";
|
data.Persona = "135733281028030249";
|
||||||
}
|
}
|
||||||
if (sc_nobtn != "") {new_tr.style.pointerEvents = "none"}
|
if (sc_nobtn != "") {new_tr.style.pointerEvents = "none"}
|
||||||
|
var regco = stringToColour(persona.Region.toLowerCase() || "?")
|
||||||
new_tr.innerHTML = `
|
new_tr.innerHTML = `
|
||||||
<td>${persona.Region.toUpperCase() || "?"}<br><br>${data.Fecha}</td>
|
<td class="" style="text-align: center; font-size: 20px; background-color: ${regco}; color: ${colorIsDarkAdvanced(regco)}">
|
||||||
<td class="TextBorder" style="background-color: ${persona.SC_Anilla
|
<span style="font-size: 40px; text-transform: capitalize;">
|
||||||
}; text-align: center; font-size: 17px;"><img src="${persona.Foto ||
|
${persona.Region.toLowerCase() || "?"}
|
||||||
"static/ico/user_generic.png"
|
</span><br>
|
||||||
}" height="50"><br> ${persona.Nombre || ""
|
<span style="background-color: white; border: 2px solid black; border-radius: 5px; display: inline-block; padding: 5px; color: black;">
|
||||||
}<br> <span style="font-size: 25px;">${persona.Puntos || "0"
|
<img src="${persona.Foto || "static/ico/user_generic.png"}" height="70">
|
||||||
} pts.</span></td>
|
<br>${persona.Nombre || ""}
|
||||||
|
<br><span style="font-size: 17px;">${persona.Puntos || "0"} puntos.</span>
|
||||||
|
</span>
|
||||||
|
<br><br> ${data.Fecha}
|
||||||
|
</td>
|
||||||
<td style="font-size: 17px; ${sc_nobtn};">
|
<td style="font-size: 17px; ${sc_nobtn};">
|
||||||
<button id="${btn_Pedido}" class="">Pedido</button>
|
<button id="${btn_Pedido}" class="">Pedido</button>
|
||||||
<br><button id="${btn_Preparacion}" class="">En preparación</button>
|
<br><button id="${btn_Preparacion}" class="">En preparación</button>
|
||||||
@@ -2346,15 +2459,19 @@
|
|||||||
<br><button id="${btn_Pagado}" class="">Pagado</button></td>
|
<br><button id="${btn_Pagado}" class="">Pagado</button></td>
|
||||||
<td>
|
<td>
|
||||||
${setLayeredImages(JSON.parse(data.Comanda), data._key)}
|
${setLayeredImages(JSON.parse(data.Comanda), data._key)}
|
||||||
<pre style="font-size: 17px; display: inline-block;">${SC_parse(JSON.parse(data.Comanda)) +
|
<pre style="font-size: 15px; display: inline-block;"><span style="font-size: 20px;" id="${span_precio}"></span>\n${SC_parse_short(JSON.parse(data.Comanda)) +
|
||||||
"<hr>" +
|
"<hr>" +
|
||||||
data.Notas
|
data.Notas
|
||||||
}</pre></td>
|
}</pre></td>
|
||||||
<td><pre>${resumen}</pre><span style="font-size: 20px;" id="${span_precio}"></span></td>
|
|
||||||
`;
|
`;
|
||||||
|
if (data.Estado == "Deuda") {
|
||||||
|
tablebody2_EL.append(new_tr);
|
||||||
|
} else {
|
||||||
tablebody_EL.append(new_tr);
|
tablebody_EL.append(new_tr);
|
||||||
|
}
|
||||||
if (data.Estado == "Pedido") {
|
if (data.Estado == "Pedido") {
|
||||||
document.getElementById(btn_Pedido).classList = "rojo";
|
document.getElementById(btn_Pedido).classList = "rojo";
|
||||||
|
new_tr.style.backgroundColor = "#FFFFFF";
|
||||||
}
|
}
|
||||||
if (data.Estado == "En preparación") {
|
if (data.Estado == "En preparación") {
|
||||||
document.getElementById(btn_Preparacion).classList = "rojo";
|
document.getElementById(btn_Preparacion).classList = "rojo";
|
||||||
@@ -2370,16 +2487,15 @@
|
|||||||
}
|
}
|
||||||
if (data.Estado == "Deuda") {
|
if (data.Estado == "Deuda") {
|
||||||
document.getElementById(btn_Deuda).classList = "rojo";
|
document.getElementById(btn_Deuda).classList = "rojo";
|
||||||
new_tr.style.backgroundColor = "hotpink";
|
new_tr.style.backgroundColor = "#f5d3ff";
|
||||||
}
|
}
|
||||||
new_tr.onclick = () => {
|
new_tr.onclick = () => {
|
||||||
setUrlHash("supercafe," + data._key);
|
setUrlHash("supercafe," + data._key);
|
||||||
};
|
};
|
||||||
if (SC_Personas[data.Persona].Puntos >= 10) {
|
if (SC_Personas[data.Persona].Puntos >= 10) {
|
||||||
document.getElementById(span_precio).innerHTML =
|
document.getElementById(span_precio).innerHTML = `Total: Gratis!(${precio}c)`
|
||||||
"Gratis!<br> Usando puntos";
|
|
||||||
} else {
|
} else {
|
||||||
document.getElementById(span_precio).innerHTML = `Pagando ${precio}c`
|
document.getElementById(span_precio).innerHTML = `Total: ${precio}c`
|
||||||
}
|
}
|
||||||
// Acciónes
|
// Acciónes
|
||||||
document.getElementById(btn_Pedido).onclick = () => {
|
document.getElementById(btn_Pedido).onclick = () => {
|
||||||
@@ -2539,10 +2655,12 @@
|
|||||||
var field_destino = safeuuid();
|
var field_destino = safeuuid();
|
||||||
var field_estado = safeuuid();
|
var field_estado = safeuuid();
|
||||||
var field_mensaje = safeuuid();
|
var field_mensaje = safeuuid();
|
||||||
|
var field_respuesta = safeuuid();
|
||||||
var btn_leer = safeuuid();
|
var btn_leer = safeuuid();
|
||||||
var btn_desleer = safeuuid();
|
var btn_desleer = safeuuid();
|
||||||
var btn_guardar = safeuuid();
|
var btn_guardar = safeuuid();
|
||||||
var btn_borrar = safeuuid();
|
var btn_borrar = safeuuid();
|
||||||
|
var div_actions = safeuuid();
|
||||||
container.innerHTML = `
|
container.innerHTML = `
|
||||||
<h1>Notificación <code id="${nameh1}"></code></h1>
|
<h1>Notificación <code id="${nameh1}"></code></h1>
|
||||||
<fieldset style="float: left;">
|
<fieldset style="float: left;">
|
||||||
@@ -2555,37 +2673,17 @@
|
|||||||
Asunto<br>
|
Asunto<br>
|
||||||
<input type="text" id="${field_asunto}" value=""><br><br>
|
<input type="text" id="${field_asunto}" value=""><br><br>
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<input type="hidden" id="${field_origen}">
|
||||||
Origen<br>
|
<input type="hidden" id="${field_destino}">
|
||||||
<select id="${field_origen}">
|
<div id="${div_actions}"></div>
|
||||||
<option value="" disabled selected>Selecciona una persona...</option>
|
|
||||||
${Object.entries(SC_Personas)
|
|
||||||
.sort(PERSONAS_Sorter)
|
|
||||||
.map((entry) => {
|
|
||||||
return `<option value="${entry[0]}">${entry[1].Nombre || "?"
|
|
||||||
}</option>`;
|
|
||||||
})
|
|
||||||
.join("")}
|
|
||||||
</select><br><br>
|
|
||||||
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
Destino<br>
|
|
||||||
<select id="${field_destino}">
|
|
||||||
<option value="" disabled selected>Selecciona una persona...</option>
|
|
||||||
${Object.entries(SC_Personas)
|
|
||||||
.sort(PERSONAS_Sorter)
|
|
||||||
.map((entry) => {
|
|
||||||
return `<option value="${entry[0]}">${entry[1].Nombre || "?"
|
|
||||||
}</option>`;
|
|
||||||
})
|
|
||||||
.join("")}
|
|
||||||
</select><br><br>
|
|
||||||
</label>
|
|
||||||
<label>
|
<label>
|
||||||
Mensaje<br>
|
Mensaje<br>
|
||||||
<textarea id="${field_mensaje}"></textarea><br><br>
|
<textarea id="${field_mensaje}"></textarea><br><br>
|
||||||
</label>
|
</label>
|
||||||
|
<label>
|
||||||
|
Respuesta<br>
|
||||||
|
<textarea id="${field_respuesta}"></textarea><br><br>
|
||||||
|
</label>
|
||||||
<label>
|
<label>
|
||||||
Estado<br>
|
Estado<br>
|
||||||
<input readonly disabled type="text" id="${field_estado}" value="%%">
|
<input readonly disabled type="text" id="${field_estado}" value="%%">
|
||||||
@@ -2604,6 +2702,25 @@
|
|||||||
document.getElementById(btn_desleer).onclick = () => {
|
document.getElementById(btn_desleer).onclick = () => {
|
||||||
document.getElementById(field_estado).value = "por_leer";
|
document.getElementById(field_estado).value = "por_leer";
|
||||||
};
|
};
|
||||||
|
var divact = document.getElementById(div_actions)
|
||||||
|
addCategory_Personas(
|
||||||
|
divact,
|
||||||
|
SC_Personas,
|
||||||
|
"",
|
||||||
|
(value) => {
|
||||||
|
document.getElementById(field_origen).value = value;
|
||||||
|
},
|
||||||
|
"Origen"
|
||||||
|
);
|
||||||
|
addCategory_Personas(
|
||||||
|
divact,
|
||||||
|
SC_Personas,
|
||||||
|
"",
|
||||||
|
(value) => {
|
||||||
|
document.getElementById(field_destino).value = value;
|
||||||
|
},
|
||||||
|
"Destino"
|
||||||
|
);
|
||||||
gun
|
gun
|
||||||
.get(TABLE)
|
.get(TABLE)
|
||||||
.get("notificaciones")
|
.get("notificaciones")
|
||||||
@@ -2622,6 +2739,29 @@
|
|||||||
data["Destino"] || "";
|
data["Destino"] || "";
|
||||||
document.getElementById(field_estado).value =
|
document.getElementById(field_estado).value =
|
||||||
data["Estado"] || "";
|
data["Estado"] || "";
|
||||||
|
document.getElementById(field_respuesta).value =
|
||||||
|
data["Respuesta"] || "";
|
||||||
|
|
||||||
|
// Persona select
|
||||||
|
divact.innerHTML = ""
|
||||||
|
addCategory_Personas(
|
||||||
|
divact,
|
||||||
|
SC_Personas,
|
||||||
|
data["Origen"] || "",
|
||||||
|
(value) => {
|
||||||
|
document.getElementById(field_origen).value = value;
|
||||||
|
},
|
||||||
|
"Origen"
|
||||||
|
);
|
||||||
|
addCategory_Personas(
|
||||||
|
divact,
|
||||||
|
SC_Personas,
|
||||||
|
data["Destino"] || "",
|
||||||
|
(value) => {
|
||||||
|
document.getElementById(field_destino).value = value;
|
||||||
|
},
|
||||||
|
"Destino"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (typeof data == "string") {
|
if (typeof data == "string") {
|
||||||
SEA.decrypt(data, SECRET, (data) => {
|
SEA.decrypt(data, SECRET, (data) => {
|
||||||
@@ -2645,6 +2785,7 @@
|
|||||||
Origen: document.getElementById(field_origen).value,
|
Origen: document.getElementById(field_origen).value,
|
||||||
Destino: document.getElementById(field_destino).value,
|
Destino: document.getElementById(field_destino).value,
|
||||||
Mensaje: document.getElementById(field_mensaje).value,
|
Mensaje: document.getElementById(field_mensaje).value,
|
||||||
|
Respuesta: document.getElementById(field_respuesta).value,
|
||||||
Asunto: document.getElementById(field_asunto).value,
|
Asunto: document.getElementById(field_asunto).value,
|
||||||
Estado: document
|
Estado: document
|
||||||
.getElementById(field_estado)
|
.getElementById(field_estado)
|
||||||
|
|||||||
Reference in New Issue
Block a user