corrige zona horaria en votación: TZ=America/Santiago en contenedor
El contenedor corría en UTC causando que la ventana horaria no coincidiera con la hora local. Se agrega TZ en docker-compose y se muestra la hora actual del servidor en el panel de votación. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -244,6 +244,7 @@ def voting_admin(request: Request, db: Session = Depends(get_db)):
|
|||||||
"config": config,
|
"config": config,
|
||||||
"results": results,
|
"results": results,
|
||||||
"total_votes": total_votes,
|
"total_votes": total_votes,
|
||||||
|
"server_time": datetime.now().strftime("%H:%M:%S"),
|
||||||
"error": None,
|
"error": None,
|
||||||
"success": None,
|
"success": None,
|
||||||
},
|
},
|
||||||
@@ -261,6 +262,8 @@ def update_voting_config(
|
|||||||
_require_admin(request)
|
_require_admin(request)
|
||||||
config = _get_or_create_config(db)
|
config = _get_or_create_config(db)
|
||||||
|
|
||||||
|
now_str = datetime.now().strftime("%H:%M:%S")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
datetime.strptime(start_time, "%H:%M")
|
datetime.strptime(start_time, "%H:%M")
|
||||||
datetime.strptime(end_time, "%H:%M")
|
datetime.strptime(end_time, "%H:%M")
|
||||||
@@ -273,6 +276,7 @@ def update_voting_config(
|
|||||||
"config": config,
|
"config": config,
|
||||||
"results": results,
|
"results": results,
|
||||||
"total_votes": sum(r["votes"] for r in results),
|
"total_votes": sum(r["votes"] for r in results),
|
||||||
|
"server_time": now_str,
|
||||||
"error": "Formato de hora inválido. Use HH:MM",
|
"error": "Formato de hora inválido. Use HH:MM",
|
||||||
"success": None,
|
"success": None,
|
||||||
},
|
},
|
||||||
@@ -288,6 +292,7 @@ def update_voting_config(
|
|||||||
"config": config,
|
"config": config,
|
||||||
"results": results,
|
"results": results,
|
||||||
"total_votes": sum(r["votes"] for r in results),
|
"total_votes": sum(r["votes"] for r in results),
|
||||||
|
"server_time": now_str,
|
||||||
"error": "La hora de inicio debe ser anterior a la hora de fin",
|
"error": "La hora de inicio debe ser anterior a la hora de fin",
|
||||||
"success": None,
|
"success": None,
|
||||||
},
|
},
|
||||||
@@ -307,6 +312,7 @@ def update_voting_config(
|
|||||||
"config": config,
|
"config": config,
|
||||||
"results": results,
|
"results": results,
|
||||||
"total_votes": sum(r["votes"] for r in results),
|
"total_votes": sum(r["votes"] for r in results),
|
||||||
|
"server_time": now_str,
|
||||||
"error": None,
|
"error": None,
|
||||||
"success": "Configuración guardada",
|
"success": "Configuración guardada",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -54,12 +54,15 @@
|
|||||||
<button type="submit" class="btn-primary">Guardar configuración</button>
|
<button type="submit" class="btn-primary">Guardar configuración</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div class="status-badge {% if config.is_active %}status-active{% else %}status-inactive{% endif %}">
|
<div class="status-row">
|
||||||
{% if config.is_active %}
|
<div class="status-badge {% if config.is_active %}status-active{% else %}status-inactive{% endif %}">
|
||||||
🟢 Activa · Ventana: {{ config.start_time }} – {{ config.end_time }}
|
{% if config.is_active %}
|
||||||
{% else %}
|
🟢 Activa · Ventana: {{ config.start_time }} – {{ config.end_time }}
|
||||||
🔴 Inactiva
|
{% else %}
|
||||||
{% endif %}
|
🔴 Inactiva
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="server-time">🕐 Hora del servidor: <strong>{{ server_time }}</strong></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -140,6 +143,8 @@
|
|||||||
}
|
}
|
||||||
.status-active { background: rgba(29,185,84,.15); color: var(--green); border: 1px solid rgba(29,185,84,.3); }
|
.status-active { background: rgba(29,185,84,.15); color: var(--green); border: 1px solid rgba(29,185,84,.3); }
|
||||||
.status-inactive { background: rgba(136,136,136,.1); color: var(--text-muted); border: 1px solid #333; }
|
.status-inactive { background: rgba(136,136,136,.1); color: var(--text-muted); border: 1px solid #333; }
|
||||||
|
.status-row { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
|
||||||
|
.server-time { font-size: .8rem; color: var(--text-muted); }
|
||||||
|
|
||||||
.results-header { display: flex; justify-content: space-between; align-items: center; }
|
.results-header { display: flex; justify-content: space-between; align-items: center; }
|
||||||
.results-list { display: flex; flex-direction: column; gap: .5rem; margin-top: .25rem; }
|
.results-list { display: flex; flex-direction: column; gap: .5rem; margin-top: .25rem; }
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
env_file: .env
|
env_file: .env
|
||||||
|
environment:
|
||||||
|
TZ: America/Santiago
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
Reference in New Issue
Block a user