Files
Hotel Raxa Dev 5b1e2453c7 Hotel Raxa - Advanced Booking System Implementation
🏨 Hotel Booking Enhancements:
- Implemented Eagle Booking Advanced Pricing add-on
- Added Booking.com-style rate management system
- Created professional calendar interface for pricing
- Integrated deals and discounts functionality

💰 Advanced Pricing Features:
- Dynamic pricing models (per room, per person, per adult)
- Base rates, adult rates, and child rates management
- Length of stay discounts and early bird deals
- Mobile rates and secret deals implementation
- Seasonal promotions and flash sales

📅 Availability Management:
- Real-time availability tracking
- Stop sell and restriction controls
- Closed to arrival/departure functionality
- Minimum/maximum stay requirements
- Automatic sold-out management

💳 Payment Integration:
- Maintained Redsys payment gateway integration
- Seamless integration with existing Eagle Booking
- No modifications to core Eagle Booking plugin

🛠️ Technical Implementation:
- Custom database tables for advanced pricing
- WordPress hooks and filters integration
- AJAX-powered admin interface
- Data migration from existing Eagle Booking
- Professional calendar view for revenue management

📊 Admin Interface:
- Booking.com-style management dashboard
- Visual rate and availability calendar
- Bulk operations for date ranges
- Statistics and analytics dashboard
- Modal dialogs for quick editing

🔧 Code Quality:
- WordPress coding standards compliance
- Secure database operations with prepared statements
- Proper input validation and sanitization
- Error handling and logging
- Responsive admin interface

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-11 07:43:22 +02:00

1 line
10 KiB
JavaScript

