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

519 lines
10 KiB
CSS

#rs-tooltip {
display: none;
position: absolute;
z-index: 99999999;
font-family: "Roboto";
font-size: 15px;
width: 270px;
background-color: #006dd2;
color: #FFF;
top: 0;
left: 0;
}
.rb-tooltips-active #rb_modal_underlay {
opacity: 0.5 !important;
display: block !important;
z-index: 999999 !important;
}
.rb-tooltips-active #rs-tooltip {
display: block;
}
#rs-tooltip-gotit {display: none;}
#rs-tooltip.tooltip-gotit #rs-tooltip-next {display: none;}
#rs-tooltip.tooltip-gotit #rs-tooltip-gotit {display: inline-block;}
#rs-tooltip:before {
content: "";
position: absolute;
}
#rs-tooltip.tip-bottom:before {
top: -10px;
left: 50%;
margin-left: -7px;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid #006dd2;
}
#rs-tooltip.tip-bottom-left:before {
top: -10px;
left: 100%;
margin-left: -46px;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid #006dd2;
}
#rs-tooltip.tip-bottom-right:before {
top: -10px;
left: 0;
margin-left: 46px;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid #006dd2;
}
#rs-tooltip.tip-top:before {
bottom: -10px;
left: 50%;
margin-left: -7px;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid #0051b2;
}
#rs-tooltip.tip-right:before {
left: -10px;
top: 50%;
margin-top: -7px;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-right: 10px solid #006dd2;
}
#rs-tooltip.tip-top-right:before {
left: -10px;
top: 10px;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-right: 10px solid #006dd2;
}
#rs-tooltip.tip-top-left:before {
right: -10px;
top: 10px;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 10px solid #006dd2;
}
#rs-tooltip.tip-left:before {
right: -10px;
top: 50%;
margin-top: -7px;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 10px solid #006dd2;
}
#rs-tooltip.tip-right-top:before {
bottom: -10px;
right: 20px;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid #0051b2;
}
#rs-tooltip-top {
padding: 26px 30px 30px 30px;
}
#rs-tooltip-bottom {
position: relative;
padding: 0 30px;
height: 40px;
background-color: #0051b2;
font-size: 13px;
}
#rs-tooltip-bottom div {
position: absolute;
top: 8px;
left: 30px;
}
.rs-tooltip-text {
display: block;
line-height: 20px;
}
.rs-tooltip-btn {
display: inline-block;
background-color: #1a7cd7;
padding: 9px 19px 7px 19px;
line-height: 15px;
border-radius: 3px;
cursor: pointer;
transition: opacity 0.2s ease;
margin-top: 25px;
margin-right: 10px;
transition: filter 0.3s ease-in-out;
}
.rs-tooltip-btn:hover {
filter: brightness(110%);
}
.rs-tooltip-check {
display: inline-block;
width: 15px;
height: 15px;
border: 1px solid rgba(255, 255, 255, 0.35);
border-radius: 2px;
margin-right: 10px;
position: relative;
top: 4px;
cursor: pointer;
transition: border 0.3s ease-in-out;
}
.rs-tooltip-check:hover {
border: 1px solid rgba(255, 255, 255, 0.75);
}
.rs-tooltip-btn i {
font-size: 17px;
margin-right: 10px;
}
.tip-clone {
transform: none !important;
margin: 0 !important;
position: absolute !important;
pointer-events: none !important;
z-index: 9999999 !important;
}
.tip-focussed {
box-shadow: 0 0 20px 5px #006dd2 !important;
}
.tooltip-hide-target {
visibility: hidden !important;
}
.tooltip-section {
display: none;
font-family: monospace;
font-size: 12px;
margin-bottom: 20px;
}
.toolbar_btn.tip-hover .add_layer,
.toolbar_btn.tip-hover .lockstep_main,
.toolbar_btn.tip-hover .visiblestep_main {position: relative !important}
.toolbar_btn.tip-hover .tool_dd_wrap { display: block; min-width: 100%;}
.toolbar_btn.tip-hover { color: #fff}
.toolbar_btn.tip-hover-text .add_layer[data-type="text"],
.toolbar_btn.tip-hover-image .add_layer[data-type="image"],
.toolbar_btn.tip-hover-video .add_layer[data-type="video"],
.toolbar_btn.tip-hover-audio #toolbar_add_layer_audio,
.toolbar_btn.tip-hover-shape #toolbar_add_layer_shape,
.toolbar_btn.tip-hover-button #toolbar_add_layer_button,
.toolbar_btn.tip-hover-object #toolbar_add_layer_object,
.toolbar_btn.tip-hover-row #toolbar_add_layer_row,
.toolbar_btn.tip-hover-group #toolbar_add_layer_group,
.toolbar_btn.tip-hover-layerlibrary #add_from_layerlibrary,
.toolbar_btn.tip-hover-importlayer #import_layers,
.toolbar_btn.tip-hover-duplicate #do_duplicate_layer,
.toolbar_btn.tip-hover-copy #do_copy_layer,
.toolbar_btn.tip-hover-paste #do_paste_layer,
.toolbar_btn.tip-hover-lock #toggle_lock_layer,
.toolbar_btn.tip-hover-unlock #unlock_all_layer,
.toolbar_btn.tip-hover-setallvisible #visible_all_layer,
.toolbar_btn.tip-hover-showhide #toggle_visible_layer,
.toolbar_btn.tip-hover-highlightboxes #hide_highlight_boxes,
.toolbar_btn.tip-hover:not(.tip-hover-staticlayers) #newslide,
.toolbar_btn.tip-hover-staticlayers .do_not_sort_slide_list_element {background: #3f444a !important; z-index: 99999}
.toolbar_btn.tip-hover:not(.tip-hover-slideorder) #newslide:after,
.toolbar_btn.tip-hover-staticlayers .do_not_sort_slide_list_element:after,
.toolbar_btn.tip-hover-slideorder .slide_list_element.selected:after,
.tip-hover-text #toolbar_add_layer_text:after,
.tip-hover-image #toolbar_add_layer_image:after,
.tip-hover-button #toolbar_add_layer_button:after,
.tip-hover-shape #toolbar_add_layer_shape:after,
.tip-hover-video #toolbar_add_layer_video:after,
.tip-hover-audio #toolbar_add_layer_audio:after,
.tip-hover-object #toolbar_add_layer_object:after,
.tip-hover-row #toolbar_add_layer_row:after,
.tip-hover-group #toolbar_add_layer_group:after,
.tip-hover-layerlibrary #add_from_layerlibrary:after,
.tip-hover-importlayer #import_layers:after,
.tip-hover-lock #toggle_lock_layer:after,
.tip-hover-unlock #unlock_all_layer:after,
.tip-hover-setallvisible #visible_all_layer:after,
.tip-hover-showhide #toggle_visible_layer:after,
.tip-hover-highlightboxes #hide_highlight_boxes:after,
.layertoolbar_wrap .toolbar_btn.tip-hover-duplicate #do_duplicate_layer:after,
.layertoolbar_wrap .toolbar_btn.tip-hover-copy #do_copy_layer:after,
.layertoolbar_wrap .toolbar_btn.tip-hover-paste #do_paste_layer:after {
position: absolute;
bottom: -5px;
left: 65%;
margin-left: 10px;
width: 17px;
height: 22px;
background: url(../images/hand.png) no-repeat center center;
content: "";
z-index: 99999;
}
.toolbar_btn.tip-hover-slideorder .slide_list_element.selected:after {
width: 18px;
height: 18px;
background: url(../images/move.png) no-repeat center center;
background-size: 18px 18px;
bottom: 3px;
}
.toolbar_btn.tip-hover-staticlayers #newslide:after {display: none}
.rb-tooltips-active .do_title_layer_icon,
.rb-tooltips-active .do_title_slide_icon {
color: #006dd2;
font-size: 17px;
margin-right: 10px;
line-height: 51px !important;
}
.rb-tooltips-active .form_collector .form_inner {
display: block !important;
padding: 0px;
position: relative;
margin-bottom: 1px;
}
.rb-tooltips-active .form_inner {
background: #323438;
}
.rb-tooltips-active .form_collector .form_inner .collapsable {
padding: 20px;
display: none;
position: relative;
}
.rb-tooltips-active .tponoffwrap.off .tponoff_inner,
.rb-tooltips-active .tponoffwrap.off .tponoff_inner,
.rb-tooltips-active .tponoffwrap.off .tponoff_inner {
transform: translateX(0px);
}
.rb-tooltips-active .formcontainer,
.rb-tooltips-active .formcontainer {
width: 320px;
}
.rb-tooltips-active .form_collector,
.rb-tooltips-active .formcontainer {
width: 320px;
}
.rb-tooltips-active .form_collector .form_menu_level_1 {
display: none !important;
}
.rb-tooltips-active .showhide_hidden,
.rb-tooltips-active .showhide_hidden.form_inner,
.rb-tooltips-active .form_collector .showhide_hidden.form_inner {
display: none !important;
}
.rb-tooltips-active .form_collector .form_inner.open .collapsable {
display: block;
}
.rb-tooltips-active .form_collector .form_inner .collapsable {
display: none;
}
.rb-tooltips-active .form_collector .collapsable {
position: relative;
}
.rb-tooltips-active .tip-clone .collapsable {
padding: 20px;
}
.rb-tooltips-active .tooltip-save-preview {
z-index: 9999999 !important;
pointer-events: none !important;
}
.rb-tooltips-active .tooltip-save-preview:after {
background-color: rgb(50, 52, 56, 0.5);
width: 160px;
height: 50px;
position: absolute;
top: 0;
left: 0;
content: "";
}
.rb-tooltip-timeline .basic_action_button {
background: transparent;
border: none;
border-radius: 0px;
width: 30px;
text-align: center;
height: 35px;
line-height: 35px;
text-align: center;
color: #777c80;
text-transform: uppercase;
font-weight: 400;
font-size: 12px;
box-sizing: border-box;
margin: 0px;
padding: 0px;
}
.rb-tooltip-timeline .basic_action_button i {
font-size: 20px;
margin: 0px;
}
.tooltip-hide-preview-save .tooltip-save-preview {
display: none !important;
}
.rb-tooltips-active .layertoolbar_wrap .toolbar_btn i.material-icons.norightmargin {
margin-right: 0px !important;
}
.rb-tooltips-active #rb_tlw > #do_delete_layer.toolbar_btn .material-icons {
margin-right: 0 !important;
}
.tooltip-link {
display: none;
}
.rb-tooltips-active #rb_tlw > .tip-clone longoption {
width: 280px !important;
}
#rs-tooltip-next {position: relative; padding-right: 50px}
#rs-tooltip-close {position: absolute; top: 0; right: 0; width: 30px; height: 30px; cursor: pointer; color: #FFF; z-index: 99}
#rs-tooltip-close i {position: absolute; top: 7px; left: 7px; font-size: 16px}
#rs-tooltip-close:hover {opacity: 0.4}
.rs-tooltip-return-icon {
width: 16px;
height: 16px;
display: inline-block;
background-size: 16px 16px;
background-image: url(../images/return.png);
background-repeat: no-repeat;
position: absolute;
right: 7px;
top: 7px;
}
body.rtl .rs-tooltip-btn i { margin-left: 10px; margin-right: 0px }
body.rtl .rs-tooltip-check { margin-left: 10px; margin-right: 0px }