https://dev.app.pol-crm.com/api/templates/f47ef469dac34bc29180feb40a25724c Return to referer URL

HTTP Client

2 Total requests
0 HTTP errors

Clients

http_client 2

Requests

GET http://dev.pol-api-param.pol-crm.com/api/templates/f47ef469dac34bc29180feb40a25724c
[
  "body" => "[]"
  "max_duration" => "3600"
  "headers" => [
    "Content-Type" => "application/json"
    "Accept" => "application/ld+json"
    "Authorization" => "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NjA5MTI0NDEsImV4cCI6MTc2MDkxNjA0MSwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TVVBFUkFETUlOIiwiUk9MRV9BRE1JTiIsIlJPTEVfTU9EVUxFX1BST0RVQ1QiLCJST0xFX01PRFVMRV9QUk9EVUNUX0NVU1RPTUlaRSIsIlJPTEVfTU9EVUxFX1FVT1RFX0xJTkUiLCJQUk9TUEVDVF9TSE9XIiwiUFJPU1BFQ1RfQ1VEIiwiQ09OVEFDVF9DVUQiLCJDT05UQUNUX1NIT1ciLCJUQVNLX1NIT1ciLCJUQVNLX0NVRCIsIlFVT1RFX1NIT1ciLCJRVU9URV9DVUQiLCJRVU9URV9SRUdFTkVSQVRFX1BSSUNFUyJdLCJsb2dpbiI6ImRlbW95YW5pZ2F2IiwidXNlcl9pZCI6InVzZXJfMTAxMSIsInVzZXJfZXh0ZXJuYWxfaWQiOiIxMDExIiwiZW1haWwiOiJnLXNhdXRyb25Ac2ZpLmZyIiwiY3VzdG9tZXJfaWQiOiJjdXN0b21lcl8xMjEiLCJjdXN0b21lcl9uYW1lIjoiWUFOSUdBViIsImN1c3RvbWVyX2V4dGVybmFsX2lkIjoiMTIxIiwiY3VzdG9tZXJfbWFpbGluZ19pZCI6IjE0NyIsImZpcnN0bmFtZSI6Ikd1aWxsYXVtZSIsImxhc3RuYW1lIjoiU0FVVFJPTiIsImxpdmVvTG9naW4iOm51bGwsImxpdmVvUGFzc3dvcmQiOm51bGwsImhhc0ludHJhbmV0IjpmYWxzZSwibGFuZ3VhZ2UiOiJGUiIsInNlY3Rpb25zX2xlYWRlZCI6W10sInNlY3Rpb25zX21lbWJlcnMiOlsidXNlcl8xMDExIl0sImlzX3NlY3Rpb25zX2FjdGl2YXRlZCI6ZmFsc2UsInJlZnJlc2hfdG9rZW4iOiIifQ.smruhTDO6MF4efpXGiPp4DyZoLSpsUh3ykwBDmscLGtkvlySQlnSFvS1bxozG8T5Y0oGdkijvDiliogWK_zhqLF6FXho-oEscgCbKhvTjdosGLc4QHX0QAtM1LeVpT3BGVz9isHY1J7X0RDnoWA2GdCwCZ-ELXlS7fP08w_Mc5j8GqGhN5XwD70MLfR5ltD75o5BEhCWKMsWsatkGs3bbd7AfjhqoSz7qexpiHj1BRszq-H5QekWiJWgwOLDUJc85rZYaNVbYu75qseEbKfW-kWAxOZhAZCmVfFDQ-qBxSJ1i7KwVasIGTJDTnJn7l8fDqFWF0jGtC4LJzQEOZDjoOrQVaP2szLusNdOeKICnE3GOpY7E2sHIJpbTf8KlRUSm0uKc4t4hgoSRxnCdQGLx4hcTGSGHyITgso7tVs6068piCfp8JttEo5SoXERPiVNl2oeKa7VQAgtUWMzPI-SYX6QfGCjnrYE3JcTufx8xFtvlS4pmeIaLNJs7Y8l21f-A8MB7y-3zOAzriYExuKUOtT9oZ0GRtCWG5oTUyQ2LI4IjzaqBW_ikRfcccdSOZqZxV_FVw1fO9vPg9Lgi9XKAfKtjCLtI9nMboiZsSk9mx5_CAREqtb476hnnUVOfvHCBazVRQo-FWsSSWNLCIe8MtR9pUny0D8hn5qCQ712Axk"
    "X-Transaction-Id" => "front:zv9jvbn66i"
  ]
  "query" => null
]
200
[
  "response_headers" => [
    "HTTP/1.1 200 OK"
    "Server: nginx"
    "Date: Sun, 19 Oct 2025 22:39:09 GMT"
    "Content-Type: application/ld+json; charset=utf-8"
    "Transfer-Encoding: chunked"
    "Connection: keep-alive"
    "X-Powered-By: PHP/7.2.34"
    "Vary: Accept,Authorization"
    "X-Content-Type-Options: nosniff"
    "X-Frame-Options: deny"
    "Cache-Control: private, must-revalidate"
    "pragma: no-cache"
    "expires: -1"
    "Link: <http://dev.pol-api-param.pol-crm.com/api/docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation""
    "X-Debug-Token: 015fd7"
    "X-Debug-Token-Link: http://dev.pol-api-param.pol-crm.com/_profiler/015fd7"
    "X-Robots-Tag: noindex"
    "ETag: "7e0bc1db0434d61f5f08a2dbdb37a587""
    "X-Powered-By: PleskLin"
  ]
  "debug_info" => [
    "header_size" => 660
    "request_size" => 2095
    "total_time" => 0.294644
    "namelookup_time" => 0.000156
    "connect_time" => 0.000281
    "pretransfer_time" => 0.000359
    "size_upload" => 2.0
    "size_download" => 18554.0
    "speed_download" => 63108.0
    "speed_upload" => 6.0
    "upload_content_length" => 2.0
    "starttransfer_time" => 0.293917
    "primary_ip" => "185.18.171.8"
    "primary_port" => 80
    "local_ip" => "185.18.171.8"
    "local_port" => 45022
    "start_time" => 1760913549.2858
    "debug" => """
      *   Trying 185.18.171.8...\n
      * TCP_NODELAY set\n
      * Connected to dev.pol-api-param.pol-crm.com (185.18.171.8) port 80 (#0)\n
      > GET /api/templates/f47ef469dac34bc29180feb40a25724c HTTP/1.1\r\n
      Host: dev.pol-api-param.pol-crm.com\r\n
      Connection: Upgrade, HTTP2-Settings\r\n
      Upgrade: h2c\r\n
      HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA\r\n
      Content-Type: application/json\r\n
      Accept: application/ld+json\r\n
      Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NjA5MTI0NDEsImV4cCI6MTc2MDkxNjA0MSwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TVVBFUkFETUlOIiwiUk9MRV9BRE1JTiIsIlJPTEVfTU9EVUxFX1BST0RVQ1QiLCJST0xFX01PRFVMRV9QUk9EVUNUX0NVU1RPTUlaRSIsIlJPTEVfTU9EVUxFX1FVT1RFX0xJTkUiLCJQUk9TUEVDVF9TSE9XIiwiUFJPU1BFQ1RfQ1VEIiwiQ09OVEFDVF9DVUQiLCJDT05UQUNUX1NIT1ciLCJUQVNLX1NIT1ciLCJUQVNLX0NVRCIsIlFVT1RFX1NIT1ciLCJRVU9URV9DVUQiLCJRVU9URV9SRUdFTkVSQVRFX1BSSUNFUyJdLCJsb2dpbiI6ImRlbW95YW5pZ2F2IiwidXNlcl9pZCI6InVzZXJfMTAxMSIsInVzZXJfZXh0ZXJuYWxfaWQiOiIxMDExIiwiZW1haWwiOiJnLXNhdXRyb25Ac2ZpLmZyIiwiY3VzdG9tZXJfaWQiOiJjdXN0b21lcl8xMjEiLCJjdXN0b21lcl9uYW1lIjoiWUFOSUdBViIsImN1c3RvbWVyX2V4dGVybmFsX2lkIjoiMTIxIiwiY3VzdG9tZXJfbWFpbGluZ19pZCI6IjE0NyIsImZpcnN0bmFtZSI6Ikd1aWxsYXVtZSIsImxhc3RuYW1lIjoiU0FVVFJPTiIsImxpdmVvTG9naW4iOm51bGwsImxpdmVvUGFzc3dvcmQiOm51bGwsImhhc0ludHJhbmV0IjpmYWxzZSwibGFuZ3VhZ2UiOiJGUiIsInNlY3Rpb25zX2xlYWRlZCI6W10sInNlY3Rpb25zX21lbWJlcnMiOlsidXNlcl8xMDExIl0sImlzX3NlY3Rpb25zX2FjdGl2YXRlZCI6ZmFsc2UsInJlZnJlc2hfdG9rZW4iOiIifQ.smruhTDO6MF4efpXGiPp4DyZoLSpsUh3ykwBDmscLGtkvlySQlnSFvS1bxozG8T5Y0oGdkijvDiliogWK_zhqLF6FXho-oEscgCbKhvTjdosGLc4QHX0QAtM1LeVpT3BGVz9isHY1J7X0RDnoWA2GdCwCZ-ELXlS7fP08w_Mc5j8GqGhN5XwD70MLfR5ltD75o5BEhCWKMsWsatkGs3bbd7AfjhqoSz7qexpiHj1BRszq-H5QekWiJWgwOLDUJc85rZYaNVbYu75qseEbKfW-kWAxOZhAZCmVfFDQ-qBxSJ1i7KwVasIGTJDTnJn7l8fDqFWF0jGtC4LJzQEOZDjoOrQVaP2szLusNdOeKICnE3GOpY7E2sHIJpbTf8KlRUSm0uKc4t4hgoSRxnCdQGLx4hcTGSGHyITgso7tVs6068piCfp8JttEo5SoXERPiVNl2oeKa7VQAgtUWMzPI-SYX6QfGCjnrYE3JcTufx8xFtvlS4pmeIaLNJs7Y8l21f-A8MB7y-3zOAzriYExuKUOtT9oZ0GRtCWG5oTUyQ2LI4IjzaqBW_ikRfcccdSOZqZxV_FVw1fO9vPg9Lgi9XKAfKtjCLtI9nMboiZsSk9mx5_CAREqtb476hnnUVOfvHCBazVRQo-FWsSSWNLCIe8MtR9pUny0D8hn5qCQ712Axk\r\n
      X-Transaction-Id: front:zv9jvbn66i\r\n
      Content-Length: 2\r\n
      User-Agent: Symfony HttpClient/Curl\r\n
      Accept-Encoding: gzip\r\n
      \r\n
      * upload completely sent off: 2 out of 2 bytes\n
      < HTTP/1.1 200 OK\r\n
      < Server: nginx\r\n
      < Date: Sun, 19 Oct 2025 22:39:09 GMT\r\n
      < Content-Type: application/ld+json; charset=utf-8\r\n
      < Transfer-Encoding: chunked\r\n
      < Connection: keep-alive\r\n
      < X-Powered-By: PHP/7.2.34\r\n
      < Vary: Accept,Authorization\r\n
      < X-Content-Type-Options: nosniff\r\n
      < X-Frame-Options: deny\r\n
      < Cache-Control: private, must-revalidate\r\n
      < pragma: no-cache\r\n
      < expires: -1\r\n
      < Link: <http://dev.pol-api-param.pol-crm.com/api/docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"\r\n
      < X-Debug-Token: 015fd7\r\n
      < X-Debug-Token-Link: http://dev.pol-api-param.pol-crm.com/_profiler/015fd7\r\n
      < X-Robots-Tag: noindex\r\n
      < ETag: "7e0bc1db0434d61f5f08a2dbdb37a587"\r\n
      < X-Powered-By: PleskLin\r\n
      < \r\n
      """
  ]
]
PUT http://dev.pol-api-param.pol-crm.com/api/templates/f47ef469dac34bc29180feb40a25724c
[
  "body" => "{"name":"Test","content":"<!doctype html>\n<html lang=\"fr\">\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Devis \u2013 YANIGAV \u2013 {{ quote.name|default('Enfonce-pieux HYDROCHOC HPG 790') }}<\/title>\n<style>\n  :root { --primary:#0f172a; --muted:#475569; --border:#e2e8f0; --bg:#f8fafc; }\n  html, body { margin:0; padding:0; background:var(--bg); color:#0b1220; font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,\"Apple Color Emoji\",\"Segoe UI Emoji\"; }\n  .page { max-width:900px; margin:2rem auto; background:#fff; border:1px solid var(--border); border-radius:12px; overflow:hidden; box-shadow:0 10px 30px rgba(0,0,0,.04); }\n  header { padding:1.25rem 1.5rem; background:#fff; border-bottom:1px solid var(--border); display:flex; gap:1rem; align-items:center; }\n  .brand { font-weight:700; letter-spacing:.2px; font-size:1rem; color:var(--primary); }\n  .sub { color:var(--muted); font-size:.9rem; }\n  .grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:1rem; }\n  .section { padding:1.25rem 1.5rem; }\n  h1 { font-size:1.4rem; margin:.25rem 0 .5rem; letter-spacing:.2px; }\n  h2 { font-size:1.1rem; margin:0 0 .75rem; color:var(--primary); }\n  p { margin:.25rem 0; line-height:1.55; }\n  .card { background:#fff; border:1px solid var(--border); border-radius:10px; padding:1rem; }\n  .muted { color:var(--muted); }\n  .kvs { display:grid; grid-template-columns:1fr 1fr; gap:.5rem 1rem; font-size:.95rem; }\n  .kvs div { display:flex; align-items:center; gap:.5rem; }\n  .pill { font-size:.8rem; padding:.15rem .5rem; border:1px solid var(--border); border-radius:999px; background:#f1f5f9; }\n  table { width:100%; border-collapse:collapse; }\n  th, td { border:1px solid var(--border); padding:.6rem .5rem; text-align:left; vertical-align:top; }\n  thead th { background:#f1f5f9; }\n  tfoot td { font-weight:600; }\n  .note { font-size:.92rem; background:#f8fafc; border:1px dashed var(--border); padding:.75rem; border-radius:8px; }\n  .cols-3 { columns:2; column-gap:1rem; }\n  .signature { height:80px; border:1px dashed var(--border); border-radius:10px; display:flex; align-items:center; justify-content:center; color:var(--muted); }\n  footer { padding:1rem 1.5rem; border-top:1px solid var(--border); color:var(--muted); font-size:.9rem; background:#fff; }\n<\/style>\n\n<body>\n<div class=\"page\">\n\n  {# ==== Raccourcis \/ s\u00e9curisation des acc\u00e8s ==== #}\n  {% set c = (quote.prospect is defined and quote.prospect.contact is defined) ? quote.prospect.contact : null %}\n  {% set a = (c and c.mainAddress is defined) ? c.mainAddress : null %}\n  {% set comp = (quote.prospect is defined and quote.prospect.company is defined) ? quote.prospect.company : null %}\n  {% set lines = quote.quoteLines|default([]) %}\n\n  {# Portable du commercial : on cherche dans un ordre s\u00fbr #}\n  {% set tel_portable = '' %}\n  {% if managedBy is defined %}\n    {% if managedBy.phoneNumber is defined and managedBy.phoneNumber %}{% set tel_portable = managedBy.phoneNumber %}\n    {% elseif managedBy.mobilePhone is defined and managedBy.mobilePhone %}{% set tel_portable = managedBy.mobilePhone %}\n    {% elseif managedBy.phone is defined and managedBy.phone %}{% set tel_portable = managedBy.phone %}\n    {% endif %}\n  {% endif %}\n\n  {# ==== Totaux\/remise\/TVA - robustes ==== #}\n  {% set total_ht_before_discount = 0 %}\n  {% for l in lines %}\n    {% set q = l.quantity|default(1) %}\n    {% set pu = l.unitPriceExclVat|default(0) %}\n    {% set total_ht_before_discount = total_ht_before_discount + (q * pu) %}\n  {% endfor %}\n  {% if total_ht_before_discount == 0 %}\n    {% set total_ht_before_discount = quote.totalExcludingVat|default(0) %}\n  {% endif %}\n  {% set total_ht = quote.totalExcludingVat|default(total_ht_before_discount) %}\n  {% set discount_value = total_ht_before_discount - total_ht %}\n  {% set discount_percent = total_ht_before_discount > 0 ? (discount_value \/ total_ht_before_discount * 100) : 0 %}\n  {% set vat_total = 0 %}\n  {% for l in lines %}\n    {% set vat_total = vat_total + (l.vatAmount|default(0)) %}\n  {% endfor %}\n\n  {# ==== S\u00e9lection ligne principale \/ formation \/ options (sans filtres avanc\u00e9s) ==== #}\n  {% set first = (lines[0] is defined) ? lines[0] : null %}\n  {% set mainLine = null %}\n  {% set formationLine = null %}\n  {% set options = [] %}\n  {% for l in lines %}\n    {% set ref = l.reference|default('')|lower %}\n    {% set isOpt = l.isOptional is defined and l.isOptional %}\n    {% if mainLine is null and not isOpt and ('formation' not in ref) %}\n      {% set mainLine = l %}\n    {% endif %}\n    {% if formationLine is null and ('formation' in ref) %}\n      {% set formationLine = l %}\n    {% endif %}\n    {% if isOpt %}\n      {% set options = options|merge([l]) %}\n    {% endif %}\n  {% endfor %}\n  {% if mainLine is null %}{% set mainLine = first %}{% endif %}\n\n  <!-- HEADER -->\n  <header>\n    <div style=\"flex:1\">\n      <div class=\"brand\">YANIGAV \u2013 Enfonce-pieux \u2022 Aff\u00fbte-piquet \u2022 Fendeuse de b\u00fbche<\/div>\n      <div class=\"sub\">RCS ROANNE B 403 872 724 \u2022 SIRET 403 872 724 00014 \u2022 APE 4661Z \u2022 TVA FR114038727224<\/div>\n    <\/div>\n    <div class=\"pill\">{{ (quote.createdAt|default('now'))|date('d F Y') }}<\/div>\n  <\/header>\n\n  <!-- COORDONN\u00c9ES -->\n  <div class=\"section grid-2\">\n    <div class=\"card\">\n      <h2>Exp\u00e9diteur<\/h2>\n      <p><strong>YANIGAV<\/strong><\/p>\n      <p>De la part de <strong>{{ managedBy is defined and managedBy.fullname is defined ? managedBy.fullname : (quote.managedByRealName|default('')) }}<\/strong> ({{ managedBy is defined and managedBy.role is defined and managedBy.role ? managedBy.role : 'Resp. Commercial' }})<\/p>\n      <div class=\"kvs\">\n        <div><span class=\"pill\">T\u00e9l<\/span> {{ managedBy is defined and managedBy.phone is defined and managedBy.phone ? managedBy.phone : '\u2014' }}<\/div>\n        {% if tel_portable %}\n          <div><span class=\"pill\">Port<\/span> {{ tel_portable }}<\/div>\n        {% endif %}\n        <div><span class=\"pill\">Email<\/span>\n          {% if managedBy is defined and managedBy.email is defined and managedBy.email %}\n            <a href=\"mailto:{{ managedBy.email }}\">{{ managedBy.email }}<\/a>\n          {% else %}\u2014{% endif %}\n        <\/div>\n      <\/div>\n    <\/div>\n    <div class=\"card\">\n      <h2>Destinataire<\/h2>\n      <p><strong>{{ quote.contactIdRealName|default(c and (c.fullname is defined and c.fullname ? c.fullname : (c.name|default('')))) }}<\/strong><\/p>\n      {% if comp and comp.name is defined and comp.name %}<p><strong>{{ comp.name }}<\/strong><\/p>{% endif %}\n      {% if a and (a.postalCode is defined or a.city is defined) %}<p class=\"muted\">{{ a.postalCode|default('') }} {{ a.city|default('') }}<\/p>{% endif %}\n    <\/div>\n  <\/div>\n\n  <!-- INTRO -->\n  <div class=\"section\">\n    <div class=\"card\">\n      <h1>Proposition commerciale<\/h1>\n      <p>{% if c and c.civility is defined and c.civility %}{{ c.civility }},{% else %}Madame, Monsieur,{% endif %}<\/p>\n      <p>Nous vous remercions de l\u2019int\u00e9r\u00eat que vous portez \u00e0 la marque YANIGAV et \u00e0 ses produits. Suite \u00e0 votre r\u00e9cent appel t\u00e9l\u00e9phonique, voici notre proposition pour un <strong>{{ quote.name|default('Enfonce-pieux HYDROCHOC HPG 790') }}<\/strong> correspondant \u00e0 votre demande.<\/p>\n      {% if quote.priceListRef is defined and quote.priceListRef %}\n        <p class=\"muted\">{{ quote.priceListRef }}<\/p>\n      {% else %}\n        <p class=\"muted\">Tarif \u2014 {{ (quote.createdAt|default('now'))|date('Y') }}<\/p>\n      {% endif %}\n    <\/div>\n  <\/div>\n\n  <!-- OFFRE PRINCIPALE -->\n  <div class=\"section\">\n    <div class=\"card\">\n      <h2>Offre principale<\/h2>\n      <table>\n        <thead>\n          <tr>\n            <th>D\u00e9signation<\/th>\n            <th>R\u00e9f\u00e9rence<\/th>\n            <th>Prix unitaire HT<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody>\n          {% set pu = (mainLine and mainLine.unitPriceExclVat is defined) ? mainLine.unitPriceExclVat : (total_ht_before_discount > 0 ? total_ht_before_discount : 0) %}\n          <tr>\n            <td>{{ (mainLine and mainLine.name is defined and mainLine.name) ? mainLine.name : quote.name }}<\/td>\n            <td>{{ (mainLine and mainLine.reference is defined and mainLine.reference) ? mainLine.reference : '\u2014' }}<\/td>\n            <td>{{ pu|number_format(0, ',', ' ') }} \u20ac<\/td>\n          <\/tr>\n        <\/tbody>\n      <\/table>\n      {% set note = 'Cin\u00e9matique unique sur le march\u00e9 \u2014 un v\u00e9ritable atout dans les terrains compliqu\u00e9s.' %}\n      <p class=\"note\" style=\"margin-top:.75rem\">{{ note }}<\/p>\n    <\/div>\n  <\/div>\n\n  {# ==== DESCRIPTION \/ \u00c9QUIPEMENT \/ FORMATION \/ OPTIONS ==== #}\n  {% set description = (mainLine and mainLine.description is defined and mainLine.description) ? mainLine.description : '' %}\n  {% set description = description|replace({'\u2022':'\\n',';':'\\n'}) %}\n  {% set descList = description|split('\\n') %}\n\n  <div class=\"section grid-2\">\n    <div class=\"card\">\n      <h2>Points forts<\/h2>\n      {% set hasPoint = false %}\n      <ul class=\"cols-3\">\n        {% for item in descList %}\n          {% set t = item|trim %}\n          {% if t != '' %}\n            {% set hasPoint = true %}\n            <li>{{ t }}<\/li>\n          {% endif %}\n        {% endfor %}\n      <\/ul>\n      {% if not hasPoint %}\n        <p class=\"muted\">Aucun d\u00e9tail technique renseign\u00e9 pour cet article.<\/p>\n      {% endif %}\n    <\/div>\n\n    <div class=\"card\">\n      <h2>\u00c9quipement de s\u00e9rie<\/h2>\n      {% set printedEquip = false %}\n      {# 1) Liste explicite mainLine.features si fournie #}\n      {% if mainLine and mainLine.features is defined and mainLine.features %}\n        <ul>\n          {% for f in mainLine.features %}\n            <li>{{ f }}<\/li>\n            {% set printedEquip = true %}\n          {% endfor %}\n        <\/ul>\n      {% endif %}\n\n      {# 2) Sinon, tentative d\u2019extraction depuis descList avec mots-cl\u00e9s #}\n      {% if not printedEquip %}\n        {% set equipList = [] %}\n        {% for item in descList %}\n          {% set t = item|trim %}\n          {% if t matches '\/(\u00e9quipement|equipement|de s\u00e9rie|serie)\/i' %}\n            {% set equipList = equipList|merge([t]) %}\n          {% endif %}\n        {% endfor %}\n        {% if equipList %}\n          <ul>\n            {% for f in equipList %}<li>{{ f }}<\/li>{% endfor %}\n          <\/ul>\n          {% set printedEquip = true %}\n        {% endif %}\n      {% endif %}\n\n      {% if not printedEquip %}\n        <p class=\"muted\">Aucun \u00e9quipement de s\u00e9rie sp\u00e9cifi\u00e9.<\/p>\n      {% endif %}\n\n      {% if formationLine %}\n        <h2 style=\"margin-top:1rem\">Formation \/ Mise en route<\/h2>\n        <p><strong>{{ formationLine.name|default('Formation \/ Mise en route') }}<\/strong> \u2013 Prix net :\n          {{ (formationLine.totalExclVat|default(formationLine.unitPriceExclVat|default(0)))|number_format(0, ',', ' ') }} \u20ac HT<\/p>\n        {% if formationLine.description is defined and formationLine.description %}<p class=\"muted\">{{ formationLine.description }}<\/p>{% endif %}\n      {% endif %}\n\n      {% if options %}\n        <h2 style=\"margin-top:1rem\">\u00c9quipements recommand\u00e9s<\/h2>\n        <ul>\n          {% for opt in options %}\n            {% set q = opt.quantity|default(1) %}\n            {% set puo = opt.unitPriceExclVat|default(0) %}\n            {% set rem = opt.discountPercent|default(0) %}\n            {% set opt_total = opt.totalExclVat|default(q * puo * (1 - (rem \/ 100))) %}\n            <li>{{ opt.name }} \u2014 {{ opt_total|number_format(0, ',', ' ') }} \u20ac HT<\/li>\n          {% endfor %}\n        <\/ul>\n      {% endif %}\n    <\/div>\n  <\/div>\n\n  <!-- CONDITIONS COMMERCIALES -->\n  <div class=\"section\">\n    <div class=\"card\">\n      <h2>Conditions commerciales<\/h2>\n      <ul>\n        {% if quote.expiredAt is defined and quote.expiredAt %}<li>Validit\u00e9 de l\u2019offre : 1 mois (jusqu\u2019au {{ quote.expiredAt|date('d\/m\/Y') }})<\/li>{% else %}<li>Validit\u00e9 de l\u2019offre : 1 mois<\/li>{% endif %}\n        {% if discount_value > 0 %}<li>Remise de service : {{ discount_percent|round(0, 'floor') }} %<\/li>{% endif %}\n        {% if quote.orderContext is defined and quote.orderContext %}<li>{{ quote.orderContext }}<\/li>{% endif %}\n        <li>R\u00e8glement {{ quote.paymentMode|default('30 jours nets par LCR') }}<\/li>\n        <li>D\u00e9lai : {{ quote.leadTime|default('2 \u00e0 3 mois apr\u00e8s commande') }}<\/li>\n        {% if quote.shippingFeesHt is defined %}\n          {% if quote.shippingFeesHt == 0 %}<li>Port franco<\/li>\n          {% elseif quote.shippingFeesHt > 0 %}<li>Frais de port : {{ quote.shippingFeesHt|number_format(2, ',', ' ') }} \u20ac HT<\/li>\n          {% else %}<li>Port : {{ quote.shippingMode|default('selon conditions') }}<\/li>\n          {% endif %}\n        {% else %}\n          <li>Port : {{ quote.shippingMode|default('selon conditions') }}<\/li>\n        {% endif %}\n        {% if quote.customerRef is defined and quote.customerRef %}<li>R\u00e9f. client : {{ quote.customerRef }}<\/li>{% endif %}\n      <\/ul>\n    <\/div>\n  <\/div>\n\n  <!-- SIGNATURES -->\n  <div class=\"section grid-2\">\n    <div class=\"card\">\n      <h2>Signataires<\/h2>\n      <p>\n        <strong>{{ managedBy is defined and managedBy.fullname is defined ? managedBy.fullname : (quote.managedByRealName|default('')) }}<\/strong>\n        \u2013 {{ managedBy is defined and managedBy.role is defined and managedBy.role ? managedBy.role : 'Resp. Commercial' }}\n        {% if tel_portable %} \u2013 {{ tel_portable }}{% endif %}\n      <\/p>\n      <div class=\"signature\">Signature exp\u00e9diteur<\/div>\n    <\/div>\n    <div class=\"card\">\n      <h2>Bon pour accord<\/h2>\n      <p><strong>{{ quote.contactIdRealName|default(c and (c.fullname is defined and c.fullname ? c.fullname : (c.name|default('')))) }}<\/strong>{% if comp and comp.name is defined and comp.name %} \u2013 {{ comp.name }}{% endif %}<\/p>\n      <div class=\"signature\">Cachet et signature<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- PIED -->\n  <footer>\n    YANIGAV \u2013 Enfonce-pieux \u2022 Aff\u00fbte-piquet \u2022 Fendeuse de b\u00fbche \u2014 RCS ROANNE B 403 872 724 \u2014 SIRET 403 872 724 00014 \u2014 APE 4661Z \u2014 TVA FR114038727224\n  <\/footer>\n<\/div>\n\n{# PAGE 2 : CGV (optionnelle) #}\n{% if cgv is defined or quote.cgvText is defined %}\n  <div style=\"page-break-before:always;\"><\/div>\n  <div class=\"page\">\n    <div class=\"section\">\n      <div class=\"card\">\n        <h2>Conditions G\u00e9n\u00e9rales de Vente<\/h2>\n        <div class=\"note\" style=\"white-space:pre-wrap\">\n          {{ cgv|default(quote.cgvText)|raw }}\n        <\/div>\n      <\/div>\n    <\/div>\n    <footer>\n      Document g\u00e9n\u00e9r\u00e9 automatiquement \u2014 valable sous r\u00e9serve des conditions pr\u00e9cis\u00e9es ci-dessus.\n    <\/footer>\n  <\/div>\n{% endif %}\n<\/body>\n<\/html>","customerId":"customer_121","userId":"user_1011"}"
  "max_duration" => "3600"
  "headers" => [
    "Content-Type" => "application/json"
    "Accept" => "application/ld+json"
    "Authorization" => "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NjA5MTI0NDEsImV4cCI6MTc2MDkxNjA0MSwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TVVBFUkFETUlOIiwiUk9MRV9BRE1JTiIsIlJPTEVfTU9EVUxFX1BST0RVQ1QiLCJST0xFX01PRFVMRV9QUk9EVUNUX0NVU1RPTUlaRSIsIlJPTEVfTU9EVUxFX1FVT1RFX0xJTkUiLCJQUk9TUEVDVF9TSE9XIiwiUFJPU1BFQ1RfQ1VEIiwiQ09OVEFDVF9DVUQiLCJDT05UQUNUX1NIT1ciLCJUQVNLX1NIT1ciLCJUQVNLX0NVRCIsIlFVT1RFX1NIT1ciLCJRVU9URV9DVUQiLCJRVU9URV9SRUdFTkVSQVRFX1BSSUNFUyJdLCJsb2dpbiI6ImRlbW95YW5pZ2F2IiwidXNlcl9pZCI6InVzZXJfMTAxMSIsInVzZXJfZXh0ZXJuYWxfaWQiOiIxMDExIiwiZW1haWwiOiJnLXNhdXRyb25Ac2ZpLmZyIiwiY3VzdG9tZXJfaWQiOiJjdXN0b21lcl8xMjEiLCJjdXN0b21lcl9uYW1lIjoiWUFOSUdBViIsImN1c3RvbWVyX2V4dGVybmFsX2lkIjoiMTIxIiwiY3VzdG9tZXJfbWFpbGluZ19pZCI6IjE0NyIsImZpcnN0bmFtZSI6Ikd1aWxsYXVtZSIsImxhc3RuYW1lIjoiU0FVVFJPTiIsImxpdmVvTG9naW4iOm51bGwsImxpdmVvUGFzc3dvcmQiOm51bGwsImhhc0ludHJhbmV0IjpmYWxzZSwibGFuZ3VhZ2UiOiJGUiIsInNlY3Rpb25zX2xlYWRlZCI6W10sInNlY3Rpb25zX21lbWJlcnMiOlsidXNlcl8xMDExIl0sImlzX3NlY3Rpb25zX2FjdGl2YXRlZCI6ZmFsc2UsInJlZnJlc2hfdG9rZW4iOiIifQ.smruhTDO6MF4efpXGiPp4DyZoLSpsUh3ykwBDmscLGtkvlySQlnSFvS1bxozG8T5Y0oGdkijvDiliogWK_zhqLF6FXho-oEscgCbKhvTjdosGLc4QHX0QAtM1LeVpT3BGVz9isHY1J7X0RDnoWA2GdCwCZ-ELXlS7fP08w_Mc5j8GqGhN5XwD70MLfR5ltD75o5BEhCWKMsWsatkGs3bbd7AfjhqoSz7qexpiHj1BRszq-H5QekWiJWgwOLDUJc85rZYaNVbYu75qseEbKfW-kWAxOZhAZCmVfFDQ-qBxSJ1i7KwVasIGTJDTnJn7l8fDqFWF0jGtC4LJzQEOZDjoOrQVaP2szLusNdOeKICnE3GOpY7E2sHIJpbTf8KlRUSm0uKc4t4hgoSRxnCdQGLx4hcTGSGHyITgso7tVs6068piCfp8JttEo5SoXERPiVNl2oeKa7VQAgtUWMzPI-SYX6QfGCjnrYE3JcTufx8xFtvlS4pmeIaLNJs7Y8l21f-A8MB7y-3zOAzriYExuKUOtT9oZ0GRtCWG5oTUyQ2LI4IjzaqBW_ikRfcccdSOZqZxV_FVw1fO9vPg9Lgi9XKAfKtjCLtI9nMboiZsSk9mx5_CAREqtb476hnnUVOfvHCBazVRQo-FWsSSWNLCIe8MtR9pUny0D8hn5qCQ712Axk"
    "X-Transaction-Id" => "front:zv9jvbn66i"
    "sentry-trace" => "0d4bcfe9dcab4fed810252ba8ba0678f-e3502775cf084346-1"
  ]
  "query" => null
]
200
[
  "response_headers" => [
    "HTTP/1.1 200 OK"
    "Server: nginx"
    "Date: Sun, 19 Oct 2025 22:39:09 GMT"
    "Content-Type: application/ld+json; charset=utf-8"
    "Transfer-Encoding: chunked"
    "Connection: keep-alive"
    "X-Powered-By: PHP/7.2.34"
    "Vary: Accept,Authorization"
    "X-Content-Type-Options: nosniff"
    "X-Frame-Options: deny"
    "Content-Location: /api/templates/f47ef469dac34bc29180feb40a25724c"
    "Cache-Control: private, must-revalidate"
    "pragma: no-cache"
    "expires: -1"
    "Link: <http://dev.pol-api-param.pol-crm.com/api/docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation""
    "X-Debug-Token: 80f202"
    "X-Debug-Token-Link: http://dev.pol-api-param.pol-crm.com/_profiler/80f202"
    "X-Robots-Tag: noindex"
    "X-Powered-By: PleskLin"
  ]
  "debug_info" => [
    "header_size" => 685
    "request_size" => 17685
    "total_time" => 0.31065
    "namelookup_time" => 2.9E-5
    "connect_time" => 2.9E-5
    "pretransfer_time" => 0.000133
    "size_upload" => 15521.0
    "size_download" => 18457.0
    "speed_download" => 59538.0
    "speed_upload" => 50067.0
    "upload_content_length" => 15521.0
    "starttransfer_time" => 0.310276
    "primary_ip" => "185.18.171.8"
    "primary_port" => 80
    "local_ip" => "185.18.171.8"
    "local_port" => 45022
    "start_time" => 1760913549.6592
    "debug" => """
      * Found bundle for host dev.pol-api-param.pol-crm.com: 0x564bffb0fd40 [can pipeline]\n
      * Could pipeline, but not asked to!\n
      * Re-using existing connection! (#0) with host dev.pol-api-param.pol-crm.com\n
      * Connected to dev.pol-api-param.pol-crm.com (185.18.171.8) port 80 (#0)\n
      > PUT /api/templates/f47ef469dac34bc29180feb40a25724c HTTP/1.1\r\n
      Host: dev.pol-api-param.pol-crm.com\r\n
      Connection: Upgrade, HTTP2-Settings\r\n
      Upgrade: h2c\r\n
      HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA\r\n
      Content-Type: application/json\r\n
      Accept: application/ld+json\r\n
      Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE3NjA5MTI0NDEsImV4cCI6MTc2MDkxNjA0MSwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TVVBFUkFETUlOIiwiUk9MRV9BRE1JTiIsIlJPTEVfTU9EVUxFX1BST0RVQ1QiLCJST0xFX01PRFVMRV9QUk9EVUNUX0NVU1RPTUlaRSIsIlJPTEVfTU9EVUxFX1FVT1RFX0xJTkUiLCJQUk9TUEVDVF9TSE9XIiwiUFJPU1BFQ1RfQ1VEIiwiQ09OVEFDVF9DVUQiLCJDT05UQUNUX1NIT1ciLCJUQVNLX1NIT1ciLCJUQVNLX0NVRCIsIlFVT1RFX1NIT1ciLCJRVU9URV9DVUQiLCJRVU9URV9SRUdFTkVSQVRFX1BSSUNFUyJdLCJsb2dpbiI6ImRlbW95YW5pZ2F2IiwidXNlcl9pZCI6InVzZXJfMTAxMSIsInVzZXJfZXh0ZXJuYWxfaWQiOiIxMDExIiwiZW1haWwiOiJnLXNhdXRyb25Ac2ZpLmZyIiwiY3VzdG9tZXJfaWQiOiJjdXN0b21lcl8xMjEiLCJjdXN0b21lcl9uYW1lIjoiWUFOSUdBViIsImN1c3RvbWVyX2V4dGVybmFsX2lkIjoiMTIxIiwiY3VzdG9tZXJfbWFpbGluZ19pZCI6IjE0NyIsImZpcnN0bmFtZSI6Ikd1aWxsYXVtZSIsImxhc3RuYW1lIjoiU0FVVFJPTiIsImxpdmVvTG9naW4iOm51bGwsImxpdmVvUGFzc3dvcmQiOm51bGwsImhhc0ludHJhbmV0IjpmYWxzZSwibGFuZ3VhZ2UiOiJGUiIsInNlY3Rpb25zX2xlYWRlZCI6W10sInNlY3Rpb25zX21lbWJlcnMiOlsidXNlcl8xMDExIl0sImlzX3NlY3Rpb25zX2FjdGl2YXRlZCI6ZmFsc2UsInJlZnJlc2hfdG9rZW4iOiIifQ.smruhTDO6MF4efpXGiPp4DyZoLSpsUh3ykwBDmscLGtkvlySQlnSFvS1bxozG8T5Y0oGdkijvDiliogWK_zhqLF6FXho-oEscgCbKhvTjdosGLc4QHX0QAtM1LeVpT3BGVz9isHY1J7X0RDnoWA2GdCwCZ-ELXlS7fP08w_Mc5j8GqGhN5XwD70MLfR5ltD75o5BEhCWKMsWsatkGs3bbd7AfjhqoSz7qexpiHj1BRszq-H5QekWiJWgwOLDUJc85rZYaNVbYu75qseEbKfW-kWAxOZhAZCmVfFDQ-qBxSJ1i7KwVasIGTJDTnJn7l8fDqFWF0jGtC4LJzQEOZDjoOrQVaP2szLusNdOeKICnE3GOpY7E2sHIJpbTf8KlRUSm0uKc4t4hgoSRxnCdQGLx4hcTGSGHyITgso7tVs6068piCfp8JttEo5SoXERPiVNl2oeKa7VQAgtUWMzPI-SYX6QfGCjnrYE3JcTufx8xFtvlS4pmeIaLNJs7Y8l21f-A8MB7y-3zOAzriYExuKUOtT9oZ0GRtCWG5oTUyQ2LI4IjzaqBW_ikRfcccdSOZqZxV_FVw1fO9vPg9Lgi9XKAfKtjCLtI9nMboiZsSk9mx5_CAREqtb476hnnUVOfvHCBazVRQo-FWsSSWNLCIe8MtR9pUny0D8hn5qCQ712Axk\r\n
      X-Transaction-Id: front:zv9jvbn66i\r\n
      sentry-trace: 0d4bcfe9dcab4fed810252ba8ba0678f-e3502775cf084346-1\r\n
      Content-Length: 15521\r\n
      User-Agent: Symfony HttpClient/Curl\r\n
      Accept-Encoding: gzip\r\n
      \r\n
      * upload completely sent off: 15521 out of 15521 bytes\n
      < HTTP/1.1 200 OK\r\n
      < Server: nginx\r\n
      < Date: Sun, 19 Oct 2025 22:39:09 GMT\r\n
      < Content-Type: application/ld+json; charset=utf-8\r\n
      < Transfer-Encoding: chunked\r\n
      < Connection: keep-alive\r\n
      < X-Powered-By: PHP/7.2.34\r\n
      < Vary: Accept,Authorization\r\n
      < X-Content-Type-Options: nosniff\r\n
      < X-Frame-Options: deny\r\n
      < Content-Location: /api/templates/f47ef469dac34bc29180feb40a25724c\r\n
      < Cache-Control: private, must-revalidate\r\n
      < pragma: no-cache\r\n
      < expires: -1\r\n
      < Link: <http://dev.pol-api-param.pol-crm.com/api/docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"\r\n
      < X-Debug-Token: 80f202\r\n
      < X-Debug-Token-Link: http://dev.pol-api-param.pol-crm.com/_profiler/80f202\r\n
      < X-Robots-Tag: noindex\r\n
      < X-Powered-By: PleskLin\r\n
      < \r\n
      """
  ]
]