# Palmarès des meilleurs clients N et N-1 — lisibilité du PDF et critère Nombre client

## Problème
L'édition PDF du palmarès clients N / N-1 (module `public/statistique`, export KoolReport + PhantomJS) était illisible : le texte du tableau sortait à environ 2,4 pt.

## Changements
- `public/statistique/palmares_client_n_n1/export.php` : zoom PDF `0.3` → `0.8` (A4 paysage, texte ~8,25 pt via le web). 1.3, 1.0 puis 0.9 ont été jugés trop gros.
- `public/statistique/palmares_client_n_n1/MyReportPdf.view.php` :
  - police des cellules `11px` → `14px` ;
  - marge intérieure des cellules réduite (`.table td, .table th { padding: 4px 6px; }` au lieu des 12px de Bootstrap) ;
  - colonnes Position et % (`% N`, `Cumul % N`, `% N-1`, `Cumul % N-1`) resserrées via `'cssStyle' => 'width:5%'`. L'en-tête « POSITION » est renommé « POS. » pour que la colonne soit aussi étroite que les colonnes %.

Note : via Apache, l'échelle appliquée par PhantomJS est de 0,75 (contre 0,6 en CLI). Le tableau ci-dessous, mesuré en CLI, sous-estime donc la taille réelle. À zoom 0.8 via le web, le texte fait ~8,25 pt.

La version Laravel (`app/Reports/palmares_client_n_n1`) n'est pas modifiée.

## Comment se calcule la taille réelle
PhantomJS applique toujours une échelle fixe de 0,6 dans le PDF, en plus du zoom CSS.
Taille réelle ≈ police CSS × 0,75 × zoom × 0,6. Mesures faites sur des PDF générés avec 14px :

| zoom | taille du texte du tableau |
|------|----------------------------|
| 0.3  | ~2,4 pt |
| 0.8  | ~6,6 pt |
| 1.0  | ~8,4 pt |
| 1.3  | ~10,8 pt |

À zoom 1.3, le tableau occupe exactement la largeur utile de la page : il est en `width:100%`, donc les colonnes s'adaptent et les textes longs passent à la ligne.

## Export PDF en erreur 500 en local (Windows)
`koolreport/export/Handler.php` cherche d'abord `bin/phantomjs`, puis `bin/phantomjs.exe`.
Si le binaire **Linux** `bin/phantomjs` est présent sous Windows, il est choisi, `is_executable()` renvoie false et l'export plante ("Please set executable permission for phantomjs").
Ce dossier est ignoré par git (`.gitignore`) : en local il ne faut garder que `phantomjs.exe`, et sur le VPS Linux il faut `phantomjs`.
En local, `bin/phantomjs` (une copie identique de `phantomjs_`) a été renommé en `phantomjs.linux_backup`. Après ça, l'export répond 200 avec un PDF.

## Critère « Nombre client » (palmarès N / N-1 uniquement)
- `public/statistique/index.php` : nouvelle saisie numérique `stat_nombre_client` (min 1, vide = tous). Elle ne s'affiche que pour `palmares_client_n_n1` (`criteriaMap`).
- `palmares_client_n_n1/index.php`, `export.php`, `exportexcel.php` : transmettent le paramètre `nombre_client` (`$_GET['stat_nombre_client'] ?? 0`).
- `palmares_client_n_n1/MyReport.php` : positions, %, cumuls et totaux sont toujours calculés sur **tous** les clients de la société. Seules les N premières positions de chaque société sont ajoutées au jeu de données. Deux colonnes techniques sont ajoutées : `total_societe_n` et `total_societe_n1` (total de tous les clients de la société).
- `MyReport.view.php` et `MyReportPdf.view.php` : le total affiché sur la ligne société vient de `total_societe_n` / `total_societe_n1`, formaté avec `number_format(…, 2, ',', ' ')`. Ce n'est plus la somme des lignes affichées : avec une limite, le total reste celui de tous les clients.
- Vérifié sur 2020–2026 avec la limite à 3 : 3 lignes affichées, positions 1 à 3, cumul % N = 24,67 (et non 100), total société inchangé.

