bundles/VehicleMarketBundle/Resources/views/Areas/vehicle-detail/view.html.twig line 1

Open in your IDE?
  1. {% set stammdaten = vehicle.getStammdaten.getVehicleBaseData %}
  2. {% set kosten = vehicle.getKosten.getCosts %}
  3. {% set aussen = vehicle.getAussen.getExterieur %}
  4. {% set innen = vehicle.getInnen.getInterieur %}
  5. {% set finanzierung = vehicle.getFinanzierung.getFinancing %}
  6. {% set leasing = vehicle.getLeasing.getleasing %}
  7. {# API-managed vehicles (VehicleIngestBundle) can have NO Leasing/Financing objectbrick at all,
  8.    unlike the legacy CSV import which always scaffolded (empty) bricks. Guard every rate access. #}
  9. {% set hasLeasingRate = leasing is not null and leasing.getMonatlicheRate() %}
  10. {% set hasFinanzierungRate = finanzierung is not null and finanzierung.getMonatlicheRate() %}
  11. {% set technischeDaten = vehicle.getTechnischeDaten.getTechnicalData %}
  12. {% set technischeDatenMore = vehicle.getTechnischeDatenMore.getTechnicalDataMore %}
  13. {% set financingLegalNotice = pimcore_textarea('car-detail-financing-legal-notice').isEmpty() ? '' : pimcore_textarea('car-detail-financing-legal-notice').getData() %}
  14. {% set leasingLegalNotice = pimcore_textarea('car-detail-leasing-legal-notice').isEmpty() ? '' : pimcore_textarea('car-detail-leasing-legal-notice').getData() %}
  15. {% set addressBank = pimcore_textarea('car-detail-address-financing-leasing').isEmpty() ? '' : pimcore_textarea('car-detail-address-financing-leasing').getData() %}
  16. {% set show_car_available_from = pimcore_select('car-detail-available-from').getData() %}
  17. {% set fuelType = technischeDaten.kraftstoffart|trim|lower %}
  18. {% set fuelTypeLabel = fuelType == 'elektro' ? 'Energieverbrauch' : 'Kraftstoffverbrauch' %}
  19. <div class="vehicle-area pt-0 pt-lg-5">
  20.     <div class="row">
  21.         <div class="col-lg-8">
  22.             <div class="slider-container shadow mb-3">
  23.                 {% set car_photos = vehicle.images %}
  24.                 <div class="slider">
  25.                     <div class="slides">
  26.                         {% if stammdaten.getLieferdatum and show_car_available_from %}
  27.                             {% set currentDate = "now"|date('d-m-y') %}
  28.                             {% if stammdaten.getLieferdatum | date('d-m-y')  > currentDate %}
  29.                                 <span
  30.                                     class="notify-badge detail">Verfügbar ab {{ stammdaten.getLieferdatum | date('d.m.y') }}</span>
  31.                             {% endif %}
  32.                         {% endif %}
  33.                         <div class="swiper car-detail-image-swiper">
  34.                             <div class="swiper-wrapper">
  35.                                 {% if car_photos|length != 0 %}
  36.                                     {% for i in 1 .. car_photos|length %}
  37.                                         <img
  38.                                             class="swiper-slide"
  39.                                             src="{{ car_photos[i - 1].thumbnail({'width': 920, 'format': 'jpeg', 'quality': 60,}) }}"
  40.                                             alt="{{ stammdaten.getMarke }} {{ stammdaten.getModellbasis }} (Bild {{ i }}/{{ car_photos|length }})">
  41.                                     {% endfor %}
  42.                                 {% else %}
  43.                                     {% set src = '/Gebrauchte/Bilder/3301020_FBUN2220298_1.jpeg' %}
  44.                                     <img src="{{ src }}" class="w-100 h-auto"
  45.                                          alt="{{ stammdaten.getMarke }} {{ stammdaten.getModellbasis }}">
  46.                                 {% endif %}
  47.                             </div>
  48.                             <div class="swiper-button-next"></div>
  49.                             <div class="swiper-button-prev"></div>
  50.                             <div class="swiper-pagination"></div>
  51.                         </div>
  52.                     </div>
  53.                     <div class="slider-count">
  54.                         <div class="badge bg-dark d-flex align-items-center" style="--bs-bg-opacity: 0.5;">
  55.                             <svg class="me-1" fill="#FFF" viewBox="0 0 16 16" width="14" height="14">
  56.                                 <path
  57.                                     d="M15 12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h1.172a3 3 0 0 0 2.12-.879l.83-.828A1 1 0 0 1 6.827 3h2.344a1 1 0 0 1 .707.293l.828.828A3 3 0 0 0 12.828 5H14a1 1 0 0 1 1 1v6zM2 4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-1.172a2 2 0 0 1-1.414-.586l-.828-.828A2 2 0 0 0 9.172 2H6.828a2 2 0 0 0-1.414.586l-.828.828A2 2 0 0 1 3.172 4H2z" />
  58.                                 <path
  59.                                     d="M8 11a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 1a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7zM3 6.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0z" />
  60.                             </svg>
  61.                             <div class="swiper-pagination"></div>
  62.                             <span id="car-detail-selected-image">1</span>/<span>{{ car_photos|length }}</span>
  63.                         </div>
  64.                     </div>
  65.                 </div>
  66.             </div>
  67.             <div class="bg-light shadow px-3 pt-3 pb-4 px-md-5 py-md-4 mb-lg-3 d-lg-none">
  68.                 <div class="row">
  69.                     <div class="col-6">
  70.                         <h2 class="mb-0">{{ stammdaten.getMarke }}</h2>
  71.                         {{ stammdaten.getModellbasis }}
  72.                     </div>
  73.                     <div class="col-6 text-end">
  74.                         <span class="h2 fw-bold">{{ kosten.getPreis|number_format(2, ',', '.') }}&euro;</span>
  75.                         <div class="f-12 d-block small text-muted">
  76.                             {% if stammdaten.getMwst == 0 %}
  77.                                 MwSt. ist ausweisbar
  78.                             {% else %}
  79.                                 MwSt. nicht ausweisbar
  80.                             {% endif %}
  81.                         </div>
  82.                         {% if kosten.rotstiftpreis > kosten.getPreis() %}
  83.                             <div class="mx-auto text-center mt-2">
  84.                                 <span
  85.                                     class="text-decoration-line-through d-block">{{ kosten.rotstiftpreis|number_format(2, ',', '.') }}&euro;</span>
  86.                                 <span class="badge rounded-pill bg-danger">Kürzlich reduziert</span>
  87.                             </div>
  88.                         {% endif %}
  89.                     </div>
  90.                     <div class="col-12 px-4 pt-4 text-center">
  91.                         <button class="btn btn-primary" data-action="initiate-contact">Fahrzeug anfragen</button>
  92.                     </div>
  93.                 </div>
  94.             </div>
  95.             <div class="bg-white shadow p-3 px-md-5 py-md-4 mb-lg-3">
  96.                 <h3 class="fw-bold">Übersicht</h3>
  97.                 <div class="row mx-2 mx-md-4">
  98.                     <div class="col-6 col-md-4 border-bottom mb-3">
  99.                         <small class="text-muted">Modelljahr</small>
  100.                         <p>{{ stammdaten.modelljahr }}</p>
  101.                     </div>
  102.                     <div class="col-6 col-md-4 border-bottom mb-3">
  103.                         <small class="text-muted">Erstzulassung</small>
  104.                         <p>{{ stammdaten.ez }}</p>
  105.                     </div>
  106.                     <div class="col-6 col-md-4 border-bottom mb-3">
  107.                         <small class="text-muted">Kraftstoff</small>
  108.                         <p>{{ technischeDaten.kraftstoffart }}</p>
  109.                     </div>
  110.                     <div class="col-6 col-md-4 border-bottom mb-3">
  111.                         <small class="text-muted">Kilometerstand</small>
  112.                         <p>{{ stammdaten.kilometer|number_format(0, ',', '.') }} km</p>
  113.                     </div>
  114.                     <div class="col-6 col-md-4 border-bottom mb-3">
  115.                         <small class="text-muted">Leistung</small>
  116.                         <p>{{ technischeDaten.leistung }} KW</p>
  117.                     </div>
  118.                     <div class="col-6 col-md-4 border-bottom mb-3">
  119.                         <small class="text-muted">Vorbesitzer</small>
  120.                         <p>{{ stammdaten.vorbesitzer > 0 ? stammdaten.vorbesitzer : '-/-' }}</p>
  121.                     </div>
  122.                     {% if stammdaten.getLieferdatum and show_car_available_from %}
  123.                         {% set currentDate = "now"|date('d-m-y') %}
  124.                         {% if stammdaten.getLieferdatum | date('d-m-y')  > currentDate %}
  125.                             <span
  126.                                 class="notify-badge detail">Verfügbar ab {{ stammdaten.getLieferdatum | date('d.m.y') }}</span>
  127.                         {% endif %}
  128.                     {% endif %}
  129.                     {% if stammdaten.getLieferdatum %}
  130.                         {% set currentDate = "now"|date('d-m-y') %}
  131.                         {% if stammdaten.getLieferdatum | date('d-m-y')  > currentDate %}
  132.                             <div class="col-6 col-md-4 border-bottom mb-3">
  133.                                 <small class="text-muted">Verfügbarkeit</small>
  134.                                 <p>{{ stammdaten.getLieferdatum }}</p>
  135.                             </div>
  136.                         {% else %}
  137.                             <div class="col-6 col-md-4 border-bottom mb-3">
  138.                                 <small class="text-muted">Neufahrzeug</small>
  139.                                 <p>{% if stammdaten.getNeufahrzeug == '0' %} Nein {% else %} Ja {% endif %}</p>
  140.                             </div>
  141.                         {% endif %}
  142.                     {% endif %}
  143.                     <div class="col-6 col-md-4 border-bottom mb-3">
  144.                         <small class="text-muted">Getriebe</small>
  145.                         <p>{{ technischeDaten.getriebeart }}</p>
  146.                     </div>
  147.                     <div class="col-12 col-md-4 border-bottom mb-3">
  148.                         <small class="text-muted">Interne-Nr.</small>
  149.                         <p>{{ stammdaten.internenummer }}</p>
  150.                     </div>
  151.                 </div>
  152.             </div>
  153.             <div class="bg-white shadow p-3 px-md-5 py-md-4 mb-lg-3">
  154.                 <h3 class="mb-5">Fahrzeugspezifikationen</h3>
  155.                 <div class="row mx-2 mx-md-3">
  156.                     {% if technischeDaten.umweltplakette %}
  157.                         <div class="col-6 col-md-3 mb-3">
  158.                             {% set umweltplaketten = {
  159.                                 1 : '-/-' ,
  160.                                 2 : 'Rot',
  161.                                 3 : 'Gelb',
  162.                                 4 : 'Grün'
  163.                             } %}
  164.                             <small class="text-muted">Umweltplakette</small>
  165.                             <p>{{ umweltplaketten[technischeDaten.umweltplakette] }}</p>
  166.                         </div>
  167.                     {% endif %}
  168.                     <div class="col-6 col-md-3 mb-3">
  169.                         <small class="text-muted">Schadstoff</small>
  170.                         <p>Euro {{ technischeDaten.schadstoff }}</p>
  171.                     </div>
  172.                     <div class="col-6 col-md-3 mb-3">
  173.                         {% if fuelType == 'elektro' %}
  174.                             <span class="text-muted">{{ fuelTypeLabel }}
  175.                                 kombiniert*</span>
  176.                             <p>{{ stammdaten.getKombinierterStromverbrauchWltp > 0 ? stammdaten.getKombinierterStromverbrauchWltp|number_format(1, ',') ~ ' kWh/100km' : '-/-' }}</p>
  177.                         {% elseif fuelType == 'hybrid' %}
  178.                             <span class="text-muted">{{ fuelTypeLabel }}
  179.                                 kombiniert*</span>
  180.                             <p>
  181.                                 {{ technischeDaten.gewichteterKombinierterKraftstoffverbrauchWLTP > 0 ? technischeDaten.gewichteterKombinierterKraftstoffverbrauchWLTP ~ ' l/100km' : '-/-' }}
  182.                                 <br>
  183.                             </p>
  184.                         {% else %}
  185.                             <span class="text-muted">{{ fuelTypeLabel }}
  186.                                 kombiniert*</span>
  187.                             <p>{{ technischeDaten.getWLTPKombiniert > 0 ? technischeDaten.getWLTPKombiniert ~ ' l/100km' : '-/-' }}</p>
  188.                         {% endif %}
  189.                     </div>
  190.                     {% if fuelType == 'hybrid' %}
  191.                         <div class="col-6 col-md-3 mb-3">
  192.                             <span class="text-muted">Stromverbrauch
  193.                                 kombiniert*</span>
  194.                             <p>{{ stammdaten.getKombinierterStromverbrauchWltp > 0 ? stammdaten.getKombinierterStromverbrauchWltp|number_format(1, ',') ~ ' kWh/100km' : '-/-' }}</p>
  195.                         </div>
  196.                     {% endif %}
  197.                     {% if fuelType == 'elektro' %}
  198.                         {% if technischeDatenMore and technischeDatenMore.stromverbrauchInnenstadtWLTP > 0 and fuelType == 'elektro' %}
  199.                             <div class="col-6 col-md-3 mb-3">
  200.                             <span class="text-muted">
  201.                                 {{ fuelTypeLabel }}
  202.                                 Innenstadt*</span>
  203.                                 <p>{{ technischeDatenMore.stromverbrauchInnenstadtWLTP > 0 ? technischeDatenMore.stromverbrauchInnenstadtWLTP ~ ' kWh/100km' : '-/-' }} (WLTP)</p>
  204.                             </div>
  205.                         {% endif %}
  206.                         {% if technischeDatenMore and technischeDatenMore.stromverbrauchStadtrandWLTP > 0 and fuelType == 'elektro' %}
  207.                             <div class="col-6 col-md-3 mb-3">
  208.                             <span class="text-muted">
  209.                                 {{ fuelTypeLabel }}
  210.                                 Stadtrand*</span>
  211.                                 <p>{{ technischeDatenMore.stromverbrauchStadtrandWLTP > 0 ? technischeDatenMore.stromverbrauchStadtrandWLTP ~ ' kWh/100km' : '-/-' }} (WLTP)</p>
  212.                             </div>
  213.                         {% endif %}
  214.                         {% if technischeDatenMore and technischeDatenMore.stromverbrauchLandstrasseWLTP > 0 and fuelType == 'elektro' %}
  215.                             <div class="col-6 col-md-3 mb-3">
  216.                             <span class="text-muted">
  217.                                 {{ fuelTypeLabel }}
  218.                                 Landstraße*</span>
  219.                                 <p>{{ technischeDatenMore.stromverbrauchLandstrasseWLTP > 0 ? technischeDatenMore.stromverbrauchLandstrasseWLTP ~ ' kWh/100km' : '-/-' }} (WLTP)</p>
  220.                             </div>
  221.                         {% endif %}
  222.                         {% if technischeDatenMore and technischeDatenMore.stromverbrauchAutobahnWLTP > 0 and fuelType == 'elektro' %}
  223.                             <div class="col-6 col-md-3 mb-3">
  224.                             <span class="text-muted">
  225.                                 {{ fuelTypeLabel }}
  226.                                 Autobahn*</span>
  227.                                 <p>{{ technischeDatenMore.stromverbrauchAutobahnWLTP > 0 ? technischeDatenMore.stromverbrauchAutobahnWLTP ~ ' kWh/100km' : '-/-' }} (WLTP)</p>
  228.                             </div>
  229.                         {% endif %}
  230.                     {% endif %}
  231.                     {% if technischeDaten.wltpKraftstoffInnenstadt > 0 and fuelType != 'elektro' %}
  232.                         <div class="col-6 col-md-3 mb-3">
  233.                             <span class="text-muted">
  234.                                 {{ fuelTypeLabel }}
  235.                                 Innerorts*</span>
  236.                             <p>{{ technischeDaten.wltpKraftstoffInnenstadt > 0 ? technischeDaten.wltpKraftstoffInnenstadt ~ ' l/100km' : '-/-' }}</p>
  237.                         </div>
  238.                     {% endif %}
  239.                     {% if technischeDaten.wltpKraftstoffStadtrand > 0 and fuelType != 'elektro' %}
  240.                         <div class="col-6 col-md-3 mb-3">
  241.                             <span class="text-muted">&Oslash;
  242.                                 {{ fuelTypeLabel }}
  243.                                 Ausserorts*</span>
  244.                             <p>{{ technischeDaten.wltpKraftstoffStadtrand > 0 ? technischeDaten.wltpKraftstoffStadtrand ~ ' l/100km' : '-/-' }}</p>
  245.                         </div>
  246.                     {% endif %}
  247.                     {% if technischeDaten.wltpKraftstoffAutobahn > 0 and fuelType != 'elektro' %}
  248.                         <div class="col-6 col-md-3 mb-3">
  249.                             <span class="text-muted">&Oslash;
  250.                                 {{ fuelTypeLabel }}
  251.                                 Autobahn*</span>
  252.                             <p>{{ technischeDaten.wltpKraftstoffAutobahn > 0 ? technischeDaten.wltpKraftstoffAutobahn ~ ' l/100km' : '-/-' }}</p>
  253.                         </div>
  254.                     {% endif %}
  255.                     {% if technischeDaten.wltpKraftstoffLandstrasse > 0 and fuelType != 'elektro' %}
  256.                         <div class="col-6 col-md-3 mb-3">
  257.                             <span class="text-muted">&Oslash;
  258.                                 {{ fuelTypeLabel }}
  259.                                 Landstraße*</span>
  260.                             <p>{{ technischeDaten.wltpKraftstoffLandstrasse > 0 ? technischeDaten.wltpKraftstoffLandstrasse ~ ' l/100km' : '-/-' }}</p>
  261.                         </div>
  262.                     {% endif %}
  263.                     {% if technischeDaten.kombinierterKraftstoffverbrauchEntlBatterie > 0 and fuelType == 'hybrid' %}
  264.                         <div class="col-6 col-md-3 mb-3">
  265.                             <span class="text-muted">{{ fuelTypeLabel }}
  266.                                 kombiniert bei entladener Batterie*</span>
  267.                             <p>{{ technischeDaten.kombinierterKraftstoffverbrauchEntlBatterie > 0 ? technischeDaten.kombinierterKraftstoffverbrauchEntlBatterie ~ ' l/100km' : '-/-' }}</p>
  268.                         </div>
  269.                     {% endif %}
  270. {#                    {% if technischeDaten.kombinierterKraftstoffverbrauchEntlBatterie > 0 and fuelType == 'hybrid' %}#}
  271. {#                        <div class="col-6 col-md-3 mb-3">#}
  272. {#                            <span class="text-muted">{{ fuelTypeLabel }}#}
  273. {#                                Landstraße bei entladener Batterie*</span>#}
  274. {#                            <p>{{ technischeDaten.kombinierterKraftstoffverbrauchEntlBatterie > 0 ? technischeDaten.kombinierterKraftstoffverbrauchEntlBatterie ~ ' l/100km' : '-/-' }}</p>#}
  275. {#                        </div>#}
  276. {#                    {% endif %}#}
  277.                     <div class="col-6 col-md-3 mb-3">
  278.                         <span class="text-muted">CO₂-Klasse*</span>
  279.                         {%  if fuelType == 'hybrid' %}
  280.                             <p> {{ technischeDaten.energieeffizienzklasseGewichtetKombiniert ? technischeDaten.energieeffizienzklasseGewichtetKombiniert : '' }}</p>
  281.                         {% else %}
  282.                             <p> {{ technischeDaten.energieEffizienzKlasse ? technischeDaten.energieEffizienzKlasse : '' }}</p>
  283.                         {% endif %}
  284.                     </div>
  285.                     {%  if fuelType == 'hybrid' %}
  286.                     <div class="col-6 col-md-3 mb-3">
  287.                         <span class="text-muted">CO₂-Klasse bei entladener Batterie:*</span>
  288.                             <p> {{ technischeDaten.energieeffizienzklasseEntladeneBatterie ? technischeDaten.energieeffizienzklasseEntladeneBatterie : '' }}</p>
  289.                     </div>
  290.                     {% endif %}
  291.                     <div class="col-6 col-md-3 mb-3">
  292.                         <span class="text-muted">&Oslash; CO₂ Emissionen kombiniert*</span>
  293.                         {% if technischeDaten.getEmissionWltp %}
  294.                             <p>{{ fuelType == 'elektro' ? 0 ~ 'g/km' : technischeDaten.getEmissionWltp > 0 ? technischeDaten.getEmissionWltp ~ ' g/km' : '-/-' }}
  295.                                 (WLTP)</p>
  296.                         {% else %}
  297.                             <p>{{ fuelType == 'elektro' ? 0 ~ 'g/km' : technischeDaten.emission > 0 ? technischeDaten.emission ~ ' g/km' : '-/-' }}
  298.                                 (WLTP)</p>
  299.                         {% endif %}
  300.                     </div>
  301.                     {% if fuelType == 'hybrid' %}
  302.                         <div class="col-6 col-md-3 mb-3">
  303.                             <span class="text-muted">&Oslash; CO₂ Emissionen bei entladener Batterie*</span>
  304.                             <p>{{ technischeDaten.emissionenEntladeneBatterie >= 0 ? technischeDaten.emissionenEntladeneBatterie ~ ' g/km' : '-/-' }}</p>
  305.                         </div>
  306.                     {% endif %}
  307.                     {% if (fuelType == 'elektro' or fuelType == 'hybrid') and technischeDaten.batteriekapazitT > 0 %}
  308.                         <div class="col-6 col-md-3 mb-3">
  309.                             <span class="text-muted">Batteriekapazität</span>
  310.                             <p>{{ technischeDaten.batteriekapazitT ~ ' kWh' }}</p>
  311.                         </div>
  312.                     {% endif %}
  313.                     {% if (fuelType == 'elektro' or fuelType == 'hybrid') and technischeDaten.elektromotorReichweiteBeiMinNachWLTP > 0 %}
  314.                         <div class="col-6 col-md-3 mb-3">
  315.                             <span class="text-muted">Elektrische Reichweite kombiniert*</span>
  316.                             <p>{{ technischeDaten.elektromotorReichweiteBeiMinNachWLTP ~ ' km' }}</p>
  317.                         </div>
  318.                     {% endif %}
  319.                     <div class="col-6 col-md-3 mb-3">
  320.                         <small class="text-muted">Türen</small>
  321.                         <p>{{ stammdaten.getTueren() > 0 ? stammdaten.getTueren(): '-/-' }}</p>
  322.                     </div>
  323.                     <div class="col-6 col-md-3 mb-3">
  324.                         <small class="text-muted">Leergewicht</small>
  325.                         <p>{{ technischeDaten.getLeergewicht() > 0 ? technischeDaten.getLeergewicht() ~ ' kg' : '-/-' }}</p>
  326.                     </div>
  327.                     <div class="col-6 col-md-3 mb-3">
  328.                         <small class="text-muted">Heckantrieb</small>
  329.                         <p>{{ technischeDaten.getHeckantrieb() ? 'Ja' : 'Nein' }}</p>
  330.                     </div>
  331.                     <div class="col-6 col-md-3 mb-3">
  332.                         <small class="text-muted">Frontantrieb</small>
  333.                         <p>{{ technischeDaten.getFrontantrieb() ? 'Ja' : 'Nein' }}</p>
  334.                     </div>
  335.                     <div class="col-6 col-md-3 mb-3">
  336.                         <small class="text-muted">Sitze</small>
  337.                         <p>{{ innen.getSitze() > 0 ? innen.getSitze() : '-/-' }}</p>
  338.                     </div>
  339.                 </div>
  340.             </div>
  341.             <div class="bg-white shadow p-3 px-md-5 py-md-4 mb-lg-3">
  342.                 <h3 class="fw-bold">Ausstattung</h3>
  343.                 <details class="mb-2" open>
  344.                     <summary class="border-bottom pb-2">Komfort</summary>
  345.                     <small>
  346.                         <ul>
  347.                             {% if innen.getStandheizung() %}
  348.                                 <li>Standheizung</li>{% endif %}
  349.                             {% if innen.getFensterheber() %}
  350.                                 <li>Fensterheber</li>{% endif %}
  351.                             {% if innen.getTempomat() %}
  352.                                 <li>Tempomat</li>{% endif %}
  353.                             {% if innen.getElektrischeSitzeinstellung() %}
  354.                                 <li>Elektrische Sitzeinstellung</li>{% endif %}
  355.                             {% if innen.getHeadUpDisplay() %}
  356.                                 <li>Head-Up Display</li>{% endif %}
  357.                             {% if innen.getMultifunktionslenkrad() %}
  358.                                 <li>Multifunktionslenkrad</li>{% endif %}
  359.                             {% if innen.getLichtsensor() %}
  360.                                 <li>Lichtsensor</li>{% endif %}
  361.                             {% if innen.getKurvenlicht() %}
  362.                                 <li>Kurvenlicht</li>{% endif %}
  363.                             {% if aussen.getKurvenlichtAdaptiv() %}
  364.                                 <li>Adaptives Kurvenlicht</li>{% endif %}
  365.                             {% if innen.getFernlichtassistent() %}
  366.                                 <li>Fernlichtassistent</li>{% endif %}
  367.                             {% if innen.getSitzheizung() %}
  368.                                 <li>Sitzheizung vorne</li>{% endif %}
  369.                             {% if innen.getSitzheizungHinten() %}
  370.                                 <li>Sitzheizung hinten</li>{% endif %}
  371.                             {% if innen.getBeheizbaresLenkrad() %}
  372.                                 <li>Beheizbares Lenkrad</li>{% endif %}
  373.                             {% if innen.getSchaltwippen() %}
  374.                                 <li>Schaltwippen</li>{% endif %}
  375.                         </ul>
  376.                     </small>
  377.                 </details>
  378.                 <details class="mb-2">
  379.                     <summary class="border-bottom pb-2">Sicherheit</summary>
  380.                     <small>
  381.                         <ul>
  382.                             {% if innen.getAirbag() %}
  383.                                 <li>Airbag</li>{% endif %}
  384.                             {% if innen.getIsofixBeifahrer() %}
  385.                                 <li>Isofix Beifahrer</li>{% endif %}
  386.                             {% if innen.getInnenspiegelAutomatischAbbl() %}
  387.                                 <li>Automatisch abblendender Innenspiegel</li>{% endif %}
  388.                             {% if aussen.getServolenkung() %}
  389.                                 <li>Servolenkung</li>{% endif %}
  390.                             {% if aussen.getEsp() %}
  391.                                 <li>ESP</li>{% endif %}
  392.                             {% if aussen.getAbs() %}
  393.                                 <li>ABS</li>{% endif %}
  394.                             {% if aussen.getWegfahrsperre() %}
  395.                                 <li>Wegfahrsperre</li>{% endif %}
  396.                             {% if aussen.getLedScheinwerfer() %}
  397.                                 <li>LED-Scheinwerfer</li>{% endif %}
  398.                             {% if aussen.getAlarmanlage() %}
  399.                                 <li>Alarmanlage</li>{% endif %}
  400.                             {% if aussen.getNebelscheinwerfer() %}
  401.                                 <li>Nebelscheinwerfer</li>{% endif %}
  402.                             {% if aussen.getZentralverriegelung() %}
  403.                                 <li>Zentralverriegelung</li>{% endif %}
  404.                             {% if aussen.getTagfahrlicht() %}
  405.                                 <li>Tagfahrlicht</li>{% endif %}
  406.                         </ul>
  407.                     </small>
  408.                 </details>
  409.                 <details class="mb-2">
  410.                     <summary class="border-bottom pb-2">Innenausstattung</summary>
  411.                     <small>
  412.                         <ul>
  413.                             {% if innen.getSportpaket() %}
  414.                                 <li>Sportpaket</li>{% endif %}
  415.                             {% if innen.getSportpaket() %}
  416.                                 <li>Sportpaket</li>{% endif %}
  417.                             {% if innen.getKindersitzbefestigung() %}
  418.                                 <li>Kindersitzbefestigung</li>{% endif %}
  419.                             {% if innen.getAmbientesLicht() %}
  420.                                 <li>Ambientebeleuchtung</li>{% endif %}
  421.                             {% if innen.getRaucherpaket() %}
  422.                                 <li>Raucherpaket</li>{% endif %}
  423.                             {% if innen.getWinterpaket() %}
  424.                                 <li>Winterpaket</li>{% endif %}
  425.                             {% if innen.getGepCkraumabtrennung() %}
  426.                                 <li>Gepäckraumabtrennung</li>{% endif %}
  427.                             {% if innen.getLederlenkrad() %}
  428.                                 <li>Lederlenkrad</li>{% endif %}
  429.                             {% if innen.getLordosenstTze() %}
  430.                                 <li>Lordosenstütze</li>{% endif %}
  431.                         </ul>
  432.                     </small>
  433.                 </details>
  434.                 <details class="mb-2">
  435.                     <summary class="border-bottom pb-2">Exterior</summary>
  436.                     <small>
  437.                         <ul>
  438.                             {% if aussen.getFarbe() %}
  439.                                 <li>{{ aussen.getFarbe() }}</li>{% endif %}
  440.                             {% if aussen.getLeichtmetallfelgen() %}
  441.                                 <li>Leichtmetallfelgen</li>{% endif %}
  442.                             {% if aussen.getAnhaengerkupplung() %}
  443.                                 <li>Anhängerkupplung</li>{% endif %}
  444.                             {% if aussen.getSchiebedach() %}
  445.                                 <li>Schiebedach</li>{% endif %}
  446.                             {% if aussen.getScheinwerferreinigungsanlage() %}
  447.                                 <li>Scheinwerferreinigungsanlage</li>{% endif %}
  448.                             {% if aussen.getElektrischeHeckklappe() %}
  449.                                 <li>Elektrische Heckklappe</li>{% endif %}
  450.                             {% if aussen.getDachtrGer() %}
  451.                                 <li>Dachträger</li>{% endif %}
  452.                         </ul>
  453.                     </small>
  454.                 </details>
  455.                 <details class="mb-2">
  456.                     <summary class="border-bottom pb-2">Multimedia</summary>
  457.                     <small>
  458.                         <ul>
  459.                             {% if innen.getBluetooth() %}
  460.                                 <li>Bluetooth</li>{% endif %}
  461.                             {% if innen.getCdSpieler() %}
  462.                                 <li>CD-Spieler</li>{% endif %}
  463.                             {% if innen.getBordcomputer() %}
  464.                                 <li>Bordcomputer</li>{% endif %}
  465.                             {% if innen.getHeadUpDisplay() %}
  466.                                 <li>Head-Up Display</li>{% endif %}
  467.                             {% if innen.getFreisprecheinrichtung() %}
  468.                                 <li>Freisprecheinrichtung</li>{% endif %}
  469.                             {% if innen.getAndroidAuto() %}
  470.                                 <li>Android Auto</li>{% endif %}
  471.                             {% if innen.getAppleCarplay() %}
  472.                                 <li>Apple Carplay</li>{% endif %}
  473.                             {% if innen.getInduktionsladenSmartphones() %}
  474.                                 <li>Android Auto</li>{% endif %}
  475.                             {% if innen.getWLan() %}
  476.                                 <li>W-LAN</li>{% endif %}
  477.                             {% if innen.getSoundsystem() %}
  478.                                 <li>Soundsystem</li>{% endif %}
  479.                             {% if innen.getSprachsteuerung() %}
  480.                                 <li>Sprachsteuerung</li>{% endif %}
  481.                             {% if innen.getTouchscreen() %}
  482.                                 <li>Touchscreen</li>{% endif %}
  483.                             {% if innen.getDabRadio() %}
  484.                                 <li>DAB-Radio</li>{% endif %}
  485.                             {% if innen.getUsb() %}
  486.                                 <li>USB</li>{% endif %}
  487.                         </ul>
  488.                     </small>
  489.                 </details>
  490.                 {% set foo = stammdaten.bemerkung|split('<b>') %}
  491.                 {% if 'Sonderausstattung' in stammdaten.bemerkung %}
  492.                     <details class="mb-2">
  493.                         <summary class="border-bottom pb-2">Sonderausstattung</summary>
  494.                         <small>
  495.                             {% for key, value in foo %}
  496.                                 {% if 'Sonderausstattung' in foo[key] %}
  497.                                     {{ foo[key] | replace({'Sonderausstattung': '', 'Sonderausstattung ab Werk': '', '<hr>': '', '<br>': ''}) | raw }}
  498.                                 {% endif %}
  499.                             {% endfor %}
  500.                         </small>
  501.                     </details>
  502.                 {% endif %}
  503.                 {% if 'Serienaustattung' in stammdaten.bemerkung %}
  504.                     <details class="mb-2">
  505.                         <summary class="border-bottom pb-2">Serienaustattung</summary>
  506.                         <small>
  507.                             {% for key, value in foo %}
  508.                                 {% if 'Serienaustattung' in foo[key] %}
  509.                                     {{ foo[key] | replace({'Serienaustattung': '', '<br><br>': '<br>'}) | raw }}
  510.                                 {% endif %}
  511.                             {% endfor %}
  512.                         </small>
  513.                     </details>
  514.                 {% endif %}
  515.             </div>
  516.             {% if fuelType == 'hybrid' %}
  517.                 <div class="bg-white shadow p-3 px-md-5 py-md-4 mb-lg-3">
  518.                     <h3 class="fw-bold">Energiebilanz</h3>
  519.                     <h4 class="mb-0">Energieeffizienzklasse:
  520.                         {{ technischeDaten.energieeffizienzklasseGewichtetKombiniert }}</h4>
  521.                     <h4>Energieeffizienzklasse bei entladener Batterie:
  522.                         {{ technischeDaten.energieeffizienzklasseEntladeneBatterie }}</h4>
  523.                     Auf Grundlage der gemessenen CO<sub>2</sub>-Emission unter Berücksichtigung der Masse des Fahrzeugs
  524.                     ermittelt.
  525.                     <table class="energy-balance-table my-3">
  526.                         <thead>
  527.                         <tr>
  528.                             <th style="width: 50%;"></th>
  529.                             <th style="width: 25%;">Gewichtet Kombiniert</th>
  530.                             <th style="width: 25%;" class="border-left">Bei entladener Batterie</th>
  531.                         </tr>
  532.                         </thead>
  533.                         <tbody>
  534.                         <tr>
  535.                             <td>
  536.                                 <ul class="list-unstyled co2-efficiency hybrid efficiency-{{ technischeDaten.energieeffizienzklasseGewichtetKombiniert | lower }}">
  537.                                     <li>
  538.                                         <span>A</span>
  539.                                     </li>
  540.                                     <li>
  541.                                         <span>B</span>
  542.                                     </li>
  543.                                     <li>
  544.                                         <span>C</span>
  545.                                     </li>
  546.                                     <li>
  547.                                         <span>D</span>
  548.                                     </li>
  549.                                     <li>
  550.                                         <span>E</span>
  551.                                     </li>
  552.                                     <li>
  553.                                         <span>F</span>
  554.                                     </li>
  555.                                     <li>
  556.                                         <span>G</span>
  557.                                     </li>
  558.                                 </ul>
  559.                             </td>
  560.                             <td>
  561.                                 <ul class="list-unstyled efficiency-hybrid">
  562.                                     {% set efficiencyClass = technischeDaten.energieeffizienzklasseGewichtetKombiniert %}
  563.                                     {% for grade in ['A', 'B', 'C', 'D', 'E', 'F', 'G'] %}
  564.                                         <li class="efficiency-hybrid-{{ efficiencyClass | lower }} {% if grade != efficiencyClass %}hidden{% endif %}">
  565.                                             <span>{{ grade }}</span>
  566.                                         </li>
  567.                                     {% endfor %}
  568.                                 </ul>
  569.                             </td>
  570.                             <td class="border-left">
  571.                                 <ul class="list-unstyled efficiency-hybrid">
  572.                                     {% set efficiencyClass = technischeDaten.energieeffizienzklasseEntladeneBatterie %}
  573.                                     {% for grade in ['A', 'B', 'C', 'D', 'E', 'F', 'G'] %}
  574.                                         <li class="efficiency-hybrid-{{ efficiencyClass | lower }} {% if grade != efficiencyClass %}hidden{% endif %}">
  575.                                             <span>{{ grade }}</span>
  576.                                         </li>
  577.                                     {% endfor %}
  578.                                 </ul>
  579.                             </td>
  580.                         </tr>
  581.                         </tbody>
  582.                     </table>
  583.                 </div>
  584.             {% else %}
  585.                 <div class="bg-white shadow p-3 px-md-5 py-md-4 mb-lg-3">
  586.                     <h3 class="fw-bold">Energiebilanz</h3>
  587.                     <h4>Energieeffizienzklasse:
  588.                         {{ technischeDaten.energieeffizienzklasse }}
  589.                     </h4>
  590.                     Auf Grundlage der gemessenen CO<sub>2</sub>-
  591.                     Emmision unter Berücksichtigung der Masse des Fahrzeugs ermittelt.
  592.                     <ul class="my-3 list-unstyled co2-efficiency efficiency-{{ technischeDaten.energieeffizienzklasse | lower }}">
  593.                         <li>
  594.                             <span>A</span>
  595.                         </li>
  596.                         <li>
  597.                             <span>B</span>
  598.                         </li>
  599.                         <li>
  600.                             <span>C</span>
  601.                         </li>
  602.                         <li>
  603.                             <span>D</span>
  604.                         </li>
  605.                         <li>
  606.                             <span>E</span>
  607.                         </li>
  608.                         <li>
  609.                             <span>F</span>
  610.                         </li>
  611.                         <li>
  612.                             <span>G</span>
  613.                         </li>
  614.                     </ul>
  615.                 </div>
  616.             {% endif %}
  617.             {% if hasLeasingRate or hasFinanzierungRate %}
  618.                 <div class="tab-select bg-white shadow p-3 px-md-5 py-md-4 mb-3">
  619.                     <input type="radio" name="tab-select" id="tab-select-leasing"
  620.                            class="d-none" {% if hasLeasingRate %} checked {% endif %}>
  621.                     <input type="radio" name="tab-select"
  622.                            id="tab-select-finance" {% if hasLeasingRate %} class="d-none" {% else %} class="d-none single" checked {% endif %}>
  623.                     <div class="tab-select-header row text-center fw-bold mb-4">
  624.                         {% if hasLeasingRate %}
  625.                             <div class="col-6">
  626.                                 <label for="tab-select-leasing" role="button" class="p-3">Leasing</label>
  627.                             </div>
  628.                         {% endif %}
  629.                         {% if hasFinanzierungRate %}
  630.                             <div class="col-6">
  631.                                 <label for="tab-select-finance" role="button" class="p-3">Finanzierung</label>
  632.                             </div>
  633.                         {% endif %}
  634.                     </div>
  635.                     {% if hasLeasingRate %}
  636.                     <div class="tab-select-content" data-id="tab-select-leasing">
  637.                         <div class="row">
  638.                             <div class="col-md-6 px-md-4">
  639.                                 <div class="px-lg-4">
  640.                                     <div class="mx-auto bg-light w-50 mb-4 ratio ratio-1x1" style="border-radius: 1rem">
  641.                                         <div class="d-flex flex-column justify-content-center align-items-center">
  642.                                             <small>Rate</small>
  643.                                             {% if leasing.leasingmatrix|length > 1 %}
  644.                                                 <b class="d-block fs-5" id="leasingRate">
  645.                                                     --&euro;
  646.                                                 </b>
  647.                                             {% else %}
  648.                                                 <b class="d-block fs-5" id="leasingRate">
  649.                                                     {{ leasing.getMonatlicheRate()|number_format(0, ',', '.') }}&euro;
  650.                                                 </b>
  651.                                             {% endif %}
  652.                                         </div>
  653.                                     </div>
  654.                                     <p class="text-muted small text-center lh-1">
  655.                                         <small><small><small>
  656.                                                     {{ leasingLegalNotice }}
  657.                                                 </small></small></small>
  658.                                     </p>
  659.                                 </div>
  660.                             </div>
  661.                             <div class="col-md-6 px-md-4">
  662.                                 <div class="px-lg-4">
  663.                                     <label for="term_leasing" class="form-label small m-0 fw-bold">Laufzeit in
  664.                                         Monaten</label>
  665.                                     {% if leasing.leasingmatrix|length > 1 %}
  666.                                         <div class="range-select pt-4 pb-3 mb-3"
  667.                                              id="term_leasing_label"
  668.                                              style='--min:0; --max:0; --val:0; --step:1;  --min-step:0; --max-step:0;'>
  669.                                             <input id="term_leasing" type="range" class="form-range" min="0" step="1"
  670.                                                    value="0" max="termLeasingValues"
  671.                                                    oninput="this.parentNode.style.setProperty('--val',this.value);calcLeasingRate(this.value,this.value, false, false);">
  672.                                             <output id="output_term_leasing" for="term_leasing"
  673.                                                     class="rounded-pill px-2 py-1"></output>
  674.                                         </div>
  675.                                     {% else %}
  676.                                         <div class="pt-4 pb-3 mb-3">
  677.                                             {% if leasing.laufzeit %}
  678.                                                 <span>{{ leasing.laufzeit }}</span>
  679.                                             {% else %}
  680.                                                 <span> -- </span>
  681.                                             {% endif %}
  682.                                         </div>
  683.                                     {% endif %}
  684.                                     {% if leasing.leasingmatrix|length > 1 %}
  685.                                         <label for="mileage_leasing" class="form-label small m-0 fw-bold">Laufleistung
  686.                                             in
  687.                                             km/Jahr</label>
  688.                                         <div class="range-select pt-4 pb-3 mb-3"
  689.                                              id="mileage_leasing_label"
  690.                                              style='--min:0; --max:0; --val:0; --step:1; --min-step:0; --max-step:0;'>
  691.                                             <input id="mileage_leasing" type="range" class="form-range" min="0" step="1"
  692.                                                    value="0"
  693.                                                    oninput="this.parentNode.style.setProperty('--val',this.value);calcLeasingRate(this.value,false, false, this.value);">
  694.                                             <output id="output_mileage_leasing" for="mileage_leasing"
  695.                                                     class="rounded-pill px-2 py-1"></output>
  696.                                         </div>
  697.                                     {% else %}
  698.                                         <label for="mileage_leasing" class="form-label small m-0 fw-bold">Gesamtlaufleistung</label>
  699.                                         <div class="pt-1 mb-3">
  700.                                             {% if leasing.laufleistung %}
  701.                                                 <span>{{ leasing.laufleistung|number_format(0, ',', '.') }} km</span>
  702.                                             {% else %}
  703.                                                 <span> -- </span>
  704.                                             {% endif %}
  705.                                         </div>
  706.                                     {% endif %}
  707.                                     {% if leasing.leasingmatrix|length > 1 %}
  708.                                         <label for="deposit_leasing" class="form-label small m-0 fw-bold">Anzahlung in
  709.                                             Euro</label>
  710.                                         {#                                    <div class="range-select pt-4 pb-3 mb-3" #}
  711.                                         {#                                         style='--min:1000; --max:{{ kosten.getPreis|number_format(0, '', '') }}; --val:{{ leasing.anzahlung }}; --step:1;'> #}
  712.                                         {#                                        <input id="deposit_leasing" type="range" class="form-range" min="1000" #}
  713.                                         {#                                               max="{{ kosten.getPreis|number_format(0, '', '') }}" step="1" #}
  714.                                         {#                                               value="{{ leasing.anzahlung }}" #}
  715.                                         {#                                               oninput="this.parentNode.style.setProperty('--val',this.value);calcLeasingRate(false, this.value);"> #}
  716.                                         {#                                        <output for="deposit_leasing" class="rounded-pill px-2 py-1"></output> #}
  717.                                         {#                                    </div> #}
  718.                                         <div class="pt-1 mb-3">
  719.                                             {% if leasing.anzahlung %}
  720.                                                 <span>{{ leasing.anzahlung|number_format(2, ',', '.') }}</span>
  721.                                             {% else %}
  722.                                                 <span> -- </span>
  723.                                             {% endif %}
  724.                                         </div>
  725.                                     {% else %}
  726.                                         <label for="deposit_leasing"
  727.                                                class="form-label small m-0 fw-bold">Anzahlung</label>
  728.                                         <div class="pt-1 mb-3">
  729.                                             {% if leasing.anzahlung %}
  730.                                                 <span>{{ leasing.anzahlung |number_format(2, ',', '.') }}&euro;</span>
  731.                                             {% else %}
  732.                                                 <span> -- </span>
  733.                                             {% endif %}
  734.                                         </div>
  735.                                     {% endif %}
  736.                                 </div>
  737.                             </div>
  738.                             <div class="col-12 mt-4">
  739.                                 <div class="bg-light rounded-3 p-4">
  740.                                     <div class="col-md-8 ms-auto">
  741.                                         <h6 class="mb-2">Interessiert an einem Leasingangebot?</h6>
  742.                                         <p class="small text-muted">
  743.                                             <small>
  744.                                                 {{ addressBank }}
  745.                                             </small>
  746.                                         </p>
  747.                                         <p class="text-center text-md-end">
  748.                                             <button class="btn btn-light bg-white w-auto border fw-normal"
  749.                                                     data-action="initiate-contact">
  750.                                                 Ja, ich bin interessiert
  751.                                             </button>
  752.                                         </p>
  753.                                     </div>
  754.                                 </div>
  755.                             </div>
  756.                         </div>
  757.                     </div>
  758.                     {% endif %}
  759.                     {% if hasFinanzierungRate %}
  760.                     <div class="tab-select-content" data-id="tab-select-finance">
  761.                         <div class="row">
  762.                             <div class="col-md-6 px-md-4">
  763.                                 <div class="px-lg-4">
  764.                                     <div class="mx-auto bg-light w-50 mb-4 ratio ratio-1x1" style="border-radius: 1rem">
  765.                                         <div class="d-flex flex-column justify-content-center align-items-center">
  766.                                             <small>Rate</small>
  767.                                             <b class="d-block fs-5" id="financeRate">
  768.                                                 {{ finanzierung.getMonatlicheRate|number_format(0, ',', '.') }}&euro;
  769.                                             </b>
  770.                                         </div>
  771.                                     </div>
  772.                                     <p class="text-muted small text-center lh-1">
  773.                                         <small><small><small>
  774.                                                     {{ financingLegalNotice }}
  775.                                                 </small></small></small>
  776.                                     </p>
  777.                                 </div>
  778.                             </div>
  779.                             <div class="col-md-6 px-md-4">
  780.                                 <div class="px-lg-4">
  781.                                     <label for="laufzeit_finance" class="form-label small m-0 fw-bold">Laufzeit in
  782.                                         Monaten:</label>
  783.                                     <div class="pt-1 mb-3">
  784.                                         {% if  finanzierung.laufzeit %}
  785.                                             <span>{{ finanzierung.laufzeit }}</span>
  786.                                         {% else %}
  787.                                             <span> -- </span>
  788.                                         {% endif %}
  789.                                     </div>
  790.                                     <label for="laufzeit_finance" class="form-label small m-0 fw-bold">Eff.
  791.                                         Jahreszins:</label>
  792.                                     <div class="pt-1 mb-3">
  793.                                         {% if  finanzierung.effektiverJahreszins %}
  794.                                             <span>{{ finanzierung.effektiverJahreszins }}%</span>
  795.                                         {% else %}
  796.                                             <span> -- </span>
  797.                                         {% endif %}
  798.                                     </div>
  799.                                     <label for="laufzeit_finance" class="form-label small m-0 fw-bold">Sollzins
  800.                                         p.a.:</label>
  801.                                     <div class="pt-1 mb-3">
  802.                                         {% if  finanzierung.sollZinssatz %}
  803.                                             <span>{{ finanzierung.sollZinssatz }}%</span>
  804.                                         {% else %}
  805.                                             <span> -- </span>
  806.                                         {% endif %}
  807.                                     </div>
  808.                                     <label for="laufzeit_finance"
  809.                                            class="form-label small m-0 fw-bold">Anzahlung:</label>
  810.                                     <div class="pt-1 mb-3">
  811.                                         {% if  finanzierung.anzahlung %}
  812.                                             <span>{{ finanzierung.anzahlung }}€</span>
  813.                                         {% else %}
  814.                                             <span> -- </span>
  815.                                         {% endif %}
  816.                                     </div>
  817.                                     <label for="laufzeit_finance"
  818.                                            class="form-label small m-0 fw-bold">Schlussrate:</label>
  819.                                     <div class="pt-1 mb-3">
  820.                                         {% if  finanzierung.schlussrate %}
  821.                                             <span>{{ finanzierung.schlussrate }}€</span>
  822.                                         {% else %}
  823.                                             <span> -- </span>
  824.                                         {% endif %}
  825.                                     </div>
  826.                                     <label for="laufzeit_finance"
  827.                                            class="form-label small m-0 fw-bold">Nettodarlehensbetrag:</label>
  828.                                     <div class="pt-1 mb-3">
  829.                                         {% if  finanzierung.nettokreditbetrag %}
  830.                                             <span>{{ finanzierung.nettokreditbetrag }}€</span>
  831.                                         {% else %}
  832.                                             <span> -- </span>
  833.                                         {% endif %}
  834.                                     </div>
  835.                                     <label for="laufzeit_finance" class="form-label small m-0 fw-bold">Darlehensgesamtbetrag:</label>
  836.                                     <div class="pt-1 mb-3">
  837.                                         {% if  finanzierung.bruttokreditbetrag %}
  838.                                             <span>{{ finanzierung.bruttokreditbetrag }}€</span>
  839.                                         {% else %}
  840.                                             <span> -- </span>
  841.                                         {% endif %}
  842.                                     </div>
  843.                                     {#                                <div class="range-select pt-4 pb-3 mb-3" #}
  844.                                     {#                                     style='--min:12; --max:60; --val:{{ finanzierung.laufzeit }}; --step:6;'> #}
  845.                                     {#                                    <input id="laufzeit_finance" type="range" class="form-range" min="12" max="60" #}
  846.                                     {#                                           step="6" value="{{ finanzierung.laufzeit }}" #}
  847.                                     {#                                           oninput="this.parentNode.style.setProperty('--val',this.value);calcFinanceRate(this.value, false);"> #}
  848.                                     {#                                    <output for="laufzeit_finance" class="rounded-pill px-2 py-1"></output> #}
  849.                                     {#                                    <div class="range-select-ticks">{% for i in range(12, 60, 6) %} #}
  850.                                     {#                                            <span>{{ i }}</span>{% endfor %}</div> #}
  851.                                     {#                                </div> #}
  852.                                     {#                                <div class="range-select pt-4 pb-3 mb-3" #}
  853.                                     {#                                     style='--min:1000; --max:{{ kosten.getPreis|number_format(0, '', '') }}; --val:{{ finanzierung.anzahlung }}; --step:1; background:none;'> #}
  854.                                     {#                                    <input id="anzahlung_finance" type="range" class="form-range" min="1000" #}
  855.                                     {#                                           max="{{ kosten.getPreis|number_format(0, '', '') }}" step="1" #}
  856.                                     {#                                           value="{{ finanzierung.anzahlung }}" #}
  857.                                     {#                                           oninput="this.parentNode.style.setProperty('--val',this.value);calcFinanceRate(false, this.value);"> #}
  858.                                     {#                                    <output for="anzahlung_finance" class="rounded-pill px-2 py-1"></output> #}
  859.                                     {#                                </div> #}
  860.                                 </div>
  861.                             </div>
  862.                             <div class="col-12 mt-4">
  863.                                 <div class="bg-light rounded-3 p-4">
  864.                                     <div class="col-md-8 ms-auto">
  865.                                         <h6 class="mb-2">Interessiert an einer Finanzierung?</h6>
  866.                                         <p class="small text-muted">
  867.                                             <small>
  868.                                                 {{ addressBank }}
  869.                                             </small>
  870.                                         </p>
  871.                                         <p class="text-center text-md-end">
  872.                                             <button class="btn btn-light bg-white w-auto border fw-normal"
  873.                                                     data-action="initiate-contact">
  874.                                                 Ja, ich bin interessiert
  875.                                             </button>
  876.                                         </p>
  877.                                     </div>
  878.                                 </div>
  879.                             </div>
  880.                         </div>
  881.                     </div>
  882.                     {% endif %}
  883.                 </div>
  884.             {% endif %}
  885.         </div>
  886.         <div class="col-lg-4 d-none d-lg-block">
  887.             <div class="sticky-lg-top shadow p-4" style="top:124px;">
  888.                 <div class="row">
  889.                     <div class="col-xl-6 mb-2 mb-xl-0">
  890.                         <h1 class="h2 mb-0">{{ stammdaten.getMarke }}</h1>
  891.                         {{ stammdaten.getModellbasis }}
  892.                     </div>
  893.                     <div class="col-xl-6">
  894.                         <span class="h2 fw-bold">{{ kosten.getPreis|number_format(2, ',', '.') }}&euro;</span>
  895.                         <div class="f-12 d-block text-muted">
  896.                             {% if stammdaten.getMwst == 0 %}
  897.                                 MwSt. ist ausweisbar
  898.                             {% else %}
  899.                                 MwSt. nicht ausweisbar
  900.                             {% endif %}
  901.                         </div>
  902.                         {% if pimcore_select('car-detail-price-highlight').getData() == true %}
  903.                             <span class="d-inline-block small border rounded px-2 py-1 mt-2" role="button">
  904.                                 <small>Monatliche Rate berechnen</small>
  905.                             </span>
  906.                         {% endif %}
  907.                         {% if kosten.rotstiftpreis > kosten.getPreis() %}
  908.                             <div class="mx-auto text-center mt-2">
  909.                                 <span
  910.                                     class="text-decoration-line-through d-block">{{ kosten.rotstiftpreis|number_format(2, ',', '.') }}&euro;</span>
  911.                                 <span class="badge rounded-pill bg-danger">Kürzlich reduziert</span>
  912.                             </div>
  913.                         {% endif %}
  914.                     </div>
  915.                     <div class="col-12 px-4 pt-4 text-center">
  916.                         <button class="btn btn-primary" data-action="initiate-contact">Fahrzeug anfragen</button>
  917.                     </div>
  918.                     <div class="col-12 mt-4">
  919.                         <div class="d-flex gap-2 mt-4">
  920.                             <svg width="32" height="32" viewBox="0 0 16 16">
  921.                                 <path
  922.                                     d="M12.166 8.94c-.524 1.062-1.234 2.12-1.96 3.07A31.493 31.493 0 0 1 8 14.58a31.481 31.481 0 0 1-2.206-2.57c-.726-.95-1.436-2.008-1.96-3.07C3.304 7.867 3 6.862 3 6a5 5 0 0 1 10 0c0 .862-.305 1.867-.834 2.94zM8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10z" />
  923.                                 <path d="M8 8a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 1a3 3 0 1 0 0-6 3 3 0 0 0 0 6z" />
  924.                             </svg>
  925.                             <div>
  926.                                 <h6 class="mb-2">Standort</h6>
  927.                                 Autohaus Timmermanns GmbH
  928.                                 {% if stammdaten.dealerLocation %}
  929.                                 <address class="small text-muted mt-1">
  930.                                     <span class="d-block">{{ stammdaten.dealerLocation.street }}</span>
  931.                                     <span
  932.                                         class="d-block">{{ stammdaten.dealerLocation.zip }} {{ stammdaten.dealerLocation.city }}</span>
  933.                                     <span class="d-block">Telefon: {{ stammdaten.dealerLocation.phone }}</span>
  934.                                 </address>
  935.                                 {% endif %}
  936.                             </div>
  937.                         </div>
  938.                     </div>
  939.                 </div>
  940.             </div>
  941.         </div>
  942.     </div>
  943. </div>
  944. <div id="internalVehicleId" data-internalvehicleid="{{ stammdaten.internenummer }}"><!-- --></div>
  945. <div id="dealerLocationPhone" data-dealerlocationlhone="{{ stammdaten.dealerLocation ? stammdaten.dealerLocation.phone : '' }}"><!-- --></div>
  946. <script>
  947.     const internalVehicleId = document.querySelector('#internalVehicleId').dataset.internalvehicleid;
  948.     const dealerLocationPhone = document.querySelector('#dealerLocationPhone').dataset.dealerlocationlhone;
  949.     {# const leasingMatrix = {{ leasing }}; #}
  950.     var inputTermLeasing = document.getElementById('term_leasing'),
  951.         inputTermLeasingLabel = document.getElementById('term_leasing_label'),
  952.         outputTermLeasing = document.getElementById('output_term_leasing'),
  953.         inputMileageLeasing = document.getElementById('mileage_leasing'),
  954.         inputMileageLeasingLabel = document.getElementById('mileage_leasing_label'),
  955.         outputMileageLeasing = document.getElementById('output_mileage_leasing');
  956.     /**
  957.      * The rate matrix, once. Rows are objects {price, period, mileage}, every value a STRING -
  958.      * Pimcore's table field stores text - which is why every comparison below converts explicitly.
  959.      */
  960.     const leasingMatrix = JSON.parse('{{ (leasing is not null ? leasing.leasingmatrix : []) | json_encode | raw }}');
  961.     /**
  962.      * Selection is by the PAIR (period, mileage), not by a position in a filtered list.
  963.      *
  964.      * The previous version filtered rows with a substring search across all three fields, so
  965.      * picking 24 months also pulled in rows whose price was "1240.00" or whose mileage was
  966.      * "24000" - foreign terms, duplicated mileages - sorted them with localeCompare (which puts
  967.      * "5000" after "40000", hence the slider running 10000 to 5000), and then indexed that list
  968.      * with the TERM slider's position. On automedia's real 21-row matrix that showed 1381,81 EUR
  969.      * for 24 months when the cheapest 24-month rate is 1334,02, and the detail page opened at a
  970.      * different figure than the one the listing advertises via filterRate.
  971.      *
  972.      * TODO, deliberately not in this change: price formatting ("843.6" should read "843,60 EUR"),
  973.      * the never-substituted max="termLeasingValues" placeholder on the term slider, guards for
  974.      * empty table cells, and the question why getMonatlicheRate() stops being displayed as soon as
  975.      * the matrix has more than one row even though the listing advertises exactly that value.
  976.      */
  977.     const leasingTerms = () =>
  978.         [...new Set(leasingMatrix.map(r => r.period))].sort((a, b) => Number(a) - Number(b));
  979.     const leasingMileagesFor = (period) =>
  980.         [...new Set(leasingMatrix.filter(r => r.period === period).map(r => r.mileage))]
  981.             .sort((a, b) => Number(a) - Number(b));
  982.     const leasingRowFor = (period, mileage) =>
  983.         leasingMatrix.find(r => r.period === period && r.mileage === mileage);
  984.     /**
  985.      * Renders both sliders and the price from two slider POSITIONS. Passing positions rather than
  986.      * values keeps the sliders authoritative: a term change re-derives the mileage list, and an
  987.      * out-of-range mileage position falls back to the cheapest entry of the new term.
  988.      */
  989.     function renderLeasing(termIndex, mileageIndex) {
  990.         const terms = leasingTerms();
  991.         if (terms.length === 0) {
  992.             return;
  993.         }
  994.         const term = terms[Math.min(termIndex, terms.length - 1)];
  995.         const mileages = leasingMileagesFor(term);
  996.         const mileage = mileages[Math.min(mileageIndex, mileages.length - 1)];
  997.         inputTermLeasing.max = terms.length - 1;
  998.         outputTermLeasing.innerHTML = term;
  999.         inputTermLeasingLabel.setAttribute('style',
  1000.             '--min:0; --max:' + (terms.length - 1) + '; --val:' + termIndex + '; --step:1;' +
  1001.             ' --min-step:' + terms[0] + '; --max-step:' + terms[terms.length - 1] + ';');
  1002.         inputMileageLeasing.max = mileages.length - 1;
  1003.         inputMileageLeasing.value = String(mileages.indexOf(mileage));
  1004.         outputMileageLeasing.innerHTML = mileage;
  1005.         inputMileageLeasingLabel.setAttribute('style',
  1006.             '--min:0; --max:' + (mileages.length - 1) + '; --val:' + mileages.indexOf(mileage) + '; --step:1;' +
  1007.             ' --min-step:' + mileages[0] + '; --max-step:' + mileages[mileages.length - 1] + ';');
  1008.         const row = leasingRowFor(term, mileage);
  1009.         document.getElementById('leasingRate').innerHTML = row ? row.price + '€' : '--€';
  1010.     }
  1011.     function calcLeasingRate(index, month, money, mileage) {
  1012.         renderLeasing(
  1013.             month !== false ? Number(month) : Number(inputTermLeasing.value),
  1014.             mileage !== false ? Number(mileage) : Number(inputMileageLeasing.value)
  1015.         );
  1016.     }
  1017.     function calcFinanceRate(month, money) {
  1018.         {# const selectedMonth = month ? month : document.getElementById('laufzeit_finance').value; #}
  1019.         {# const selectedMoney = money ? money : document.getElementById('anzahlung_finance').value; #}
  1020.         {# const finanzierungsbetrag =  {{ kosten.preis }} - {{ finanzierung.anzahlung }}; #}
  1021.         {# const zinsen = {{ finanzierung.effektiverJahreszins }}; #}
  1022.         {# const sum = ((57480 - 11496) + ( 57480 * 4 / 100)) / 60; #}
  1023.         // let monthPrice =  [Finanzierungsbetrag + (Finanzierungsbeitrag x Zinssatz ÷ 100)] ÷ Kreditlaufzeit;
  1024.         //     document.getElementById('financeRate').innerHTML = Math.round(sum) + '€';
  1025.     }
  1026.     function ready() {
  1027.         let contactForm = document.querySelector('form#contact_form');
  1028.         let contactFormName = contactForm.getAttribute('name');
  1029.         let contactFormVehicleIdField = contactFormName + '_vehicle_id';
  1030.         document.getElementById(contactFormVehicleIdField).value = internalVehicleId;
  1031.         // Initial state through the same function the sliders use, so the two cannot drift apart -
  1032.         // they were two separate implementations of the same logic before.
  1033.         if (outputTermLeasing && leasingMatrix.length > 0) {
  1034.             renderLeasing(0, 0);
  1035.         }
  1036.         // update quick-access-bar phone details
  1037.         document.querySelector('#qa-link-call').setAttribute('data-title', dealerLocationPhone);
  1038.         document.querySelector('#qa-link-call').setAttribute('href', 'tel://' + dealerLocationPhone.replace(/\D+/g, ''));
  1039.     }
  1040.     document.addEventListener('DOMContentLoaded', ready);
  1041. </script>