Bloqueo de días, override del admin y edición del nombre de ronda

- Admin puede bloquear/desbloquear días (rounds.blocked) desde la vista de
  ocupación; los trabajadores no pueden elegirlos (🔒).
- El admin puede asignar cualquier día aunque supere el límite por día/cargo
  o esté bloqueado (override explícito en requests/set).
- Editar el nombre de la ronda con edición inline en el calendario
  (PUT /api/admin/rounds/:id/name).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-26 23:21:20 +02:00
parent 9c9d2d25f9
commit bc4e232a80
6 changed files with 177 additions and 8 deletions
+47
View File
@@ -309,6 +309,7 @@ input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(194, 86, 4
.legend .sw--pending { background: var(--pending); border-color: #c98e1d; }
.legend .sw--approved { background: var(--approved); border-color: var(--approved); }
.legend .sw--rejected { background: #f6e3df; border-color: #e2b7af; }
.legend .sw--blocked { background: #d3c6a8; border-color: #bdae8c; }
/* ---------- calendario ---------- */
@@ -412,6 +413,22 @@ input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(194, 86, 4
color: #a99b7e;
cursor: default;
}
/* día bloqueado por el admin: no elegible por nadie */
.day.blocked {
background: repeating-linear-gradient(
-45deg, #e6dccb, #e6dccb 4px, #d3c6a8 4px, #d3c6a8 8px
);
color: #8f836a;
cursor: default;
}
.day.blocked::after {
content: '🔒';
position: absolute;
top: 2px;
left: 3px;
font-size: 9px;
line-height: 1;
}
.day .count.is-full { background: var(--rejected); }
.day .count {
@@ -777,6 +794,36 @@ body.cal-open .page--wide { max-width: 1080px; }
}
.cday .rchip.is-full { background: var(--rejected); color: #fff; }
/* días bloqueados por el admin (no elegibles por nadie) */
.cday--blocked {
background: repeating-linear-gradient(
-45deg, #efe6d2, #efe6d2 4px, #e6dabf 4px, #e6dabf 8px
);
color: #a99b7e;
border-color: #cdbf9d;
}
.cday--blocked::after,
.cday.is-blocked::after {
content: '🔒';
position: absolute;
top: 1px;
left: 3px;
font-size: 9px;
line-height: 1;
}
/* editor del nombre de la ronda */
.cal-name-editor {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
margin: 6px 0 4px;
}
.cal-name-editor input { width: min(320px, 100%); margin: 0; }
.cal-name-editor .btn { margin-top: 0; }
#cal-name-edit { margin-top: 0; }
/* barra de acción del admin (aprobar / rechazar / pendiente / quitar) */
.actionbar {
position: fixed;