{"id":578,"date":"2026-05-14T10:47:39","date_gmt":"2026-05-14T08:47:39","guid":{"rendered":"https:\/\/adelouvain.be\/?page_id=578"},"modified":"2026-05-14T13:56:27","modified_gmt":"2026-05-14T11:56:27","slug":"calculateur-de-prix","status":"publish","type":"page","link":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/","title":{"rendered":"Calculateur de prix"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]<!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"fr\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] --><meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] --><title>Homeband \u2014 Calculateur de devis<\/title><!-- [et_pb_line_break_holder] --><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf-autotable\/3.8.0\/jspdf.plugin.autotable.min.js\"><\/script><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->  :root {<!-- [et_pb_line_break_holder] -->    --bg: #fafaf8;<!-- [et_pb_line_break_holder] -->    --ink: #0a0a0a;<!-- [et_pb_line_break_holder] -->    --muted: #6b6b6b;<!-- [et_pb_line_break_holder] -->    --line: #e5e3de;<!-- [et_pb_line_break_holder] -->    --accent: #c9a85a;<!-- [et_pb_line_break_holder] -->    --card: #ffffff;<!-- [et_pb_line_break_holder] -->    --danger: #b54141;<!-- [et_pb_line_break_holder] -->    --ok: #2d6a4f;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  * { box-sizing: border-box; }<!-- [et_pb_line_break_holder] -->  body {<!-- [et_pb_line_break_holder] -->    margin: 0;<!-- [et_pb_line_break_holder] -->    font-family: -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", Roboto, sans-serif;<!-- [et_pb_line_break_holder] -->    background: var(--bg);<!-- [et_pb_line_break_holder] -->    color: var(--ink);<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    line-height: 1.5;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .app {<!-- [et_pb_line_break_holder] -->    display: grid;<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1fr 420px;<!-- [et_pb_line_break_holder] -->    min-height: 100vh;<!-- [et_pb_line_break_holder] -->    max-width: 1500px;<!-- [et_pb_line_break_holder] -->    margin: 0 auto;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .panel-form {<!-- [et_pb_line_break_holder] -->    padding: 32px 40px;<!-- [et_pb_line_break_holder] -->    border-right: 1px solid var(--line);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .panel-recap {<!-- [et_pb_line_break_holder] -->    background: #0a0a0a;<!-- [et_pb_line_break_holder] -->    color: #fafaf8;<!-- [et_pb_line_break_holder] -->    padding: 32px;<!-- [et_pb_line_break_holder] -->    position: sticky;<!-- [et_pb_line_break_holder] -->    top: 0;<!-- [et_pb_line_break_holder] -->    height: 100vh;<!-- [et_pb_line_break_holder] -->    overflow-y: auto;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  h1 {<!-- [et_pb_line_break_holder] -->    font-size: 22px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    margin: 0 0 4px;<!-- [et_pb_line_break_holder] -->    letter-spacing: -0.02em;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .subtitle {<!-- [et_pb_line_break_holder] -->    color: var(--muted);<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 28px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  fieldset {<!-- [et_pb_line_break_holder] -->    border: none;<!-- [et_pb_line_break_holder] -->    border-top: 1px solid var(--line);<!-- [et_pb_line_break_holder] -->    padding: 20px 0 8px;<!-- [et_pb_line_break_holder] -->    margin: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  fieldset:first-of-type { border-top: none; padding-top: 0; }<!-- [et_pb_line_break_holder] -->  legend {<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    font-size: 11px;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.08em;<!-- [et_pb_line_break_holder] -->    color: var(--muted);<!-- [et_pb_line_break_holder] -->    padding: 0;<!-- [et_pb_line_break_holder] -->    margin-bottom: 14px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .row { display: grid; gap: 12px; margin-bottom: 12px; }<!-- [et_pb_line_break_holder] -->  .row.cols-2 { grid-template-columns: 1fr 1fr; }<!-- [et_pb_line_break_holder] -->  .row.cols-3 { grid-template-columns: 1fr 1fr 1fr; }<!-- [et_pb_line_break_holder] -->  label {<!-- [et_pb_line_break_holder] -->    display: block;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: var(--muted);<!-- [et_pb_line_break_holder] -->    margin-bottom: 4px;<!-- [et_pb_line_break_holder] -->    font-weight: 500;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  input[type=text], input[type=number], input[type=email], input[type=date], select, textarea {<!-- [et_pb_line_break_holder] -->    width: 100%;<!-- [et_pb_line_break_holder] -->    padding: 9px 11px;<!-- [et_pb_line_break_holder] -->    border: 1px solid var(--line);<!-- [et_pb_line_break_holder] -->    border-radius: 6px;<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    font-family: inherit;<!-- [et_pb_line_break_holder] -->    background: var(--card);<!-- [et_pb_line_break_holder] -->    color: var(--ink);<!-- [et_pb_line_break_holder] -->    transition: border-color 0.15s;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  input:focus, select:focus, textarea:focus {<!-- [et_pb_line_break_holder] -->    outline: none;<!-- [et_pb_line_break_holder] -->    border-color: var(--ink);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  textarea { resize: vertical; min-height: 60px; }<!-- [et_pb_line_break_holder] -->  .checks { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; }<!-- [et_pb_line_break_holder] -->  .check {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->    padding: 7px 10px;<!-- [et_pb_line_break_holder] -->    border: 1px solid var(--line);<!-- [et_pb_line_break_holder] -->    border-radius: 6px;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    background: var(--card);<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    transition: all 0.15s;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .check:hover { border-color: var(--ink); }<!-- [et_pb_line_break_holder] -->  .check input { margin: 0; }<!-- [et_pb_line_break_holder] -->  .check.active { border-color: var(--ink); background: #f5f4f0; }<!-- [et_pb_line_break_holder] -->  .check .price { margin-left: auto; color: var(--muted); font-size: 12px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* recap *\/<!-- [et_pb_line_break_holder] -->  .recap-h {<!-- [et_pb_line_break_holder] -->    font-size: 11px;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.08em;<!-- [et_pb_line_break_holder] -->    color: #8a8a8a;<!-- [et_pb_line_break_holder] -->    margin: 24px 0 10px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .recap-h:first-of-type { margin-top: 0; }<!-- [et_pb_line_break_holder] -->  .recap-line {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    justify-content: space-between;<!-- [et_pb_line_break_holder] -->    padding: 6px 0;<!-- [et_pb_line_break_holder] -->    border-bottom: 1px solid #1f1f1f;<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .recap-line .lbl { color: #b5b5b5; }<!-- [et_pb_line_break_holder] -->  .recap-line .val { font-variant-numeric: tabular-nums; }<!-- [et_pb_line_break_holder] -->  .total-box {<!-- [et_pb_line_break_holder] -->    margin-top: 20px;<!-- [et_pb_line_break_holder] -->    padding: 20px;<!-- [et_pb_line_break_holder] -->    background: #fafaf8;<!-- [et_pb_line_break_holder] -->    color: #0a0a0a;<!-- [et_pb_line_break_holder] -->    border-radius: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .total-box .ttl-lbl {<!-- [et_pb_line_break_holder] -->    font-size: 11px;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.08em;<!-- [et_pb_line_break_holder] -->    color: var(--muted);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .total-box .ttl-val {<!-- [et_pb_line_break_holder] -->    font-size: 34px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    letter-spacing: -0.02em;<!-- [et_pb_line_break_holder] -->    font-variant-numeric: tabular-nums;<!-- [et_pb_line_break_holder] -->    margin-top: 4px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .total-box .acompte {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: var(--muted);<!-- [et_pb_line_break_holder] -->    margin-top: 8px;<!-- [et_pb_line_break_holder] -->    padding-top: 8px;<!-- [et_pb_line_break_holder] -->    border-top: 1px solid var(--line);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .actions { display: grid; gap: 8px; margin-top: 20px; }<!-- [et_pb_line_break_holder] -->  button {<!-- [et_pb_line_break_holder] -->    padding: 11px 16px;<!-- [et_pb_line_break_holder] -->    border: 1px solid #fafaf8;<!-- [et_pb_line_break_holder] -->    border-radius: 6px;<!-- [et_pb_line_break_holder] -->    font-family: inherit;<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    font-weight: 500;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    background: #fafaf8;<!-- [et_pb_line_break_holder] -->    color: #0a0a0a;<!-- [et_pb_line_break_holder] -->    transition: all 0.15s;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  button:hover { transform: translateY(-1px); }<!-- [et_pb_line_break_holder] -->  button.secondary { background: transparent; color: #fafaf8; }<!-- [et_pb_line_break_holder] -->  button.secondary:hover { background: #1a1a1a; }<!-- [et_pb_line_break_holder] -->  button:disabled { opacity: 0.4; cursor: not-allowed; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .badge {<!-- [et_pb_line_break_holder] -->    display: inline-block;<!-- [et_pb_line_break_holder] -->    padding: 2px 7px;<!-- [et_pb_line_break_holder] -->    font-size: 11px;<!-- [et_pb_line_break_holder] -->    background: #1f1f1f;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    color: #b5b5b5;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .num-edit {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 6px;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->    padding: 10px;<!-- [et_pb_line_break_holder] -->    background: #1a1a1a;<!-- [et_pb_line_break_holder] -->    border-radius: 6px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .num-edit input {<!-- [et_pb_line_break_holder] -->    background: #0a0a0a;<!-- [et_pb_line_break_holder] -->    color: #fafaf8;<!-- [et_pb_line_break_holder] -->    border: 1px solid #2a2a2a;<!-- [et_pb_line_break_holder] -->    padding: 5px 8px;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    width: 110px;<!-- [et_pb_line_break_holder] -->    font-family: inherit;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .num-edit label { color: #8a8a8a; margin: 0; }<!-- [et_pb_line_break_holder] -->  .warn {<!-- [et_pb_line_break_holder] -->    background: #2a1f0a;<!-- [et_pb_line_break_holder] -->    border: 1px solid #5a4515;<!-- [et_pb_line_break_holder] -->    color: #e0c97a;<!-- [et_pb_line_break_holder] -->    padding: 8px 10px;<!-- [et_pb_line_break_holder] -->    border-radius: 6px;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    margin-top: 10px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  @media (max-width: 960px) {<!-- [et_pb_line_break_holder] -->    .app { grid-template-columns: 1fr; }<!-- [et_pb_line_break_holder] -->    .panel-recap { position: static; height: auto; }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"app\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ============ FORMULAIRE ============ --><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"panel-form\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<h1>Calculateur de devis<\/h1>\n<p><!-- [et_pb_line_break_holder] -->    <pee class=\"subtitle\">Homeband ASBL \u2014 usage interne<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- CLIENT --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>Client<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Type de client<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"clientType\"><!-- [et_pb_line_break_holder] --><option value=\"prive\">Particulier<\/option><!-- [et_pb_line_break_holder] --><option value=\"asbl\">ASBL \/ Associatif<\/option><!-- [et_pb_line_break_holder] --><option value=\"ceremonie\">C\u00e9r\u00e9monie (vin d&#8217;honneur)<\/option><!-- [et_pb_line_break_holder] --><option value=\"festival\">Festival \/ Concert public<\/option><!-- [et_pb_line_break_holder] --><option value=\"institutionnel\">Institutionnel (commune, universit\u00e9, minist\u00e8re)<\/option><!-- [et_pb_line_break_holder] --><option value=\"entreprise\">Entreprise \/ Corporate<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>R\u00e9f\u00e9rence interne (optionnel)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"clientRef\" placeholder=\"Ex: Mariage Dupont\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Nom \/ Raison sociale<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"clientName\" placeholder=\"Nom du client\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Repr\u00e9sentant l\u00e9gal (pour le contrat)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"clientRepresentant\" placeholder=\"Pr\u00e9nom Nom du signataire\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Adresse compl\u00e8te<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"clientAddr\" placeholder=\"Rue, n\u00b0, code postal, ville\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>N\u00b0 TVA (si entreprise\/ASBL)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"clientVat\" placeholder=\"BE0xxx.xxx.xxx\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Email<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"email\" id=\"clientEmail\" placeholder=\"contact@...\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>T\u00e9l\u00e9phone<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"clientPhone\" placeholder=\"+32...\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- EVENEMENT --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>\u00c9v\u00e9nement<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Heure de d\u00e9but (estim\u00e9e)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"eventTime\" placeholder=\"ex: 20h00\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Heure d&#8217;arriv\u00e9e \u00e9quipe \/ soundcheck<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"eventArrivee\" placeholder=\"ex: 17h30\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Date de l&#8217;\u00e9v\u00e9nement<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"date\" id=\"eventDate\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Heure de fin (estim\u00e9e)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"eventEnd\" placeholder=\"ex: 01h00\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Lieu de la prestation<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"text\" id=\"eventPlace\" placeholder=\"Salle, adresse, ville\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Distance \u00e0 facturer (km) \u2014 calcul\u00e9e selon trajet r\u00e9el et nb de v\u00e9hicules<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"number\" id=\"eventDistance\" value=\"0\" min=\"0\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Jour f\u00e9ri\u00e9 ?<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"eventHoliday\"><!-- [et_pb_line_break_holder] --><option value=\"none\">Non<\/option><!-- [et_pb_line_break_holder] --><option value=\"ferie\">Jour f\u00e9ri\u00e9<\/option><!-- [et_pb_line_break_holder] --><option value=\"reveillon\">R\u00e9veillon (24 ou 31 d\u00e9c)<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- NATURE DE LA PRESTATION --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>Nature de la prestation<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Type de prestation<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"prestaType\"><!-- [et_pb_line_break_holder] --><option value=\"\">\u2014 Choisir \u2014<\/option><!-- [et_pb_line_break_holder] --><option value=\"bal_folk\">Bal folk<\/option><!-- [et_pb_line_break_holder] --><option value=\"concert_prive\">Concert priv\u00e9 \/ animation<\/option><!-- [et_pb_line_break_holder] --><option value=\"concert_public\">Concert public<\/option><!-- [et_pb_line_break_holder] --><option value=\"festival\">Festival<\/option><!-- [et_pb_line_break_holder] --><option value=\"cocktail\">Cocktail \/ vin d&#8217;honneur<\/option><!-- [et_pb_line_break_holder] --><option value=\"mariage\">Animation mariage<\/option><!-- [et_pb_line_break_holder] --><option value=\"ceremonie_laique\">C\u00e9r\u00e9monie la\u00efque<\/option><!-- [et_pb_line_break_holder] --><option value=\"corporate\">Animation d&#8217;entreprise<\/option><!-- [et_pb_line_break_holder] --><option value=\"evenementiel\">\u00c9v\u00e9nementiel \/ inauguration<\/option><!-- [et_pb_line_break_holder] --><option value=\"autre\">Autre (\u00e0 pr\u00e9ciser ci-dessous)<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Description d\u00e9taill\u00e9e de la prestation (appara\u00eetra en bonne place sur le devis)<\/label><!-- [et_pb_line_break_holder] -->          <textarea id=\"prestaDesc\" rows=\"4\" placeholder=\"Ex : Bal folk traditionnel pour environ 80 danseurs. Le trio interpr\u00e8tera un r\u00e9pertoire de danses europ\u00e9ennes (mazurkas, scottishs, valses, polkas) en alternant morceaux \u00e0 danser et explications p\u00e9dagogiques pour faciliter la participation des invit\u00e9s. Installation 1h avant et balance son comprises.\"><\/textarea><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Programme indicatif \/ setlist (optionnel)<\/label><!-- [et_pb_line_break_holder] -->          <textarea id=\"prestaProgramme\" rows=\"2\" placeholder=\"Ex : 1er set \u2014 r\u00e9pertoire folk traditionnel ; 2e set \u2014 compositions originales ; bal de cl\u00f4ture\"><\/textarea><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- FORMULE --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>Formule musicale<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Composition<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"formule\"><!-- [et_pb_line_break_holder] --><option value=\"solo\">Solo (1 musicien)<\/option><!-- [et_pb_line_break_holder] --><option value=\"duo\">Duo (2 musiciens)<\/option><!-- [et_pb_line_break_holder] --><option value=\"trio\" selected>Trio (3 musiciens)<\/option><!-- [et_pb_line_break_holder] --><option value=\"quatuor\">Quatuor (4 musiciens)<\/option><!-- [et_pb_line_break_holder] --><option value=\"band\">Full Band (5+ musiciens)<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Nombre de musiciens (si Full Band)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"number\" id=\"bandSize\" value=\"5\" min=\"5\" max=\"12\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Dur\u00e9e<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"duree\"><!-- [et_pb_line_break_holder] --><option value=\"set1\">1 set (45 min)<\/option><!-- [et_pb_line_break_holder] --><option value=\"set2\" selected>2 sets (2 \u00d7 45 min)<\/option><!-- [et_pb_line_break_holder] --><option value=\"soiree\">Soir\u00e9e compl\u00e8te (jusqu&#8217;\u00e0 4h)<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Heures suppl\u00e9mentaires (au-del\u00e0 du forfait)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"number\" id=\"heuresSupp\" value=\"0\" min=\"0\" max=\"6\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- TECHNIQUE --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>Pack technique<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Pack sono<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"packSono\"><!-- [et_pb_line_break_holder] --><option value=\"none\">Aucun (client fournit)<\/option><!-- [et_pb_line_break_holder] --><option value=\"S\">Pack S \u2014 &lt;50 pers (150\u20ac)<\/option><!-- [et_pb_line_break_holder] --><option value=\"M\" selected>Pack M \u2014 50-150 pers (280\u20ac)<\/option><!-- [et_pb_line_break_holder] --><option value=\"L\">Pack L \u2014 150-300 pers (450\u20ac)<\/option><!-- [et_pb_line_break_holder] --><option value=\"XL\">Pack XL \u2014 300+ \/ ext\u00e9rieur (750\u20ac)<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>\u00c9clairage<\/label><!-- [et_pb_line_break_holder] -->          <select id=\"packLight\"><!-- [et_pb_line_break_holder] --><option value=\"none\">Aucun<\/option><!-- [et_pb_line_break_holder] --><option value=\"basic\">Basique (+80\u20ac)<\/option><!-- [et_pb_line_break_holder] --><option value=\"full\">Sc\u00e9nographie compl\u00e8te (+200\u20ac)<\/option><!-- [et_pb_line_break_holder] -->          <\/select><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label><input type=\"checkbox\" id=\"techDedie\"> Technicien son d\u00e9di\u00e9 pour la dur\u00e9e (+250\u20ac)<\/label><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- OPTIONS --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>Options additionnelles<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"checks\"><!-- [et_pb_line_break_holder] -->        <label class=\"check\"><input type=\"checkbox\" data-opt=\"dj\" data-price=\"180\"> DJ post-concert <span class=\"price\">+180\u20ac<\/span><\/label><!-- [et_pb_line_break_holder] -->        <label class=\"check\"><input type=\"checkbox\" data-opt=\"surprise\" data-price=\"120\"> Chanson surprise <span class=\"price\">+120\u20ac<\/span><\/label><!-- [et_pb_line_break_holder] -->        <label class=\"check\"><input type=\"checkbox\" data-opt=\"repertoire\" data-price=\"90\"> Morceau perso pr\u00e9par\u00e9 <span class=\"price\">+90\u20ac<\/span><\/label><!-- [et_pb_line_break_holder] -->        <label class=\"check\"><input type=\"checkbox\" data-opt=\"mc\" data-price=\"100\"> Animation micro \/ MC <span class=\"price\">+100\u20ac<\/span><\/label><!-- [et_pb_line_break_holder] -->        <label class=\"check\"><input type=\"checkbox\" data-opt=\"backline\" data-price=\"150\"> Backline complet <span class=\"price\">+150\u20ac<\/span><\/label><!-- [et_pb_line_break_holder] -->        <label class=\"check\"><input type=\"checkbox\" data-opt=\"captation\" data-price=\"350\"> Captation vid\u00e9o simple <span class=\"price\">+350\u20ac<\/span><\/label><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\" style=\"margin-top: 12px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Micros HF suppl\u00e9mentaires (\u00d725\u20ac\/unit\u00e9)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"number\" id=\"micsHF\" value=\"0\" min=\"0\" max=\"10\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- AJUSTEMENTS --><!-- [et_pb_line_break_holder] -->    <\/p>\n<fieldset><!-- [et_pb_line_break_holder] -->      <\/p>\n<legend>Ajustements<\/legend>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row cols-2\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Remise commerciale (\u20ac)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"number\" id=\"remiseEur\" value=\"0\" min=\"0\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Remise commerciale (%)<\/label><!-- [et_pb_line_break_holder] -->          <input type=\"number\" id=\"remisePct\" value=\"0\" min=\"0\" max=\"100\"><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"row\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div><!-- [et_pb_line_break_holder] -->          <label>Note libre pour le devis<\/label><!-- [et_pb_line_break_holder] -->          <textarea id=\"noteLibre\" placeholder=\"Pr\u00e9cisions, demandes sp\u00e9ciales, conditions particuli\u00e8res...\"><\/textarea><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- ============ RECAP ============ --><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"panel-recap\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"num-edit\"><!-- [et_pb_line_break_holder] -->      <label>N\u00b0 Devis<\/label><!-- [et_pb_line_break_holder] -->      <input type=\"text\" id=\"devisNum\" value=\"\"><!-- [et_pb_line_break_holder] -->      <button onclick=\"resetCounter()\" style=\"padding: 5px 9px; font-size: 11px;\">\u21bb<\/button><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"recap-h\">D\u00e9tail du calcul<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"recapDetail\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"total-box\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"ttl-lbl\">Montant total<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"ttl-val\" id=\"totalDisplay\">0 \u20ac<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"acompte\" id=\"acompteDisplay\">Acompte 30% : 0 \u20ac<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"warnings\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"actions\"><!-- [et_pb_line_break_holder] -->      <button onclick=\"generateDevis()\">\ud83d\udcc4 G\u00e9n\u00e9rer le devis (PDF)<\/button><!-- [et_pb_line_break_holder] -->      <button onclick=\"generateContrat()\">\ud83d\udccb G\u00e9n\u00e9rer le contrat d&#8217;engagement<\/button><!-- [et_pb_line_break_holder] -->      <button class=\"secondary\" onclick=\"generateAnnexe()\">\ud83d\udcd8 G\u00e9n\u00e9rer l&#8217;annexe m\u00e9thodologique<\/button><!-- [et_pb_line_break_holder] -->      <button class=\"secondary\" onclick=\"resetForm()\">\u21ba R\u00e9initialiser<\/button><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->\/\/ ========== CONFIGURATION TARIFAIRE ==========<!-- [et_pb_line_break_holder] -->const CONFIG = {<!-- [et_pb_line_break_holder] -->  homeband: {<!-- [et_pb_line_break_holder] -->    nom: \"Homeband ASBL\",<!-- [et_pb_line_break_holder] -->    adresse: \"Rue de Namur 3E\",<!-- [et_pb_line_break_holder] -->    cp: \"5190 Jemeppe-sur-Sambre\",<!-- [et_pb_line_break_holder] -->    email: \"contact@homeband.be\",<!-- [et_pb_line_break_holder] -->    emailAlt: \"homeband.events@gmail.com\",<!-- [et_pb_line_break_holder] -->    tel: \"+32 496 37 59 70\",<!-- [et_pb_line_break_holder] -->    tva: \"BE0557.924.006\",<!-- [et_pb_line_break_holder] -->    iban: \"BE72 0017 3804 7616\",<!-- [et_pb_line_break_holder] -->    mentionTva: \"Petite entreprise soumise au r\u00e9gime de la franchise de la taxe (art. 56 \u00a72 CTVA) \u2014 TVA non applicable\",<!-- [et_pb_line_break_holder] -->    site: \"homeband.be\"<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  tarifMusicien: { solo: 250, duo: 180, trio: 150, quatuor: 130, band: 120 },<!-- [et_pb_line_break_holder] -->  multiplicateurDuree: { set1: 1.0, set2: 1.5, soiree: 2.0 },<!-- [et_pb_line_break_holder] -->  heureSupp: 0.20, \/\/ +20% par heure suppl\u00e9mentaire (du tarif base)<!-- [et_pb_line_break_holder] -->  coefEvent: { prive: 1.0, asbl: 1.0, ceremonie: 1.0, festival: 1.1, institutionnel: 1.4, entreprise: 1.7 },<!-- [et_pb_line_break_holder] -->  coefJour: { 1: 0.9, 2: 0.9, 3: 0.9, 4: 0.9, 5: 1.0, 6: 1.1, 0: 1.05 }, \/\/ lun-jeu, ven, sam, dim<!-- [et_pb_line_break_holder] -->  coefFerie: 1.3,<!-- [et_pb_line_break_holder] -->  coefReveillon: 1.5,<!-- [et_pb_line_break_holder] -->  lastMinDays: 30,<!-- [et_pb_line_break_holder] -->  lastMinPct: 0.10,<!-- [et_pb_line_break_holder] -->  distance: {<!-- [et_pb_line_break_holder] -->    tarifKm: 0.45<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  packSono: { none: 0, S: 150, M: 280, L: 450, XL: 750 },<!-- [et_pb_line_break_holder] -->  packLight: { none: 0, basic: 80, full: 200 },<!-- [et_pb_line_break_holder] -->  techDedie: 250,<!-- [et_pb_line_break_holder] -->  micHF: 25,<!-- [et_pb_line_break_holder] -->  acomptePct: 0.30,<!-- [et_pb_line_break_holder] -->  validiteJours: 30,<!-- [et_pb_line_break_holder] -->  annulation: [<!-- [et_pb_line_break_holder] -->    { delai: \">60j\", retenu: \"0%\" },<!-- [et_pb_line_break_holder] -->    { delai: \"30-60j\", retenu: \"30%\" },<!-- [et_pb_line_break_holder] -->    { delai: \"7-30j\", retenu: \"50%\" },<!-- [et_pb_line_break_holder] -->    { delai: \"<7j\", retenu: \"100%\" }<!-- [et_pb_line_break_holder] -->  ]<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Libell\u00e9s affichage<!-- [et_pb_line_break_holder] -->const LIBELLES = {<!-- [et_pb_line_break_holder] -->  clientType: { prive: \"Particulier\", asbl: \"ASBL \/ Associatif\", ceremonie: \"C\u00e9r\u00e9monie\", festival: \"Festival \/ Concert public\", institutionnel: \"Institutionnel\", entreprise: \"Entreprise \/ Corporate\" },<!-- [et_pb_line_break_holder] -->  formule: { solo: \"Solo\", duo: \"Duo\", trio: \"Trio\", quatuor: \"Quatuor\", band: \"Full Band\" },<!-- [et_pb_line_break_holder] -->  duree: { set1: \"1 set de 45 min\", set2: \"2 sets de 45 min\", soiree: \"Soir\u00e9e compl\u00e8te (jusqu'\u00e0 4h)\" },<!-- [et_pb_line_break_holder] -->  packSono: { none: \"\u2014\", S: \"Pack S (<50 pers)\", M: \"Pack M (50\u2013150 pers)\", L: \"Pack L (150\u2013300 pers)\", XL: \"Pack XL (300+\/ext\u00e9rieur)\" },<!-- [et_pb_line_break_holder] -->  packLight: { none: \"\u2014\", basic: \"\u00c9clairage basique\", full: \"\u00c9clairage sc\u00e9nographique\" },<!-- [et_pb_line_break_holder] -->  prestaType: {<!-- [et_pb_line_break_holder] -->    \"\": \"Prestation musicale\",<!-- [et_pb_line_break_holder] -->    bal_folk: \"Bal folk\",<!-- [et_pb_line_break_holder] -->    concert_prive: \"Concert priv\u00e9 \/ animation\",<!-- [et_pb_line_break_holder] -->    concert_public: \"Concert public\",<!-- [et_pb_line_break_holder] -->    festival: \"Festival\",<!-- [et_pb_line_break_holder] -->    cocktail: \"Cocktail \/ vin d'honneur\",<!-- [et_pb_line_break_holder] -->    mariage: \"Animation mariage\",<!-- [et_pb_line_break_holder] -->    ceremonie_laique: \"C\u00e9r\u00e9monie la\u00efque\",<!-- [et_pb_line_break_holder] -->    corporate: \"Animation d'entreprise\",<!-- [et_pb_line_break_holder] -->    evenementiel: \"\u00c9v\u00e9nementiel \/ inauguration\",<!-- [et_pb_line_break_holder] -->    autre: \"Prestation sur mesure\"<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const OPT_LIBELLES = {<!-- [et_pb_line_break_holder] -->  dj: \"DJ post-concert\",<!-- [et_pb_line_break_holder] -->  surprise: \"Apprentissage chanson surprise\",<!-- [et_pb_line_break_holder] -->  repertoire: \"Morceau personnalis\u00e9 pr\u00e9par\u00e9\",<!-- [et_pb_line_break_holder] -->  mc: \"Animation micro \/ MC\",<!-- [et_pb_line_break_holder] -->  backline: \"Backline complet (batterie + amplis)\",<!-- [et_pb_line_break_holder] -->  captation: \"Captation vid\u00e9o simple (1 cam\u00e9ra + montage)\"<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ========== \u00c9TAT ==========<!-- [et_pb_line_break_holder] -->function getCounter() {<!-- [et_pb_line_break_holder] -->  const y = new Date().getFullYear();<!-- [et_pb_line_break_holder] -->  const key = `homeband_devis_counter_${y}`;<!-- [et_pb_line_break_holder] -->  let n = parseInt(localStorage.getItem(key) || \"0\", 10);<!-- [et_pb_line_break_holder] -->  return { year: y, n: n + 1, key };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function consumeCounter() {<!-- [et_pb_line_break_holder] -->  const c = getCounter();<!-- [et_pb_line_break_holder] -->  localStorage.setItem(c.key, String(c.n));<!-- [et_pb_line_break_holder] -->  return c;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function refreshDevisNum() {<!-- [et_pb_line_break_holder] -->  const c = getCounter();<!-- [et_pb_line_break_holder] -->  document.getElementById(\"devisNum\").value = `D${c.year}-${String(c.n).padStart(5, \"0\")}`;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function resetCounter() {<!-- [et_pb_line_break_holder] -->  if (confirm(\"R\u00e9initialiser le compteur de devis pour cette ann\u00e9e ?\")) {<!-- [et_pb_line_break_holder] -->    const y = new Date().getFullYear();<!-- [et_pb_line_break_holder] -->    localStorage.removeItem(`homeband_devis_counter_${y}`);<!-- [et_pb_line_break_holder] -->    refreshDevisNum();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ========== CALCUL ==========<!-- [et_pb_line_break_holder] -->function getFormState() {<!-- [et_pb_line_break_holder] -->  const opts = {};<!-- [et_pb_line_break_holder] -->  document.querySelectorAll('[data-opt]').forEach(el => {<!-- [et_pb_line_break_holder] -->    opts[el.dataset.opt] = el.checked;<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  return {<!-- [et_pb_line_break_holder] -->    clientType: document.getElementById(\"clientType\").value,<!-- [et_pb_line_break_holder] -->    clientName: document.getElementById(\"clientName\").value.trim(),<!-- [et_pb_line_break_holder] -->    clientRepresentant: document.getElementById(\"clientRepresentant\").value.trim(),<!-- [et_pb_line_break_holder] -->    clientAddr: document.getElementById(\"clientAddr\").value.trim(),<!-- [et_pb_line_break_holder] -->    clientVat: document.getElementById(\"clientVat\").value.trim(),<!-- [et_pb_line_break_holder] -->    clientEmail: document.getElementById(\"clientEmail\").value.trim(),<!-- [et_pb_line_break_holder] -->    clientPhone: document.getElementById(\"clientPhone\").value.trim(),<!-- [et_pb_line_break_holder] -->    clientRef: document.getElementById(\"clientRef\").value.trim(),<!-- [et_pb_line_break_holder] -->    eventDate: document.getElementById(\"eventDate\").value,<!-- [et_pb_line_break_holder] -->    eventTime: document.getElementById(\"eventTime\").value.trim(),<!-- [et_pb_line_break_holder] -->    eventArrivee: document.getElementById(\"eventArrivee\").value.trim(),<!-- [et_pb_line_break_holder] -->    eventEnd: document.getElementById(\"eventEnd\").value.trim(),<!-- [et_pb_line_break_holder] -->    eventPlace: document.getElementById(\"eventPlace\").value.trim(),<!-- [et_pb_line_break_holder] -->    eventDistance: parseFloat(document.getElementById(\"eventDistance\").value) || 0,<!-- [et_pb_line_break_holder] -->    eventHoliday: document.getElementById(\"eventHoliday\").value,<!-- [et_pb_line_break_holder] -->    prestaType: document.getElementById(\"prestaType\").value,<!-- [et_pb_line_break_holder] -->    prestaDesc: document.getElementById(\"prestaDesc\").value.trim(),<!-- [et_pb_line_break_holder] -->    prestaProgramme: document.getElementById(\"prestaProgramme\").value.trim(),<!-- [et_pb_line_break_holder] -->    formule: document.getElementById(\"formule\").value,<!-- [et_pb_line_break_holder] -->    bandSize: parseInt(document.getElementById(\"bandSize\").value) || 5,<!-- [et_pb_line_break_holder] -->    duree: document.getElementById(\"duree\").value,<!-- [et_pb_line_break_holder] -->    heuresSupp: parseInt(document.getElementById(\"heuresSupp\").value) || 0,<!-- [et_pb_line_break_holder] -->    packSono: document.getElementById(\"packSono\").value,<!-- [et_pb_line_break_holder] -->    packLight: document.getElementById(\"packLight\").value,<!-- [et_pb_line_break_holder] -->    techDedie: document.getElementById(\"techDedie\").checked,<!-- [et_pb_line_break_holder] -->    options: opts,<!-- [et_pb_line_break_holder] -->    micsHF: parseInt(document.getElementById(\"micsHF\").value) || 0,<!-- [et_pb_line_break_holder] -->    remiseEur: parseFloat(document.getElementById(\"remiseEur\").value) || 0,<!-- [et_pb_line_break_holder] -->    remisePct: parseFloat(document.getElementById(\"remisePct\").value) || 0,<!-- [et_pb_line_break_holder] -->    noteLibre: document.getElementById(\"noteLibre\").value.trim()<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function nbMusiciens(s) {<!-- [et_pb_line_break_holder] -->  if (s.formule === \"solo\") return 1;<!-- [et_pb_line_break_holder] -->  if (s.formule === \"duo\") return 2;<!-- [et_pb_line_break_holder] -->  if (s.formule === \"trio\") return 3;<!-- [et_pb_line_break_holder] -->  if (s.formule === \"quatuor\") return 4;<!-- [et_pb_line_break_holder] -->  return s.bandSize;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function computeCoefJour(dateStr, holiday) {<!-- [et_pb_line_break_holder] -->  if (!dateStr) return { coef: 1.0, label: \"Jour non d\u00e9fini\" };<!-- [et_pb_line_break_holder] -->  if (holiday === \"reveillon\") return { coef: CONFIG.coefReveillon, label: \"R\u00e9veillon (24 ou 31 d\u00e9c)\" };<!-- [et_pb_line_break_holder] -->  if (holiday === \"ferie\") return { coef: CONFIG.coefFerie, label: \"Jour f\u00e9ri\u00e9\" };<!-- [et_pb_line_break_holder] -->  const d = new Date(dateStr);<!-- [et_pb_line_break_holder] -->  const day = d.getDay();<!-- [et_pb_line_break_holder] -->  const labels = { 0: \"Dimanche\", 1: \"Lundi\", 2: \"Mardi\", 3: \"Mercredi\", 4: \"Jeudi\", 5: \"Vendredi\", 6: \"Samedi\" };<!-- [et_pb_line_break_holder] -->  return { coef: CONFIG.coefJour[day], label: labels[day] };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function isLastMinute(dateStr) {<!-- [et_pb_line_break_holder] -->  if (!dateStr) return false;<!-- [et_pb_line_break_holder] -->  const ev = new Date(dateStr);<!-- [et_pb_line_break_holder] -->  const now = new Date();<!-- [et_pb_line_break_holder] -->  const diff = (ev - now) \/ (1000 * 60 * 60 * 24);<!-- [et_pb_line_break_holder] -->  return diff > 0 && diff < CONFIG.lastMinDays;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function compute() {<!-- [et_pb_line_break_holder] -->  const s = getFormState();<!-- [et_pb_line_break_holder] -->  const n = nbMusiciens(s);<!-- [et_pb_line_break_holder] -->  const tarifBaseUnit = CONFIG.tarifMusicien[s.formule];<!-- [et_pb_line_break_holder] -->  const multDuree = CONFIG.multiplicateurDuree[s.duree];<!-- [et_pb_line_break_holder] -->  const coefEv = CONFIG.coefEvent[s.clientType];<!-- [et_pb_line_break_holder] -->  const cj = computeCoefJour(s.eventDate, s.eventHoliday);<!-- [et_pb_line_break_holder] -->  const lastMin = isLastMinute(s.eventDate);<!-- [et_pb_line_break_holder] -->  const lastMinMult = lastMin ? (1 + CONFIG.lastMinPct) : 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Cachet de base<!-- [et_pb_line_break_holder] -->  const basePrestation = n * tarifBaseUnit;<!-- [et_pb_line_break_holder] -->  const suppHeures = basePrestation * (CONFIG.heureSupp * s.heuresSupp);<!-- [et_pb_line_break_holder] -->  const sousTotalPrestation = (basePrestation * multDuree + suppHeures) * coefEv * cj.coef * lastMinMult;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ D\u00e9placement (distance facturable saisie manuellement par Homeband)<!-- [et_pb_line_break_holder] -->  const km = s.eventDistance;<!-- [et_pb_line_break_holder] -->  const deplacement = km * CONFIG.distance.tarifKm;<!-- [et_pb_line_break_holder] -->  const deplacementNote = km > 0 ? `${km} km \u00d7 ${CONFIG.distance.tarifKm.toFixed(2).replace(\".\", \",\")} \u20ac\/km` : \"\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Technique<!-- [et_pb_line_break_holder] -->  const sono = CONFIG.packSono[s.packSono];<!-- [et_pb_line_break_holder] -->  const light = CONFIG.packLight[s.packLight];<!-- [et_pb_line_break_holder] -->  const techDedie = s.techDedie ? CONFIG.techDedie : 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Options<!-- [et_pb_line_break_holder] -->  let optionsTotal = 0;<!-- [et_pb_line_break_holder] -->  const optionsDetail = [];<!-- [et_pb_line_break_holder] -->  for (const [k, v] of Object.entries(s.options)) {<!-- [et_pb_line_break_holder] -->    if (v) {<!-- [et_pb_line_break_holder] -->      const el = document.querySelector(`[data-opt=\"${k}\"]`);<!-- [et_pb_line_break_holder] -->      const price = parseFloat(el.dataset.price);<!-- [et_pb_line_break_holder] -->      optionsTotal += price;<!-- [et_pb_line_break_holder] -->      optionsDetail.push({ key: k, label: OPT_LIBELLES[k], price });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  const micsHFTotal = s.micsHF * CONFIG.micHF;<!-- [et_pb_line_break_holder] -->  if (s.micsHF > 0) optionsDetail.push({ key: \"mics\", label: `Micros HF suppl\u00e9mentaires (\u00d7${s.micsHF})`, price: micsHFTotal });<!-- [et_pb_line_break_holder] -->  optionsTotal += micsHFTotal;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Sous-total brut<!-- [et_pb_line_break_holder] -->  const sousTotalBrut = sousTotalPrestation + deplacement + sono + light + techDedie + optionsTotal;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Remises<!-- [et_pb_line_break_holder] -->  const remisePctVal = sousTotalBrut * (s.remisePct \/ 100);<!-- [et_pb_line_break_holder] -->  const totalRemise = s.remiseEur + remisePctVal;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const total = Math.max(0, sousTotalBrut - totalRemise);<!-- [et_pb_line_break_holder] -->  const acompte = total * CONFIG.acomptePct;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return {<!-- [et_pb_line_break_holder] -->    state: s,<!-- [et_pb_line_break_holder] -->    n, tarifBaseUnit, multDuree, coefEv, cj, lastMin, lastMinMult,<!-- [et_pb_line_break_holder] -->    basePrestation, suppHeures, sousTotalPrestation,<!-- [et_pb_line_break_holder] -->    km, deplacement, deplacementNote,<!-- [et_pb_line_break_holder] -->    sono, light, techDedie,<!-- [et_pb_line_break_holder] -->    optionsTotal, optionsDetail, micsHFTotal,<!-- [et_pb_line_break_holder] -->    sousTotalBrut, totalRemise, total, acompte<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function fmt(n) {<!-- [et_pb_line_break_holder] -->  \/\/ Formatage manuel : espace normale tous les 3 chiffres (jsPDF g\u00e8re mal NBSP)<!-- [et_pb_line_break_holder] -->  const v = Math.round(n);<!-- [et_pb_line_break_holder] -->  return v.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \" \") + \" \u20ac\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function fmt2(n) {<!-- [et_pb_line_break_holder] -->  return n.toFixed(2).replace(\".\", \",\") + \" \u20ac\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ========== AFFICHAGE RECAP ==========<!-- [et_pb_line_break_holder] -->function renderRecap() {<!-- [et_pb_line_break_holder] -->  const r = compute();<!-- [et_pb_line_break_holder] -->  const s = r.state;<!-- [et_pb_line_break_holder] -->  const lines = [];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Formule<\/span><span class=\"val\">${LIBELLES.formule[s.formule]} \u00d7 ${r.n}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Cachet base<\/span><span class=\"val\">${r.n} \u00d7 ${r.tarifBaseUnit}\u20ac<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Dur\u00e9e<\/span><span class=\"val\">${LIBELLES.duree[s.duree]} (\u00d7${r.multDuree})<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  if (s.heuresSupp > 0) lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Heures supp.<\/span><span class=\"val\">+${s.heuresSupp}h<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Type \u00e9v\u00e9nement<\/span><span class=\"val\">${LIBELLES.clientType[s.clientType]} (\u00d7${r.coefEv})<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Jour<\/span><span class=\"val\">${r.cj.label} (\u00d7${r.cj.coef})<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  if (r.lastMin) lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Last-minute<\/span><span class=\"val\">+10%<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\"><b>Prestation<\/b><\/span><span class=\"val\"><b>${fmt(r.sousTotalPrestation)}<\/b><\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (r.km > 0) {<!-- [et_pb_line_break_holder] -->    lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">D\u00e9placement (${r.km} km)<\/span><span class=\"val\">${fmt(r.deplacement)}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (r.sono > 0) lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">${LIBELLES.packSono[s.packSono]}<\/span><span class=\"val\">${fmt(r.sono)}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  if (r.light > 0) lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">${LIBELLES.packLight[s.packLight]}<\/span><span class=\"val\">${fmt(r.light)}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  if (r.techDedie > 0) lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Technicien d\u00e9di\u00e9<\/span><span class=\"val\">${fmt(r.techDedie)}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  r.optionsDetail.forEach(o => {<!-- [et_pb_line_break_holder] -->    lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">${o.label}<\/span><span class=\"val\">${fmt(o.price)}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (r.totalRemise > 0) {<!-- [et_pb_line_break_holder] -->    lines.push(`<\/p>\n<div class=\"recap-line\"><span class=\"lbl\">Remise<\/span><span class=\"val\" style=\"color:#e0c97a\">\u2212${fmt(r.totalRemise)}<\/span><\/div>\n<p>`);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"recapDetail\").innerHTML = lines.join(\"\");<!-- [et_pb_line_break_holder] -->  document.getElementById(\"totalDisplay\").textContent = fmt(r.total);<!-- [et_pb_line_break_holder] -->  document.getElementById(\"acompteDisplay\").textContent = `Acompte 30 % \u00e0 la confirmation : ${fmt(r.acompte)}`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Warnings<!-- [et_pb_line_break_holder] -->  const w = [];<!-- [et_pb_line_break_holder] -->  if (!s.clientName) w.push(\"Nom du client manquant.\");<!-- [et_pb_line_break_holder] -->  if (!s.eventDate) w.push(\"Date d'\u00e9v\u00e9nement non renseign\u00e9e.\");<!-- [et_pb_line_break_holder] -->  if (!s.prestaDesc) w.push(\"Description de la prestation manquante (zone cl\u00e9 pour le client).\");<!-- [et_pb_line_break_holder] -->  document.getElementById(\"warnings\").innerHTML = w.map(t => `<\/p>\n<div class=\"warn\">\u26a0 ${t}<\/div>\n<p>`).join(\"\");<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ========== PDF DEVIS ==========<!-- [et_pb_line_break_holder] -->function generateDevis() {<!-- [et_pb_line_break_holder] -->  const r = compute();<!-- [et_pb_line_break_holder] -->  const s = r.state;<!-- [et_pb_line_break_holder] -->  if (!s.clientName) { alert(\"Nom du client requis.\"); return; }<!-- [et_pb_line_break_holder] -->  if (!s.eventDate) { alert(\"Date d'\u00e9v\u00e9nement requise.\"); return; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Consommer le num\u00e9ro<!-- [et_pb_line_break_holder] -->  const c = consumeCounter();<!-- [et_pb_line_break_holder] -->  const numDevis = `D${c.year}-${String(c.n).padStart(5, \"0\")}`;<!-- [et_pb_line_break_holder] -->  document.getElementById(\"devisNum\").value = numDevis;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const { jsPDF } = window.jspdf;<!-- [et_pb_line_break_holder] -->  const doc = new jsPDF({ unit: \"mm\", format: \"a4\" });<!-- [et_pb_line_break_holder] -->  const W = 210, H = 297;<!-- [et_pb_line_break_holder] -->  const M = 18; \/\/ marge<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- HEADER BAND ----<!-- [et_pb_line_break_holder] -->  doc.setFillColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.rect(0, 0, W, 38, \"F\");<!-- [et_pb_line_break_holder] -->  doc.setTextColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(22);<!-- [et_pb_line_break_holder] -->  doc.text(\"DEVIS\", M, 22);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.text(\"Homeband ASBL \u2014 R\u00e9alisation de spectacles musicaux\", M, 29);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Bloc droite header<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(180, 180, 180);<!-- [et_pb_line_break_holder] -->  doc.text(\"N\u00b0 DE DEVIS\", W - M, 14, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(\"DATE D'\u00c9MISSION\", W - M, 22, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(\"VALIDIT\u00c9\", W - M, 30, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.setTextColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(11);<!-- [et_pb_line_break_holder] -->  const today = new Date();<!-- [et_pb_line_break_holder] -->  const dateStr = today.toLocaleDateString(\"fr-BE\");<!-- [et_pb_line_break_holder] -->  const validJusqu = new Date(today.getTime() + CONFIG.validiteJours * 86400000).toLocaleDateString(\"fr-BE\");<!-- [et_pb_line_break_holder] -->  doc.text(numDevis, W - M, 18, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.text(dateStr, W - M, 26, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(`${validJusqu} (${CONFIG.validiteJours}j)`, W - M, 34, { align: \"right\" });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- BLOCS \u00c9METTEUR \/ DESTINATAIRE ----<!-- [et_pb_line_break_holder] -->  let y = 50;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(107, 107, 107);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.text(\"\u00c9METTEUR\", M, y);<!-- [et_pb_line_break_holder] -->  doc.text(\"CLIENT\", W \/ 2 + 5, y);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.text(CONFIG.homeband.nom, M, y + 7);<!-- [et_pb_line_break_holder] -->  doc.text(s.clientName, W \/ 2 + 5, y + 7);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.text(CONFIG.homeband.adresse, M, y + 13);<!-- [et_pb_line_break_holder] -->  doc.text(CONFIG.homeband.cp, M, y + 18);<!-- [et_pb_line_break_holder] -->  doc.text(CONFIG.homeband.email, M, y + 23);<!-- [et_pb_line_break_holder] -->  doc.text(CONFIG.homeband.tel, M, y + 28);<!-- [et_pb_line_break_holder] -->  doc.text(`TVA : ${CONFIG.homeband.tva}`, M, y + 33);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Client (split addr en lignes courtes)<!-- [et_pb_line_break_holder] -->  const addrLines = doc.splitTextToSize(s.clientAddr || \"\u2014\", 80);<!-- [et_pb_line_break_holder] -->  let cy = y + 13;<!-- [et_pb_line_break_holder] -->  addrLines.forEach(l => { doc.text(l, W \/ 2 + 5, cy); cy += 5; });<!-- [et_pb_line_break_holder] -->  if (s.clientVat) { doc.text(`TVA : ${s.clientVat}`, W \/ 2 + 5, cy); cy += 5; }<!-- [et_pb_line_break_holder] -->  if (s.clientEmail) { doc.text(s.clientEmail, W \/ 2 + 5, cy); cy += 5; }<!-- [et_pb_line_break_holder] -->  if (s.clientPhone) { doc.text(s.clientPhone, W \/ 2 + 5, cy); cy += 5; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- \u00c9V\u00c9NEMENT ----<!-- [et_pb_line_break_holder] -->  y = 95;<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(229, 227, 222);<!-- [et_pb_line_break_holder] -->  doc.line(M, y, W - M, y);<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(107, 107, 107);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.text(\"D\u00c9TAILS DE L'\u00c9V\u00c9NEMENT\", M, y);<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const eventDate = new Date(s.eventDate);<!-- [et_pb_line_break_holder] -->  const dStr = eventDate.toLocaleDateString(\"fr-BE\", { weekday: \"long\", day: \"numeric\", month: \"long\", year: \"numeric\" });<!-- [et_pb_line_break_holder] -->  const evLine1 = `${dStr}${s.eventTime ? \" \u2014 \" + s.eventTime : \"\"}`;<!-- [et_pb_line_break_holder] -->  doc.text(evLine1, M, y);<!-- [et_pb_line_break_holder] -->  if (s.eventPlace) { y += 5; doc.text(`Lieu : ${s.eventPlace}`, M, y); }<!-- [et_pb_line_break_holder] -->  if (s.clientRef) { y += 5; doc.text(`R\u00e9f\u00e9rence : ${s.clientRef}`, M, y); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- ENCART NATURE DE LA PRESTATION ----<!-- [et_pb_line_break_holder] -->  if (s.prestaType || s.prestaDesc) {<!-- [et_pb_line_break_holder] -->    y += 10;<!-- [et_pb_line_break_holder] -->    const prestaLabel = LIBELLES.prestaType[s.prestaType] || \"Prestation musicale\";<!-- [et_pb_line_break_holder] -->    \/\/ Calcule la hauteur n\u00e9cessaire de l'encart<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->    doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->    const descLines = s.prestaDesc ? doc.splitTextToSize(s.prestaDesc, W - 2 * M - 12) : [];<!-- [et_pb_line_break_holder] -->    const progLines = s.prestaProgramme ? doc.splitTextToSize(\"Programme : \" + s.prestaProgramme, W - 2 * M - 12) : [];<!-- [et_pb_line_break_holder] -->    const boxH = 18 + (descLines.length * 5) + (progLines.length ? (progLines.length * 4.5 + 4) : 0) + 6;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Fond gris doux<!-- [et_pb_line_break_holder] -->    doc.setFillColor(245, 244, 240);<!-- [et_pb_line_break_holder] -->    doc.rect(M, y, W - 2 * M, boxH, \"F\");<!-- [et_pb_line_break_holder] -->    \/\/ Barre verticale dor\u00e9e \u00e0 gauche<!-- [et_pb_line_break_holder] -->    doc.setFillColor(201, 168, 90);<!-- [et_pb_line_break_holder] -->    doc.rect(M, y, 2, boxH, \"F\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let yIn = y + 8;<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->    doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(140, 110, 40);<!-- [et_pb_line_break_holder] -->    doc.text(\"\u00c0 PROPOS DE LA PRESTATION\", M + 8, yIn);<!-- [et_pb_line_break_holder] -->    yIn += 6;<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->    doc.setFontSize(13);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->    doc.text(prestaLabel, M + 8, yIn);<!-- [et_pb_line_break_holder] -->    yIn += 6;<!-- [et_pb_line_break_holder] -->    if (descLines.length) {<!-- [et_pb_line_break_holder] -->      doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->      doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->      doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->      doc.text(descLines, M + 8, yIn);<!-- [et_pb_line_break_holder] -->      yIn += descLines.length * 5;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    if (progLines.length) {<!-- [et_pb_line_break_holder] -->      yIn += 3;<!-- [et_pb_line_break_holder] -->      doc.setFont(\"helvetica\", \"italic\");<!-- [et_pb_line_break_holder] -->      doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->      doc.setTextColor(100, 100, 100);<!-- [et_pb_line_break_holder] -->      doc.text(progLines, M + 8, yIn);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    y += boxH;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- TABLEAU PRESTATIONS ----<!-- [et_pb_line_break_holder] -->  y += 10;<!-- [et_pb_line_break_holder] -->  const rows = [];<!-- [et_pb_line_break_holder] -->  \/\/ ligne 1 : prestation musicale<!-- [et_pb_line_break_holder] -->  const prestaTableLabel = s.prestaType ? LIBELLES.prestaType[s.prestaType] : \"Prestation musicale\";<!-- [et_pb_line_break_holder] -->  rows.push([<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      content: `${prestaTableLabel} \u2014 ${LIBELLES.formule[s.formule]}`,<!-- [et_pb_line_break_holder] -->      styles: { fontStyle: \"bold\" }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    `${r.n} mus. \u00d7 ${r.tarifBaseUnit}\u20ac \u00d7 ${r.multDuree} (${LIBELLES.duree[s.duree]})\\nCoefs : ${LIBELLES.clientType[s.clientType]} \u00d7${r.coefEv}, ${r.cj.label} \u00d7${r.cj.coef}${r.lastMin ? \", last-min \u00d71.10\" : \"\"}`,<!-- [et_pb_line_break_holder] -->    \"1\",<!-- [et_pb_line_break_holder] -->    fmt(r.sousTotalPrestation),<!-- [et_pb_line_break_holder] -->    fmt(r.sousTotalPrestation)<!-- [et_pb_line_break_holder] -->  ]);<!-- [et_pb_line_break_holder] -->  if (r.deplacement > 0) {<!-- [et_pb_line_break_holder] -->    rows.push([<!-- [et_pb_line_break_holder] -->      \"D\u00e9placement\",<!-- [et_pb_line_break_holder] -->      `${r.km} km parcourus\\n${r.deplacementNote}`,<!-- [et_pb_line_break_holder] -->      \"1\", fmt(r.deplacement), fmt(r.deplacement)<!-- [et_pb_line_break_holder] -->    ]);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (r.sono > 0) {<!-- [et_pb_line_break_holder] -->    rows.push([<!-- [et_pb_line_break_holder] -->      \"Sonorisation\",<!-- [et_pb_line_break_holder] -->      LIBELLES.packSono[s.packSono],<!-- [et_pb_line_break_holder] -->      \"1\", fmt(r.sono), fmt(r.sono)<!-- [et_pb_line_break_holder] -->    ]);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (r.light > 0) {<!-- [et_pb_line_break_holder] -->    rows.push([<!-- [et_pb_line_break_holder] -->      \"\u00c9clairage\",<!-- [et_pb_line_break_holder] -->      LIBELLES.packLight[s.packLight],<!-- [et_pb_line_break_holder] -->      \"1\", fmt(r.light), fmt(r.light)<!-- [et_pb_line_break_holder] -->    ]);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (r.techDedie > 0) {<!-- [et_pb_line_break_holder] -->    rows.push([\"Technicien son d\u00e9di\u00e9\", \"R\u00e9gie son sur toute la dur\u00e9e\", \"1\", fmt(r.techDedie), fmt(r.techDedie)]);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  r.optionsDetail.forEach(o => {<!-- [et_pb_line_break_holder] -->    rows.push([o.label, \"\", \"1\", fmt(o.price), fmt(o.price)]);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Description\", \"D\u00e9tail\", \"Qt\u00e9\", \"Prix unit.\", \"Total\"]],<!-- [et_pb_line_break_holder] -->    body: rows,<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9, cellPadding: 3, textColor: [10, 10, 10], lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\", fontSize: 9 },<!-- [et_pb_line_break_holder] -->    columnStyles: {<!-- [et_pb_line_break_holder] -->      0: { cellWidth: 42, fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->      1: { cellWidth: 70, textColor: [90, 90, 90], fontSize: 8 },<!-- [et_pb_line_break_holder] -->      2: { cellWidth: 12, halign: \"center\" },<!-- [et_pb_line_break_holder] -->      3: { cellWidth: 25, halign: \"right\" },<!-- [et_pb_line_break_holder] -->      4: { cellWidth: 25, halign: \"right\", fontStyle: \"bold\" }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  y = doc.lastAutoTable.finalY + 8;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- TOTAUX ----<!-- [et_pb_line_break_holder] -->  const xLbl = W - M - 60;<!-- [et_pb_line_break_holder] -->  const xVal = W - M;<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(90, 90, 90);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.text(\"Sous-total\", xLbl, y);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(fmt(r.sousTotalBrut), xVal, y, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  if (r.totalRemise > 0) {<!-- [et_pb_line_break_holder] -->    doc.setTextColor(90, 90, 90);<!-- [et_pb_line_break_holder] -->    doc.text(\"Remise\", xLbl, y);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(180, 130, 40);<!-- [et_pb_line_break_holder] -->    doc.text(`\u2212 ${fmt(r.totalRemise)}`, xVal, y, { align: \"right\" });<!-- [et_pb_line_break_holder] -->    y += 6;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  \/\/ Ligne s\u00e9paration<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setLineWidth(0.3);<!-- [et_pb_line_break_holder] -->  doc.line(xLbl, y, xVal, y);<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(14);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"TOTAL\", xLbl, y);<!-- [et_pb_line_break_holder] -->  doc.text(fmt(r.total), xVal, y, { align: \"right\" });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- CONDITIONS ----<!-- [et_pb_line_break_holder] -->  y += 12;<!-- [et_pb_line_break_holder] -->  \/\/ Garde-fou: si on est trop bas pour la suite (conditions + note + acceptation + footer), nouvelle page<!-- [et_pb_line_break_holder] -->  if (y > 200) { drawFooter(doc, W, H, M); doc.addPage(); y = M + 5; }<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setTextColor(107, 107, 107);<!-- [et_pb_line_break_holder] -->  doc.text(\"CONDITIONS\", M, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8.5);<!-- [et_pb_line_break_holder] -->  const conditions = [<!-- [et_pb_line_break_holder] -->    `Acompte de ${Math.round(CONFIG.acomptePct * 100)}% (${fmt(r.acompte)}) \u00e0 verser \u00e0 la confirmation. Le solde est d\u00fb le jour de la prestation ou \u00e0 30 jours.`,<!-- [et_pb_line_break_holder] -->    `Devis valable ${CONFIG.validiteJours} jours \u00e0 compter de la date d'\u00e9mission.`,<!-- [et_pb_line_break_holder] -->    `Annulation : > 60j gratuit \u00b7 30 \u00e0 60j : 30% retenus \u00b7 7 \u00e0 30j : 50% \u00b7 < 7j : 100%.`,<!-- [et_pb_line_break_holder] -->    `Repas et boissons \u00e0 charge du client si prestation > 4h sur place.`,<!-- [et_pb_line_break_holder] -->    `H\u00e9bergement \u00e0 charge du client si fin de prestation apr\u00e8s 23h et trajet retour > 80 km.`,<!-- [et_pb_line_break_holder] -->    `Pour la m\u00e9thode de calcul d\u00e9taill\u00e9e, voir l'annexe m\u00e9thodologique jointe.`<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] -->  conditions.forEach(c => {<!-- [et_pb_line_break_holder] -->    const ll = doc.splitTextToSize(\"\u2022 \" + c, W - 2 * M);<!-- [et_pb_line_break_holder] -->    doc.text(ll, M, y);<!-- [et_pb_line_break_holder] -->    y += ll.length * 4 + 1;<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (s.noteLibre) {<!-- [et_pb_line_break_holder] -->    y += 4;<!-- [et_pb_line_break_holder] -->    \/\/ Si la note risque d'aller trop loin, nouvelle page<!-- [et_pb_line_break_holder] -->    if (y > 230) { drawFooter(doc, W, H, M); doc.addPage(); y = M + 5; }<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->    doc.setTextColor(107, 107, 107);<!-- [et_pb_line_break_holder] -->    doc.text(\"NOTE\", M, y);<!-- [et_pb_line_break_holder] -->    y += 5;<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->    doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->    const nl = doc.splitTextToSize(s.noteLibre, W - 2 * M);<!-- [et_pb_line_break_holder] -->    doc.text(nl, M, y);<!-- [et_pb_line_break_holder] -->    y += nl.length * 4;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- ACCEPTATION ----<!-- [et_pb_line_break_holder] -->  \/\/ Il faut au moins 50mm restants pour acceptation + footer (footer occupe ~22mm)<!-- [et_pb_line_break_holder] -->  const pageH = doc.internal.pageSize.getHeight();<!-- [et_pb_line_break_holder] -->  if (y > pageH - 60) {<!-- [et_pb_line_break_holder] -->    drawFooter(doc, W, H, M);<!-- [et_pb_line_break_holder] -->    doc.addPage();<!-- [et_pb_line_break_holder] -->    y = M + 5;<!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->    y += 8;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(229, 227, 222);<!-- [et_pb_line_break_holder] -->  doc.line(M, y, W - M, y);<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"ACCEPTATION DU DEVIS\", M, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.text(`\u00ab Bon pour accord \u00bb + date + signature${s.clientVat ? \" + cachet\" : \"\"} :`, M, y);<!-- [et_pb_line_break_holder] -->  y += 4;<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.rect(M, y, W - 2 * M, 22);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- FOOTER sur la derni\u00e8re page ----<!-- [et_pb_line_break_holder] -->  drawFooter(doc, W, H, M);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.save(`Devis_Homeband_${numDevis}_${(s.clientName || \"client\").replace(\/\\s+\/g, \"_\")}.pdf`);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function drawFooter(doc, W, H, M) {<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(229, 227, 222);<!-- [et_pb_line_break_holder] -->  doc.line(M, H - 18, W - M, H - 18);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(7.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(140, 140, 140);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.text(`${CONFIG.homeband.nom} \u00b7 ${CONFIG.homeband.adresse}, ${CONFIG.homeband.cp}`, M, H - 13);<!-- [et_pb_line_break_holder] -->  doc.text(`${CONFIG.homeband.email} \u00b7 ${CONFIG.homeband.tel}`, M, H - 9);<!-- [et_pb_line_break_holder] -->  doc.text(`IBAN : ${CONFIG.homeband.iban}`, W - M, H - 13, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(`Entreprise : ${CONFIG.homeband.tva}`, W - M, H - 9, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.setFontSize(7);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(170, 170, 170);<!-- [et_pb_line_break_holder] -->  doc.text(CONFIG.homeband.mentionTva, W \/ 2, H - 4, { align: \"center\" });<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ========== PDF CONTRAT D'ENGAGEMENT ==========<!-- [et_pb_line_break_holder] -->function generateContrat() {<!-- [et_pb_line_break_holder] -->  const r = compute();<!-- [et_pb_line_break_holder] -->  const s = r.state;<!-- [et_pb_line_break_holder] -->  if (!s.clientName) { alert(\"Nom du client requis.\"); return; }<!-- [et_pb_line_break_holder] -->  if (!s.clientRepresentant) { alert(\"Repr\u00e9sentant l\u00e9gal du client requis pour le contrat.\"); return; }<!-- [et_pb_line_break_holder] -->  if (!s.eventDate) { alert(\"Date d'\u00e9v\u00e9nement requise.\"); return; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Le contrat reprend le num\u00e9ro du devis affich\u00e9 (sans le consommer \u00e0 nouveau)<!-- [et_pb_line_break_holder] -->  const numContrat = (document.getElementById(\"devisNum\").value || \"\").replace(\/^D\/, \"C\") || \"C-\" + Date.now();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const { jsPDF } = window.jspdf;<!-- [et_pb_line_break_holder] -->  const doc = new jsPDF({ unit: \"mm\", format: \"a4\" });<!-- [et_pb_line_break_holder] -->  const W = 210, H = 297, M = 18;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- HEADER NOIR ----<!-- [et_pb_line_break_holder] -->  doc.setFillColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.rect(0, 0, W, 38, \"F\");<!-- [et_pb_line_break_holder] -->  doc.setTextColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(20);<!-- [et_pb_line_break_holder] -->  doc.text(\"CONTRAT D'ENGAGEMENT\", M, 22);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.text(\"Prestation musicale \u2014 Homeband ASBL\", M, 29);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(180, 180, 180);<!-- [et_pb_line_break_holder] -->  doc.text(\"N\u00b0 DE CONTRAT\", W - M, 14, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(\"DEVIS LI\u00c9\", W - M, 22, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(\"DATE\", W - M, 30, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.setTextColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(11);<!-- [et_pb_line_break_holder] -->  doc.text(numContrat, W - M, 18, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.text(numContrat.replace(\/^C\/, \"D\"), W - M, 26, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  doc.text(new Date().toLocaleDateString(\"fr-BE\"), W - M, 34, { align: \"right\" });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- ENTRE LES PARTIES ----<!-- [et_pb_line_break_holder] -->  let y = 50;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(107, 107, 107);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.text(\"ENTRE LES SOUSSIGN\u00c9S\", M, y);<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Partie 1 \u2014 Organisateur<!-- [et_pb_line_break_holder] -->  doc.setTextColor(140, 110, 40);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.text(\"D'UNE PART \u2014 L'ORGANISATEUR\", M, y);<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(11);<!-- [et_pb_line_break_holder] -->  doc.text(s.clientName, M, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.text(`Repr\u00e9sent\u00e9(e) par : ${s.clientRepresentant}`, M, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  if (s.clientAddr) { doc.text(`Adresse : ${s.clientAddr}`, M, y); y += 5; }<!-- [et_pb_line_break_holder] -->  if (s.clientVat) { doc.text(`N\u00b0 TVA \/ entreprise : ${s.clientVat}`, M, y); y += 5; }<!-- [et_pb_line_break_holder] -->  if (s.clientEmail || s.clientPhone) {<!-- [et_pb_line_break_holder] -->    doc.text(`Contact : ${[s.clientEmail, s.clientPhone].filter(Boolean).join(\" \u00b7 \")}`, M, y);<!-- [et_pb_line_break_holder] -->    y += 5;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  \/\/ Partie 2 \u2014 Homeband<!-- [et_pb_line_break_holder] -->  doc.setTextColor(140, 110, 40);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.text(\"D'AUTRE PART \u2014 L'ARTISTE\", M, y);<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(11);<!-- [et_pb_line_break_holder] -->  doc.text(\"Homeband ASBL\", M, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.text(\"Repr\u00e9sent\u00e9e par : Nh\u00e2n Massart\", M, y); y += 5;<!-- [et_pb_line_break_holder] -->  doc.text(`Adresse : ${CONFIG.homeband.adresse}, ${CONFIG.homeband.cp}`, M, y); y += 5;<!-- [et_pb_line_break_holder] -->  doc.text(`N\u00b0 d'entreprise : ${CONFIG.homeband.tva}`, M, y); y += 5;<!-- [et_pb_line_break_holder] -->  doc.text(`Contact : ${CONFIG.homeband.email} \u00b7 ${CONFIG.homeband.tel}`, M, y); y += 5;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- PR\u00c9AMBULE ----<!-- [et_pb_line_break_holder] -->  y += 6;<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(229, 227, 222);<!-- [et_pb_line_break_holder] -->  doc.line(M, y, W - M, y);<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"italic\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9.5);<!-- [et_pb_line_break_holder] -->  const preambule = doc.splitTextToSize(<!-- [et_pb_line_break_holder] -->    `Il a \u00e9t\u00e9 convenu ce qui suit, en r\u00e9f\u00e9rence au devis n\u00b0 ${numContrat.replace(\/^C\/, \"D\")} \u00e9mis par Homeband ASBL et accept\u00e9 par l'Organisateur, lequel fait partie int\u00e9grante du pr\u00e9sent contrat.`,<!-- [et_pb_line_break_holder] -->    W - 2 * M<!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->  doc.text(preambule, M, y);<!-- [et_pb_line_break_holder] -->  y += preambule.length * 5 + 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- ARTICLES ----<!-- [et_pb_line_break_holder] -->  const articles = [<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 1 \u2014 Objet du contrat\",<!-- [et_pb_line_break_holder] -->      contenu: `Homeband ASBL s'engage \u00e0 assurer la prestation musicale d\u00e9crite dans le devis n\u00b0 ${numContrat.replace(\/^C\/, \"D\")}, ci-annex\u00e9. Les caract\u00e9ristiques de la prestation (formule, dur\u00e9e, configuration technique, options, montant) y sont pr\u00e9cis\u00e9es et ne sont pas reprises dans le pr\u00e9sent contrat afin d'\u00e9viter toute redondance.`<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 2 \u2014 Modalit\u00e9s de pr\u00e9sence\",<!-- [et_pb_line_break_holder] -->      contenu: buildArt2(s)<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 3 \u2014 Obligations de l'Organisateur\",<!-- [et_pb_line_break_holder] -->      contenu: \"L'Organisateur s'engage \u00e0 :\\n\u2022 Mettre \u00e0 disposition un espace sc\u00e9nique adapt\u00e9 \u00e0 la formation pr\u00e9vue (dimensions minimales \u00e0 valider avec Homeband au moins 15 jours avant la prestation) ;\\n\u2022 Garantir l'acc\u00e8s au lieu pour le d\u00e9chargement du mat\u00e9riel et l'installation au moins une heure avant l'heure d'arriv\u00e9e pr\u00e9vue ;\\n\u2022 Fournir une alimentation \u00e9lectrique conforme et suffisante (minimum 16A monophas\u00e9 \u00e0 proximit\u00e9 de la sc\u00e8ne) ;\\n\u2022 Mettre \u00e0 disposition un espace privatif (loge ou local ferm\u00e9) pour l'\u00e9quipe artistique.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 4 \u2014 Catering et accueil\",<!-- [et_pb_line_break_holder] -->      contenu: \"D\u00e8s l'arriv\u00e9e de l'\u00e9quipe sur place et pendant toute la dur\u00e9e de la prestation, l'Organisateur met \u00e0 disposition de l'eau plate en bouteille individuelle ainsi que des boissons non alcoolis\u00e9es pour chaque membre de l'\u00e9quipe artistique et technique.\\n\\nPour toute prestation dont la dur\u00e9e totale de pr\u00e9sence (installation, prestation, d\u00e9montage) exc\u00e8de quatre (4) heures, l'Organisateur prend en charge un repas chaud par membre de l'\u00e9quipe. Les r\u00e9gimes alimentaires particuliers sont \u00e0 communiquer par Homeband au moins 7 jours avant la prestation.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 5 \u2014 H\u00e9bergement\",<!-- [et_pb_line_break_holder] -->      contenu: \"Si l'heure de fin effective de la prestation d\u00e9passe 23h00 et que le trajet retour depuis le lieu de prestation jusqu'au si\u00e8ge de Homeband (5190 Jemeppe-sur-Sambre) exc\u00e8de 80 km, l'Organisateur prend en charge l'h\u00e9bergement de l'\u00e9quipe pour la nuit suivant la prestation, dans des conditions standards (chambre individuelle ou twin selon souhait des artistes, petit-d\u00e9jeuner inclus).\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 6 \u2014 Droits d'auteur et droits voisins (Unisono)\",<!-- [et_pb_line_break_holder] -->      contenu: \"La d\u00e9claration et le paiement des droits d'auteur et droits voisins (g\u00e9r\u00e9s en Belgique par Unisono, regroupant la SABAM et la R\u00e9mun\u00e9ration \u00e9quitable) aupr\u00e8s de l'organisme de gestion collective comp\u00e9tent sont \u00e0 la charge exclusive de l'Organisateur.\\n\\nL'Organisateur s'engage \u00e0 effectuer les d\u00e9marches n\u00e9cessaires avant la prestation. \u00c0 sa demande, Homeband fournit la liste indicative des \u0153uvres interpr\u00e9t\u00e9es au plus tard 7 jours avant la prestation pour faciliter cette d\u00e9claration.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 7 \u2014 Droits \u00e0 l'image, captation audio et vid\u00e9o\",<!-- [et_pb_line_break_holder] -->      contenu: \"L'Organisateur est autoris\u00e9 \u00e0 proc\u00e9der \u00e0 un enregistrement audio et\/ou vid\u00e9o de la prestation, en tout ou en partie, exclusivement \u00e0 des fins d'archives priv\u00e9es ou de promotion non commerciale de la manifestation.\\n\\nTout usage commercial, toute diffusion publique payante ou int\u00e9gration dans une production destin\u00e9e \u00e0 la vente n\u00e9cessite l'accord \u00e9crit pr\u00e9alable de Homeband et fera l'objet d'une convention distincte pr\u00e9cisant les conditions et la r\u00e9mun\u00e9ration.\\n\\nHomeband se r\u00e9serve le droit de r\u00e9aliser et d'utiliser des extraits photographiques, audio ou vid\u00e9o de la prestation \u00e0 des fins de communication propre (site internet, r\u00e9seaux sociaux, dossier de presse), sauf opposition \u00e9crite pr\u00e9alable de l'Organisateur.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 8 \u2014 Assurances et responsabilit\u00e9s\",<!-- [et_pb_line_break_holder] -->      contenu: \"L'Organisateur souscrit et maintient les assurances couvrant les dommages mat\u00e9riels et vols pouvant survenir dans l'enceinte du lieu de prestation (sc\u00e8ne, loges, espaces techniques) avant, pendant et apr\u00e8s l'\u00e9v\u00e9nement. Il assume la responsabilit\u00e9 civile \u00e0 l'\u00e9gard du public et des participants.\\n\\nHomeband est assur\u00e9e pour son propre mat\u00e9riel et pour sa responsabilit\u00e9 civile professionnelle. Elle ne pourra \u00eatre tenue responsable des dommages survenus en dehors de son fait, notamment r\u00e9sultant d'un d\u00e9faut d'organisation, d'une carence d'installation ou du fait d'un tiers.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 9 \u2014 Annulation et force majeure\",<!-- [et_pb_line_break_holder] -->      contenu: \"Les conditions d'annulation applicables sont celles pr\u00e9cis\u00e9es dans le devis : annulation \u00e0 plus de 60 jours sans frais ; entre 30 et 60 jours, 30 % du montant total restent dus ; entre 7 et 30 jours, 50 % ; \u00e0 moins de 7 jours, 100 % du montant.\\n\\nEn cas de force majeure d\u00fbment justifi\u00e9e (maladie ou deuil affectant un membre de l'\u00e9quipe, interdiction administrative, catastrophe naturelle), Homeband proposera prioritairement un report de la prestation sans frais. \u00c0 d\u00e9faut d'accord sur une nouvelle date dans un d\u00e9lai de 6 mois, les sommes vers\u00e9es seront rembours\u00e9es \u00e0 l'Organisateur.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 10 \u2014 Modification du contrat\",<!-- [et_pb_line_break_holder] -->      contenu: \"Toute modification du pr\u00e9sent contrat ne sera valable que sous la forme d'un avenant \u00e9crit, sign\u00e9 par les deux parties. Les \u00e9changes par courrier \u00e9lectronique entre les signataires sont admis comme forme \u00e9crite valable.\"<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      titre: \"Article 11 \u2014 Droit applicable et juridiction\",<!-- [et_pb_line_break_holder] -->      contenu: \"Le pr\u00e9sent contrat est r\u00e9gi par le droit belge. Tout litige relatif \u00e0 son ex\u00e9cution ou \u00e0 son interpr\u00e9tation qui ne pourrait \u00eatre r\u00e9solu amiablement sera port\u00e9 devant les juridictions de l'arrondissement judiciaire de Namur, seules comp\u00e9tentes.\"<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Render articles<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  articles.forEach(a => {<!-- [et_pb_line_break_holder] -->    \/\/ Saut de page si n\u00e9cessaire (article + au moins 3 lignes)<!-- [et_pb_line_break_holder] -->    if (y > 248) { drawFooter(doc, W, H, M); doc.addPage(); y = M + 5; }<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->    doc.setFontSize(10.5);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->    doc.text(a.titre, M, y);<!-- [et_pb_line_break_holder] -->    y += 5.5;<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->    doc.setFontSize(9.5);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->    \/\/ Le contenu peut avoir plusieurs paragraphes s\u00e9par\u00e9s par \\n\\n<!-- [et_pb_line_break_holder] -->    const paragraphes = a.contenu.split(\"\\n\\n\");<!-- [et_pb_line_break_holder] -->    paragraphes.forEach((para, idx) => {<!-- [et_pb_line_break_holder] -->      const lines = doc.splitTextToSize(para, W - 2 * M);<!-- [et_pb_line_break_holder] -->      \/\/ Check page break inside long article<!-- [et_pb_line_break_holder] -->      if (y + lines.length * 4.6 > H - 25) {<!-- [et_pb_line_break_holder] -->        drawFooter(doc, W, H, M);<!-- [et_pb_line_break_holder] -->        doc.addPage();<!-- [et_pb_line_break_holder] -->        y = M + 5;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      doc.text(lines, M, y);<!-- [et_pb_line_break_holder] -->      y += lines.length * 4.6;<!-- [et_pb_line_break_holder] -->      if (idx < paragraphes.length - 1) y += 2.5;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    y += 6;<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- SIGNATURES ----<!-- [et_pb_line_break_holder] -->  \/\/ Force page break for signatures<!-- [et_pb_line_break_holder] -->  if (y > H - 80) { drawFooter(doc, W, H, M); doc.addPage(); y = M + 5; }<!-- [et_pb_line_break_holder] -->  else y += 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setDrawColor(229, 227, 222);<!-- [et_pb_line_break_holder] -->  doc.line(M, y, W - M, y);<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"SIGNATURES\", M, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(80, 80, 80);<!-- [et_pb_line_break_holder] -->  doc.text(\"Fait en deux exemplaires originaux, dont un pour chaque partie.\", M, y);<!-- [et_pb_line_break_holder] -->  y += 4;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"italic\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.text(\"Mention manuscrite \u00ab Lu et approuv\u00e9 \u00bb avant la signature.\", M, y);<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Deux cadres c\u00f4te \u00e0 c\u00f4te<!-- [et_pb_line_break_holder] -->  const colW = (W - 2 * M - 6) \/ 2;<!-- [et_pb_line_break_holder] -->  const x1 = M;<!-- [et_pb_line_break_holder] -->  const x2 = M + colW + 6;<!-- [et_pb_line_break_holder] -->  const cadreH = 42;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Cadre Organisateur<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setLineWidth(0.3);<!-- [et_pb_line_break_holder] -->  doc.rect(x1, y, colW, cadreH);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"L'ORGANISATEUR\", x1 + 3, y + 5);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(80, 80, 80);<!-- [et_pb_line_break_holder] -->  doc.text(s.clientRepresentant, x1 + 3, y + 10);<!-- [et_pb_line_break_holder] -->  doc.text(`pour ${s.clientName}`, x1 + 3, y + 14);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(150, 150, 150);<!-- [et_pb_line_break_holder] -->  doc.text(\"Lieu et date :\", x1 + 3, y + 22);<!-- [et_pb_line_break_holder] -->  doc.text(\"Signature :\", x1 + 3, y + 32);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Cadre Homeband<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.rect(x2, y, colW, cadreH);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"L'ARTISTE\", x2 + 3, y + 5);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(80, 80, 80);<!-- [et_pb_line_break_holder] -->  doc.text(\"Nh\u00e2n Massart\", x2 + 3, y + 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"pour Homeband ASBL\", x2 + 3, y + 14);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(150, 150, 150);<!-- [et_pb_line_break_holder] -->  doc.text(\"Lieu et date :\", x2 + 3, y + 22);<!-- [et_pb_line_break_holder] -->  doc.text(\"Signature :\", x2 + 3, y + 32);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  drawFooter(doc, W, H, M);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Page number sur toutes les pages<!-- [et_pb_line_break_holder] -->  const totalPages = doc.internal.getNumberOfPages();<!-- [et_pb_line_break_holder] -->  for (let i = 1; i <= totalPages; i++) {<!-- [et_pb_line_break_holder] -->    doc.setPage(i);<!-- [et_pb_line_break_holder] -->    doc.setFontSize(7);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(160, 160, 160);<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->    doc.text(`${i} \/ ${totalPages}`, W \/ 2, H - 4, { align: \"center\" });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.save(`Contrat_Homeband_${numContrat}_${(s.clientName || \"client\").replace(\/\\s+\/g, \"_\")}.pdf`);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Helper pour Article 2 (horaires)<!-- [et_pb_line_break_holder] -->function buildArt2(s) {<!-- [et_pb_line_break_holder] -->  const eventDate = new Date(s.eventDate);<!-- [et_pb_line_break_holder] -->  const dStr = eventDate.toLocaleDateString(\"fr-BE\", { weekday: \"long\", day: \"numeric\", month: \"long\", year: \"numeric\" });<!-- [et_pb_line_break_holder] -->  let txt = `La prestation se d\u00e9roule le ${dStr}`;<!-- [et_pb_line_break_holder] -->  if (s.eventPlace) txt += ` \u00e0 ${s.eventPlace}`;<!-- [et_pb_line_break_holder] -->  txt += \".\\n\\n\";<!-- [et_pb_line_break_holder] -->  const horaires = [];<!-- [et_pb_line_break_holder] -->  if (s.eventArrivee) horaires.push(`Arriv\u00e9e de l'\u00e9quipe et soundcheck : ${s.eventArrivee}`);<!-- [et_pb_line_break_holder] -->  if (s.eventTime) horaires.push(`D\u00e9but de la prestation : ${s.eventTime}`);<!-- [et_pb_line_break_holder] -->  if (s.eventEnd) horaires.push(`Fin estim\u00e9e : ${s.eventEnd}`);<!-- [et_pb_line_break_holder] -->  if (horaires.length) txt += horaires.join(\" \u00b7 \") + \".\\n\\n\";<!-- [et_pb_line_break_holder] -->  txt += \"Les horaires pr\u00e9cis\u00e9s ci-dessus sont indicatifs et pourront \u00eatre ajust\u00e9s d'un commun accord par \u00e9change \u00e9crit jusqu'\u00e0 7 jours avant la prestation.\";<!-- [et_pb_line_break_holder] -->  return txt;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function generateAnnexe() {<!-- [et_pb_line_break_holder] -->  \/\/ ========== PDF ANNEXE M\u00c9THODOLOGIQUE ==========<!-- [et_pb_line_break_holder] -->  const { jsPDF } = window.jspdf;<!-- [et_pb_line_break_holder] -->  const doc = new jsPDF({ unit: \"mm\", format: \"a4\" });<!-- [et_pb_line_break_holder] -->  const W = 210, H = 297;<!-- [et_pb_line_break_holder] -->  const M = 18;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- COUVERTURE ----<!-- [et_pb_line_break_holder] -->  doc.setFillColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.rect(0, 0, W, H, \"F\");<!-- [et_pb_line_break_holder] -->  doc.setTextColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(11);<!-- [et_pb_line_break_holder] -->  doc.text(\"HOMEBAND ASBL\", M, 30);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(180, 180, 180);<!-- [et_pb_line_break_holder] -->  doc.text(\"R\u00e9alisation de spectacles musicaux\", M, 36);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setTextColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(32);<!-- [et_pb_line_break_holder] -->  doc.text(\"M\u00e9thode\", M, 130);<!-- [et_pb_line_break_holder] -->  doc.text(\"de tarification\", M, 144);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(14);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(201, 168, 90);<!-- [et_pb_line_break_holder] -->  doc.text(\"Comment nos devis sont construits\", M, 158);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(180, 180, 180);<!-- [et_pb_line_break_holder] -->  doc.text(\"Annexe au devis \u00b7 Document explicatif\", M, H - 22);<!-- [et_pb_line_break_holder] -->  doc.text(new Date().toLocaleDateString(\"fr-BE\", { year: \"numeric\", month: \"long\" }), M, H - 17);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- PAGE 2 : INTRO ----<!-- [et_pb_line_break_holder] -->  doc.addPage();<!-- [et_pb_line_break_holder] -->  drawAnnexHeader(doc, W, M, \"Pourquoi cette annexe ?\");<!-- [et_pb_line_break_holder] -->  let y = 50;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  const intro = [<!-- [et_pb_line_break_holder] -->    \"Une prestation musicale ne se r\u00e9sume pas \u00e0 la dur\u00e9e du concert. Elle repr\u00e9sente des heures de r\u00e9p\u00e9tition, des ann\u00e9es de pratique, du mat\u00e9riel professionnel \u00e0 entretenir, des trajets, du temps d'installation et de d\u00e9montage, et la charge logistique d'une \u00e9quipe artistique.\",<!-- [et_pb_line_break_holder] -->    \"\",<!-- [et_pb_line_break_holder] -->    \"Pour vous offrir un prix juste et transparent, Homeband applique une grille tarifaire structur\u00e9e autour de plusieurs variables objectives. Aucun montant n'est arbitraire : chaque ligne du devis r\u00e9pond \u00e0 un param\u00e8tre clairement d\u00e9fini ci-apr\u00e8s.\",<!-- [et_pb_line_break_holder] -->    \"\",<!-- [et_pb_line_break_holder] -->    \"Ce document accompagne votre devis. Il vous permet de comprendre exactement comment votre tarif a \u00e9t\u00e9 calcul\u00e9, et de juger sereinement la valeur de la prestation propos\u00e9e.\"<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] -->  intro.forEach(p => {<!-- [et_pb_line_break_holder] -->    if (p === \"\") { y += 3; return; }<!-- [et_pb_line_break_holder] -->    const lines = doc.splitTextToSize(p, W - 2 * M);<!-- [et_pb_line_break_holder] -->    doc.text(lines, M, y);<!-- [et_pb_line_break_holder] -->    y += lines.length * 5;<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Formule de calcul<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] -->  doc.setFillColor(245, 244, 240);<!-- [et_pb_line_break_holder] -->  doc.rect(M, y, W - 2 * M, 38, \"F\");<!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"Formule globale\", M + 6, y);<!-- [et_pb_line_break_holder] -->  y += 7;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"courier\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.text(\"Prestation = nb_musiciens \u00d7 tarif_unitaire \u00d7 dur\u00e9e \u00d7 coef_\u00e9v\u00e9nement\", M + 6, y);<!-- [et_pb_line_break_holder] -->  y += 5;<!-- [et_pb_line_break_holder] -->  doc.text(\"              \u00d7 coef_jour \u00d7 (1 + last_minute)\", M + 6, y);<!-- [et_pb_line_break_holder] -->  y += 7;<!-- [et_pb_line_break_holder] -->  doc.text(\"Total = Prestation + d\u00e9placement + technique + options \u2212 remise\", M + 6, y);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- PAGE 3 : COMPOSITION + DUR\u00c9E ----<!-- [et_pb_line_break_holder] -->  doc.addPage();<!-- [et_pb_line_break_holder] -->  drawAnnexHeader(doc, W, M, \"1. Composition musicale\");<!-- [et_pb_line_break_holder] -->  y = 50;<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  const t1 = doc.splitTextToSize(\"Le cachet par musicien est d\u00e9gressif avec le nombre de musiciens : \u00e0 plus grand effectif, les frais fixes (transport, installation, coordination) sont mutualis\u00e9s. Cela permet d'offrir des formules plus riches sans explosion budg\u00e9taire.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t1, M, y);<!-- [et_pb_line_break_holder] -->  y += t1.length * 5 + 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Formule\", \"Musiciens\", \"Tarif par musicien\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"Solo\", \"1\", \"250 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Duo\", \"2\", \"180 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Trio\", \"3\", \"150 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Quatuor\", \"4\", \"130 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Full Band\", \"5 et +\", \"120 \u20ac\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9.5, cellPadding: 3.5, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\" }, 2: { halign: \"right\" } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  y = doc.lastAutoTable.finalY + 14;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Dur\u00e9e<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(14);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"2. Dur\u00e9e de prestation\", M, y);<!-- [et_pb_line_break_holder] -->  y += 7;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const t2 = doc.splitTextToSize(\"La dur\u00e9e s'applique comme un multiplicateur sur le cachet de base. Un set seul ne n\u00e9cessite pas la m\u00eame pr\u00e9paration logistique qu'une soir\u00e9e compl\u00e8te.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t2, M, y);<!-- [et_pb_line_break_holder] -->  y += t2.length * 5 + 3;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Dur\u00e9e\", \"Multiplicateur\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"1 set (45 min)\", \"\u00d7 1,0\"],<!-- [et_pb_line_break_holder] -->      [\"2 sets (2 \u00d7 45 min)\", \"\u00d7 1,5\"],<!-- [et_pb_line_break_holder] -->      [\"Soir\u00e9e compl\u00e8te (jusqu'\u00e0 4h)\", \"\u00d7 2,0\"],<!-- [et_pb_line_break_holder] -->      [\"Heure suppl\u00e9mentaire au-del\u00e0\", \"+ 20 % par heure\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9.5, cellPadding: 3.5, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\" }, 1: { halign: \"right\" } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- PAGE 4 : TYPE D'\u00c9V\u00c9NEMENT + DATE ----<!-- [et_pb_line_break_holder] -->  doc.addPage();<!-- [et_pb_line_break_holder] -->  drawAnnexHeader(doc, W, M, \"3. Type d'\u00e9v\u00e9nement\");<!-- [et_pb_line_break_holder] -->  y = 50;<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const t3 = doc.splitTextToSize(\"Le contexte de la prestation influe sur les exigences, la responsabilit\u00e9 engag\u00e9e et le cadre l\u00e9gal. Un \u00e9v\u00e9nement corporate ou institutionnel implique un niveau de service, de ponctualit\u00e9, d'assurance et de facturation diff\u00e9rent d'une f\u00eate priv\u00e9e.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t3, M, y);<!-- [et_pb_line_break_holder] -->  y += t3.length * 5 + 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Contexte\", \"Coefficient\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"Particulier (mariage, anniversaire)\", \"\u00d7 1,0\"],<!-- [et_pb_line_break_holder] -->      [\"ASBL \/ Associatif\", \"\u00d7 1,0\"],<!-- [et_pb_line_break_holder] -->      [\"C\u00e9r\u00e9monie (vin d'honneur seul)\", \"\u00d7 1,0\"],<!-- [et_pb_line_break_holder] -->      [\"Festival \/ Concert public\", \"\u00d7 1,1\"],<!-- [et_pb_line_break_holder] -->      [\"Institutionnel (commune, universit\u00e9, minist\u00e8re)\", \"\u00d7 1,4\"],<!-- [et_pb_line_break_holder] -->      [\"Entreprise \/ Corporate\", \"\u00d7 1,7\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9.5, cellPadding: 3.5, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\" }, 1: { halign: \"right\" } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  y = doc.lastAutoTable.finalY + 14;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(14);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"4. Date de l'\u00e9v\u00e9nement\", M, y);<!-- [et_pb_line_break_holder] -->  y += 7;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const t4 = doc.splitTextToSize(\"La raret\u00e9 des cr\u00e9neaux et la demande modulent le tarif. Le week-end, les jours f\u00e9ri\u00e9s et les soirs de r\u00e9veillon sont les p\u00e9riodes les plus sollicit\u00e9es.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t4, M, y);<!-- [et_pb_line_break_holder] -->  y += t4.length * 5 + 3;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Jour \/ p\u00e9riode\", \"Coefficient\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"Lundi \u00e0 jeudi\", \"\u00d7 0,9\"],<!-- [et_pb_line_break_holder] -->      [\"Vendredi\", \"\u00d7 1,0\"],<!-- [et_pb_line_break_holder] -->      [\"Samedi\", \"\u00d7 1,1\"],<!-- [et_pb_line_break_holder] -->      [\"Dimanche\", \"\u00d7 1,05\"],<!-- [et_pb_line_break_holder] -->      [\"Jour f\u00e9ri\u00e9\", \"\u00d7 1,3\"],<!-- [et_pb_line_break_holder] -->      [\"R\u00e9veillon (24 ou 31 d\u00e9c.)\", \"\u00d7 1,5\"],<!-- [et_pb_line_break_holder] -->      [\"R\u00e9servation \u00e0 moins de 30 jours\", \"+ 10 %\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9.5, cellPadding: 3.5, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\" }, 1: { halign: \"right\" } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- PAGE 5 : D\u00c9PLACEMENT + TECHNIQUE ----<!-- [et_pb_line_break_holder] -->  doc.addPage();<!-- [et_pb_line_break_holder] -->  drawAnnexHeader(doc, W, M, \"5. D\u00e9placement\");<!-- [et_pb_line_break_holder] -->  y = 50;<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const t5 = doc.splitTextToSize(\"Le d\u00e9placement est factur\u00e9 au kilom\u00e8tre parcouru, \u00e0 un tarif unique. La distance facturable inclut le trajet aller-retour et tient compte du nombre de v\u00e9hicules n\u00e9cessaires au transport des musiciens et du mat\u00e9riel.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t5, M, y);<!-- [et_pb_line_break_holder] -->  y += t5.length * 5 + 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"\u00c9l\u00e9ment\", \"Tarification\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"Tarif au km\", \"0,45 \u20ac par kilom\u00e8tre parcouru\"],<!-- [et_pb_line_break_holder] -->      [\"Trajet pris en compte\", \"Aller-retour depuis Jemeppe-sur-Sambre (5190) jusqu'au lieu de prestation\"],<!-- [et_pb_line_break_holder] -->      [\"V\u00e9hicules\", \"1 v\u00e9hicule jusqu'\u00e0 3 musiciens \u00b7 2 v\u00e9hicules \u00e0 partir de 4 (mat\u00e9riel additionnel)\"],<!-- [et_pb_line_break_holder] -->      [\"H\u00e9bergement\", \"\u00c0 charge du client si fin de prestation apr\u00e8s 23h et trajet retour > 80 km\"],<!-- [et_pb_line_break_holder] -->      [\"Hors Belgique\", \"Conditions sp\u00e9cifiques sur demande\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9.5, cellPadding: 3.5, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\", cellWidth: 50 } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  y = doc.lastAutoTable.finalY + 6;<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(120, 120, 120);<!-- [et_pb_line_break_holder] -->  const noteDist = doc.splitTextToSize(\"La distance facturable est \u00e9valu\u00e9e par Homeband selon le trajet r\u00e9el et appara\u00eet clairement sur le devis.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(noteDist, M, y);<!-- [et_pb_line_break_holder] -->  y += noteDist.length * 5;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  y += 8;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(14);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"6. Pack technique\", M, y);<!-- [et_pb_line_break_holder] -->  y += 7;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const t6 = doc.splitTextToSize(\"Le mat\u00e9riel professionnel (enceintes QSC, table de mixage, micros, c\u00e2blage, \u00e9clairage) est dimensionn\u00e9 selon la jauge de votre public et le lieu. Vous pouvez aussi fournir votre propre mat\u00e9riel ; dans ce cas, aucun co\u00fbt technique n'est factur\u00e9.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t6, M, y);<!-- [et_pb_line_break_holder] -->  y += t6.length * 5 + 3;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Pack\", \"Couverture\", \"Prix\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"Pack S\", \"Jusqu'\u00e0 50 personnes \u2014 2\u00d7 QSC K10\", \"150 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Pack M\", \"50 \u00e0 150 personnes \u2014 2\u00d7 K12 + subwoofer\", \"280 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Pack L\", \"150 \u00e0 300 personnes \u2014 line array + 2 subs\", \"450 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Pack XL\", \"300+ personnes ou plein air\", \"\u00e0 partir de 750 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"\u00c9clairage basique\", \"Quelques projecteurs sur la sc\u00e8ne\", \"+ 80 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"\u00c9clairage sc\u00e9nographique\", \"Mise en lumi\u00e8re compl\u00e8te\", \"+ 200 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Technicien son d\u00e9di\u00e9\", \"R\u00e9gie son sur toute la dur\u00e9e\", \"+ 250 \u20ac\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9.5, cellPadding: 3.5, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\" }, 2: { halign: \"right\" } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- PAGE 6 : OPTIONS + CONDITIONS ----<!-- [et_pb_line_break_holder] -->  doc.addPage();<!-- [et_pb_line_break_holder] -->  drawAnnexHeader(doc, W, M, \"7. Options \u00e0 la carte\");<!-- [et_pb_line_break_holder] -->  y = 50;<!-- [et_pb_line_break_holder] -->  doc.setFontSize(10);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const t7 = doc.splitTextToSize(\"Ces options sont disponibles \u00e0 la demande, en compl\u00e9ment de la prestation principale.\", W - 2 * M);<!-- [et_pb_line_break_holder] -->  doc.text(t7, M, y);<!-- [et_pb_line_break_holder] -->  y += t7.length * 5 + 3;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.autoTable({<!-- [et_pb_line_break_holder] -->    startY: y,<!-- [et_pb_line_break_holder] -->    head: [[\"Option\", \"Description\", \"Prix\"]],<!-- [et_pb_line_break_holder] -->    body: [<!-- [et_pb_line_break_holder] -->      [\"DJ post-concert\", \"Mix d'animation entre\/apr\u00e8s les sets live\", \"180 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Chanson surprise\", \"Apprentissage et ex\u00e9cution d'un morceau choisi (mariage, hommage)\", \"120 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Morceau personnalis\u00e9\", \"Pr\u00e9paration d'un titre sur demande\", \"90 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Animation micro \/ MC\", \"Pr\u00e9sentation, animation, transitions\", \"100 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Backline complet\", \"Batterie acoustique + amplis fournis\", \"150 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Captation vid\u00e9o simple\", \"1 cam\u00e9ra fixe + montage court\", \"350 \u20ac\"],<!-- [et_pb_line_break_holder] -->      [\"Micro HF suppl\u00e9mentaire\", \"Au-del\u00e0 des 2 micros HF fournis par d\u00e9faut\", \"25 \u20ac \/ unit\u00e9\"]<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    theme: \"plain\",<!-- [et_pb_line_break_holder] -->    styles: { fontSize: 9, cellPadding: 3, lineColor: [229, 227, 222], lineWidth: 0.1 },<!-- [et_pb_line_break_holder] -->    headStyles: { fillColor: [10, 10, 10], textColor: [250, 250, 248], fontStyle: \"bold\" },<!-- [et_pb_line_break_holder] -->    columnStyles: { 0: { fontStyle: \"bold\", cellWidth: 45 }, 2: { halign: \"right\", cellWidth: 30 } },<!-- [et_pb_line_break_holder] -->    margin: { left: M, right: M }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  y = doc.lastAutoTable.finalY + 14;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(14);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(\"8. Conditions g\u00e9n\u00e9rales\", M, y);<!-- [et_pb_line_break_holder] -->  y += 7;<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(9.5);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(60, 60, 60);<!-- [et_pb_line_break_holder] -->  const cgs = [<!-- [et_pb_line_break_holder] -->    \"Acompte : 30 % du montant total \u00e0 verser \u00e0 la confirmation de la r\u00e9servation.\",<!-- [et_pb_line_break_holder] -->    \"Solde : d\u00fb le jour de la prestation ou \u00e0 30 jours sur facture.\",<!-- [et_pb_line_break_holder] -->    \"Validit\u00e9 du devis : 30 jours \u00e0 compter de son \u00e9mission.\",<!-- [et_pb_line_break_holder] -->    \"Annulation : > 60 jours avant l'\u00e9v\u00e9nement = gratuit ; 30 \u00e0 60 jours = 30 % retenus ; 7 \u00e0 30 jours = 50 % ; moins de 7 jours = 100 %.\",<!-- [et_pb_line_break_holder] -->    \"Repas et boissons \u00e0 charge du client si prestation > 4 h sur place.\",<!-- [et_pb_line_break_holder] -->    \"H\u00e9bergement \u00e0 charge du client si fin de prestation apr\u00e8s 23 h et trajet retour > 80 km.\",<!-- [et_pb_line_break_holder] -->    \"TVA : Homeband ASBL est soumise au r\u00e9gime de la franchise de la taxe (art. 56 \u00a72 CTVA). La TVA n'est donc pas applicable.\",<!-- [et_pb_line_break_holder] -->    \"Force majeure : en cas d'\u00e9v\u00e9nement emp\u00eachant la prestation (maladie grave, deuil, interdiction administrative), Homeband proposera un report sans frais.\"<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] -->  cgs.forEach(c => {<!-- [et_pb_line_break_holder] -->    const ll = doc.splitTextToSize(\"\u2022 \" + c, W - 2 * M);<!-- [et_pb_line_break_holder] -->    doc.text(ll, M, y);<!-- [et_pb_line_break_holder] -->    y += ll.length * 4.5 + 1;<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ ---- FOOTER toutes pages ----<!-- [et_pb_line_break_holder] -->  const totalPages = doc.internal.getNumberOfPages();<!-- [et_pb_line_break_holder] -->  for (let i = 1; i <= totalPages; i++) {<!-- [et_pb_line_break_holder] -->    doc.setPage(i);<!-- [et_pb_line_break_holder] -->    if (i === 1) continue; \/\/ pas de footer sur la couverture<!-- [et_pb_line_break_holder] -->    doc.setFontSize(7.5);<!-- [et_pb_line_break_holder] -->    doc.setTextColor(160, 160, 160);<!-- [et_pb_line_break_holder] -->    doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->    doc.text(`Homeband ASBL \u2014 Annexe m\u00e9thodologique`, M, H - 8);<!-- [et_pb_line_break_holder] -->    doc.text(`${i} \/ ${totalPages}`, W - M, H - 8, { align: \"right\" });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  doc.save(`Homeband_Methode_de_tarification.pdf`);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function drawAnnexHeader(doc, W, M, titre) {<!-- [et_pb_line_break_holder] -->  doc.setFillColor(250, 250, 248);<!-- [et_pb_line_break_holder] -->  doc.rect(0, 0, W, 30, \"F\");<!-- [et_pb_line_break_holder] -->  doc.setFontSize(8);<!-- [et_pb_line_break_holder] -->  doc.setTextColor(140, 140, 140);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"normal\");<!-- [et_pb_line_break_holder] -->  doc.text(\"HOMEBAND \u00b7 ANNEXE M\u00c9THODOLOGIQUE\", M, 14);<!-- [et_pb_line_break_holder] -->  doc.setFontSize(18);<!-- [et_pb_line_break_holder] -->  doc.setFont(\"helvetica\", \"bold\");<!-- [et_pb_line_break_holder] -->  doc.setTextColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.text(titre, M, 24);<!-- [et_pb_line_break_holder] -->  doc.setDrawColor(10, 10, 10);<!-- [et_pb_line_break_holder] -->  doc.setLineWidth(0.4);<!-- [et_pb_line_break_holder] -->  doc.line(M, 32, W - M, 32);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ========== INIT ==========<!-- [et_pb_line_break_holder] -->function resetForm() {<!-- [et_pb_line_break_holder] -->  if (!confirm(\"Vider tous les champs ?\")) return;<!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\"input, select, textarea\").forEach(el => {<!-- [et_pb_line_break_holder] -->    if (el.type === \"checkbox\") el.checked = false;<!-- [et_pb_line_break_holder] -->    else if (el.id === \"devisNum\") {} \/\/ skip<!-- [et_pb_line_break_holder] -->    else if (el.type === \"number\") el.value = el.defaultValue || 0;<!-- [et_pb_line_break_holder] -->    else el.value = el.defaultValue || \"\";<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  document.getElementById(\"formule\").value = \"trio\";<!-- [et_pb_line_break_holder] -->  document.getElementById(\"duree\").value = \"set2\";<!-- [et_pb_line_break_holder] -->  document.getElementById(\"packSono\").value = \"M\";<!-- [et_pb_line_break_holder] -->  refreshDevisNum();<!-- [et_pb_line_break_holder] -->  renderRecap();<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Liaison live<!-- [et_pb_line_break_holder] -->document.addEventListener(\"input\", renderRecap);<!-- [et_pb_line_break_holder] -->document.addEventListener(\"change\", renderRecap);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Check visuels<!-- [et_pb_line_break_holder] -->document.querySelectorAll(\".check input\").forEach(cb => {<!-- [et_pb_line_break_holder] -->  cb.addEventListener(\"change\", () => {<!-- [et_pb_line_break_holder] -->    cb.closest(\".check\").classList.toggle(\"active\", cb.checked);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->refreshDevisNum();<!-- [et_pb_line_break_holder] -->renderRecap();<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":"","_tec_slr_enabled":"","_tec_slr_layout":""},"class_list":["post-578","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Calculateur de prix - Association des \u00c9conomistes de Louvain<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculateur de prix - Association des \u00c9conomistes de Louvain\" \/>\n<meta property=\"og:url\" content=\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/\" \/>\n<meta property=\"og:site_name\" content=\"Association des \u00c9conomistes de Louvain\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-14T11:56:27+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/\",\"url\":\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/\",\"name\":\"Calculateur de prix - Association des \u00c9conomistes de Louvain\",\"isPartOf\":{\"@id\":\"https:\/\/adelouvain.be\/#website\"},\"datePublished\":\"2026-05-14T08:47:39+00:00\",\"dateModified\":\"2026-05-14T11:56:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/adelouvain.be\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculateur de prix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/adelouvain.be\/#website\",\"url\":\"https:\/\/adelouvain.be\/\",\"name\":\"Association des \u00c9conomistes de Louvain\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/adelouvain.be\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculateur de prix - Association des \u00c9conomistes de Louvain","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/","og_locale":"en_US","og_type":"article","og_title":"Calculateur de prix - Association des \u00c9conomistes de Louvain","og_url":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/","og_site_name":"Association des \u00c9conomistes de Louvain","article_modified_time":"2026-05-14T11:56:27+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/","url":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/","name":"Calculateur de prix - Association des \u00c9conomistes de Louvain","isPartOf":{"@id":"https:\/\/adelouvain.be\/#website"},"datePublished":"2026-05-14T08:47:39+00:00","dateModified":"2026-05-14T11:56:27+00:00","breadcrumb":{"@id":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/adelouvain.be\/index.php\/calculateur-de-prix\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/adelouvain.be\/"},{"@type":"ListItem","position":2,"name":"Calculateur de prix"}]},{"@type":"WebSite","@id":"https:\/\/adelouvain.be\/#website","url":"https:\/\/adelouvain.be\/","name":"Association des \u00c9conomistes de Louvain","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/adelouvain.be\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"ticketed":false,"_links":{"self":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages\/578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/comments?post=578"}],"version-history":[{"count":5,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages\/578\/revisions"}],"predecessor-version":[{"id":584,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages\/578\/revisions\/584"}],"wp:attachment":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/media?parent=578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}