Files
SIRH/templates/absence/print.html.twig
tristan 69e8d74f4d
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
[#328] Corrections (#3)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [x] Pas de régression
- [ ] TU/TI/TF rédigée
- [x] TU/TI/TF OK
- [ ] CHANGELOG modifié

Reviewed-on: #3
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-02-17 08:01:25 +00:00

278 lines
8.5 KiB
Twig

<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Absences</title>
<style>
@page { size: A3 landscape; margin: 8mm; }
html, body {
margin: 0;
padding: 4mm;
font-family: Helvetica, sans-serif;
font-size: 8px;
}
table.calendar {
width: 100%;
border-collapse: collapse;
table-layout: auto;
border: 4px solid #0a0a0a;
}
th, td {
border: 2px solid #0a0a0a;
padding: 2px 1px;
vertical-align: middle;
overflow: hidden;
white-space: nowrap;
}
thead th {
text-align: center;
font-weight: 700;
}
.col-employee {
font-size: 10px;
font-weight: bold;
width: 10mm;
text-align: left;
}
.col-day {
font-size: 8px;
text-align: center;
}
.month {
font-size: 14px;
font-weight: bold;
}
.site-title td {
font-weight: bold;
font-size: 12px;
text-transform: uppercase;
border-color: #0a0a0a;
}
.site-title .label {
text-align: left;
}
.code {
font-weight: bold;
font-size: 8px;
}
.holiday-code {
font-weight: bold;
font-size: 4px;
}
.month-separator {
border-right: 4px solid #0a0a0a !important;
}
.weekend {
background: grey;
}
.holiday {
background: #b3e5fc;
}
.body-cell {
height: 6mm;
padding: 0 !important;
vertical-align: middle;
text-align: center;
}
.full-cell {
display: block;
text-align: center;
margin: 0;
padding: 0;
}
.half-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
border: 0;
border-spacing: 0;
margin: 0;
}
.half-td {
height: 3mm;
line-height: 3mm;
text-align: center;
font-weight: bold;
font-size: 7px;
padding: 0;
border: 0;
vertical-align: middle;
}
td.body-cell table,
td.body-cell td {
padding: 0;
}
</style>
</head>
<body>
{% set months = {
1:'Janvier', 2:'Février', 3:'Mars', 4:'Avril', 5:'Mai', 6:'Juin',
7:'Juillet', 8:'Août', 9:'Septembre', 10:'Octobre', 11:'Novembre', 12:'Décembre'
} %}
{% set dow = ['Lu','Ma','Me','Je','Ve','Sa','Di'] %}
{% set dayColWidthMm = 5 %}
<table class="calendar">
<thead>
{# Ligne 1 : mois #}
<tr>
<th class="col-employee" rowspan="4"></th>
{% set currentMonth = '' %}
{% set monthCount = 0 %}
{% for day in days %}
{% set m = day.date|date('n') %}
{% set monthLabel = months[m] ~ ' ' ~ (day.date|date('Y')) %}
{% if monthLabel != currentMonth %}
{% if not loop.first %}
<th class="month month-separator" colspan="{{ monthCount }}">{{ currentMonth }}</th>
{% endif %}
{% set currentMonth = monthLabel %}
{% set monthCount = 1 %}
{% else %}
{% set monthCount = monthCount + 1 %}
{% endif %}
{% if loop.last %}
<th class="month" colspan="{{ monthCount }}">{{ currentMonth }}</th>
{% endif %}
{% endfor %}
</tr>
{# Ligne 2 : numéro de semaine #}
<tr>
{% set currentWeek = '' %}
{% set weekCount = 0 %}
{% for day in days %}
{% set weekLabel = 'S' ~ (day.date|date('W')) %}
{% if weekLabel != currentWeek %}
{% if not loop.first %}
<th class="col-day" colspan="{{ weekCount }}">{{ currentWeek }}</th>
{% endif %}
{% set currentWeek = weekLabel %}
{% set weekCount = 1 %}
{% else %}
{% set weekCount = weekCount + 1 %}
{% endif %}
{% if loop.last %}
<th class="col-day" colspan="{{ weekCount }}">{{ currentWeek }}</th>
{% endif %}
{% endfor %}
</tr>
{# Ligne 3 : jour semaine #}
<tr>
{% for day in days %}
{% set idx = (day.date|date('N') - 1) %}
{% set isMonthEnd = (not loop.last) and (days[loop.index].date|date('n') != day.date|date('n')) %}
{% set isWeekend = day.date|date('N') in [6, 7] %}
<th class="col-day{% if isMonthEnd %} month-separator{% endif %}{% if isWeekend %} weekend{% endif %}" style="width: {{ dayColWidthMm }}mm;">{{ dow[idx] }}</th>
{% endfor %}
</tr>
{# Ligne 4 : numéro #}
<tr>
{% for day in days %}
{% set isMonthEnd = (not loop.last) and (days[loop.index].date|date('n') != day.date|date('n')) %}
{% set isWeekend = day.date|date('N') in [6, 7] %}
<th class="col-day{% if isMonthEnd %} month-separator{% endif %}{% if isWeekend %} weekend{% endif %}" style="width: {{ dayColWidthMm }}mm;">{{ day.label }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% set currentSiteId = null %}
{% for employee in employees %}
{% set site = employee.site %}
{% set siteId = site ? site.id : 'none' %}
{% set siteName = site ? site.name : 'Sans site' %}
{# couleur de fond du site (si tu as un champ color) #}
{% set siteColor = '#ffd7d7' %}
{% if site and attribute(site, 'color') is defined and site.color %}
{% set siteColor = site.color %}
{% endif %}
{# Nouvelle section site #}
{% if siteId != currentSiteId %}
<tr class="site-title">
<td class="label" style="background: {{ siteColor }};" colspan="{{ 1 + (days|length) }}">
{{ siteName }}
</td>
</tr>
{% set currentSiteId = siteId %}
{% endif %}
{# Ligne employé #}
<tr>
<td class="col-employee">
{{ employee.firstName }}{% if employee.lastName %} {{ employee.lastName|first }}.{% endif %}
</td>
{% for day in days %}
{% set isHoliday = holidayMap[day.date] ?? null %}
{% set info = absenceMap[employee.id][day.date] ?? null %}
{% set isMonthEnd = (not loop.last) and (days[loop.index].date|date('n') != day.date|date('n')) %}
{% set isWeekend = day.date|date('N') in [6, 7] %}
<td class="col-day body-cell{% if isMonthEnd %} month-separator{% endif %}{% if isWeekend %} weekend{% endif %}{% if isHoliday %} holiday{% endif %}" style="width: {{ dayColWidthMm }}mm;{% if info and not isHoliday and not info.half %} background-color: {{ info.color }};{% endif %}">
{% if isHoliday %}
<span class="full-cell code">Férié</span>
{% elseif info %}
{% if info.half %}
<table class="half-table">
<tr>
<td class="half-td" style="{% if info.halfLabel == 'AM' %}background-color: {{ info.color }};{% endif %}">
{% if info.halfLabel == 'AM' %}{{ info.code }}{% endif %}
</td>
</tr>
<tr>
<td class="half-td" style="{% if info.halfLabel == 'PM' %}background-color: {{ info.color }};{% endif %}">
{% if info.halfLabel == 'PM' %}{{ info.code }}{% endif %}
</td>
</tr>
</table>
{% else %}
<span class="full-cell code">{{ info.code }}</span>
{% endif %}
{% endif %}
</td>
{% endfor %}
</tr>
{% else %}
<tr>
<td colspan="{{ 1 + (days|length) }}">Aucun employé.</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>