## Point connu, non traité
L'export Excel du module `public/statistique` plante en local, et ce n'est pas lié à ces changements : `palmares_client` plante aussi, et le palmarès N / N-1 plantait déjà avant cette modification. Erreur : `Class "MyCLabs\Enum\Enum" not found` dans `koolreport/excel/vendor/maennchen/zipstream-php`, il manque la dépendance `myclabs/php-enum` dans le vendor de koolreport excel.

## En-têtes de colonnes invisibles dans le PDF
La ligne d'en-têtes (POS., CLIENT, CA N…) était bien dans le HTML mais invisible dans le PDF : texte blanc sur fond `#343a40`. Les styles d'impression de Bootstrap 4 forcent `background-color: #fff !important` sur `.table td`, donc le fond ne sortait pas et le texte blanc se retrouvait sur du blanc. Le fond gris de la ligne société disparaissait de la même façon.

Correction dans `MyReportPdf.view.php` :
- `* { -webkit-print-color-adjust: exact; }` ;
- `.table td.entete { background-color: #343a40 !important; color: #fff !important; … }` ;
- `.table td.societe { background-color: #e9ecef !important; … }`.

Vérifié dans le PDF : les 10 cellules d'en-tête sont remplies en `#343a40` et la ligne société en `#e9ecef`.
Les autres rapports `public/statistique/*/MyReportPdf.view.php` qui utilisent `.entete` (texte blanc) ont probablement le même défaut.

## Version Laravel (`/statistique_laravel`) alignée sur `public/statistique`
- `resources/views/statistique/index.blade.php` : même saisie « Nombre client » (`stat_nombre_client`), affichée seulement pour `palmares_client_n_n1`.
- `app/Reports/palmares_client_n_n1/palmares_client_n_n1.php` : même règle. Tout est calculé sur l'ensemble des clients et seules les N premières positions de chaque société sont gardées. Colonnes ajoutées :
  - `total_societe_n` et `total_societe_n1` : totaux de tous les clients de la société ;
  - `societe_entete` : libellé « société — CA N : … € — CA N-1 : … € », qui sert au regroupement à l'écran.
- `palmares_client_n_n1.pdf.view.php` : réécrite sur le modèle de la version `public/statistique` (on n'utilise plus `PdfGroupedTable`, qui sommait uniquement les lignes affichées et n'avait pas les colonnes Cumul %). Contenu :
  - titre, période N et N-1, « Édité le » ;
  - par société : ligne société avec les totaux de tous les clients, puis en-têtes de colonnes avec les années (POS., CLIENT, CA 2025 (N), % 2025…) sur fond `#343a40`, dans un `<thead>` que mpdf répète en haut de chaque page ;
  - les 10 colonnes ; POS. et les 4 colonnes % à 5 % de largeur ;
  - police 11px, soit 8,25 pt, la même taille réelle que la version `public/statistique` en zoom 0.8.
- `palmares_client_n_n1.view.php` (écran DataTables) : regroupement sur la colonne masquée `societe_entete`, à la place d'une somme côté navigateur qui ne prendrait que les lignes affichées. Libellé « Pos. ».
- `palmares_client_n_n1.excel.view.php` : totaux société via `max` sur `total_societe_n` / `total_societe_n1`, à la place de `ExcelGroupedTable` (somme des lignes affichées). Libellé « Pos. ».
- Vérifié en CLI sur 2020–2026 avec la limite à 3 :
  - PDF : texte du tableau à 8,25 pt, en-têtes sur fond `#343a40` ;
  - Excel : 3 clients, « CA N: 8,171,241.95 » ;
  - écran : rendu sans erreur, mais pas vérifié dans un navigateur (la page demande d'être connecté).
