diff --git a/entrypoint.sh b/entrypoint.sh index 2f8402e..76a388f 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/sh set -e echo "Corriendo migraciones..." -node node_modules/prisma/build/index.js migrate deploy +node node_modules/prisma/build/index.js db push --accept-data-loss echo "Migraciones OK. Iniciando app..." exec node_modules/.bin/next start diff --git a/prisma/schema.prisma b/prisma/schema.prisma index efa27a0..719b433 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -53,6 +53,7 @@ model Turno { fechaFin DateTime kilometros Int estado EstadoTurno @default(PENDIENTE) + comentario String? createdAt DateTime @default(now()) cliente Cliente @relation(fields: [clienteId], references: [id]) diff --git a/src/app/admin/dashboard/page.tsx b/src/app/admin/dashboard/page.tsx index 3b7ec31..6890220 100644 --- a/src/app/admin/dashboard/page.tsx +++ b/src/app/admin/dashboard/page.tsx @@ -18,6 +18,8 @@ export default function AdminDashboard() { const [fecha, setFecha] = useState(() => new Date().toISOString().slice(0, 10)); const [turnos, setTurnos] = useState([]); const [loading, setLoading] = useState(true); + const [completando, setCompletando] = useState>(new Set()); + const [comentarios, setComentarios] = useState>({}); useEffect(() => { cargar(); }, [fecha]); @@ -29,15 +31,26 @@ export default function AdminDashboard() { setLoading(false); } - async function cambiarEstado(id: string, estado: string) { + async function cambiarEstado(id: string, estado: string, comentario?: string) { await fetch(`/api/admin/turnos/${id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ estado }), + body: JSON.stringify({ estado, comentario }), }); + setCompletando((prev) => { const s = new Set(prev); s.delete(id); return s; }); + setComentarios((prev) => { const c = { ...prev }; delete c[id]; return c; }); cargar(); } + function iniciarCompletado(id: string) { + setCompletando((prev) => new Set(prev).add(id)); + } + + function cancelarCompletado(id: string) { + setCompletando((prev) => { const s = new Set(prev); s.delete(id); return s; }); + setComentarios((prev) => { const c = { ...prev }; delete c[id]; return c; }); + } + function formatHora(iso: string) { return new Date(iso).toLocaleTimeString("es-AR", { hour: "2-digit", minute: "2-digit" }); } @@ -45,12 +58,12 @@ export default function AdminDashboard() { return (
-

Turnos del día

+

Turnos del día

setFecha(e.target.value)} - className="border border-gray-300 rounded-lg px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-blue-500" + className="border border-gray-300 rounded-lg px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-blue-500 w-full sm:w-auto" />
@@ -96,11 +109,40 @@ export default function AdminDashboard() {
)} - {t.estado === "CONFIRMADO" && ( - )} + + {t.estado === "CONFIRMADO" && completando.has(t.id) && ( +
+