PERMS["personas"] = "Personas";
PERMS["personas:edit"] = "> Editar";
PAGES.personas = {
navcss: "btn3",
icon: "static/appico/users.png",
AccessControl: true,
Title: "Personas",
edit: function (mid) {
if (!checkRole("personas:edit")) {
setUrlHash("personas");
return;
}
var nameh1 = safeuuid();
var permisosdet = safeuuid();
var field_nombre = safeuuid();
var field_zona = safeuuid();
var field_notas = safeuuid();
var field_anilla = safeuuid();
var field_foto = safeuuid();
var render_foto = safeuuid();
var field_monedero_balance = safeuuid();
var field_monedero_notas = safeuuid();
var btn_guardar = safeuuid();
var btn_borrar = safeuuid();
var btn_ver_monedero = safeuuid();
container.innerHTML = `
Persona
${BuildQR("personas," + mid, "Esta Persona")}
`;
var resized = "";
var pdel = document.getElementById(permisosdet);
DB.get('personas', mid).then((data) => {
function load_data(data, ENC = "") {
document.getElementById(nameh1).innerText = mid;
var pot = "
";
Object.entries(PERMS).forEach((page) => {
var c = "";
if ((data["Roles"] || ",").split(",").includes(page[0])) {
c = "checked";
}
pot += `
`;
});
pdel.innerHTML = pot + "
";
document.getElementById(field_nombre).value = data["Nombre"] || "";
document.getElementById(field_zona).value = data["Region"] || "";
document.getElementById(field_anilla).value = data["SC_Anilla"] || "";
// set fallback image immediately
document.getElementById(render_foto).src = data["Foto"] || "static/ico/user_generic.png";
resized = data["Foto"] || "static/ico/user_generic.png";
// try to load attachment 'foto' if present (preferred storage)
DB.getAttachment('personas', mid, 'foto').then((durl) => {
if (durl) {
document.getElementById(render_foto).src = durl;
resized = durl;
}
}).catch(() => {});
document.getElementById(field_notas).value = data["markdown"] || "";
document.getElementById(field_monedero_balance).value =
data["Monedero_Balance"] || 0;
document.getElementById(field_monedero_notas).value =
data["Monedero_Notas"] || "";
}
if (typeof data == "string") {
TS_decrypt(data, SECRET, (data, wasEncrypted) => {
load_data(data, "%E");
}, 'personas', mid);
} else {
load_data(data || {});
}
});
document.getElementById(field_foto).addEventListener("change", function (e) {
const file = e.target.files[0];
if (!file) return;
// Do NOT resize — keep original uploaded image
const reader = new FileReader();
reader.onload = function (ev) {
const url = ev.target.result;
document.getElementById(render_foto).src = url;
resized = url;
};
reader.readAsDataURL(file);
});
document.getElementById(btn_guardar).onclick = () => {
var dt = new FormData(pdel);
var data = {
Nombre: document.getElementById(field_nombre).value,
Region: document.getElementById(field_zona).value,
Roles: dt.getAll("perm").join(",") + ",",
SC_Anilla: document.getElementById(field_anilla).value,
// Foto moved to PouchDB attachment named 'foto'
markdown: document.getElementById(field_notas).value,
Monedero_Balance:
parseFloat(document.getElementById(field_monedero_balance).value) ||
0,
Monedero_Notas: document.getElementById(field_monedero_notas).value,
};
document.getElementById("actionStatus").style.display = "block";
DB.put('personas', mid, data).then(() => {
// if resized is a data URL (new/updated image), save as attachment
var attachPromise = Promise.resolve(true);
if (typeof resized === 'string' && resized.indexOf('data:') === 0) {
attachPromise = DB.putAttachment('personas', mid, 'foto', resized, 'image/png');
}
attachPromise.then(() => {
toastr.success("Guardado!");
setTimeout(() => {
document.getElementById("actionStatus").style.display = "none";
setUrlHash("personas");
}, SAVE_WAIT);
}).catch((e) => { console.warn('putAttachment error', e); document.getElementById("actionStatus").style.display = "none"; });
}).catch((e) => { console.warn('DB.put error', e); document.getElementById("actionStatus").style.display = "none"; });
};
document.getElementById(btn_ver_monedero).onclick = () => {
setUrlHash("pagos"); // Navigate to pagos and show transactions for this person
};
document.getElementById(btn_borrar).onclick = () => {
if (confirm("¿Quieres borrar esta persona?") == true) {
DB.del('personas', mid).then(() => {
toastr.error("Borrado!");
setTimeout(() => {
setUrlHash("personas");
}, SAVE_WAIT);
});
}
};
},
index: function () {
if (!checkRole("personas")) {
setUrlHash("index");
return;
}
var btn_new = safeuuid();
container.innerHTML = `