templates/classroom/reportcard/annual_2024.html.twig line 1

Open in your IDE?
  1. <!DOCTYPE html>
  2. <html lang="fr">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Bulletin Annuelle</title>
  7. <style>
  8. /* Style global du corps de la page */
  9. body {
  10. font-family: Arial, sans-serif;
  11. margin: 0;
  12. padding: 0;
  13. width: 100%;
  14. box-sizing: border-box;
  15. }
  16. /* Header */
  17. header {
  18. display: flex;
  19. justify-content: space-between;
  20. align-items: center;
  21. border-bottom: 2px solid #000;
  22. padding-bottom: 10px;
  23. flex-wrap: wrap; /* Permet de gérer la responsivité */
  24. }
  25. .header-section {
  26. display: flex;
  27. flex-direction: column;
  28. align-items: center;
  29. text-align: center;
  30. margin: 0 10px;
  31. }
  32. .header-section h3 {
  33. margin: 0;
  34. font-size: 1rem;
  35. font-weight: bold;
  36. }
  37. .header-section p {
  38. margin: 0;
  39. font-size: 0.8rem;
  40. }
  41. .school-logo {
  42. border: 2px dashed #000;
  43. width: 80px;
  44. height: 80px;
  45. margin: 10px 0;
  46. display: flex;
  47. justify-content: center;
  48. align-items: center;
  49. font-weight: bold;
  50. }
  51. /* Conteneur principal pour le bulletin */
  52. .main-container {
  53. width: 95%; /* Utilise 90% de la largeur de l'écran */
  54. max-width: 1250px; /* Largeur maximale pour les grands écrans */
  55. border: 1px solid black;
  56. padding: 20px;
  57. margin: 0 auto; /* Centre le conteneur */
  58. }
  59. /* Titre du bulletin */
  60. .bulletin-title {
  61. text-align: center;
  62. font-weight: bold;
  63. font-size: 20px;
  64. }
  65. /* Style pour les tables */
  66. table {
  67. width: 100%; /* La table prend toute la largeur du conteneur */
  68. border-collapse: collapse; /* Supprime les espaces entre les cellules */
  69. margin-top: 10px; /* Espace au-dessus de la table */
  70. page-break-inside: auto;
  71. }
  72. thead {
  73. display: table-row-group;
  74. }
  75. /* Style pour les cellules de la table */
  76. td, th {
  77. border: 1px solid black;
  78. padding: 10px; /* Espace intérieur */
  79. text-align: center; /* Centrer le texte */
  80. }
  81. .student-photo {
  82. width: 100px; /* Largeur pour la photo de l'élève */
  83. }
  84. /* Style pour les cases à cocher */
  85. .checkbox-label {
  86. margin: 0 10px; /* Espace entre les cases */
  87. }
  88. #section1, #section2 {
  89. font-weight: bold;
  90. }
  91. /* Responsive */
  92. @media (max-width: 768px) {
  93. .header-section {
  94. font-size: 0.8rem; /* Réduit la taille de la police pour les petits écrans */
  95. }
  96. }
  97. </style>
  98. </head>
  99. <body>
  100. {% for std in reverse ? students|reverse : students %}
  101. <page size="A4">
  102. {{ include('classroom/partials/reportcard_header.html.twig') }}
  103. <div class="main-container">
  104. <div class="bulletin-title">
  105. {% if room.level.cycle.section.name == "Francophone" %}
  106. BULLETIN SCOLAIRE
  107. ANNÉE SCOLAIRE : {{ year.wording }}
  108. {% else %}
  109. REPORT CARD
  110. SCHOOL YEAR : {{ year.wording }}
  111. {% endif %}
  112. </div>
  113. <table id="section1" border="1" style="line-height: {{ lineHeight }}em; ">
  114. <tr>
  115. <td rowspan="4" class="student-photo">
  116. {% if(fileExists[std.id])%}
  117. {% set imagePath = absolute_url(asset('assets/images/student/'~ std.imageName )) %}
  118. {% else %}
  119. {% if std.gender %}
  120. {% set imagePath = absolute_url(asset('assets/images/student/female-default-avatar.jpg')) %}
  121. {% else %}
  122. {% set imagePath = absolute_url(asset('assets/images/student/male-default-avatar.jpg')) %}
  123. {% endif %}
  124. {% endif %}
  125. <img style="height:150px;width:150px;" src={{ imagePath }} />
  126. </td>
  127. <td colspan="2">
  128. {{ std.lastname|raw }} &nbsp;&nbsp; {{ std.firstname|raw }}
  129. </td>
  130. <td>
  131. {{ room.name|raw }}
  132. </td>
  133. </tr>
  134. <tr>
  135. <td width="40%"> <span>
  136. {% if room.level.cycle.section.name == "Francophone" %}
  137. N&eacute(e) le &nbsp;&nbsp; : &nbsp;&nbsp;
  138. {% if std.birthday %}
  139. {{ std.birthday|date('Y-m-d') }}
  140. {% endif %}
  141. {% endif %}
  142. <br/>
  143. {% if room.level.cycle.section.name == "Francophone" %}
  144. &agrave; &nbsp;&nbsp;
  145. {% else %}
  146. at &nbsp;&nbsp;
  147. {% endif %}
  148. : &nbsp;&nbsp;
  149. {{ std.birthplace|raw }}
  150. </span></td>
  151. <td width="20%">
  152. {% if room.level.cycle.section.name == "Francophone" %}
  153. Genre
  154. {% else %}
  155. Gender
  156. {% endif %} :
  157. <span>
  158. {% if std.gender %}
  159. F
  160. {% else %}
  161. M
  162. {% endif %}
  163. </span>
  164. </td>
  165. <td width="40%">Effectif :{{ students|length }} </td>
  166. </tr>
  167. <tr>
  168. <td>Id : {{ std.matricule }}</td>
  169. <td>Redoublant :
  170. <label class="checkbox-label"><input type="checkbox"> Oui</label>
  171. <label class="checkbox-label"><input type="checkbox"> Non</label>
  172. </td>
  173. <td rowspan="2">
  174. {% if room.level.cycle.section.name == "Francophone" %}
  175. Professeur principal : {{ mainTeacher.fullName }}
  176. {% else %}
  177. Head teacher : {{ mainTeacher.fullName }}
  178. {% endif %}
  179. </td>
  180. </tr>
  181. <tr>
  182. <td colspan="2">
  183. {% if room.level.cycle.section.name == "Francophone" %}
  184. Parents / Tuteurs : {{ std.fatherName }} ({{ std.primaryContact }})
  185. {% else %}
  186. Parents / Guardians : {{ mainTeacher.fullName }}
  187. {% endif %}
  188. </td>
  189. </tr>
  190. </table>
  191. <table style="line-height: {{ lineHeight }}em; ">
  192. <thead>
  193. <tr>
  194. {% if room.level.cycle.section.name == "Francophone" %}
  195. <th rowspan="2">MATIÈRES ET NOM DE L'ENSEIGNANT</th>
  196. <th>Notes trim./20</th>
  197. <th>Moy. Ann./20</th>
  198. <th>Coef.</th>
  199. <th>Moy. Ann. x Coef.</th>
  200. <th>Rang Ann.</th>
  201. <th>[Min – Max]</th>
  202. <th>Appréciations de l'enseignant</th>
  203. {% else %}
  204. <th rowspan="2">SUBJECTS AND TEACHER NAME</th>
  205. <th>Quat. /20</th>
  206. <th>Ann Avg./20</th>
  207. <th>Coef.</th>
  208. <th>Ann Avg. x Coef.</th>
  209. <th>Ann. Rank</th>
  210. <th>[Min – Max]</th>
  211. <th>Teacher's Appreciations</th>
  212. {% endif %}
  213. </tr>
  214. </thead>
  215. <tbody>
  216. {% set totalNCoef = 0 %}
  217. {% set totalCoef = 0 %}
  218. {% for mark in data %}
  219. {% if std.id == mark.std and (mark.weight) != 0 %}
  220. <tr>
  221. {% set totalNCoef = totalNCoef + mark.coef * (mark.value * mark.weight ) %}
  222. {% set totalCoef = totalCoef + mark.coef * mark.weight %}
  223. <td rowspan="3"> <b>{{ mark.wording }}</b><br>M/Mme &nbsp;&nbsp;<i>{{ mark.full_name }}</i></td>
  224. <td>{{ mark.value1|round(2)}}</td>
  225. <td rowspan="3" class="notetrim" >{{ mark.value |round(2)}}</td>
  226. <td rowspan="3">
  227. {% if (mark.weight) != 0 %}
  228. {{ mark.coef }}
  229. {% else %}
  230. {% endif %}
  231. </td>
  232. <td rowspan="3">
  233. {% if (mark.weight) != 0 %}
  234. {{ (mark.value * mark.coef)|round(2) }}
  235. {% endif %}
  236. </td>
  237. <td rowspan="3">{{mark.rank}}</td>
  238. <td rowspan="3">[ {{ mark.mini|round(2) ~ ' - ' ~ mark.maxi|round(2) }} ]</td>
  239. <td rowspan="3"></td>
  240. </tr>
  241. <tr>
  242. <td>{{ mark.value2|round(2) }}</td>
  243. </tr>
  244. <tr>
  245. <td>{{ mark.value3|round(2) }}</td>
  246. </tr>
  247. {% endif %}
  248. {% endfor %}
  249. </tbody>
  250. </table>
  251. <table id="section2" style="line-height: {{ lineHeight }}em; font-size:{{ headerFontSize }}em;">
  252. <tbody>
  253. <tr>
  254. {% if room.level.cycle.section.name == "Francophone" %}
  255. <td colspan="4">Discipline</td>
  256. <td colspan="4">Travail de l’élève</td>
  257. <td colspan="2">Profil de la classe</td>
  258. {% else %}
  259. <td colspan="4">Discipline</td>
  260. <td colspan="4">Student work</td>
  261. <td colspan="2">Class profile</td>
  262. {% endif %}
  263. </tr>
  264. <tr>
  265. {% if room.level.cycle.section.name == "Francophone" %}
  266. <td>Abs. Ann. Non. J. (h)</td>
  267. <td></td>
  268. <td>Avertissement de conduite</td>
  269. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  270. <td>TOTAL GENERAL</td>
  271. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  272. <td colspan="2"><b>DÉCISION DU CONSEIL DE CLASSE</b></td>
  273. <td>Moy. Gen. An.</td>
  274. {% else %}
  275. <td>Unj. Ann. Absences (h)</td>
  276. <td></td>
  277. <td>Warning</td>
  278. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  279. <td>GRAND TOTAL</td>
  280. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  281. <td colspan="2"><b>CLASS COUNCIL DECISION</b></td>
  282. <td>Gen. An. Avg. </td>
  283. {% endif %}
  284. <td>{{ ( genMean )|round(2,'floor') }}</td>
  285. </tr>
  286. <tr>
  287. {% if room.level.cycle.section.name == "Francophone" %}
  288. <td>Abs Ann. Just. (h) </td>
  289. <td>{{ abscences[std.id] is defined ? abscences[std.id] : 0 }}</td>
  290. <td>Blâme de conduite</td>
  291. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  292. <td>COEF.</td>
  293. <td>{{ totalCoef }}</td>
  294. <td >Promu (e) </td>
  295. {% else %}
  296. <td>Just. Ann. Abs. (h) </td>
  297. <td>{{ abscences[std.id] is defined ? abscences[std.id] : 0 }}</td>
  298. <td>Blame</td>
  299. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  300. <td>COEF.</td>
  301. <td>{{ totalCoef }}</td>
  302. <td >Promoted </td>
  303. {% endif %}
  304. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  305. <td>[Min – Max]</td>
  306. <td>[ ]</td>
  307. </tr>
  308. <tr>
  309. {% if room.level.cycle.section.name == "Francophone" %}
  310. <td>Retards (nbre de fois)</td>
  311. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  312. <td>Exclusions (jours)</td>
  313. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  314. <td>MOYENNE ANNUELLE</td>
  315. <td>
  316. {% if totalCoef > 0 %}
  317. {{(totalNCoef/totalCoef)|round(2,'floor') }}
  318. {% endif %}
  319. </td>
  320. <td >Redouble</td>
  321. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  322. <td>Nombre de moyennes</td>
  323. {% else %}
  324. <td>Late arrivals </td>
  325. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  326. <td>Exclusions (days)</td>
  327. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  328. <td>ANNUAL AVERAGE</td>
  329. <td>{{(totalNCoef/totalCoef)|round(2,'floor') }}</td>
  330. <td >Redouble</td>
  331. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  332. <td>Number of averages</td>
  333. {% endif %}
  334. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  335. </tr>
  336. <tr>
  337. {% if room.level.cycle.section.name == "Francophone" %}
  338. <td>Consignes (h)</td>
  339. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  340. <td>Exclusion définitive</td>
  341. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  342. <td>Cote annuelle</td>
  343. <td>
  344. {% if ( std.id in ranks|keys ) %}
  345. {{ ranks[std.id] }} / {{ ranks|length }}
  346. {% endif %}
  347. </td>
  348. <td >Exclu(e) pour :</td>
  349. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  350. <td>Taux de réussite</td>
  351. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  352. {% else %}
  353. <td>Instructions (h)</td>
  354. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  355. <td>Permanent exclusion</td>
  356. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  357. <td>Annual rank</td>
  358. <td> {% if ( std.id in ranks|keys ) %}
  359. {{ ranks[std.id] }} / {{ ranks|length }}
  360. {% endif %} </td>
  361. <td >Excluded for:</td>
  362. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  363. <td>Success rate</td>
  364. <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
  365. {% endif %}
  366. </tr>
  367. <tr>
  368. {% if room.level.cycle.section.name == "Francophone" %}
  369. <td colspan="4" >Appréciation du travail de l’élève <br><br> <br></td>
  370. <td colspan="2" >Visa du parent / Tuteur<br><br> <br><br></td>
  371. <td colspan="2" >Visa de l'enseignant pricipal<br><br> <br><br> <i>{{ mainTeacher.fullName }}</i></td>
  372. <td colspan="2" >Le Chef d’établissement<br><br> <br><br></td>
  373. {% else %}
  374. <td colspan="4" >Appreciation of student work <br><br> <br></td>
  375. <td colspan="2" >Parent/Guardian Visa<br><br> <br><br></td>
  376. <td colspan="2" >Head teacher visa<br><br> <br><br> <i>{{ mainTeacher.fullName }}</i></td>
  377. <td colspan="2" >The Head of Establishment<br><br> <br><br></td>
  378. {% endif %}
  379. </tr>
  380. </tbody>
  381. </table>
  382. </div>
  383. {% if copyright %}
  384. <div>
  385. <h9>
  386. <i>
  387. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  388. {% if room.level.cycle.section.name == "Francophone" %}
  389. Conception et implementation du groupe Polyinformatique, Tel : +1(450)6267192, email: [email protected]
  390. {% else %}
  391. Design and implementation of Polyinformatique group, Tel: +1(450)6267192, mail: [email protected]
  392. {% endif %}
  393. </i>
  394. </h9>
  395. </div>
  396. {% endif %}
  397. </page>
  398. <br/>
  399. <br/>
  400. {% endfor %}
  401. <script type="text/javascript" src="{{ absolute_url(asset('assets/js/jquery-3.1.1.js')) }}"></script>
  402. <script type="text/javascript" src="{{ absolute_url(asset('assets/js/repportCard2024.js')) }}"></script>
  403. </body
  404. </html>