{% extends "base.html" %} {% block title %}Horaires et suivi annuel — GMAO{% endblock %} {% block content %}

Horaires et suivi des heures

Configurez vos profils, permanences et écarts d'heures.

À réaliser

{{ '%d h %02d'|format(required_minutes // 60, required_minutes % 60) }}

1607 h moins pénibilité
Prévu par calendrier

{{ '%d h %02d'|format(planned_minutes // 60, planned_minutes % 60) }}

Réalisé saisi

{{ '%d h %02d'|format(actual_minutes // 60, actual_minutes % 60) }}

Solde réalisé / dû

{{ '+' if variance_minutes >= 0 else '' }}{{ '%d h %02d'|format((variance_minutes|abs) // 60, (variance_minutes|abs) % 60) }}

{% if variance_minutes >= 0 %}heures à récupérer{% else %}heures à faire{% endif %}
Objectif annuel {{ year }}
Horaires types (maximum 3){{ templates|length }}/3
{% for template in templates %}
{{ template.name }}
{{ template.start_time.strftime('%H:%M') }}–{{ template.end_time.strftime('%H:%M') }}{% if template.lunch_start %} · pause {{ template.lunch_start.strftime('%H:%M') }}–{{ template.lunch_end.strftime('%H:%M') }}{% endif %}
{% else %}

Aucun profil défini.

{% endfor %} {% if templates|length < 3 %}
{% endif %}
Affectation par jour
{% for day_num, day_name in days.items() %}
{{ day_name }}
{% endfor %}
Importer les calendriers
Ajouter une permanenceUne permanence ouvre une date précise dans une période de vacances.
Saisir un retard ou une heure supplémentaire
Historique {{ year }}
{% for entry in entries[:50] %}{% else %}{% endfor %}
DateTypePrévuRéaliséÉcartNote
{{ entry.work_date.strftime('%d/%m/%Y') }}{{ entry.entry_type }}{{ entry.planned_minutes }} min{{ entry.actual_minutes }} min{{ '+' if entry.variance_minutes > 0 else '' }}{{ entry.variance_minutes }} min{{ entry.note or '—' }}
Aucune saisie.
{% endblock %}