{#
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 %}