var full = false; function parse_phone(phone) { const digits = phone.replace(/\D/g, ''); if (digits.startsWith('00')) { parsedNumber = parseInt(digits); } else if (digits.startsWith('0')) { parsedNumber = parseInt(`0049${digits.slice(1)}`); } else { parsedNumber = parseInt(`00${digits}`); } return parsedNumber; } function statValue(data, name) { const entry = data.find(function (item) { return item.name.toLowerCase() === name.toLowerCase(); }); return entry ? entry.value : 0; } function update_registration_status(data) { const registered = statValue(data, 'total'); const max = statValue(data, 'max'); const remaining = statValue(data, 'free'); const progress = max > 0 ? Math.round((registered / max) * 100) : 0; $('#registration-status').show(); $('#registration-progress-bar').css('width', progress + '%'); $('#registration-status-text').text( "_REGISTERED_ von _MAX_ angemeldet (_REMAINING_ Pl\u00e4tze frei)" .replace('_REGISTERED_', registered) .replace('_MAX_', max) .replace('_REMAINING_', remaining) ); } function get_free_places() { $.ajax({ url: '/api/v1/stats/registrations', type: 'GET', dataType: "json", success: function (data) { const freePlaces = statValue(data, 'free'); if (freePlaces <= 0) { $('.register .btn').prop('disabled', true); $('.register .field-btn').css('cursor', 'no-drop'); full = true; $('#register .btn').text("Ausgebucht. Versuch es sp\u00e4ter noch mal!"); Swal.fire({ title: "Leider sind schon alle Pl\u00e4tze belegt :(", text: "Schau einfach sp\u00e4ter noch mal vorbei...", icon: 'warning', }); } else { $('.register .field-btn').css('cursor', 'auto'); } } }); } function register(options) { options = options || {}; $('.register .btn').prop('disabled', true); $.ajax({ url: '/api/v1/registration', type: 'POST', data: JSON.stringify({ address: $('#address').val(), age: $('#age').val(), city: $('#city').val(), comment: $('#note').val(), email: $('#mail').val(), firstname: $('#firstname').val(), food: $('#food').val(), lastname: $('#lastname').val(), newsletter: $('#newsletter').prop('checked'), notice: $('#reason').val(), phone: parse_phone($('#phone').val()), picture: $('#picture').prop('checked'), tshirt: $('#tshirt').val(), confirm_duplicate_email: options.confirmDuplicateEmail || false, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { Swal.fire({ title: "Vielen Dank f\u00fcr deine Anmeldung!", text: "Alles Weitere erh\u00e4ltst du in K\u00fcrze via Mail", icon: 'success', willClose: function () { location.replace('/') } }); }, error: function (data) { if ( !options.confirmDuplicateEmail && data.responseJSON && data.responseJSON.detail === 'email_already_registered' ) { Swal.fire({ showCancelButton: true, confirmButtonColor: '#d33', confirmButtonText: "Trotzdem anmelden!", cancelButtonColor: '#3085d6', cancelButtonText: "Entscheidung \u00e4ndern", title: "E-Mail-Adresse bereits verwendet", text: "Diese E-Mail-Adresse wurde bereits f\u00fcr eine Anmeldung verwendet. M\u00f6chtest du dich trotzdem anmelden?", icon: 'warning', }).then((result) => { if (result.value) { register({ confirmDuplicateEmail: true }); } else { $('.register .btn').prop('disabled', false); $('.register .field-btn').css('cursor', 'auto'); } }); return; } Swal.fire({ title: "Ups, da ist wohl etwas schief gelaufen", text: data.responseJSON.detail, icon: 'error' }); $('.register .btn').prop('disabled', false); $('.register .field-btn').css('cursor', 'auto'); } }); } $(document).on("click", ".tshirt-info", function (event) { Swal.fire({ title: "Warum gibt es nur M\u00e4nnergr\u00f6\u00dfen?", text: "In den letzten Jahren kam es bei unserem Lieferanten leider immer wieder zu Problemen mit den Frauengr\u00f6\u00dfen. So waren die Farben oft nicht einheitlich oder die bestellte Menge konnte nicht geliefert werden. Da ohnehin viele Teilnehmerinnen aufgrund des Schnitts oft M\u00e4nnergr\u00f6\u00dfen bestellt haben, haben wir uns dazu entschlossen, ausschlie\u00dflich diese anzubieten. Wir bitten um Verst\u00e4ndnis :)", icon: 'question' }); }); $(document).on("keyup", '#reason', function () { if ($('.register .btn').prop('disabled')) { if ($('#reason').val() === 'SecretStaff') { $('.register .btn').prop('disabled', false); $('.register .field-btn').css('cursor', 'auto'); } else { $('.register .btn').prop('disabled', true); $('.register .field-btn').css('cursor', 'no-drop'); } } }); $(document).on("click", '.agb label', function () { if ($(this).parent().find('input').prop('checked')) { $(this).parent().find('input').prop('checked', false); } else { $(this).parent().find('input').prop('checked', true); } }); $(document).on("submit", '.register', function () { if ($('#picture').prop('checked') == false) { Swal.fire({ showCancelButton: true, confirmButtonColor: '#d33', confirmButtonText: "Trotzdem anmelden!", cancelButtonColor: '#3085d6', cancelButtonText: "Entscheidung \u00e4ndern", title: "Es ist dein gutes Recht...", text: "dass du nicht m\u00f6chtest, dass wir Foto- und Video-Aufnahmen auf denen du zu sehen bist ver\u00f6ffentlichen. Allerdings bedeutet dies einen erheblichen Mehraufwand f\u00fcr uns, auf den wir gerne verzichten w\u00fcrden.", type: 'warning' }).then((result) => { if (result.value) { register(); } }); } else { register(); } return false }); $(function () { get_free_places(); });