!function(i){"use strict";i(document).ready(function(){var e=null;window.eb_search_filters=function(s=""){null!=e&&(e.abort(),e=null);var l=eb_js_settings.eagle_booking_date_format.toUpperCase(),v=i(eagle_booking_datepicker).data("daterangepicker").startDate.format(l),d=i(eagle_booking_datepicker).data("daterangepicker").endDate.format(l),a=i("#eb-no-search-results"),c=i(".eb-rooms");if(v&&d){i(".eb-rooms-list").remove(),a.remove();var n=i("#eagle_booking_guests").val(),t=i("#eagle_booking_adults").val(),r=i("#eagle_booking_children").val(),o=i("#eagle_booking_min_price").val(),_=i("#eagle_booking_max_price").val(),g=i("#eb_normal_services").val(),b=i("#eb_additional_services").val(),p=i("#eb_branch").val();void 0===p&&(p="");var h=i("#eagle_booking_search_sorting .selected a").attr("data-meta-key"),x=i("#eagle_booking_search_sorting .selected a").attr("data-order"),m=i(".rooms-view .active").attr("data-view"),f=s;if(void 0===h&&(h=""),void 0===x&&(x=""),"grid-view"===m)var k=i('<div class="eagle_booking_search_loader"><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div></div>');else k=i('<div class="eagle_booking_search_loader"><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div><div class="wrapper-cell"><div class="image-line"></div><div class="text-cell"><div class="text-line title-line"></div><div class="text-line"></div><div class="text-line"></div><div class="text-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div><div class="service-line"></div></div><div class="price-cell"><div class="price-line"></div><div class="night-line"></div><div class="button-line"></div></div></div></div>');i(".eagle_booking_search_loader").length||c.append(k),eb_update_fixed_sidebar(),e=i.ajax({url:eb_frontend_ajax.eb_search_filters_ajax,method:"GET",data:{action:"eb_search_filters_action",eb_search_filters_nonce:eb_frontend_ajax.eb_ajax_nonce,eagle_booking_paged:f,eagle_booking_checkin:v,eagle_booking_checkout:d,eagle_booking_guests:n,eagle_booking_adults:t,eagle_booking_children:r,eagle_booking_min_price:o,eagle_booking_max_price:_,eb_normal_services:g,eb_additional_services:b,eb_branch_id:p,eagle_booking_search_sorting_filter_meta_key:h,eagle_booking_search_sorting_filter_order:x,view:m},success:function(e){a.remove(),i(".eb-rooms").append(e),i.fn.popover&&i('[data-toggle="popover"]').popover({html:!0,offset:"0 10px"}),i(".eagle_booking_search_loader").remove(),i("html").animate({scrollTop:i("body").offset().top},300)},error:function(i,e,s){console.log(s)},complete:function(){var e=i("#eagle_booking_results_qnt").val();i("#results-number").text(e),eb_update_fixed_sidebar()}})}};var s=i("#eagle_booking_slider_range");if("after"===eb_js_settings.eb_currency_position)var l="",v=eb_js_settings.eb_currency;else l=eb_js_settings.eb_currency,v="";s.ionRangeSlider({type:"double",skin:"round",grid:!0,min:eb_js_settings.eagle_booking_price_range_min,max:eb_js_settings.eagle_booking_price_range_max,from:eb_js_settings.eagle_booking_price_range_default_min,to:eb_js_settings.eagle_booking_price_range_default_max,prefix:l,postfix:v,onFinish:function(e){i("#eagle_booking_min_price").val(e.from),i("#eagle_booking_max_price").val(e.to),eb_search_filters()},onUpdate:function(i){}}),i(".eb_normal_service").change(function(){if(i(this).is(":checked")){var e=i(this).val(),s=i("#eb_normal_services").val();i("#eb_normal_services").val(e+s),eb_search_filters()}else{e=i(this).val();var l=(s=i("#eb_normal_services").val()).replace(e,"");i("#eb_normal_services").val(l),eb_search_filters()}}),i(".eb_checkbox_additional_service").change(function(){if(i(this).is(":checked")){var e=i(this).val(),s=i("#eb_additional_services").val();i("#eb_additional_services").val(e+s),eb_search_filters()}else{e=i(this).val();var l=(s=i("#eb_additional_services").val()).replace(e,"");i("#eb_additional_services").val(l),eb_search_filters()}}),i(".eb-branch-filter").on("click",function(){i(".eb-branch-filter").not(this).removeClass("selected"),i(".eb-branch-filter").children('input[type="checkbox"]').not(this).prop("checked",!1),i(this).hasClass("selected")?(i(this).removeClass("selected"),i(this).children('input[type="checkbox"]').prop("checked",!1)):(i(this).addClass("selected"),i(this).children('input[type="checkbox"]').prop("checked",!0));var e=i(this).children('input[type="checkbox"]'),s=i("#eb_branch"),l=e.val();e.is(":checked")?s.val(l):(i(this).removeClass("selected"),s.val("")),eb_search_filters()}),i(document).on("click","#select-booking-dates",function(){i(window).scrollTop()>i("#search_form").offset().top?(i("html").animate({scrollTop:i("body").offset().top},300),setTimeout(function(){i("#eagle_booking_datepicker").focus()},300)):i("#eagle_booking_datepicker").focus()}),i("#eagle_booking_search_sorting li").on("click",function(){i("#eagle_booking_search_sorting li").removeClass("selected"),i(this).addClass("selected"),i("#eagle_booking_active_sorting").text(i(this).text()),eb_search_filters()}),i(".rooms-view .view-btn").on("click",function(){i(".rooms-view .view-btn").removeClass("active"),i(this).addClass("active"),i(this).hasClass("grid-btn")?i(".eb-rooms").addClass("grid-view"):i(".eb-rooms").removeClass("grid-view")}),i(document).on("click",".toggle-room-breakpoint",function(){i(this).closest(".room-list-item").find(".room-quick-details").toggleClass("open",200),i(this).toggleClass("open"),i(this).find("i").toggleClass("fa-angle-down fa-angle-up")}),i(document).on("click",".pagination-button",function(){var e=i(this).attr("data-pagination");eb_search_filters(e)})})}(jQuery);