Add empleado, borrado del seeder, cambios esteticos y middleware.

This commit is contained in:
2026-06-10 15:57:51 -03:00
parent d0d61f7985
commit 2454ee3a23
20 changed files with 1039 additions and 200 deletions
+55 -37
View File
@@ -45,43 +45,53 @@ document.addEventListener('DOMContentLoaded', function () {
window.location.href = `/agenda/dia/${fecha}`
},
*/
eventClick: function (info) {
const evento = info.event;
const modal = document.getElementById("eventModal");
if (!modal) return;
const evento = info.event
modal.classList.remove("hidden");
document.body.style.overflow = "hidden";
const modal = document.getElementById("eventModal")
if (!modal) return
// Llenar campos dinámicos
document.getElementById("modalClientName").innerText = evento.extendedProps.client_name ?? 'Sin asignar';
document.getElementById("modalBikeModel").innerText = evento.extendedProps.bike_model ?? 'Sin modelo';
modal.classList.remove("hidden")
const statusMap = {
pending: 'Pendiente',
confirmed: 'Confirmado',
in_progress: 'En progreso',
ready: 'Listo',
delivered: 'Entregado'
}
const estado = statusMap[evento.extendedProps.status] ?? 'desconocido'
document.getElementById("modalTitle").innerText =
evento.extendedProps.description + " - " + estado
const fecha = evento.start
const hora = fecha.toLocaleTimeString("es-AR", {
hour: "2-digit",
minute: "2-digit",
// Formatear Fecha y Hora
const fecha = evento.start;
const dateStr = fecha.toLocaleDateString("es-AR", {
weekday: 'long',
day: 'numeric',
month: 'long',
year: 'numeric'
});
const timeStr = fecha.toLocaleTimeString("es-AR", {
hour: '2-digit',
minute: '2-digit',
hour12: false
})
});
const formattedDateTime = dateStr.charAt(0).toUpperCase() + dateStr.slice(1) + " a las " + timeStr;
document.getElementById("modalDateTime").innerText = formattedDateTime;
document.getElementById("modalDate").innerText =
"Hora: " + hora
const url = window.appointmentShowTemplate.replace(':id', evento.id);
document.getElementById("viewEventBtn").href = url;
const url = window.appointmentShowTemplate.replace(':id', evento.id)
document.getElementById("viewEventBtn").href = url
// Mapear Badge de Estado y clases correspondientes (estilo pastel idéntico a pendiente)
const statusMap = {
pending: { label: 'Pendiente', classes: ['bg-red-100', 'text-red-800', 'border-red-200', 'dark:bg-red-900/30', 'dark:text-red-400', 'dark:border-red-800'] },
confirmed: { label: 'Confirmado', classes: ['bg-blue-100', 'text-blue-800', 'border-blue-200', 'dark:bg-blue-900/30', 'dark:text-blue-400', 'dark:border-blue-800'] },
in_progress: { label: 'En progreso', classes: ['bg-orange-100', 'text-orange-800', 'border-orange-200', 'dark:bg-orange-950/30', 'dark:text-orange-400', 'dark:border-orange-800'] },
ready: { label: 'Listo', classes: ['bg-green-100', 'text-green-800', 'border-green-200', 'dark:bg-green-900/30', 'dark:text-green-450', 'dark:border-green-800'] },
delivered: { label: 'Entregado', classes: ['bg-neutral-100', 'text-neutral-800', 'border-neutral-200', 'dark:bg-neutral-800', 'dark:text-neutral-400', 'dark:border-neutral-700'] }
};
const statusObj = statusMap[evento.extendedProps.status] || { label: 'Desconocido', classes: ['bg-neutral-100', 'text-neutral-800', 'border-neutral-200'] };
const badge = document.getElementById("modalStatusBadge");
if (badge) {
badge.innerText = statusObj.label;
badge.className = "px-2.5 py-0.5 text-xs font-black rounded-full uppercase tracking-wider border";
statusObj.classes.forEach(c => badge.classList.add(c));
}
},
events: window.appointments ?? [],
@@ -109,14 +119,22 @@ document.addEventListener('DOMContentLoaded', function () {
calendar.render()
const closeBtn = document.getElementById("closeModal")
// Manejo del cierre del modal con múltiples triggers (Cerrar, Botón X y Click afuera)
const closeModalElements = [
document.getElementById("closeModal"),
document.getElementById("closeModalCross"),
document.getElementById("eventModal")
]
if (closeBtn) {
closeBtn.addEventListener("click", function () {
document.getElementById("eventModal").classList.add("hidden")
document.body.style.overflow = "auto"
})
}
closeModalElements.forEach(el => {
if (el) {
el.addEventListener("click", function (e) {
if (el.id === "eventModal" && e.target !== el) return;
document.getElementById("eventModal").classList.add("hidden")
document.body.style.overflow = "auto"
})
}
})
})