Akeneo permet de configurer des règles de devoirs en mode Hard qui bloquent totalement la création. Or certains cas légitimes (sorties scolaires, événements exceptionnels) nécessitent de passer outre ces règles. Sans mécanisme d'exception, l'enseignant est bloqué et doit contacter manuellement la direction. Cette implémentation ajoute un flux complet d'exception : l'enseignant justifie sa demande (min 20 caractères), le devoir est créé immédiatement, et la direction est notifiée par email. Le handler vérifie côté serveur que les règles sont réellement bloquantes avant d'accepter l'exception, empêchant toute fabrication de fausses exceptions via l'API. La direction dispose d'un rapport filtrable par période, enseignant et type de règle.
113 lines
3.2 KiB
Twig
113 lines
3.2 KiB
Twig
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Exception aux règles de devoirs - Classeo</title>
|
|
<style>
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
line-height: 1.6;
|
|
color: #333;
|
|
max-width: 600px;
|
|
margin: 0 auto;
|
|
padding: 20px;
|
|
}
|
|
.header {
|
|
text-align: center;
|
|
padding: 20px 0;
|
|
border-bottom: 2px solid #4f46e5;
|
|
}
|
|
.header h1 {
|
|
color: #4f46e5;
|
|
margin: 0;
|
|
font-size: 28px;
|
|
}
|
|
.content {
|
|
padding: 30px 0;
|
|
}
|
|
.warning-icon {
|
|
text-align: center;
|
|
padding: 20px;
|
|
}
|
|
.warning-icon span {
|
|
display: inline-block;
|
|
width: 60px;
|
|
height: 60px;
|
|
background-color: #f59e0b;
|
|
border-radius: 50%;
|
|
line-height: 60px;
|
|
color: white;
|
|
font-size: 30px;
|
|
}
|
|
.info-box {
|
|
background-color: #f3f4f6;
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
margin: 20px 0;
|
|
}
|
|
.info-box p {
|
|
margin: 5px 0;
|
|
}
|
|
.justification-box {
|
|
background-color: #fffbeb;
|
|
border: 1px solid #fde68a;
|
|
border-radius: 8px;
|
|
padding: 15px 20px;
|
|
margin: 20px 0;
|
|
}
|
|
.justification-box p.label {
|
|
font-weight: bold;
|
|
color: #92400e;
|
|
margin: 0 0 5px;
|
|
}
|
|
.justification-box p.text {
|
|
margin: 0;
|
|
font-style: italic;
|
|
}
|
|
.footer {
|
|
text-align: center;
|
|
padding: 20px 0;
|
|
border-top: 1px solid #e5e7eb;
|
|
color: #6b7280;
|
|
font-size: 14px;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header">
|
|
<h1>Classeo</h1>
|
|
</div>
|
|
|
|
<div class="content">
|
|
<div class="warning-icon">
|
|
<span>!</span>
|
|
</div>
|
|
|
|
<h2 style="text-align: center;">Exception aux règles de devoirs</h2>
|
|
|
|
<p>Bonjour,</p>
|
|
|
|
<p>Un enseignant a demandé une exception aux règles de devoirs de votre établissement.</p>
|
|
|
|
<div class="info-box">
|
|
<p><strong>Enseignant :</strong> {{ teacherName }}</p>
|
|
<p><strong>Devoir :</strong> {{ homeworkTitle }}</p>
|
|
<p><strong>Date d'échéance :</strong> {{ dueDate }}</p>
|
|
<p><strong>Règle(s) contournée(s) :</strong> {{ ruleTypes|join(', ') }}</p>
|
|
</div>
|
|
|
|
<div class="justification-box">
|
|
<p class="label">Justification de l'enseignant :</p>
|
|
<p class="text">{{ justification }}</p>
|
|
</div>
|
|
|
|
<p>Ce devoir a été créé immédiatement. Aucune action n'est requise de votre part, mais vous pouvez consulter le rapport des exceptions dans votre espace direction.</p>
|
|
</div>
|
|
|
|
<div class="footer">
|
|
<p>Cet email a été envoyé automatiquement par Classeo.</p>
|
|
</div>
|
|
</body>
|
|
</html>
|