{# Source UNIQUE des macros de formatage « ui.* » (durée, montant, date). Auparavant redéfinies à l'identique dans ~8 templates (dette A2 de l'audit). Import : {% import 'components/_ui.html.twig' as ui %} Usage : {{ ui.hours(h, displayUnit) }} · {{ ui.money(v) }} · {{ ui.date_input(d) }} Base temps : 7.4 h / jour (cf. App\Model\WorkTime::HOURS_PER_DAY). #} {# Durée décimale (heures) -> h:mm (minutes toujours sur 2 chiffres, ex. 3,3 -> 3:18). Gère le signe (surcharge négative). Base : la valeur reçue est en HEURES. #} {% macro hm(value, editable = false) %} {%- set neg = value < 0 -%} {%- set totalMin = (value|abs * 60)|round(editable ? 4 : 0) -%} {%- set h = totalMin // 60 -%} {%- set m = editable ? (totalMin - h * 60) : totalMin % 60 -%} {{- (neg ? '-' : '') ~ (editable ? h ~ ':' ~ (m < 10 ? '0' : '') ~ m : '%d:%02d'|format(h, m)) -}} {% endmacro %} {# Jours : 2 décimales, 3 seulement si la valeur en a besoin (0,50 · 0,125). #} {% macro days_num(value, thousands = ' ') %} {%- set rounded = value|round(3) -%} {{- rounded|number_format(((rounded * 1000)|round) % 10 == 0 ? 2 : 3, ',', thousands) -}} {% endmacro %} {# Heures -> h:mm (sans suffixe, le « : » suffit) ; jours -> « x,xx j » (inchangé). #} {% macro hours(value, unit = 'hours') %} {%- if unit == 'days' -%} {{- _self.days_num(value / 7.4) }} j {%- else -%} {{- _self.hm(value) -}} {%- endif -%} {% endmacro %} {# Alias historique de hours(). #} {% macro amount(value, unit = 'hours') %} {{- _self.hours(value, unit) -}} {% endmacro %} {# Valeur convertie SANS suffixe d'unité (jours : nombre seul ; heures : h:mm). #} {% macro compact(value, unit = 'hours') %} {%- if unit == 'days' -%} {{- _self.days_num(value / 7.4) -}} {%- else -%} {{- _self.hm(value) -}} {%- endif -%} {% endmacro %} {# Montant. suffix et empty paramétrables (ex. '€ HT' / 'Montant non renseigné' en facturation). #} {% macro money(value, suffix = '€', empty = 'Non renseigné') %} {%- if value is same as(null) -%}{{ empty }}{%- else -%}{{ value|number_format(0, ',', ' ') }} {{ suffix }}{%- endif -%} {% endmacro %} {% macro date_input(date) %} {{- date ? date|date('d/m/Y') : '' -}} {% endmacro %} {% macro date_picker(date) %} {{- date ? date|date('Y-m-d') : '' -}} {% endmacro %} {# Pastille de charge (vue Équipe / charge). #} {% macro badge(badge, unit) %} {%- if badge.value in ['OK', '-'] or badge.tone == 'mixed' -%} {{ badge.value }} {%- else -%} {%- if badge.value starts with '+' %}+{% endif %}{{ _self.compact(badge.metric|abs, unit) -}} {%- endif -%} {% endmacro %}