1 2 3document.addEventListener('DOMContentLoaded', function () { 4 const qtyInputs = document.querySelectorAll('.rbfw_muiti_items_qty'); 5 const summaryDiv = document.getElementById('rbfw-items-summary'); 6 7 function updateSummary() { 8 let summaryHtml = ''; 9 let hasItems = false; 10 var durationType = jQuery('#durationType').val(); 11 var durationQty = parseInt(jQuery('#durationQty').val()) || 1; 12 13 qtyInputs.forEach(input => { 14 const qty = parseInt(input.value); 15 if (qty > 0) { 16 const itemName = input.dataset.name; 17 const pricePerUnit = parseFloat(input.dataset[`price${durationType.charAt(0).toUpperCase() + durationType.slice(1)}`]) || 0; 18 19 const total = (qty * durationQty * pricePerUnit).toFixed(2); 20 21 summaryHtml += `<li class="item-type"><span>${itemName}</span> <span>${qty} x ${durationQty} x <span>${rbfw_js_variables.currency}${pricePerUnit}</span> = <span>${rbfw_js_variables.currency}${total}</span></li>`; 22 23 hasItems = true; 24 } 25 }); 26 27 28 // summaryDiv.innerHTML = hasItems ? summaryHtml : ''; 29 } 30 31 // Attach event listeners to quantity inputs 32 qtyInputs.forEach(input => { 33 input.addEventListener('input', updateSummary); 34 }); 35 36 // Also trigger update when clicking plus or minus buttons 37 const plusButtons = document.querySelectorAll('.rbfw_qty_plus'); 38 const minusButtons = document.querySelectorAll('.rbfw_qty_minus'); 39 const durationType = document.querySelectorAll('#durationType'); 40 41 [...plusButtons, ...minusButtons].forEach(btn => { 42 btn.addEventListener('click', function () { 43 // Slight delay to ensure value updates first 44 setTimeout(updateSummary, 50); 45 }); 46 }); 47 48 [...durationType].forEach(btn => { 49 btn.addEventListener('change', function () { 50 // Slight delay to ensure value updates first 51 setTimeout(updateSummary, 50); 52 }); 53 }); 54}); 55 56 // pricing table show/hide 57jQuery(document).on('click', '.pricing-info-view', function (e) { 58 e.preventDefault(); 59 jQuery(this).closest('.rbfw-pricing-info-heading').toggleClass('open'); 60 jQuery(this).closest('.mp_right_section').toggleClass('overlay'); 61 jQuery('.price-item-container').stop(true, true).toggleClass('open').fadeToggle(); 62}); 63 64jQuery('body').on('focusin', '.pickup_date', function(e) { 65 jQuery(this).datepicker({ 66 dateFormat: js_date_format, 67 minDate: '', 68 beforeShowDay: function(date) 69 { 70 // Use enhanced inventory checking that considers return date 71 return rbfw_enhanced_pickup_beforeShowDay(date); 72 }, 73 onSelect: function (dateString, data) { 74 let date_ymd = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2); 75 jQuery('input[name="rbfw_pickup_start_date"]').val(date_ymd).trigger('change'); 76 77 let post_id = jQuery('#rbfw_post_id').val(); 78 let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val(); 79 80 let rbfw_minimum_booking_day = parseInt(jQuery('#rbfw_minimum_booking_day').val()); 81 let rbfw_maximum_booking_day = parseInt(jQuery('#rbfw_maximum_booking_day').val()); 82 83 84 let selected_date_array = date_ymd.split('-'); 85 let gYear = selected_date_array[0]; 86 let gMonth = selected_date_array[1]; 87 let gDay = selected_date_array[2]; 88 89 let minDate = new Date(gYear, gMonth - 1, gDay ); 90 minDate.setDate(minDate.getDate() + rbfw_minimum_booking_day); 91 92 jQuery(".dropoff_date").datepicker("option", "minDate", minDate); 93 94 95 if(rbfw_minimum_booking_day){ 96 let maxDate = new Date(gYear, gMonth - 1, gDay - 1 ); 97 maxDate.setDate(maxDate.getDate() + rbfw_maximum_booking_day); 98 jQuery(".dropoff_date").datepicker("option", "maxDate", maxDate ); 99 } 100 101 if(rbfw_enable_time_slot=='yes'){ 102 // particular_time_date_dependent_ajax(post_id,date_ymd,'time_enable',rbfw_enable_time_slot,'.rbfw-select.rbfw-time-price.pickup_time'); 103 let rbfw_particulars_data = jQuery('#rbfw_particulars_data').val(); 104 let rdfw_available_time = jQuery('#rdfw_available_time').val(); 105 getAvailableTimes(rbfw_particulars_data , date_ymd,rdfw_available_time,'pickup_time'); 106 107 108 109 } 110 111 // Trigger calendar refresh to apply enhanced inventory checking 112 setTimeout(function() { 113 rbfw_refresh_calendar_with_inventory_check(); 114 }, 200); 115 }, 116 }); 117 118 jQuery(document).on("mousemove", ".ui-datepicker-calendar td", function() {
119 let $this = jQuery(this); 120 console.log($this.attr('title')); 121 if ($this.find(".date-label").length === 0) { 122 let dateText = $this.attr('title'); 123 124 if (dateText) { 125 $this.append(`<span class='date-label'>`+dateText+`</span>`); 126 } 127 } 128 }); 129}); 130 131 132 133 134 135 136jQuery('body').on('change', 'input[name="rbfw_pickup_start_date"]', function(e) { 137 138 139 //const endDate = getURLParameter('rbfw_end_date'); 140 141 jQuery(".dropoff_date").val(''); 142 143 144 jQuery('.dropoff_date').datepicker({ 145 dateFormat: js_date_format, 146 onSelect: function (dateString, data) { 147 let date_ymd = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2); 148 jQuery('input[name="rbfw_pickup_end_date"]').val(date_ymd).trigger('change'); 149 150 let post_id = jQuery('#rbfw_post_id').val(); 151 let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val(); 152 153 if(rbfw_enable_time_slot=='yes'){ 154 let rbfw_particulars_data = jQuery('#rbfw_particulars_data').val(); 155 let rdfw_available_time = jQuery('#rdfw_available_time').val(); 156 getAvailableTimes(rbfw_particulars_data , date_ymd,rdfw_available_time,'dropoff_time'); 157 // particular_time_date_dependent_ajax(post_id,date_ymd_drop,'',rbfw_enable_time_slot,'.rbfw-select.rbfw-time-price.dropoff_time'); 158 } 159 160 // Trigger calendar refresh to apply enhanced inventory checking 161 rbfw_refresh_calendar_with_inventory_check(); 162 }, 163 beforeShowDay: function(date) 164 { 165 return rbfw_off_day_dates(date,'md',rbfw_js_variables.rbfw_today_booking_enable,'yes'); 166 } 167 }); 168}); 169 170 171 172 173jQuery('.dropoff_date').click(function(e) { 174 let pickup_date = jQuery('[name="rbfw_pickup_start_date"]').val(); 175 if (pickup_date == '') { 176 alert(rbfw_translation.select_pickup_date); 177 } 178}); 179 180 181jQuery('body').on('change', '.pickup_date', function(e) { 182 jQuery(".dropoff_date").val(''); 183}); 184jQuery('body').on('change', '#hidden_pickup_date, #hidden_dropoff_date, .pickup_time, .dropoff_time', function (e) { 185 186 let pickup_date = jQuery('#pickup_date').val(); 187 let dropoff_date = jQuery('#dropoff_date').val(); 188 let pickup_time = jQuery('#pickup_time').find(':selected').val(); 189 let dropoff_time = jQuery('#dropoff_time').find(':selected').val(); 190 let rbfw_available_time = jQuery('#rbfw_available_time').val(); 191 192 if (!dropoff_date) { 193 //jQuery('.mps_alert_warning').remove(); 194 //jQuery('<div class="rbfw_nia_notice mps_alert_warning">Please enter drop off date!</div>').insertBefore(' button.rbfw_bikecarmd_book_now_btn'); 195 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true); 196 } 197 198 199 if(rbfw_available_time=='yes'){ 200 if(pickup_date && dropoff_date && pickup_time && dropoff_time){ 201 rbfw_bikecarmd_ajax_price_calculation(); 202 } 203 }else{ 204 if(pickup_date && dropoff_date){ 205 rbfw_bikecarmd_ajax_price_calculation(); 206 } 207 } 208}); 209 210 211 212 213jQuery('body').on('change', '#rbfw_search_type', function (e) { 214 var selectedOption = jQuery(this).find('option:selected'); 215 var post_id = selectedOption.data('post_id'); 216 217 jQuery.ajax({ 218 type: 'POST', 219 dataType: 'json', 220 url: rbfw_ajax_front.rbfw_ajaxurl, 221 data: { 222 'action' : 'rbfw_bikecarmd_ajax_min_max_and_offdays_info', 223 'post_id': post_id, 224 'nonce' : rbfw_ajax_front.nonce_bikecarmd_ajax_min_max_and_offdays_info 225 226 }, 227 beforeSend: function() { 228 jQuery('.rbfw_bike_car_md_item_wrapper').addClass('rbfw_loader_in'); 229 jQuery('.rbfw_bike_car_md_item_wrapper').append('<i class="fas fa-spinner fa-spin"></i>'); 230 }, 231 success: function (response) { 232 233 jQuery('#rbfw_minimum_booking_day').attr('value',response.rbfw_minimum_booking_day); 234 jQuery('#rbfw_maximum_booking_day').attr('value',response.rbfw_maximum_booking_day); 235 jQuery('#rbfw_off_days').attr('value',response.rbfw_off_days); 236 jQuery('#rbfw_offday_range').attr('value',response.rbfw_offday_range); 237 238 jQuery('.rbfw_bike_car_md_item_wrapper').removeClass('rbfw_loader_in'); 239 jQuery('.rbfw_bike_car_md_item_wrapper i.fa-spinner').remove(); 240 241 }, 242 error : function(response){ 243 console.log(response); 244 } 245 }); 246}) 247 248 249jQuery('body').on('focusin', '.pickup_date_search', function(e) { 250 251 252 jQuery(this).datepicker({ 253 dateFormat: js_date_format, 254 minDate: '', 255 beforeShowDay: function(date) 256 { 257 // Use enhanced inventory checking for search calendar as well 258 return rbfw_enhanced_pickup_beforeShowDay(date); 259 }, 260 onSelect: function (dateString, data) { 261 let date_ymd = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2); 262 jQuery('input[name="rbfw_pickup_date_search"]').val(date_ymd).trigger('change'); 263 264 let post_id = jQuery('#rbfw_post_id').val(); 265 266
267 let rbfw_minimum_booking_day = parseInt(jQuery('#rbfw_minimum_booking_day').val()); 268 let rbfw_maximum_booking_day = parseInt(jQuery('#rbfw_maximum_booking_day').val()); 269 let selected_date_array = date_ymd.split('-'); 270 let gYear = selected_date_array[0]; 271 let gMonth = selected_date_array[1]; 272 let gDay = selected_date_array[2]; 273 274 let minDate = new Date(gYear, gMonth - 1, gDay ); 275 minDate.setDate(minDate.getDate() + rbfw_minimum_booking_day); 276 jQuery(".dropoff_date_search").datepicker("option", "minDate", minDate); 277 }, 278 }); 279 280}); 281 282 283jQuery('body').on('change', 'input[name="rbfw_pickup_date_search"]', function(e) { 284 jQuery('.dropoff_date_search').datepicker({ 285 dateFormat: js_date_format, 286 onSelect: function (dateString, data) { 287 let date_ymd_drop = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2); 288 jQuery('input[name="rbfw_dropoff_date_search"]').val(date_ymd_drop).trigger('change'); 289 }, 290 beforeShowDay: function(date) 291 { 292 // Use enhanced inventory checking for search dropoff calendar as well 293 return rbfw_enhanced_pickup_beforeShowDay(date); 294 } 295 296 }); 297}); 298 299 300jQuery(window).on('load', function() { 301 302 if(jQuery('#body-class').val()=='single-rbfw_item'){ 303 jQuery('body').addClass('single-rbfw_item'); 304 } 305 306 307 let pickup_date = jQuery('#pickup_date').val(); 308 let dropoff_date = jQuery('#dropoff_date').val(); 309 if(pickup_date && dropoff_date){ 310 311 const date = new Date(pickup_date); 312 313 const year = date.getFullYear();
314 const month = ('0' + (date.getMonth() + 1)).slice(-2); // Months are 0-based 315 const day = ('0' + date.getDate()).slice(-2); 316 const date_ymd = `${year}-${month}-${day}`; 317 jQuery('input[name="rbfw_pickup_start_date"]').val(date_ymd).trigger('change'); 318 319 320 rbfw_bikecarmd_ajax_price_calculation(); 321 } 322}) 323 324 325 326jQuery(document).on('change', '#rbfw_item_quantity_md', function(e) { 327 let that = jQuery(this); 328 var total_days = jQuery('[name="total_days"]').val(); 329 330 if(total_days){ 331 rbfw_service_price_calculation(total_days); 332 } 333}); 334 335 336 337/*Extra service start*/ 338 339 340 341jQuery(document).ready(function () { 342 343 344 const durationTypeSelect = jQuery('#durationType'); 345 const pickupDateInput = jQuery('#pickupDate'); 346 const pickupTimeInput = jQuery('#pickupTime'); 347 const qtyLabel = jQuery('#qtyLabel'); 348 349 // Set minimum date to today 350 const today = new Date().toISOString().split('T')[0]; 351 pickupDateInput.attr('min', today).val(today); 352 353 // Set default time to current time + 1 hour 354 const now = new Date(); 355 now.setHours(now.getHours() + 1); 356 pickupTimeInput.val(now.toTimeString().slice(0, 5)); 357 358 // Change quantity functions 359 window.changeQty = function (inputId, delta) { 360 const input = jQuery('#' + inputId); 361 const currentValue = parseInt(input.val()) || 1; 362 const newValue = Math.max(1, currentValue + delta); 363 input.val(newValue); 364 jQuery(input).trigger('change'); 365 } 366 367 window.changeItemQty = function (itemType, delta) { 368 const input = jQuery(`[data-item="${itemType}"]`); 369 const currentValue = parseInt(input.val()) || 0; 370 const newValue = Math.max(0, currentValue + delta); 371 input.val(newValue); 372 373 } 374 375 function updateQtyLabel() { 376 const durationType = durationTypeSelect.val(); 377 if (durationType) { 378 const typeMap = { 379 hourly: rbfw_translation.hours, 380 daily: rbfw_translation.days, 381 weekly: rbfw_translation.weeks, 382 monthly: rbfw_translation.months 383 }; 384 qtyLabel.text(rbfw_translation.number_of+ ` ${typeMap[durationType]}`); 385 } else { 386 qtyLabel.text(rbfw_translation.number_of+' '+rbfw_translation.duration); 387 } 388 } 389 390 // Add event listener 391 durationTypeSelect.on('change', function () { 392 updateQtyLabel(); 393 }); 394 395 // Initial label update 396 updateQtyLabel(); 397}); 398 399 400 401 402jQuery('body').on('change', '#hidden_pickup_date, .pickup_time, #durationType, #durationQty', function (e) { 403 404 let pickup_date = jQuery('#pickup_date').val(); 405 let pickup_time = jQuery('#pickup_time').find(':selected').val(); 406 let durationType = jQuery('#durationType').val(); 407 let durationQty = jQuery('#durationQty').val(); 408 let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val(); 409 410 const changedElement = e.target.id || e.target.className; 411 412 if(changedElement == 'durationType'){ 413 jQuery('.item-price').children('span').hide(); 414 jQuery('.item-price .rbfw_'+durationType+'_price').show(); 415 } 416 417 if (!pickup_date) { 418 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true); 419 } 420 421 if(pickup_date && durationType && durationQty){ 422 if(rbfw_enable_time_slot=='no'){ 423 calculateTotalMultipleItems(); 424 }else{ 425 if(pickup_time){ 426 calculateTotalMultipleItems(); 427 } 428 } 429 430 } 431 432}); 433 434 435 436 437// Handle quantity change multiple items 438 439jQuery(document).on('input', '.rbfw_muiti_items_qty', function () { 440 let $input = jQuery(this); 441 let val = parseInt($input.val()) || 0; 442 const max = parseInt($input.attr('max')); 443 if (val > max) { 444 val = max; 445 jQuery(this).val(val); // Set it back to max 446 } 447 calculateTotalMultipleItems(true); 448}); 449 450 // Handle plus button 451jQuery(document).on('click', '.rbfw_multi_items_qty_plus', function () { 452 const row = jQuery(this).closest('.rbfw-resource-item'); 453 const input = row.find('.rbfw_muiti_items_qty'); 454 const max = parseInt(input.attr('max')) || 100; 455 let value = parseInt(input.val()) || 0; 456 if (value < max) { 457 input.val(value + 1).trigger('input'); 458 } 459 460}); 461 462 // Handle minus button
463jQuery(document).on('click', '.rbfw_multi_items_qty_minus', function () { 464 const row = jQuery(this).closest('.rbfw-resource-item'); 465 const input = row.find('.rbfw_muiti_items_qty'); 466 let value = parseInt(input.val()) || 0; 467 if (value > 0) { 468 input.val(value - 1).trigger('input'); 469 } 470}); 471 472 // Initial calculation on page load 473 474// Checkbox change 475jQuery(document).on('change', '.rbfw_service_price_data', function() { 476 let itemClass = '.rbfw_service_quantity.item_' + jQuery(this).data('item'); 477 if (jQuery(this).is(':checked')) { 478 jQuery(itemClass).show(); 479 } else { 480 jQuery(itemClass).hide(); 481 } 482 calculateTotalSingleItem(); 483}); 484 485// Quantity change 486jQuery(document).on('input change', '.rbfw_service_qty', function() { 487 calculateTotalSingleItem(); 488}); 489 490// Plus button 491jQuery(document).on('click', '.rbfw_service_quantity_plus', function(e) { 492 e.preventDefault(); 493 let input = jQuery(this).siblings('input'); 494 let val = parseInt(input.val()) || 0; 495 let max = parseInt(input.attr('max')) || 9999; 496 if (val < max) { 497 input.val(val + 1).trigger('change'); 498 } 499}); 500 501// Minus button 502jQuery(document).on('click', '.rbfw_service_quantity_minus', function(e) { 503 e.preventDefault(); 504 let input = jQuery(this).siblings('input'); 505 let val = parseInt(input.val()) || 0; 506 let min = parseInt(input.attr('min')) || 0; 507 if (val > min) { 508 input.val(val - 1).trigger('change'); 509 } 510}); 511 512 513 514 515// Checkbox toggle 516jQuery(document).on('change', '.rbfw-resource-price', function() { 517 let inputBox = jQuery(this).closest('tr').find('.rbfw_bikecarmd_es_input_box'); 518 519 if (jQuery(this).is(':checked')) { 520 inputBox.show(); 521 } else { 522 inputBox.hide(); 523 } 524 525 var $checkbox = jQuery(this); 526 var $qtyInput = jQuery('.rbfw_bikecarmd_es_qty[data-name="' + $checkbox.data('name') + '"]'); 527 528 if ($checkbox.is(':checked')) { 529 $qtyInput.val(1); // Set value to 1 when checked 530 } else { 531 $qtyInput.val(0); // Optional: reset to 0 when unchecked 532 } 533 534 calculateTotalExtraService(); 535}); 536 537 538 539 540// Quantity changes 541jQuery(document).on('input change', '.rbfw_bikecarmd_es_qty', function() { 542 calculateTotalExtraService(); 543}); 544 545// Plus button click 546jQuery(document).on('click', '.rbfw_bikecarmd_es_qty_plus', function(e) { 547 e.preventDefault(); 548 let input = jQuery(this).siblings('input'); 549 console.log('input',input); 550 let val = parseInt(input.val()) || 0; 551 let max = parseInt(input.attr('max')) || 9999; 552 if (val < max) { 553 input.val(val + 1).trigger('change'); 554 } 555}); 556 557// Minus button click 558jQuery(document).on('click', '.rbfw_bikecarmd_es_qty_minus', function(e) { 559 e.preventDefault(); 560 let input = jQuery(this).siblings('input'); 561 let val = parseInt(input.val()) || 0; 562 let min = parseInt(input.attr('min')) || 0; 563 if (val > min) { 564 input.val(val - 1).trigger('change'); 565 } 566}); 567 568 569 570jQuery(document).on('input', '.rbfw_muiti_items_additional_service_qty', function () { 571 let $input = jQuery(this); 572 let val = parseInt($input.val()) || 0; 573 const max = parseInt($input.attr('max')); 574 if (val > max) { 575 val = max; 576 jQuery(this).val(val); // Set it back to max 577 } 578 calculateAdditional(true); 579}); 580 581// Handle plus button 582jQuery(document).on('click', '.rbfw_additional_service_qty_plus', function () { 583 const row = jQuery(this).closest('.service-price-item'); 584 const input = row.find('.rbfw_muiti_items_additional_service_qty'); 585 const max = parseInt(input.attr('max')) || 100; 586 let value = parseInt(input.val()) || 0; 587 if (value < max) { 588 input.val(value + 1).trigger('input'); 589 } 590 calculateAdditional(true); 591}); 592 593// Handle minus button 594jQuery(document).on('click', '.rbfw_additional_service_qty_minus', function () { 595 596 const row = jQuery(this).closest('.service-price-item'); 597 const input = row.find('.rbfw_muiti_items_additional_service_qty'); 598 let value1 = parseInt(input.val()) || 0; 599 600 if (value1 > 0) { 601 input.val(value1 -1).trigger('input'); 602 } 603 calculateAdditional(true); 604}); 605 606// Initial calculation on page load 607 608 609 610jQuery(document).on('change', '.rbfw-management-price', function() { 611 612 if (jQuery(this).hasClass('rbfw-fee-required')) { 613 jQuery(this).prop('checked', true); 614 e.preventDefault(); // prevent change 615 } 616 617 618 var $checkbox = jQuery(this); 619 var $parent = $checkbox.closest('.rbfw-checkbox'); // find the parent container 620 var $managementQty = $parent.find('.rbfw-management-qty'); // hidden input to set yes/no 621 622 if ($checkbox.is(':checked')) { 623 $managementQty.val('yes'); // Mark as selected 624 } else { 625 $managementQty.val('no'); // Mark as not selected 626 } 627 628 calculateTotalManagementPrice(); 629}); 630 631 632 633function rbfw_multi_items_ajax_price_calculation(){ 634 635 let post_id = jQuery('[data-service-id]').data('service-id'); 636 let date_format = jQuery('#wp_date_format').val(); 637 let rbfw_available_time = jQuery('#rbfw_available_time').val(); 638 let rbfw_duration_price = jQuery('#rbfw_duration_price').val(); 639 let rbfw_service_category_price = jQuery('#rbfw_service_category_price').val(); 640 let pickup_date = jQuery('#pickup_date').val(); 641 let pickup_time = jQuery('#pickup_time').find(':selected').val(); 642 let durationType = jQuery('#durationType').val();
643 let durationQty = jQuery('#durationQty').val(); 644 645 if(pickup_date == ''){ 646 return false; 647 } 648 649 jQuery.ajax({ 650 type: 'POST', 651 dataType: 'json', 652 url: rbfw_ajax_front.rbfw_ajaxurl, 653 data: { 654 'action' : 'rbfw_multi_items_ajax_price_calculation', 655 'post_id': post_id, 656 'date_format': date_format, 657 'pickup_date': pickup_date, 658 'pickup_time': pickup_time, 659 'durationType': durationType, 660 'durationQty': durationQty, 661 'rbfw_duration_price': rbfw_duration_price, 662 'rbfw_service_category_price': rbfw_service_category_price, 663 'rbfw_available_time': rbfw_available_time, 664 'nonce' : rbfw_ajax_front.nonce_multi_items_ajax_price_calculation 665 }, 666 beforeSend: function() { 667 jQuery('.rbfw_multi_items_wrapper_inner').addClass('rbfw_loader_in'); 668 jQuery('.rbfw_multi_items_wrapper_inner').append('<i class="fas fa-spinner fa-spin"></i>'); 669 }, 670 success: function (response) { 671 jQuery('.rbfw_multi_items_wrapper_inner').removeClass('rbfw_loader_in'); 672 jQuery('.rbfw_multi_items_wrapper_inner i.fa-spinner').remove(); 673 674 jQuery('[name="total_days"]').val(response.total_days); 675 676 //alert(response.rbfw_management_price_html); 677 678 let rbfw_management_price = 0; 679 jQuery('.rbfw-management-price:checked').each(function() { 680 let price_type = jQuery(this).data('price_type'); 681 let price = parseFloat(jQuery(this).data('price')) || 0; 682 if(price_type == 'percentage'){ 683 let sub_total_price = response.duration_price_number + response.service_cost; 684 rbfw_management_price += ( price/100 ) * sub_total_price; 685 }else{ 686 rbfw_management_price += price; 687 } 688 }); 689 690 691 692 693 694 695 696 jQuery('.management-costing .price-figure').text( wc_price_rbfw(rbfw_management_price)); 697 698 699 jQuery('.resource-costing .price-figure').html(response.service_cost_html); 700 701 702 jQuery('.subtotal .price-figure').html(response.sub_total_price_html); 703 704 jQuery('.rbfw_pricing_applied').hide(); 705 706 707 if(response.duration_price_number){ 708 jQuery('.duration-costing').show(); 709 jQuery('.duration-costing .price-figure').html(response.duration_price_html); 710 }else{ 711 jQuery('.duration-costing').hide(); 712 } 713 714 if(response.security_deposit_amount){ 715 jQuery('.security_deposit').show(); 716 jQuery('.security_deposit span').html(response.security_deposit_desc); 717 }else{ 718 jQuery('.security_deposit').hide(); 719 } 720 721 jQuery('.total .price-figure').text( wc_price_rbfw(rbfw_management_price + response.total_price)); 722 723 jQuery('.rbfw-duration').show(); 724 jQuery('.rbfw-duration .item-content').html(response.total_duration); 725 jQuery('.rbfw-duration .rbfw_duration_md').val(response.total_duration); 726 727 728 jQuery('.rbfw_quantity_md').show(); 729 730 jQuery('.rbfw-variations-content-wrapper').show(); 731 jQuery('.rbfw_resourse_md').show(); 732 jQuery('.rbfw_bikecarmd_price_result').show(); 733 jQuery('.rbfw_reg_form_rb').show(); 734 735 /*multiple service price day wise*/ 736 jQuery(".service-price-item").each(function(index, value) { 737 if(response.max_available_qty.service_stock[index]==0){ 738 jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out"); 739 jQuery(this).find(".rbfw-checkbox").hide(); 740 jQuery(this).find(".rbfw_service_price_data").data('quantity',0); 741 }else{ 742 jQuery(this).find(".rbfw-sold-out").hide().removeClass("rbfw_sold_out"); 743 jQuery(this).find(".rbfw-checkbox").show(); 744 } 745 if(response.max_available_qty.service_stock[index]==0){ 746 jQuery(this).find(".rbfw_muiti_items_additional_service_qty").attr('value',response.max_available_qty.service_stock[index]); 747 } 748 jQuery(this).find(".rbfw_muiti_items_additional_service_qty").attr('max',response.max_available_qty.service_stock[index]); 749 750 }); 751 752 /*extra service */ 753 754 jQuery(".rbfw_muiti_items_qty").each(function(index, value) { 755 if(response.max_available_qty.extra_service_instock[index]==0){ 756 jQuery(this).val(0); 757 } 758 jQuery(this).attr('max',response.max_available_qty.extra_service_instock[index]); 759 }); 760 761 calculateAdditional(true); 762 763 764 }, 765 error : function(response){ 766 console.log(response); 767 } 768 }); 769} 770 771function calculateAdditional() { 772 let additional_price = 0; 773 jQuery('.rbfw_muiti_items_additional_service_qty').each(function () { 774 const price = parseFloat(jQuery(this).data('price')) || 0; 775 const service_price_type = jQuery(this).data('service_price_type'); 776 const quantity = jQuery(this).val() || 0; 777 if(service_price_type=='day_wise'){ 778 const rbfw_total_days = jQuery('#rbfw_total_days').val(); 779 additional_price += price * quantity * rbfw_total_days; 780 }else{ 781 additional_price += price * quantity; 782 } 783 }); 784 785 if(additional_price){ 786 jQuery('#AddonsPrice span').text(wc_price_rbfw(additional_price)); 787 jQuery('#AddonsPrice').show(); 788 }else{ 789 jQuery('#AddonsPrice').hide(); 790 } 791 792 jQuery('#rbfw_service_category_price').val(additional_price.toFixed(2)); 793
794 var sub_total_price = additional_price + parseInt(jQuery('#rbfw_management_price').val()) + parseInt(jQuery('#rbfw_duration_price').val()); 795 796 797 798 let rbfw_security_deposit_actual_amount = 0; 799 if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){ 800 let rbfw_security_deposit_amount = jQuery('#rbfw_security_deposit_amount').val(); 801 if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){ 802 rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price; 803 }else{ 804 rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount; 805 } 806 } 807 var total_price = sub_total_price + parseFloat(rbfw_security_deposit_actual_amount); 808 if(rbfw_security_deposit_actual_amount){ 809 jQuery('.security_deposit').show(); 810 jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount))); 811 } 812 813 814 jQuery('.subtotal .price-figure').text(wc_price_rbfw(sub_total_price)); 815 jQuery('.total .price-figure').text(wc_price_rbfw(total_price)); 816 817} 818 819function calculateTotalExtraService() { 820 let extra_service_price = 0; 821 822 // Loop through all checked services 823 jQuery('.rbfw-resource-price:checked').each(function() { 824 let price = parseFloat(jQuery(this).data('price')) || 0; 825 826 // Find the corresponding quantity input 827 let qtyInput = jQuery(this).closest('tr').find('.rbfw_bikecarmd_es_qty'); 828 let qty = parseInt(qtyInput.val()) || 1; 829 830 extra_service_price += price * qty; 831 }); 832 833 834 835 // Show total in a container with id="total_price" 836 var rbfw_service_price = jQuery('#rbfw_service_price').val(); 837 jQuery('#rbfw_es_service_price').val(extra_service_price.toFixed(2)); 838 839 var resourse_cost = parseFloat(rbfw_service_price) + parseFloat(extra_service_price); 840 841 jQuery('.resource-costing span').text(wc_price_rbfw(resourse_cost)); 842 843 let sub_total_price = resourse_cost + parseFloat(jQuery('#rbfw_duration_price').val()); 844 845 let rbfw_management_price = 0; 846 let quantity = parseFloat(jQuery('#rbfw_item_quantity_md').val()) || 1; 847 let total_days = parseFloat(jQuery('#rbfw_total_days').val()) || 1; 848 849 jQuery('.rbfw-management-price:checked').each(function() { 850 let price_type = jQuery(this).data('price_type'); 851 let price = parseFloat(jQuery(this).data('price')) || 0; 852 let frequency = jQuery(this).data('frequency'); 853 854 if (price_type === 'percentage') { 855 rbfw_management_price += ((price / 100) * sub_total_price); 856 } else { 857 if (frequency === 'one-time') { 858 rbfw_management_price += price * quantity; 859 } else { 860 rbfw_management_price += price * quantity * total_days; 861 } 862 } 863 }); 864 865 jQuery('#rbfw_management_price').val(rbfw_management_price.toFixed(2)); 866 jQuery('.management-costing span').text(wc_price_rbfw(rbfw_management_price)); 867 868 869 870 let rbfw_security_deposit_actual_amount = 0; 871 if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){ 872 let rbfw_security_deposit_amount = jQuery('#rbfw_security_deposit_amount').val(); 873 if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){ 874 rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price; 875 }else{ 876 rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount; 877 } 878 } 879 880 881 var total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount); 882 jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount))); 883 884 885 jQuery('.subtotal .price-figure').html(wc_price_rbfw(sub_total_price)); 886 jQuery('.total .price-figure').html(wc_price_rbfw(total_price)); 887 888} 889 890function calculateTotalManagementPrice() { 891 892 893 let rbfw_duration_price = parseFloat(jQuery('#rbfw_duration_price').val()) || 0; 894 let rbfw_service_price = parseFloat(jQuery('#rbfw_service_price').val()) || 0; 895 let extra_service_price = parseFloat(jQuery('#rbfw_es_service_price').val()) || 0; 896 let quantity = parseFloat(jQuery('#rbfw_item_quantity_md').val()) || 1; 897 let total_days = parseFloat(jQuery('#rbfw_total_days').val()) || 1; 898 899 let sub_total_price = rbfw_duration_price + rbfw_service_price + extra_service_price; 900 901 let rbfw_management_price = fee_management(sub_total_price,total_days,quantity); 902 903 904 jQuery('#rbfw_management_price').val(rbfw_management_price.toFixed(2)); 905 jQuery('.management-costing span').text(wc_price_rbfw(rbfw_management_price)); 906 907 let rbfw_security_deposit_actual_amount = 0; 908 909 if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){ 910 let rbfw_security_deposit_amount = jQuery('#rbfw_security_deposit_amount').val(); 911 if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){ 912 rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price; 913 }else{ 914 rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount; 915 } 916 } 917 918 let total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount); 919 920 921 922 jQuery('.security_deposit span').html(wc_price_rbfw(rbfw_security_deposit_actual_amount)); 923 jQuery('.subtotal .price-figure').html(wc_price_rbfw(sub_total_price)); 924 jQuery('.total .price-figure').html(wc_price_rbfw(total_price)); 925 926} 927 928function calculateTotalSingleItem() { 929 let service_price = 0; 930 931 // Loop through all checked services 932 jQuery('.rbfw_service_price_data:checked').each(function() { 933 let price = parseFloat(jQuery(this).data('price')) || 0; 934 let qtyInput = jQuery('input[name="' + jQuery(this).attr('name').replace('[main_cat_name]', '[quantity]') + '"]'); 935 let service_price_type = jQuery(this).data('service_price_type'); 936 let qty = parseInt(qtyInput.val()) || 1; 937 938 939 if(service_price_type=='day_wise'){ 940 const rbfw_total_days = jQuery('#rbfw_total_days').val(); 941 service_price += price * qty * rbfw_total_days; 942 }else{ 943 service_price += price * qty; 944 } 945 946 }); 947 948 949 950 951 952 // Show total in an element with id="total_price" 953 jQuery('#rbfw_service_price').val(service_price.toFixed(2)); 954
955 var resourse_cost = service_price + parseInt(jQuery('#rbfw_es_service_price').val()); 956 957 jQuery('.resource-costing span').text(wc_price_rbfw(resourse_cost)); 958 959 var sub_total_price = resourse_cost + parseFloat(jQuery('#rbfw_duration_price').val()); 960 961 let rbfw_management_price = 0; 962 let quantity = parseFloat(jQuery('#rbfw_item_quantity_md').val()) || 1; 963 let total_days = parseFloat(jQuery('#rbfw_total_days').val()) || 1; 964 965 jQuery('.rbfw-management-price:checked').each(function() { 966 let price_type = jQuery(this).data('price_type'); 967 let price = parseFloat(jQuery(this).data('price')) || 0; 968 let frequency = jQuery(this).data('frequency'); 969 970 if (price_type === 'percentage') { 971 rbfw_management_price += ((price / 100) * sub_total_price); 972 } else { 973 if (frequency === 'one-time') { 974 rbfw_management_price += price * quantity; 975 } else { 976 rbfw_management_price += price * quantity * total_days; 977 } 978 } 979 }); 980 981 jQuery('#rbfw_management_price').val(rbfw_management_price.toFixed(2)); 982 jQuery('.management-costing span').text(wc_price_rbfw(rbfw_management_price)); 983 984 985 let rbfw_security_deposit_actual_amount = 0; 986 if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){ 987 let rbfw_security_deposit_amount = jQuery('#rbfw_security_deposit_amount').val(); 988 if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){ 989 rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price; 990 }else{ 991 rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount; 992 } 993 } 994 var total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount); 995 jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount))); 996 997 jQuery('.subtotal .price-figure').html(wc_price_rbfw(sub_total_price)); 998 jQuery('.total .price-figure').html(wc_price_rbfw(total_price)); 999 1000} 1001 1002 1003function calculateTotalMultipleItems(only_calculation=false) { 1004 1005 var durationType = jQuery('#durationType').val();
1006 var durationQty = parseInt(jQuery('#durationQty').val()) || 1; 1007 var item_total_price = 0; 1008 jQuery('.rbfw_muiti_items_qty').each(function () { 1009 var $qtyInput = jQuery(this); 1010 var pricePerUnit = parseFloat($qtyInput.data('price-' + durationType)) || 0; 1011 var quantity = parseInt($qtyInput.val()) || 0; 1012 1013 var itemTotal = pricePerUnit * quantity * durationQty; 1014 $qtyInput 1015 .closest('.rbfw_qty_input') 1016 .find('.rbfw_item_peice') 1017 .val(pricePerUnit.toFixed(2)); 1018 1019 item_total_price += itemTotal; 1020 }); 1021 1022 1023 if(item_total_price){ 1024 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false); 1025 jQuery('.multi-service-category-section').show(); 1026 }else{ 1027 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true); 1028 jQuery('.multi-service-category-section').hide(); 1029 } 1030 1031 1032 jQuery('#rbfw_duration_price').val(item_total_price.toFixed(2)); 1033 1034 var sub_total_price = item_total_price + parseInt(jQuery('#rbfw_service_category_price').val()); 1035 1036 let rbfw_management_price = fee_management(sub_total_price,1,1); 1037 1038 1039 1040 if(only_calculation){ 1041 1042 let rbfw_security_deposit_actual_amount = 0; 1043 if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){ 1044 let rbfw_security_deposit_amount = jQuery('#rbfw_security_deposit_amount').val(); 1045 if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){ 1046 rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price; 1047 }else{ 1048 rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount; 1049 } 1050 } 1051 var total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount); 1052 1053 if(rbfw_security_deposit_actual_amount){ 1054 jQuery('.security_deposit').show(); 1055 jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount))); 1056 } 1057 1058 jQuery('.subtotal .price-figure').text(wc_price_rbfw(sub_total_price)); 1059 jQuery('.total .price-figure').text(wc_price_rbfw(total_price)); 1060 1061 1062 }else{ 1063 rbfw_multi_items_ajax_price_calculation(); 1064 } 1065} 1066 1067/** 1068 * Refresh calendar to apply enhanced inventory checking after return date selection 1069 */ 1070function rbfw_refresh_calendar_with_inventory_check() { 1071 // Small delay to ensure the return date is properly set 1072 setTimeout(function() { 1073 var pickup_date = jQuery('[name="rbfw_pickup_start_date"]').val(); 1074 var return_date = jQuery('[name="rbfw_pickup_end_date"]').val(); 1075 1076 if(pickup_date && return_date) { 1077 // Refresh the datepicker to trigger beforeShowDay callback 1078 jQuery('.pickup_date').datepicker('refresh'); 1079 jQuery('.dropoff_date').datepicker('refresh'); 1080 1081 // Also update any other calendar instances that might exist 1082 jQuery('.pickup_date_search').datepicker('refresh'); 1083 jQuery('.dropoff_date_search').datepicker('refresh'); 1084 1085 console.log('Calendar refreshed with enhanced inventory checking for range:', pickup_date, 'to', return_date); 1086 } 1087 }, 100); 1088} 1089 1090/** 1091 * Enhanced beforeShowDay callback for pickup date - just use normal logic 1092 */ 1093function rbfw_enhanced_pickup_beforeShowDay(date) { 1094 // For pickup dates, use normal inventory checking 1095 return rbfw_off_day_dates(date, 'md', rbfw_js_variables.rbfw_today_booking_enable, false); 1096} 1097 1098 1099 1100function rbfw_bikecarmd_ajax_price_calculation(stock_no_effect){ 1101 1102 1103 let post_id = jQuery('[data-service-id]').data('service-id'); 1104 let date_format = jQuery('#wp_date_format').val(); 1105 let pickup_date = jQuery('#hidden_pickup_date').val(); 1106 let dropoff_date = jQuery('#hidden_dropoff_date').val(); 1107 let rbfw_available_time = jQuery('#rbfw_available_time').val(); 1108 let pickup_time = jQuery('.pickup_time').find(':selected').val(); 1109 let dropoff_time = jQuery('.dropoff_time').find(':selected').val(); 1110 1111 let item_quantity = jQuery('#rbfw_item_quantity_md').find(':selected').val(); 1112 let rbfw_enable_variations = jQuery('#rbfw_enable_variations').val(); 1113 1114 var rbfw_input_stock_quantity = jQuery('#rbfw_input_stock_quantity').val(); 1115 1116 if(typeof item_quantity === "undefined"){ 1117 item_quantity = jQuery("[name='rbfw_item_quantity']").val(); 1118 } 1119 1120 let rbfw_service_price = jQuery('#rbfw_service_price').val(); 1121 let rbfw_es_service_price = jQuery('#rbfw_es_service_price').val(); 1122 1123 let rbfw_management_price = jQuery('#rbfw_management_price').val(); 1124 1125 let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val(); 1126 1127 if(pickup_date == '' || dropoff_date == ''){ 1128 return false;
1129 } 1130 1131 jQuery.ajax({ 1132 type: 'POST', 1133 dataType: 'json', 1134 url: rbfw_ajax_front.rbfw_ajaxurl, 1135 data: { 1136 'action' : 'rbfw_bikecarmd_ajax_price_calculation', 1137 'post_id': post_id, 1138 'date_format': date_format, 1139 'pickup_date': pickup_date, 1140 'pickup_time': pickup_time, 1141 'dropoff_date': dropoff_date, 1142 'dropoff_time': dropoff_time, 1143 'item_quantity': item_quantity, 1144 'rbfw_service_price': rbfw_service_price, 1145 'rbfw_enable_variations': rbfw_enable_variations, 1146 'rbfw_es_service_price': rbfw_es_service_price, 1147 'rbfw_management_price': rbfw_management_price, 1148 'rbfw_available_time': rbfw_available_time, 1149 'rbfw_enable_time_slot': rbfw_enable_time_slot, 1150 'nonce' : rbfw_ajax_front.nonce_bikecarmd_ajax_price_calculation 1151 }, 1152 beforeSend: function() { 1153 jQuery('.rbfw_bike_car_md_item_wrapper').addClass('rbfw_loader_in'); 1154 jQuery('.rbfw_bike_car_md_item_wrapper').append('<i class="fas fa-spinner fa-spin"></i>'); 1155 }, 1156 success: function (response) { 1157 jQuery('.rbfw_bike_car_md_item_wrapper').removeClass('rbfw_loader_in'); 1158 jQuery('.rbfw_bike_car_md_item_wrapper i.fa-spinner').remove(); 1159 1160 jQuery('[name="total_days"]').val(response.total_days); 1161 1162 let rbfw_management_price = 0; 1163 jQuery('.rbfw-management-price:checked').each(function() { 1164 let price_type = jQuery(this).data('price_type'); 1165 let price = parseFloat(jQuery(this).data('price')) || 0; 1166 if(price_type == 'percentage'){ 1167 let sub_total_price = response.duration_price_number + response.service_cost; 1168 rbfw_management_price += ( price/100 ) * sub_total_price; 1169 }else{ 1170 let frequency = jQuery(this).data('frequency'); 1171 if(frequency == 'one-time' ){ 1172 rbfw_management_price += price * response.ticket_item_quantity; 1173 }else{ 1174 rbfw_management_price += price * response.ticket_item_quantity * response.total_days 1175 } 1176 } 1177 }); 1178 1179 1180 jQuery('.resource-costing .price-figure').html(response.service_cost_html); 1181 1182 jQuery('.management-costing .price-figure').text( wc_price_rbfw(rbfw_management_price)); 1183 1184 jQuery('.subtotal .price-figure').html(response.sub_total_price_html); 1185 1186 jQuery('.rbfw_pricing_applied').hide(); 1187 1188 if(response.pricing_applied != 'No'){ 1189 jQuery('.rbfw_pricing_applied.'+response.pricing_applied).show(); 1190 } 1191 1192 1193 if(response.duration_price_number){ 1194 jQuery('.duration-costing').show(); 1195 jQuery('.duration-costing .price-figure').html(response.duration_price_html); 1196 }else{ 1197 jQuery('.duration-costing').hide(); 1198 } 1199 1200 1201 if(response.discount){ 1202 jQuery('.discount').show(); 1203 jQuery('.discount span').html(response.discount_html); 1204 jQuery('.discount').show(); 1205 }else{ 1206 jQuery('.discount').hide(); 1207 } 1208 1209 if(response.security_deposit_amount){ 1210 jQuery('.security_deposit').show(); 1211 jQuery('.security_deposit span').html(response.security_deposit_desc); 1212 }else{ 1213 jQuery('.security_deposit').hide(); 1214 } 1215 1216 jQuery('.total .price-figure').text( wc_price_rbfw(rbfw_management_price + response.total_price)); 1217 jQuery('.rbfw-duration').show(); 1218 jQuery('.rbfw-duration .item-content').html(response.total_duration); 1219 jQuery('.rbfw-duration .item-price').html(response.duration_price_html); 1220 jQuery('.rbfw-duration .rbfw_duration_md').val(response.total_duration); 1221 jQuery('#rbfw_duration_price').val(response.duration_price); 1222 1223 1224 var remaining_stock = response.max_available_qty.remaining_stock; 1225 var ticket_item_quantity = response.ticket_item_quantity; 1226 1227 var quantity_options = ''; 1228 for (let i = 0; i <= remaining_stock; i++) { 1229 var selected = ''; 1230 if(ticket_item_quantity == i){ 1231 var selected = 'selected'; 1232 } 1233 if(i==0){ 1234 quantity_options += "<option "+selected+" value="+i+">Choose number of quantity</option>"; 1235 }else{ 1236 quantity_options += "<option "+selected+" value="+i+">
1236"+i+"</option>"; 1237 } 1238 } 1239 1240 jQuery('#rbfw_item_quantity_md').html(quantity_options); 1241 1242 1243 jQuery('.rbfw_quantity_md').show(); 1244 jQuery('.multi-service-category-section').show(); 1245 jQuery('.rbfw-variations-content-wrapper').show(); 1246 jQuery('.rbfw_resourse_md').show(); 1247 jQuery('.rbfw_bikecarmd_price_result').show(); 1248 jQuery('.rbfw_reg_form_rb').show(); 1249 1250 /*multiple service price day wise*/ 1251 jQuery(".service-price-item").each(function(index, value) { 1252 if(response.max_available_qty.service_stock[index]==0){ 1253 jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out"); 1254 jQuery(this).find(".rbfw-checkbox").hide(); 1255 jQuery(this).find(".rbfw_service_price_data").data('quantity',0); 1256 }else{ 1257 jQuery(this).find(".rbfw-sold-out").hide().removeClass("rbfw_sold_out"); 1258 jQuery(this).find(".rbfw-checkbox").show(); 1259 } 1260 if(response.max_available_qty.service_stock[index]==0){ 1261 jQuery(this).find(".rbfw_service_info_stock").attr('value',response.max_available_qty.service_stock[index]); 1262 } 1263 jQuery(this).find(".rbfw_service_info_stock").attr('max',response.max_available_qty.service_stock[index]); 1264 1265 jQuery(this).find(".remaining_stock").text('('+response.max_available_qty.service_stock[index]+')'); 1266 }); 1267 1268 /*extra service */ 1269 1270 jQuery(".rbfw_bikecarmd_es_qty").each(function(index, value) { 1271 if(response.max_available_qty.extra_service_instock[index]==0){ 1272 jQuery(this).val(0); 1273 } 1274 jQuery(this).attr('max',response.max_available_qty.extra_service_instock[index]); 1275 }); 1276 jQuery(".es_stock").each(function(index, value) { 1277 if(response.max_available_qty.extra_service_instock[index]==0){ 1278 jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out"); 1279 jQuery(this).find(".rbfw-checkbox").hide(); 1280 } 1281 jQuery(this).text(response.max_available_qty.extra_service_instock[index]); 1282 }); 1283 jQuery(".rbfw_bikecarmd_es_hidden_input_box").each(function(index, value) { 1284 if(response.max_available_qty.extra_service_instock[index]==0){ 1285 jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out"); 1286 jQuery(this).find(".rbfw-checkbox").hide(); 1287 }else{ 1288 jQuery(this).find(".rbfw-sold-out").hide().removeClass("rbfw_sold_out"); 1289 jQuery(this).find(".rbfw-checkbox").show(); 1290 } 1291 }); 1292 1293 1294 if(response.rbfw_enable_variations == 'yes'){ 1295 var total_variation_stock = 0; 1296 jQuery(".rbfw_variant").each(function(index, value) { 1297 var variant_text = jQuery(this).val(); 1298 if(response.max_available_qty.variant_instock[index]<response.ticket_item_quantity){ 1299 jQuery(this).attr("disabled", 'disabled'); 1300 jQuery(this).text(variant_text+' (stock out)' + ' available quantity: ' + response.max_available_qty.variant_instock[index]); 1301 if(jQuery(this).is(':selected')){ 1302 jQuery(this).removeAttr("selected"); 1303 } 1304 }else{ 1305 total_variation_stock = 1; 1306 jQuery(this).removeAttr("disabled"); 1307 jQuery(this).text(variant_text + ' (available quantity: ' +' '+ response.max_available_qty.variant_instock[index] +')'); 1308 } 1309 }); 1310 1311 if((total_variation_stock == 0)) { 1312 jQuery('.rbfw_nia_notice').remove(); 1313 jQuery('<div class="rbfw_nia_notice mps_alert_warning">' + rbfw_translation.no_items_available + '</div>').insertBefore(' button.rbfw_bikecarmd_book_now_btn'); 1314 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true); 1315 }else { 1316 jQuery('.rbfw_nia_notice').remove(); 1317 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false); 1318 } 1319 }else{ 1320 1321 if((rbfw_input_stock_quantity == 'no_has_value')) { 1322 jQuery('.rbfw_nia_notice').remove(); 1323 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false); 1324 }else{ 1325 if((response.max_available_qty.remaining_stock <= 0)) { 1326 jQuery('.rbfw_nia_notice').remove(); 1327 jQuery('<div class="rbfw_nia_notice mps_alert_warning">' + rbfw_translation.no_items_available + '</div>').insertBefore(' button.rbfw_bikecarmd_book_now_btn'); 1328 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true); 1329 } else { 1330 jQuery('.rbfw_nia_notice').remove(); 1331 jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false); 1332 } 1333 } 1334 } 1335 1336 }, 1337 error : function(response){ 1338 console.log(response); 1339 } 1340 }); 1341} 1342 1343 1344function rbfw_service_price_calculation(total_days){ 1345 jQuery(".rbfw_service_price_data").val(0); 1346 jQuery('.rbfw_service_quantity').css( "display", "none" ); 1347 jQuery('.available-stock').css('display','none'); 1348 var total = 0; 1349 jQuery(".rbfw_service_price_data:checked").each(function() { 1350 var item_no = jQuery(this).data('item'); 1351 jQuery(this).val(1); 1352 var service_price_type = jQuery(this).data('service_price_type'); 1353 var service_quantity = jQuery(this).data('quantity'); 1354 var rbfw_enable_md_type_item_qty = jQuery(this).data('rbfw_enable_md_type_item_qty'); 1355 if(rbfw_enable_md_type_item_qty=='yes'){ 1356 jQuery('.item_'+item_no).removeAttr('style'); 1357 jQuery('.available-stock'+'.item_'+item_no).css('display','block'); 1358 } 1359 if(service_price_type=='day_wise'){ 1360 total += jQuery(this).data('price')*service_quantity*total_days; 1361 }else{ 1362 total += jQuery(this).data('price')*service_quantity; 1363 } 1364 }); 1365 jQuery('#rbfw_service_price').val(total); 1366 rbfw_bikecarmd_ajax_price_calculation(); 1367} 1368 1369function wc_price_rbfw(price) { 1370 if(rbfw_js_variables.currency_format=='left'){ 1371 return rbfw_js_variables.currency + price.toFixed(rbfw_js_variables.price_decimals) 1372 }else{ 1373 return price.toFixed(rbfw_js_variables.price_decimals) + rbfw_js_variables.currency; 1374 } 1375} 1376 1377 1378 1379 1380 1381 1382
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.