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
15 KiB
CSS

.dialog-widget-content{background-color:var(--e-a-bg-default);position:absolute;border-radius:3px;box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{line-height:1.5;box-sizing:border-box}.dialog-close-button{cursor:pointer;position:absolute;margin-block-start:15px;inset-inline-end:15px;color:var(--e-a-color-txt);font-size:15px;line-height:1;transition:var(--e-a-transition-hover)}.dialog-close-button:hover{color:var(--e-a-color-txt-hover)}.dialog-prevent-scroll{overflow:hidden;max-height:100vh}.dialog-type-lightbox{position:fixed;height:100%;width:100%;bottom:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;user-select:none}.elementor-editor-active .elementor-popup-modal{background-color:initial}.dialog-type-alert .dialog-widget-content,.dialog-type-confirm .dialog-widget-content{margin:auto;width:400px;padding:20px}.dialog-type-alert .dialog-header,.dialog-type-confirm .dialog-header{font-size:15px;font-weight:500}.dialog-type-alert .dialog-header:after,.dialog-type-confirm .dialog-header:after{content:"";display:block;border-block-end:var(--e-a-border);padding-block-end:10px;margin-block-end:10px;margin-inline-start:-20px;margin-inline-end:-20px}.dialog-type-alert .dialog-message,.dialog-type-confirm .dialog-message{min-height:50px}.dialog-type-alert .dialog-buttons-wrapper,.dialog-type-confirm .dialog-buttons-wrapper{padding-block-start:10px;display:flex;justify-content:flex-end;gap:15px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button{font-size:12px;font-weight:500;line-height:1.2;padding:8px 16px;outline:none;border:none;border-radius:var(--e-a-border-radius);background-color:var(--e-a-btn-bg);color:var(--e-a-btn-color-invert);transition:var(--e-a-transition-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{border:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover{background-color:var(--e-a-btn-bg-hover);color:var(--e-a-btn-color-invert)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:active{background-color:var(--e-a-btn-bg-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not([disabled]),.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not([disabled]){cursor:pointer}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:disabled{background-color:var(--e-a-btn-bg-disabled);color:var(--e-a-btn-color-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:not(.elementor-button-state) .elementor-state-icon{display:none}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt{background:transparent;color:var(--e-a-color-txt)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel:disabled,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt-border,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt-border{border:1px solid var(--e-a-color-txt-muted)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success{background-color:var(--e-a-btn-bg-success)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-success:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-success:hover{background-color:var(--e-a-btn-bg-success-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary{background-color:var(--e-a-btn-bg-primary);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary:hover{background-color:var(--e-a-btn-bg-primary-hover);color:var(--e-a-btn-color)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt{background:transparent;color:var(--e-a-color-primary-bold)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-cancel.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.dialog-ok.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-ok:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-btn-txt.dialog-take_over:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.dialog-cancel:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-primary.e-btn-txt:hover{background:var(--e-a-bg-primary)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro{background-color:var(--e-a-btn-bg-accent)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:hover{background-color:var(--e-a-btn-bg-accent-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.go-pro:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-accent:active,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.go-pro:active{background-color:var(--e-a-btn-bg-accent-active)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info{background-color:var(--e-a-btn-bg-info)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-info:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-info:hover{background-color:var(--e-a-btn-bg-info-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning{background-color:var(--e-a-btn-bg-warning)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-warning:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-warning:hover{background-color:var(--e-a-btn-bg-warning-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger{background-color:var(--e-a-btn-bg-danger)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.e-danger:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button.elementor-button-danger:hover{background-color:var(--e-a-btn-bg-danger-hover)}.dialog-type-alert .dialog-buttons-wrapper .dialog-button i,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button i{margin-inline-end:5px}.dialog-type-alert .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-alert .dialog-buttons-wrapper .dialog-button:visited,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:focus,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:hover,.dialog-type-confirm .dialog-buttons-wrapper .dialog-button:visited{color:initial}