<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bulletin Annuelle</title>
<style>
/* Style global du corps de la page */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
width: 100%;
box-sizing: border-box;
}
/* Header */
header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid #000;
padding-bottom: 10px;
flex-wrap: wrap; /* Permet de gérer la responsivité */
}
.header-section {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
margin: 0 10px;
}
.header-section h3 {
margin: 0;
font-size: 1rem;
font-weight: bold;
}
.header-section p {
margin: 0;
font-size: 0.8rem;
}
.school-logo {
border: 2px dashed #000;
width: 80px;
height: 80px;
margin: 10px 0;
display: flex;
justify-content: center;
align-items: center;
font-weight: bold;
}
/* Conteneur principal pour le bulletin */
.main-container {
width: 95%; /* Utilise 90% de la largeur de l'écran */
max-width: 1250px; /* Largeur maximale pour les grands écrans */
border: 1px solid black;
padding: 20px;
margin: 0 auto; /* Centre le conteneur */
}
/* Titre du bulletin */
.bulletin-title {
text-align: center;
font-weight: bold;
font-size: 20px;
}
/* Style pour les tables */
table {
width: 100%; /* La table prend toute la largeur du conteneur */
border-collapse: collapse; /* Supprime les espaces entre les cellules */
margin-top: 10px; /* Espace au-dessus de la table */
page-break-inside: auto;
}
thead {
display: table-row-group;
}
/* Style pour les cellules de la table */
td, th {
border: 1px solid black;
padding: 10px; /* Espace intérieur */
text-align: center; /* Centrer le texte */
}
.student-photo {
width: 100px; /* Largeur pour la photo de l'élève */
}
/* Style pour les cases à cocher */
.checkbox-label {
margin: 0 10px; /* Espace entre les cases */
}
#section1, #section2 {
font-weight: bold;
}
/* Responsive */
@media (max-width: 768px) {
.header-section {
font-size: 0.8rem; /* Réduit la taille de la police pour les petits écrans */
}
}
</style>
</head>
<body>
{% for std in reverse ? students|reverse : students %}
<page size="A4">
{{ include('classroom/partials/reportcard_header.html.twig') }}
<div class="main-container">
<div class="bulletin-title">
{% if room.level.cycle.section.name == "Francophone" %}
BULLETIN SCOLAIRE
ANNÉE SCOLAIRE : {{ year.wording }}
{% else %}
REPORT CARD
SCHOOL YEAR : {{ year.wording }}
{% endif %}
</div>
<table id="section1" border="1" style="line-height: {{ lineHeight }}em; ">
<tr>
<td rowspan="4" class="student-photo">
{% if(fileExists[std.id])%}
{% set imagePath = absolute_url(asset('assets/images/student/'~ std.imageName )) %}
{% else %}
{% if std.gender %}
{% set imagePath = absolute_url(asset('assets/images/student/female-default-avatar.jpg')) %}
{% else %}
{% set imagePath = absolute_url(asset('assets/images/student/male-default-avatar.jpg')) %}
{% endif %}
{% endif %}
<img style="height:150px;width:150px;" src={{ imagePath }} />
</td>
<td colspan="2">
{{ std.lastname|raw }} {{ std.firstname|raw }}
</td>
<td>
{{ room.name|raw }}
</td>
</tr>
<tr>
<td width="40%"> <span>
{% if room.level.cycle.section.name == "Francophone" %}
Né(e) le :
{% if std.birthday %}
{{ std.birthday|date('Y-m-d') }}
{% endif %}
{% endif %}
<br/>
{% if room.level.cycle.section.name == "Francophone" %}
à
{% else %}
at
{% endif %}
:
{{ std.birthplace|raw }}
</span></td>
<td width="20%">
{% if room.level.cycle.section.name == "Francophone" %}
Genre
{% else %}
Gender
{% endif %} :
<span>
{% if std.gender %}
F
{% else %}
M
{% endif %}
</span>
</td>
<td width="40%">Effectif :{{ students|length }} </td>
</tr>
<tr>
<td>Id : {{ std.matricule }}</td>
<td>Redoublant :
<label class="checkbox-label"><input type="checkbox"> Oui</label>
<label class="checkbox-label"><input type="checkbox"> Non</label>
</td>
<td rowspan="2">
{% if room.level.cycle.section.name == "Francophone" %}
Professeur principal : {{ mainTeacher.fullName }}
{% else %}
Head teacher : {{ mainTeacher.fullName }}
{% endif %}
</td>
</tr>
<tr>
<td colspan="2">
{% if room.level.cycle.section.name == "Francophone" %}
Parents / Tuteurs : {{ std.fatherName }} ({{ std.primaryContact }})
{% else %}
Parents / Guardians : {{ mainTeacher.fullName }}
{% endif %}
</td>
</tr>
</table>
<table style="line-height: {{ lineHeight }}em; ">
<thead>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<th rowspan="2">MATIÈRES ET NOM DE L'ENSEIGNANT</th>
<th>Notes trim./20</th>
<th>Moy. Ann./20</th>
<th>Coef.</th>
<th>Moy. Ann. x Coef.</th>
<th>Rang Ann.</th>
<th>[Min – Max]</th>
<th>Appréciations de l'enseignant</th>
{% else %}
<th rowspan="2">SUBJECTS AND TEACHER NAME</th>
<th>Quat. /20</th>
<th>Ann Avg./20</th>
<th>Coef.</th>
<th>Ann Avg. x Coef.</th>
<th>Ann. Rank</th>
<th>[Min – Max]</th>
<th>Teacher's Appreciations</th>
{% endif %}
</tr>
</thead>
<tbody>
{% set totalNCoef = 0 %}
{% set totalCoef = 0 %}
{% for mark in data %}
{% if std.id == mark.std and (mark.weight) != 0 %}
<tr>
{% set totalNCoef = totalNCoef + mark.coef * (mark.value * mark.weight ) %}
{% set totalCoef = totalCoef + mark.coef * mark.weight %}
<td rowspan="3"> <b>{{ mark.wording }}</b><br>M/Mme <i>{{ mark.full_name }}</i></td>
<td>{{ mark.value1|round(2)}}</td>
<td rowspan="3" class="notetrim" >{{ mark.value |round(2)}}</td>
<td rowspan="3">
{% if (mark.weight) != 0 %}
{{ mark.coef }}
{% else %}
{% endif %}
</td>
<td rowspan="3">
{% if (mark.weight) != 0 %}
{{ (mark.value * mark.coef)|round(2) }}
{% endif %}
</td>
<td rowspan="3">{{mark.rank}}</td>
<td rowspan="3">[ {{ mark.mini|round(2) ~ ' - ' ~ mark.maxi|round(2) }} ]</td>
<td rowspan="3"></td>
</tr>
<tr>
<td>{{ mark.value2|round(2) }}</td>
</tr>
<tr>
<td>{{ mark.value3|round(2) }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
<table id="section2" style="line-height: {{ lineHeight }}em; font-size:{{ headerFontSize }}em;">
<tbody>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<td colspan="4">Discipline</td>
<td colspan="4">Travail de l’élève</td>
<td colspan="2">Profil de la classe</td>
{% else %}
<td colspan="4">Discipline</td>
<td colspan="4">Student work</td>
<td colspan="2">Class profile</td>
{% endif %}
</tr>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<td>Abs. Ann. Non. J. (h)</td>
<td></td>
<td>Avertissement de conduite</td>
<td> </td>
<td>TOTAL GENERAL</td>
<td> </td>
<td colspan="2"><b>DÉCISION DU CONSEIL DE CLASSE</b></td>
<td>Moy. Gen. An.</td>
{% else %}
<td>Unj. Ann. Absences (h)</td>
<td></td>
<td>Warning</td>
<td> </td>
<td>GRAND TOTAL</td>
<td> </td>
<td colspan="2"><b>CLASS COUNCIL DECISION</b></td>
<td>Gen. An. Avg. </td>
{% endif %}
<td>{{ ( genMean )|round(2,'floor') }}</td>
</tr>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<td>Abs Ann. Just. (h) </td>
<td>{{ abscences[std.id] is defined ? abscences[std.id] : 0 }}</td>
<td>Blâme de conduite</td>
<td> </td>
<td>COEF.</td>
<td>{{ totalCoef }}</td>
<td >Promu (e) </td>
{% else %}
<td>Just. Ann. Abs. (h) </td>
<td>{{ abscences[std.id] is defined ? abscences[std.id] : 0 }}</td>
<td>Blame</td>
<td> </td>
<td>COEF.</td>
<td>{{ totalCoef }}</td>
<td >Promoted </td>
{% endif %}
<td> </td>
<td>[Min – Max]</td>
<td>[ ]</td>
</tr>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<td>Retards (nbre de fois)</td>
<td> </td>
<td>Exclusions (jours)</td>
<td> </td>
<td>MOYENNE ANNUELLE</td>
<td>
{% if totalCoef > 0 %}
{{(totalNCoef/totalCoef)|round(2,'floor') }}
{% endif %}
</td>
<td >Redouble</td>
<td> </td>
<td>Nombre de moyennes</td>
{% else %}
<td>Late arrivals </td>
<td> </td>
<td>Exclusions (days)</td>
<td> </td>
<td>ANNUAL AVERAGE</td>
<td>{{(totalNCoef/totalCoef)|round(2,'floor') }}</td>
<td >Redouble</td>
<td> </td>
<td>Number of averages</td>
{% endif %}
<td> </td>
</tr>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<td>Consignes (h)</td>
<td> </td>
<td>Exclusion définitive</td>
<td> </td>
<td>Cote annuelle</td>
<td>
{% if ( std.id in ranks|keys ) %}
{{ ranks[std.id] }} / {{ ranks|length }}
{% endif %}
</td>
<td >Exclu(e) pour :</td>
<td> </td>
<td>Taux de réussite</td>
<td> </td>
{% else %}
<td>Instructions (h)</td>
<td> </td>
<td>Permanent exclusion</td>
<td> </td>
<td>Annual rank</td>
<td> {% if ( std.id in ranks|keys ) %}
{{ ranks[std.id] }} / {{ ranks|length }}
{% endif %} </td>
<td >Excluded for:</td>
<td> </td>
<td>Success rate</td>
<td> </td>
{% endif %}
</tr>
<tr>
{% if room.level.cycle.section.name == "Francophone" %}
<td colspan="4" >Appréciation du travail de l’élève <br><br> <br></td>
<td colspan="2" >Visa du parent / Tuteur<br><br> <br><br></td>
<td colspan="2" >Visa de l'enseignant pricipal<br><br> <br><br> <i>{{ mainTeacher.fullName }}</i></td>
<td colspan="2" >Le Chef d’établissement<br><br> <br><br></td>
{% else %}
<td colspan="4" >Appreciation of student work <br><br> <br></td>
<td colspan="2" >Parent/Guardian Visa<br><br> <br><br></td>
<td colspan="2" >Head teacher visa<br><br> <br><br> <i>{{ mainTeacher.fullName }}</i></td>
<td colspan="2" >The Head of Establishment<br><br> <br><br></td>
{% endif %}
</tr>
</tbody>
</table>
</div>
{% if copyright %}
<div>
<h9>
<i>
{% if room.level.cycle.section.name == "Francophone" %}
Conception et implementation du groupe Polyinformatique, Tel : +1(450)6267192, email: [email protected]
{% else %}
Design and implementation of Polyinformatique group, Tel: +1(450)6267192, mail: [email protected]
{% endif %}
</i>
</h9>
</div>
{% endif %}
</page>
<br/>
<br/>
{% endfor %}
<script type="text/javascript" src="{{ absolute_url(asset('assets/js/jquery-3.1.1.js')) }}"></script>
<script type="text/javascript" src="{{ absolute_url(asset('assets/js/repportCard2024.js')) }}"></script>
</body
</html>