feat(field_sales) : calcul de trajet, optimisation, duplication & roadbook PDF (ERP-125)
- RouteEngineInterface (computeMatrix/optimizeOrder/estimateLegDurations) + HaversineRouteEngine V1 (vitesse moyenne parametrable, plus proche voisin)
- TourRouteCalculator : resolution coords, ETA (RG-6.11), exclusion sans coords (RG-6.05), totaux ; optimize = reorder + recompute
- Endpoints API Platform POST /tours/{id}/compute, /optimize, /duplicate (TourDuplicator, RG-6.13) + Processors, security manage
- Feuille de route PDF GET /tours/{id}/roadbook.pdf (Dompdf + Twig) via PdfRendererInterface (Shared), controller priority:1, security view
- TierAddressResolver etendu (coords + location DBAL)
- Tests : HaversineRouteEngine (unit), compute/optimize/duplicate/roadbook (API)
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Shared\Domain\Contract;
|
||||
|
||||
/**
|
||||
* Contrat de rendu d'un document HTML en PDF binaire.
|
||||
*
|
||||
* Service GENERIQUE et reutilisable : il ne connait aucune entite metier. Le
|
||||
* module appelant decide QUOI mettre dans le document (HTML deja rendu, ex: via
|
||||
* Twig) ; cette interface decrit seulement COMMENT produire le binaire PDF. On
|
||||
* depend de ce contrat (dans Shared), jamais de l'implementation concrete (regle
|
||||
* ABSOLUE n°1).
|
||||
*
|
||||
* Implementee par App\Shared\Infrastructure\Pdf\DompdfRenderer (non referencee
|
||||
* via @see pour ne pas creer d'import Domain -> Infra).
|
||||
*/
|
||||
interface PdfRendererInterface
|
||||
{
|
||||
/**
|
||||
* Rend un fragment HTML complet en PDF et retourne son contenu binaire.
|
||||
*
|
||||
* @param string $html document HTML (avec ses styles CSS inline / <style>)
|
||||
* @param string $paperSize format papier (ex: 'A4', 'Letter')
|
||||
* @param string $orientation 'portrait' ou 'landscape'
|
||||
*
|
||||
* @return string contenu binaire du fichier PDF
|
||||
*/
|
||||
public function renderHtml(string $html, string $paperSize = 'A4', string $orientation = 'portrait'): string;
|
||||
}
|
||||
Reference in New Issue
Block a user