248 lines
7.6 KiB
JavaScript
248 lines
7.6 KiB
JavaScript
PERMS['avisos'] = 'Avisos';
|
|
PERMS['avisos:edit'] = '> Editar';
|
|
PAGES.avisos = {
|
|
navcss: 'btn5',
|
|
icon: 'static/appico/File_Plugin.svg',
|
|
AccessControl: true,
|
|
Title: 'Avisos',
|
|
edit: function (mid) {
|
|
if (!checkRole('avisos:edit')) {
|
|
setUrlHash('avisos');
|
|
return;
|
|
}
|
|
var nameh1 = safeuuid();
|
|
var field_fecha = safeuuid();
|
|
var field_asunto = safeuuid();
|
|
var field_origen = safeuuid();
|
|
var field_destino = safeuuid();
|
|
var field_estado = safeuuid();
|
|
var field_mensaje = safeuuid();
|
|
var field_respuesta = safeuuid();
|
|
var btn_leer = safeuuid();
|
|
var btn_desleer = safeuuid();
|
|
var btn_guardar = safeuuid();
|
|
var btn_borrar = safeuuid();
|
|
var div_actions = safeuuid();
|
|
container.innerHTML = html`
|
|
<h1>Aviso <code id="${nameh1}"></code></h1>
|
|
<fieldset style="float: left;">
|
|
<legend>Valores</legend>
|
|
<label>
|
|
Fecha<br />
|
|
<input readonly disabled type="text" id="${field_fecha}" value="" /><br /><br />
|
|
</label>
|
|
<label>
|
|
Asunto<br />
|
|
<input type="text" id="${field_asunto}" value="" /><br /><br />
|
|
</label>
|
|
<input type="hidden" id="${field_origen}" />
|
|
<input type="hidden" id="${field_destino}" />
|
|
<div id="${div_actions}"></div>
|
|
<label>
|
|
Mensaje<br />
|
|
<textarea id="${field_mensaje}"></textarea><br /><br />
|
|
</label>
|
|
<label>
|
|
Respuesta<br />
|
|
<textarea id="${field_respuesta}"></textarea><br /><br />
|
|
</label>
|
|
<label>
|
|
Estado<br />
|
|
<input readonly disabled type="text" id="${field_estado}" value="" />
|
|
<br />
|
|
<button id="${btn_leer}">Leido</button>
|
|
<button id="${btn_desleer}">No leido</button>
|
|
<br />
|
|
</label>
|
|
<hr />
|
|
<button class="btn5" id="${btn_guardar}">Guardar</button>
|
|
<button class="rojo" id="${btn_borrar}">Borrar</button>
|
|
</fieldset>
|
|
`;
|
|
document.getElementById(btn_leer).onclick = () => {
|
|
document.getElementById(field_estado).value = 'leido';
|
|
};
|
|
document.getElementById(btn_desleer).onclick = () => {
|
|
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'
|
|
);
|
|
(async () => {
|
|
const data = await DB.get('notificaciones', mid);
|
|
function load_data(data, ENC = '') {
|
|
document.getElementById(nameh1).innerText = mid;
|
|
document.getElementById(field_fecha).value = data['Fecha'] || CurrentISODate() || '';
|
|
document.getElementById(field_asunto).value = data['Asunto'] || '';
|
|
document.getElementById(field_mensaje).value = data['Mensaje'] || '';
|
|
document.getElementById(field_origen).value = data['Origen'] || SUB_LOGGED_IN_ID || '';
|
|
document.getElementById(field_destino).value = data['Destino'] || '';
|
|
document.getElementById(field_estado).value = 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') {
|
|
TS_decrypt(
|
|
data,
|
|
SECRET,
|
|
(data, wasEncrypted) => {
|
|
load_data(data, '%E');
|
|
},
|
|
'notificaciones',
|
|
mid
|
|
);
|
|
} else {
|
|
load_data(data || {});
|
|
}
|
|
})();
|
|
document.getElementById(btn_guardar).onclick = () => {
|
|
// Check if button is already disabled to prevent double-clicking
|
|
var guardarBtn = document.getElementById(btn_guardar);
|
|
if (guardarBtn.disabled) return;
|
|
|
|
// Validate before disabling button
|
|
if (document.getElementById(field_origen).value == '') {
|
|
alert('¡Hay que elegir una persona de origen!');
|
|
return;
|
|
}
|
|
if (document.getElementById(field_destino).value == '') {
|
|
alert('¡Hay que elegir una persona de origen!');
|
|
return;
|
|
}
|
|
|
|
// Disable button after validation passes
|
|
guardarBtn.disabled = true;
|
|
guardarBtn.style.opacity = '0.5';
|
|
|
|
var data = {
|
|
Fecha: document.getElementById(field_fecha).value,
|
|
Origen: document.getElementById(field_origen).value,
|
|
Destino: document.getElementById(field_destino).value,
|
|
Mensaje: document.getElementById(field_mensaje).value,
|
|
Respuesta: document.getElementById(field_respuesta).value,
|
|
Asunto: document.getElementById(field_asunto).value,
|
|
Estado: document.getElementById(field_estado).value.replace('%%', 'por_leer'),
|
|
};
|
|
document.getElementById('actionStatus').style.display = 'block';
|
|
DB.put('notificaciones', mid, data)
|
|
.then(() => {
|
|
toastr.success('Guardado!');
|
|
setTimeout(() => {
|
|
document.getElementById('actionStatus').style.display = 'none';
|
|
setUrlHash('avisos');
|
|
}, SAVE_WAIT);
|
|
})
|
|
.catch((e) => {
|
|
console.warn('DB.put error', e);
|
|
guardarBtn.disabled = false;
|
|
guardarBtn.style.opacity = '1';
|
|
document.getElementById('actionStatus').style.display = 'none';
|
|
toastr.error('Error al guardar la notificación');
|
|
});
|
|
};
|
|
document.getElementById(btn_borrar).onclick = () => {
|
|
if (confirm('¿Quieres borrar esta notificación?') == true) {
|
|
DB.del('notificaciones', mid).then(() => {
|
|
toastr.error('Borrado!');
|
|
setTimeout(() => {
|
|
setUrlHash('avisos');
|
|
}, SAVE_WAIT);
|
|
});
|
|
}
|
|
};
|
|
},
|
|
index: function () {
|
|
if (!checkRole('avisos')) {
|
|
setUrlHash('index');
|
|
return;
|
|
}
|
|
const tablebody = safeuuid();
|
|
var btn_new = safeuuid();
|
|
container.innerHTML = html`
|
|
<h1>Avisos</h1>
|
|
<button id="${btn_new}">Nuevo aviso</button>
|
|
<div id="cont"></div>
|
|
`;
|
|
TS_IndexElement(
|
|
'avisos',
|
|
[
|
|
{
|
|
key: 'Origen',
|
|
type: 'persona',
|
|
default: '',
|
|
label: 'Origen',
|
|
},
|
|
{
|
|
key: 'Destino',
|
|
type: 'persona',
|
|
default: '',
|
|
label: 'Destino',
|
|
},
|
|
{
|
|
key: 'Asunto',
|
|
type: 'raw',
|
|
default: '',
|
|
label: 'Asunto',
|
|
},
|
|
{
|
|
key: 'Estado',
|
|
type: 'raw',
|
|
default: '',
|
|
label: 'Estado',
|
|
},
|
|
],
|
|
'notificaciones',
|
|
document.querySelector('#cont'),
|
|
(data, new_tr) => {
|
|
new_tr.style.backgroundColor = '#FFCCCB';
|
|
if (data.Estado == 'leido') {
|
|
new_tr.style.backgroundColor = 'lightgreen';
|
|
}
|
|
}
|
|
);
|
|
if (!checkRole('avisos:edit')) {
|
|
document.getElementById(btn_new).style.display = 'none';
|
|
} else {
|
|
document.getElementById(btn_new).onclick = () => {
|
|
setUrlHash('avisos,' + safeuuid(''));
|
|
};
|
|
}
|
|
},
|
|
};
|