templates/user/produkt_details/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block metaTitle %}{{ schulung.schulungName }} - {{ parent() }}{% endblock %}
  3. {% block body %}
  4.     {% include('/user/produkt_details/schulung.html.twig') %}
  5.     <div class="modal fade" id="modal-warenkorb" tabindex="-1" role="dialog" aria-labelledby="ModalWarenkorbTitle" aria-hidden="true">
  6.         <div class="modal-dialog modal-md modal-dialog-scrollable" role="document" style="max-height: 90%;">
  7.             <div class="modal-content" id="warenkorbHinzufuegen">
  8.             </div>
  9.         </div>
  10.     </div>
  11.     <div class="modal fade" id="scrollable-modal" tabindex="-1" role="dialog" aria-labelledby="scrollableModalTitle" aria-hidden="true">
  12.         <div class="modal-dialog modal-md modal-dialog-scrollable" role="document" style="max-height: 90%;">
  13.             <div class="modal-content">
  14.                 <div class="modal-header">
  15.                     <h4 class="modal-title mb-0" id="scrollableModalTitle">Termine</h4>
  16.                     <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
  17.                 </div>
  18.                 <div class="modal-body">
  19.                     <div id="seminarTermine">
  20.                     </div>
  21.                 </div>
  22.             </div>
  23.         </div>
  24.     </div>
  25.     <div class="modal fade task-modal-content" id="modal-1" tabindex="-1" role="dialog"
  26.          aria-labelledby="Modal-Label-1" aria-hidden="true">
  27.         <div class="modal-dialog modal-md modal-dialog-scrollable" role="document" style="max-height: 90%;">
  28.             <div class="modal-content">
  29.                 <div class="modal-header">
  30.                     <h4>Schulung hinzufügen</h4>
  31.                     <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
  32.                 </div>
  33.                 <div class="modal-body">
  34.                     <b>Der Campus befindet sich noch im Aufbau.</b><br>
  35.                     Im Moment sind Buchungen nur möglich, wenn du mit deiner Firma verbunden bist.
  36.                     <div class="mt-3 fw-bolder">Was kann ich tun?</div>
  37.                     <div class="ps-3">
  38.                         <li>Frage in deiner Firma nach, ob ihr bereits einen Firmenaccount im Campus besitzt.</li>
  39.                         <li>Wenn JA: Verbinde dich mit deiner Firma und nutze die Vorteile auf Firmenrechnung zu buchen</li>
  40.                         <li>Wenn NEIN: Frage in deiner Firma nach, ob sie nicht Teil des Campus werden wollen.</li>
  41.                     </div>
  42.                     <div class="mt-3">
  43.                         Für weitere Informationen schreibe an<br><a href="mailto:support@handwerkXcampus.de">support@handwerkXcampus.de</a><br>
  44.                         oder ruf einfach an unter<br>
  45.                         <a href="tel:04919922222">0491 / 99 22222</a>
  46.                     </div>
  47.                 </div>
  48.             </div>
  49.         </div>
  50.     </div>
  51.     <script>
  52.         jQuery(function ($) {
  53.             $('#staerkenkompass-mobil-ansicht').removeClass('d-none')
  54.             $('.hauptseite-campus-logo').addClass('d-none')
  55.             $('.hauptseite-zurueck-symbol').removeClass('d-none')
  56.             {% if zurueckLink == null %}
  57.             $('.hauptseite-zurueck-link').attr('href', 'javascript:history.back()')
  58.             {% else %}
  59.             $('.hauptseite-zurueck-link').attr('href', '{{ zurueckLink }}')
  60.             {% endif %}
  61.             $(document).on('click', '.lade-modal-fenster', function (event) {
  62.                 event.preventDefault();
  63.                 let href = $(this).attr('href');
  64.                 $.ajax({
  65.                     'url': href,
  66.                     'method': 'get',
  67.                     'success': function (response) {
  68.                         $('#seminarTermine').html(response);
  69.                     },
  70.                     'error': function (response) {
  71.                         console.log('Fehler bei Ajax-Link' + response)
  72.                     }
  73.                 });
  74.             });
  75.             $(document).on('click', '.fremdanbieter-counter-link', function (event) {
  76.                 let counterLink = $(this).attr('data-counter-link');
  77.                 $.ajax({
  78.                     'url': counterLink,
  79.                     'method': 'get',
  80.                     'success': function (response) {
  81.                     },
  82.                     'error': function (response) {
  83.                         console.log('Fehler bei Ajax-Link' + response)
  84.                     }
  85.                 });
  86.             });
  87.             $(document).on('click', '.modal-warenkorb-hinzufuegen', function (event) {
  88.                 event.preventDefault();
  89.                 let terminId = $('.modal-warenkorb-hinzufuegen').attr('data-termin-id');
  90.                 $.ajax({
  91.                     'url': '/user/produkt/details/warenkorb/' + terminId,
  92.                     'method': 'get',
  93.                     'success': function (response) {
  94.                         $("#warenkorbHinzufuegen").html(response);
  95.                         window.refreshFilterList();
  96.                     },
  97.                     'error': function (response) {
  98.                         console.log('Fehler bei Ajax-Link' + response)
  99.                     }
  100.                 });
  101.             });
  102.             $(document).on('click', '.provisorischen-mitarbeiter-anlegen', function (event) {
  103.                 event.preventDefault();
  104.                 let href = $(this).attr('href');
  105.                 let sortieren = parseInt($(this).attr('data-sortieren'));
  106.                 let mailadresse = $('#mailversand').val().trim().toLowerCase();
  107.                 let firmenposition = $('#personal-firmenposition').val().trim();
  108.                 let vorname = $('#personal-vorname').val().trim();
  109.                 let nachname = $('#personal-nachname').val().trim();
  110.                 let ansprechpartner = vorname + ' ' + nachname;
  111.                 if (sortieren === 12) {
  112.                     ansprechpartner = nachname + ' ' + vorname;
  113.                 }
  114.                 if (!validateEmail(mailadresse) || mailadresse.length === 0) {
  115.                     window.toastSpeichern('ungültige E-Mail-Adresse', 'error', 3000);
  116.                     return;
  117.                 }
  118.                 if (firmenposition.length === 0 || vorname.length === 0 || nachname.length === 0 || mailadresse.length === 0) {
  119.                     window.toastSpeichern('Bitte alle Felder ausfüllen', 'error', 3000);
  120.                     return;
  121.                 }
  122.                 $('.provisorischen-mitarbeiter-anlegen').addClass('d-none')
  123.                 $('.provisorischen-mitarbeiter-anlegen-warten').removeClass('d-none')
  124.                 $.ajax({
  125.                     'url': href,
  126.                     'method': 'post',
  127.                     'data': {
  128.                         'email': mailadresse.toLowerCase(),
  129.                         'firmenposition': firmenposition,
  130.                         'vorname': vorname,
  131.                         'nachname': nachname,
  132.                     },
  133.                     'success': function (response) {
  134.                         if (!response['error']) {
  135.                             let teilnehmer = `<div class="row widget-filter-item border-top pb-2 pt-2">
  136.                                     <div class="col-1">
  137.                                         <input type="checkbox" checked
  138.                                            class="checkbox-user-id form-checkbox"
  139.                                            data-user-id="${response['userId']}">
  140.                                     </div>
  141.                                     <div class="col-2">
  142.                                         <img class="rounded-circle" src="/img/campus/kein_user.png" alt="Profilbild" width="40px">
  143.                                     </div>
  144.                                     <div class="col-8 widget-filter-item-text">
  145.                                         <div class="text-success fw-bolder">NEU</div>
  146.                                         <div class="text-info small fw-bolder">Inaktiver Account</div>
  147.                                         ${ansprechpartner}
  148.                                         <br>
  149.                                         <span class="text-muted">${firmenposition}</span>
  150.                                     </div>
  151.                                   </div>`;
  152.                             $(teilnehmer).insertBefore($('.div-neuer-ansprechpartner'));
  153.                             $('#mailversand').val('');
  154.                             $('#personal-firmenposition').val('');
  155.                             $('#personal-vorname').val('');
  156.                             $('#personal-nachname').val('');
  157.                             $('.collapse-weitere-Teilnehmer').trigger('click');
  158.                         } else {
  159.                             window.toastSpeichern(response['fehlermeldung'], 'error', 5000);
  160.                         }
  161.                         $('.provisorischen-mitarbeiter-anlegen').removeClass('d-none')
  162.                         $('.provisorischen-mitarbeiter-anlegen-warten').addClass('d-none')
  163.                     },
  164.                     'error': function (response) {
  165.                         console.log('Konnte nicht gespeichert werden.' + response)
  166.                     }
  167.                 });
  168.             })
  169.             $(document).on('click', '.link-schulung-beobachten', function (event) {
  170.                 event.preventDefault();
  171.                 let href = $(this).attr('href');
  172.                 window.confirmModal('Schulung beobachten', '', 'Möchtest du eine E-Mail erhalten wenn ein neuer Termin zu dieser Schulung veröffentlicht wird?', 'Beobachtung aktivieren', function () {
  173.                     $.ajax({
  174.                         'url': href,
  175.                         'method': 'get',
  176.                         'success': function (response) {
  177.                             window.location.reload();
  178.                         },
  179.                         'error': function (response) {
  180.                             console.log('Fehler bei Ajax-Link' + response)
  181.                         }
  182.                     });
  183.                 });
  184.             });
  185.             $(document).on('click', '.link-schulung-beobachten-loeschen', function (event) {
  186.                 event.preventDefault();
  187.                 let href = $(this).attr('href');
  188.                 window.confirmModal('Schulung beobachten', '', 'Du möchtest bei neuen Terminen nicht mehr informiert werden?', 'Beobachtung deaktivieren', function () {
  189.                     $.ajax({
  190.                         'url': href,
  191.                         'method': 'get',
  192.                         'success': function (response) {
  193.                             window.location.reload();
  194.                         },
  195.                         'error': function (response) {
  196.                             console.log('Fehler bei Ajax-Link' + response)
  197.                         }
  198.                     });
  199.                 });
  200.             });
  201.             $(document).on('click', '.inhouse-schulung-hinzufuegen', function (event) {
  202.                 event.preventDefault();
  203.                 let href = $(this).attr('href');
  204.                 window.confirmModal('Inhouse-Schulungen', '', 'Die Anfrage der Inhouse-Schulung findet im Adminbereich statt. Du wirst nun zum Adminbereich weitergeleitet.' +
  205.                     '<span class="text-info small"><br>&nbsp<br>Der Adminbereich ist für die App-Nutzung nicht so gut geeignet. Es wäre vom Vorteil die Desctop-Version zu verwenden.</span>', 'Zum Adminbereich', function () {
  206.                     window.location.href = href;
  207.                 });
  208.             });
  209.             $(document).on('click', '.modal-empfehlung-hinzufuegen', function (event) {
  210.                 event.preventDefault();
  211.                 let href = $(this).attr('href');
  212.                 $.ajax({
  213.                     'url': href,
  214.                     'method': 'get',
  215.                     'success': function (response) {
  216.                         $("#warenkorbHinzufuegen").html(response);
  217.                         window.refreshFilterList();
  218.                     },
  219.                     'error': function (response) {
  220.                         console.log('Fehler bei Ajax-Link' + response)
  221.                     }
  222.                 });
  223.             });
  224.             $(document).on('change', '.checkbox-user-id', function (event) {
  225.                 event.preventDefault();
  226.                 $('.button-empfehlung-speichern').addClass('d-none')
  227.                 let arrayTeilnehmer = [];
  228.                 $('.checkbox-user-id:checked').each(function (index, checkboxUserId) {
  229.                     arrayTeilnehmer.push(parseInt($(checkboxUserId).attr('data-user-id')));
  230.                 });
  231.                 if (arrayTeilnehmer.length > 0) {
  232.                     $('.keinMitarbeiterAusgewaehlt').text(arrayTeilnehmer.length + ' ausgewählt')
  233.                     $('.keinMitarbeiterAusgewaehlt').removeClass('d-none')
  234.                     $('.button-empfehlung-speichern').removeClass('d-none')
  235.                 } else {
  236.                     $('.keinMitarbeiterAusgewaehlt').text('Personen auswählen')
  237.                 }
  238.             });
  239.             $(document).on('click', '.button-empfehlung-speichern', function (event) {
  240.                 event.preventDefault();
  241.                 let href = $(this).attr('href');
  242.                 $('.keinMitarbeiterAusgewaehlt').addClass('d-none')
  243.                 let arrayTeilnehmer = [];
  244.                 $('.checkbox-user-id:checked').each(function (index, checkboxUserId) {
  245.                     arrayTeilnehmer.push(parseInt($(checkboxUserId).attr('data-user-id')));
  246.                 });
  247.                 if (arrayTeilnehmer.length === 0) {
  248.                     window.toastSpeichern('Bitte mindestens eine Person auswählen', 'error', 3000);
  249.                     $('.keinMitarbeiterAusgewaehlt').text('Min. 1 Person auswählen')
  250.                     $('.keinMitarbeiterAusgewaehlt').removeClass('d-none')
  251.                     return;
  252.                 }
  253.                 let terminIDs = '-1';
  254.                 let arrayTermine = [];
  255.                 $('.checkbox-termin-empfehlen:checked').each(function (index, checkboxTerminId) {
  256.                     arrayTermine.push(parseInt($(checkboxTerminId).attr('data-termin-id')));
  257.                 });
  258.                 if (arrayTermine.length > 0) {
  259.                     terminIDs = JSON.stringify(arrayTermine)
  260.                 }
  261.                 $.ajax({
  262.                     'url': href,
  263.                     'method': 'post',
  264.                     'data': {
  265.                         'arrayTeilnehmer': JSON.stringify(arrayTeilnehmer),
  266.                         'terminIDs': terminIDs,
  267.                     },
  268.                     'success': function (response) {
  269.                         let modal = bootstrap.Modal.getInstance(document.getElementById('modal-warenkorb'));
  270.                         modal.hide();
  271.                         window.toastSpeichern('Empfehlungen wurden gesendet', 'success', 3000);
  272.                     },
  273.                     'error': function (response) {
  274.                         console.log('Fehler bei Ajax-Link' + response)
  275.                     }
  276.                 });
  277.             });
  278.             /*
  279.                         $(document).on('click', '.button-warenkorb-entfernen', function (event) {
  280.                             event.preventDefault();
  281.                             let href = $(this).attr('href');
  282.                             $.ajax({
  283.                                 'url': href,
  284.                                 'method': 'get',
  285.                                 'success': function (response) {
  286.                                     window.refreshUserNotification();
  287.                                     let modal = bootstrap.Modal.getInstance(document.getElementById('modal-warenkorb'));
  288.                                     modal.hide();
  289.                                 },
  290.                                 'error': function (response) {
  291.                                     console.log('Fehler bei Ajax-Link' + response)
  292.                                 }
  293.                             });
  294.                         });
  295.             */
  296.             $(document).on('click', '.button-warenkorb-speichern', function (event) {
  297.                 event.preventDefault();
  298.                 let href = $(this).attr('href');
  299.                 let freiePlaetze = parseInt($(this).attr('data-freie-plaetze'));
  300.                 $('.keinMitarbeiterAusgewaehlt').addClass('d-none')
  301.                 $('.zuvielMitarbeiterAusgewaehlt').addClass('d-none')
  302.                 let arrayTeilnehmer = [];
  303.                 $('.checkbox-user-id:checked').each(function (index, checkboxUserId) {
  304.                     arrayTeilnehmer.push(parseInt($(checkboxUserId).attr('data-user-id')));
  305.                 });
  306.                 if (arrayTeilnehmer.length === 0) {
  307.                     $('.keinMitarbeiterAusgewaehlt').removeClass('d-none')
  308.                     return;
  309.                 }
  310.                 let anzahl = arrayTeilnehmer.length;
  311.                 if (freiePlaetze === -1 || (freiePlaetze > 0 && anzahl > freiePlaetze)) {
  312.                     $('.zuvielMitarbeiterAusgewaehlt').removeClass('d-none')
  313.                     return;
  314.                 }
  315.                 let bemerkung = $('#textarea-bemerkung').val();
  316.                 $(this).addClass('d-none')
  317.                 $('.bitte-warten-spinner').removeClass('d-none')
  318.                 $.ajax({
  319.                     'url': href,
  320.                     'method': 'post',
  321.                     'data': {
  322.                         'arrayTeilnehmer': JSON.stringify(arrayTeilnehmer),
  323.                         'anzahl': anzahl,
  324.                         'bemerkung': bemerkung,
  325.                     },
  326.                     'success': function (response) {
  327.                         let modal = bootstrap.Modal.getInstance(document.getElementById('modal-warenkorb'));
  328.                         modal.hide();
  329.                         if (!response['ueberbucht']) {
  330.                             window.location.href = '/user/bestellung/' + response['buchungId'];
  331.                         } else {
  332.                             window.confirmModal('Ausgebucht', '', 'Es tut uns leid.<br>Die restlichen freien Plätze wurden in der Zwischenzeit von anderen Teilnehmern gebucht.', 'ok', function () {
  333.                             });
  334.                         }
  335.                     },
  336.                     'error': function (response) {
  337.                         console.log('Fehler bei Ajax-Link' + response)
  338.                     }
  339.                 });
  340.             });
  341.             const urlParams = new URLSearchParams(window.location.search);
  342.             const termin_filter_id = urlParams.get('terminId');
  343.             if (termin_filter_id != null) {
  344.                 $('.termine-div').addClass('d-none');
  345.                 $('.termin-id' + termin_filter_id).removeClass('d-none');
  346.             }
  347.             $(document).on('click', '.termin-uebernehmen-link', function (e) {
  348.                 let terminId = $(this).attr('data-termin-id');
  349.                 $('.modal-warenkorb-hinzufuegen').attr('data-termin-id', terminId);
  350.                 $('.termine-div').addClass('d-none');
  351.                 $('.termin-id' + terminId).removeClass('d-none');
  352.                 window.toastSpeichern('Termin wurde übernommen', 'success', 2000);
  353.             });
  354.             $(document).on('click', '.btn-wishlist', function (event) {
  355.                 event.preventDefault();
  356.                 let $button = $(this);
  357.                 let $container = $button.closest('.favoriten-buttons');
  358.                 let href = $(this).attr('href');
  359.                 let buttonArt = $(this).attr('data-herz-button-art');
  360.                 console.log($container)
  361.                 $.ajax({
  362.                     'url': href,
  363.                     'method': 'get',
  364.                     'success': function (response) {
  365.                         $button.addClass('d-none');
  366.                         if (buttonArt === 'plus') {
  367.                             $('a[data-herz-button-art="minus"]', $container).removeClass('d-none');
  368.                             $button.removeClass('d-none');
  369.                         }
  370.                         if (buttonArt === 'minus') {
  371.                             $('a[data-herz-button-art="plus"]', $container).removeClass('d-none');
  372.                         }
  373.                     },
  374.                     'error': function (response) {
  375.                         console.log('Fehler bei Ajax-Link' + response)
  376.                     }
  377.                 });
  378.             });
  379.             $(document).on('click', 'div.star-rating > s', function (e) {
  380.                 $(this).closest('div').find('.active').removeClass('active');
  381.                 $(e.target).parentsUntil("div").addClass('active'); // all elements up from the clicked one excluding self
  382.                 $(e.target).addClass('active');  // the element user has clicked on
  383.                 let numStars = $(e.target).parentsUntil("div").length + 1;
  384.                 $('.sterne-bewertung').text(numStars);
  385.             });
  386.             $(document).on('click', '.kommentar-text-absenden', function (event) {
  387.                 event.preventDefault();
  388.                 let href = $(this).attr('href');
  389.                 let weiterleitung = $(this).attr('data-weiterleitung');
  390.                 let name = $(".kommentar-name").val().trim();
  391.                 let text = $(".kommentar-text").val().trim();
  392.                 $('.fehler-kommentar-name').attr("style", "display: none");
  393.                 $('.fehler-kommentar-text').attr("style", "display: none");
  394.                 if (name.length < 1 || text.length < 1) {
  395.                     if (name.length < 1) {
  396.                         $('.fehler-kommentar-name').attr("style", "display: block");
  397.                     }
  398.                     if (text.length < 1) {
  399.                         $('.fehler-kommentar-text').attr("style", "display: block");
  400.                     }
  401.                     return
  402.                 }
  403.                 $.ajax({
  404.                     'url': href,
  405.                     'method': 'post',
  406.                     'data': {
  407.                         'name': name,
  408.                         'text': text,
  409.                     },
  410.                     'success': function (response) {
  411.                         ladeKommentare(weiterleitung)
  412.                     },
  413.                     'error': function (response) {
  414.                         console.log('Fehler bei antwort_link' + response)
  415.                     }
  416.                 });
  417.             });
  418.             $(document).on('click', '.kommentar-antwort-absenden', function (event) {
  419.                 event.preventDefault();
  420.                 let href = $(this).attr('href');
  421.                 let weiterleitung = $(this).attr('data-weiterleitung');
  422.                 let kommentarId = $(this).attr('data-kommentar-id');
  423.                 let antwort = $(".kommentar-antwort-text" + kommentarId).val().trim();
  424.                 $('.fehler-kommentar-antwort').attr("style", "display: none");
  425.                 if (antwort.length < 1) {
  426.                     $('.fehler-kommentar-antwort').attr("style", "display: block");
  427.                     return
  428.                 }
  429.                 $.ajax({
  430.                     'url': href,
  431.                     'method': 'post',
  432.                     'data': {
  433.                         'kommentarId': kommentarId,
  434.                         'antwort': antwort,
  435.                     },
  436.                     'success': function (response) {
  437.                         ladeKommentare(weiterleitung)
  438.                     },
  439.                     'error': function (response) {
  440.                         console.log('Fehler bei antwort_link' + response)
  441.                     }
  442.                 });
  443.             });
  444.             $(document).on('click', '.bewertung-absenden', function (event) {
  445.                 event.preventDefault();
  446.                 let href = $(this).attr('href');
  447.                 let weiterleitung = $(this).attr('data-weiterleitung');
  448.                 let username = $('.bewertung-username').val().trim();
  449.                 let text = $('.bewertung-text').val().trim();
  450.                 let sterne = parseInt($('.sterne-bewertung').text().trim());
  451.                 $('.fehler-bewertung-name').attr("style", "display: none");
  452.                 $('.fehler-sterne-vergeben').attr("style", "display: none");
  453.                 console.log(sterne)
  454.                 if (username.length < 1 || sterne === 0) {
  455.                     if (username.length < 1) {
  456.                         $('.fehler-bewertung-name').attr("style", "display: block");
  457.                     }
  458.                     if (sterne === 0) {
  459.                         $('.fehler-sterne-vergeben').attr("style", "display: block");
  460.                     }
  461.                     return
  462.                 }
  463.                 $.ajax({
  464.                     'url': href,
  465.                     'method': 'post',
  466.                     'data': {
  467.                         'username': username,
  468.                         'text': text,
  469.                         'sterne': sterne,
  470.                     },
  471.                     'success': function (response) {
  472.                         ladeBewertungen(weiterleitung)
  473.                     },
  474.                     'error': function (response) {
  475.                         console.log('Fehler bei antwort_link' + response)
  476.                     }
  477.                 });
  478.             });
  479.             function validateEmail(email) {
  480.                 let emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  481.                 if (!emailReg.test(email)) {
  482.                     return false;
  483.                 } else {
  484.                     return true;
  485.                 }
  486.             }
  487.             function ladeBewertungen(link) {
  488.                 const xhttp = new XMLHttpRequest();
  489.                 xhttp.onload = function () {
  490.                     if (this.readyState === 4 && this.status === 200) {
  491.                         document.getElementById("bewertungen-anzeige-fenster").innerHTML = this.responseText;
  492.                         $('.bewertungen-klick').trigger('click');
  493.                     }
  494.                 }
  495.                 xhttp.open("GET", link);
  496.                 xhttp.send();
  497.             }
  498.             function ladeKommentare(link) {
  499.                 const xhttp = new XMLHttpRequest();
  500.                 xhttp.onload = function () {
  501.                     if (this.readyState === 4 && this.status === 200) {
  502.                         document.getElementById("kommentare-anzeige-fenster").innerHTML = this.responseText;
  503.                     }
  504.                 }
  505.                 xhttp.open("GET", link);
  506.                 xhttp.send();
  507.             }
  508.         });
  509.     </script>
  510. {% endblock %}