Rezerwacja online

  • Wynajem busa dostawczego na dobę – Legnica

    Wynajem busa dostawczego na dobę – Legnica

    299,00  z VAT

    Oferujemy wynajem busa dostawczego na elastycznych warunkach, dopasowanych do długości wynajmu oraz planowanego przebiegu. Możesz wybrać opcję z limitem kilometrów lub bez limitu, w zależności od swoich potrzeb. Im dłuższy okres wynajmu, tym korzystniejsza cena.
    Im dłuższy wynajem, tym niższa cena za dobę.
    Wybierz okres oraz limit kilometrów dopasowany do swoich potrzeb.

    <!-- Row:
    ...
    | Columns:
    ...
    | Labels: | Spacer:
    -->
    Wczytywanie...
    13
    -
    Dostępne
    13
    -
    Oczekujące
    ·
    13
    -
    Zarezerwowano
    13
    -
    Niedostępny

    05:0006:0007:0008:0009:0010:0011:0012:0013:0014:0015:0016:0017:0018:0019:0020:0021:0022:00
    Podsumowanie:

    Okres rezerwacji: ... (... dni)
    Pełny koszt rezerwacji: 0.00 

     | Cena zawiera limit 300 km - po przekroczeniu obowiązuje dopłata + 0,50 zł za każdy km  | 

    (function($){ // ====== STAŁE / GLOBAL ====== var WPBC_FORM_ID = '#booking_form2'; var isSubmitting = false; // flaga anty-pętla var lastRedirect = null; // zapamiętany redirect z AJAX Woo function getForm(){ var $form = $(WPBC_FORM_ID); return $form.length ? $form : $(); } function openModal(){ $('#terms_modal').show(); $('body').css('overflow','hidden'); } function closeModal(){ $('#terms_modal').hide(); $('body').css('overflow',''); } // ====== HELPERY ====== function getFieldByLike(arr, like){ like = like.toLowerCase(); for (var i=0;i<arr.length;i++){ var n = (arr[i].name || '').toLowerCase(); var v = (arr[i].value || '').toString().trim(); if(n === like || n.indexOf(like) === 0){ if(v) return v; } } return ''; } function getTermsCheckbox($form){ // U Ciebie realnie: term_and_condition2[] var $cb = $form.find('input[type="checkbox"][name="term_and_condition2[]"]'); if(!$cb.length){ // fallback tylko po NAME (nadal w obrębie #booking_form2) $cb = $form.find('input[type="checkbox"][name^="term_and_condition"]'); } return $cb; } function getPickupValue($form){ var pickup = $form.find('select[name="rangetime"], select[name="rangetime[]"], [name^="rangetime"]').val(); if(!pickup){ var arr = $form.serializeArray(); for (var i=0;i<arr.length;i++){ if((arr[i].name || '').indexOf('rangetime') !== -1 && arr[i].value){ pickup = arr[i].value; break; } } } return pickup || ''; } function extractCost($form){ // 1) hinty/inputy (w obrębie formularza + globalnie, ale bez innych form) var costText = ($form.find('#cost_hint2').length ? $form.find('#cost_hint2').val() : '') || ($form.find('#cost_hint1').length ? $form.find('#cost_hint1').val() : '') || ($('#cost_hint2').length ? $('#cost_hint2').val() : '') || ($('#cost_hint1').length ? $('#cost_hint1').val() : '') || ($form.find('.wpbc-cost-amount').length ? $form.find('.wpbc-cost-amount').first().text() : '') || ($('.wpbc-cost-amount').length ? $('.wpbc-cost-amount').first().text() : '') || ''; var m1 = (costText || '').toString().match(/([0-9]+(?:[ \.,][0-9]{3})*(?:[ \.,][0-9]{2})?)/); var cost = m1 ? m1[1] : ''; // 2) hidden inputy w form if(!cost){ cost = $form.find('[name="cost"], [name="cost_hint"], [name*="cost"]').first().val() || ''; } // 3) tekst z form (podsumowanie) if(!cost){ var txt = $form.text(); var m2 = txt.match(/Pełny koszt rezerwacji:\s*([0-9]+(?:[ \.,][0-9]{3})*(?:[ \.,][0-9]{2})?)\s*zł/i); cost = m2 ? m2[1] : ''; } // 4) ostatecznie: pierwsza lepsza kwota "zł" w form if(!cost){ var txt2 = $form.text(); var m3 = txt2.match(/([0-9]+(?:[ \.,][0-9]{3})*(?:[ \.,][0-9]{2})?)\s*zł/i); cost = m3 ? m3[1] : ''; } if(!cost) return ''; // ujednolicenie cost = cost.toString().replace(/\s/g,'').replace(',','.'); return cost; } function ensureHiddenIframe(){ var id = 'wpbc_wc_hidden_iframe'; var $ifr = $('#'+id); if(!$ifr.length){ $ifr = $('', { id: id, name: id, style: 'display:none !important; width:0; height:0; border:0;' }).appendTo('body'); } return $ifr; } // ====== POPUP REGULAMINU (bez fallbacków form) ====== $(document).on('click', '#open_terms', function(e){ e.preventDefault(); openModal(); }); $(document).on('click', '#close_terms', function(e){ e.preventDefault(); closeModal(); }); $(document).on('click', '#terms_modal', function(e){ if(e.target && e.target.id === 'terms_modal'){ closeModal(); } }); $(document).on('click', '#accept_terms', function(e){ e.preventDefault(); var $form = getForm(); if(!$form.length){ alert('Nie znaleziono formularza rezerwacji (#booking_form2).'); return; } var $cb = getTermsCheckbox($form); if(!$cb.length){ alert('Nie mogę znaleźć checkboxa regulaminu.'); return; } // klik "po ludzku" -> WPBC eventy/walidacje if(!$cb.prop('checked')){ $cb.get(0).click(); } closeModal(); }); // ====== KLIK "Przejdź do płatności" ma odpalać ten sam flow co SUBMIT ====== $(document).on('click', '#wpbc_go_checkout', function(e){ e.preventDefault(); var $form = getForm(); if(!$form.length){ alert('Nie znaleziono formularza rezerwacji (#booking_form2).'); return; } $form.trigger('submit'); // uruchamia poniższy handler submit }); // ====== GŁÓWNA LOGIKA: SUBMIT FORMULARZA WPBC ====== $(document).on('submit', WPBC_FORM_ID, function(e){ var $form = getForm(); if(!$form.length){ alert('Nie znaleziono formularza rezerwacji (#booking_form2).'); return; } // anty-pętla: jeśli sami wywołaliśmy submit "prawdziwy" -> przepuść if(isSubmitting){ return true; } e.preventDefault(); // blokujemy submit na chwilę // 1) Regulamin var $terms = getTermsCheckbox($form); if(!$terms.length || !$terms.prop('checked')){ alert('Musisz zaakceptować regulamin wynajmu.'); openModal(); return; } // 2) Walidacja podstawowych pól (na podstawie serializeArray) var sArr = $form.serializeArray(); var nameVal = getFieldByLike(sArr, 'name'); var secondVal = getFieldByLike(sArr, 'secondname'); var emailVal = getFieldByLike(sArr, 'email'); var phoneVal = getFieldByLike(sArr, 'phone'); if(!nameVal){ alert('Uzupełnij imię.'); return; } if(!secondVal){ alert('Uzupełnij nazwisko.'); return; } if(!emailVal){ alert('Uzupełnij e-mail.'); return; } if(!phoneVal){ alert('Uzupełnij telefon.'); return; } if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(emailVal)){ alert('Podaj poprawny adres e-mail.'); return; } // 3) Godzina var pickup = getPickupValue($form); if(!pickup){ alert('Wybierz godzinę odbioru.'); return; } // 4) Koszt var cost = extractCost($form); if(!cost){ alert('Brak wyliczonego kosztu – wybierz daty.'); return; } // Debug console.log('[WPBC->WC] form:', WPBC_FORM_ID); console.log('[WPBC->WC] pickup:', pickup); console.log('[WPBC->WC] cost:', cost); // 5) AJAX do Woo var ajaxUrl = (window.wpbc_ajax_url || '/wp-admin/admin-ajax.php'); $.post(ajaxUrl, { action: 'mc_wpbc_to_wc', form: $form.serialize(), cost: cost }).done(function(res){ if(!(res && res.success && res.data && res.data.redirect)){ alert((res && res.data && res.data.message) ? res.data.message : 'Nie udało się przejść do płatności.'); return; } lastRedirect = res.data.redirect; // 6) Prawdziwy submit WPBC, ale w ukrytym iframe, żeby nie zmieniać strony var $ifr = ensureHiddenIframe(); // jednorazowo po "zakończeniu" requestu WPBC w iframe robimy redirect $ifr.off('load.wpbc_wc').on('load.wpbc_wc', function(){ if(lastRedirect){ window.location.href = lastRedirect; } }); // ustaw target formularza na iframe (zapamiętaj poprzedni target) var prevTarget = $form.attr('target') || ''; $form.attr('target', $ifr.attr('name')); // przepuść submit (bez kolejnego przechwytywania) isSubmitting = true; try { $form.get(0).submit(); } finally { isSubmitting = false; // przywróć target jak był (żeby nie namieszać WPBC w przyszłości) if(prevTarget){ $form.attr('target', prevTarget); } else { $form.removeAttr('target'); } } }).fail(function(){ alert('Błąd połączenia AJAX.'); }); }); })(jQuery); (function() { var a = setInterval( function() { if ( ( 'undefined' === typeof _wpbc ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function (){ moveOptionalElementsToGarbage( 2 ); } ); }, 500 ); })();(function() { var a = setInterval( function() { if ( ( 'undefined' === typeof _wpbc ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function (){ _wpbc.seasons__set( 2, [] ); } ); }, 500 ); })();
    (function() { var a = setInterval( function() { if ( ( 'undefined' === typeof _wpbc ) || ( 'undefined' === typeof jQuery ) || ! window.jQuery ) { return; } clearInterval( a ); jQuery( document ).ready( function (){ jQuery(".widget_wpdev_booking .booking_form.form-horizontal").removeClass("form-horizontal"); var calendars__on_this_page_list = _wpbc.get_other_param("calendars__on_this_page") || []; var visible_calendars_count = calendars__on_this_page_list.length; if (visible_calendars_count !== null) { for (var i=0; i<visible_calendars_count; i++) { if (_wpbc.get_other_param("calendars__on_this_page")[i] === 2) { console.log("%c%s", "color: #e77; font-weight:bold", "Warning! The booking calendar for this resource with the ID = 2 is already on the page. Find more details here: https:\/\/wpbookingcalendar.com\/faq\/why-the-booking-calendar-widget-not-show-on-page\/"); } } _wpbc.get_other_param("calendars__on_this_page")[visible_calendars_count] = 2; }; } ); }, 500 ); })();