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

2 lines
2.3 KiB
JavaScript

/*! For license information please see wp-media.js.LICENSE.txt */
!function(){"use strict";var e={react:function(e){e.exports=window.React},"@elementor/query":function(e){e.exports=window.elementorV2.query},"@elementor/utils":function(e){e.exports=window.elementorV2.utils}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};!function(){n.r(r),n.d(r,{useWpMediaAttachment:function(){return l},useWpMediaFrame:function(){return f}});var e=n("@elementor/query"),t=n("@elementor/utils"),o=n("react"),i=(0,t.createError)({code:"wp_media_not_available",message:"`wp.media` is not available, make sure the `media-models` handle is set in the dependencies array"}),u=window,a=()=>{if(!u.wp?.media)throw new i;return u.wp.media};function c(e){const{filesizeInBytes:t,filesizeHumanReadable:n,author:r,authorName:o,...i}=e;return{...i,filesize:{inBytes:t,humanReadable:n},author:{id:parseInt(r),name:o}}}function l(t){return(0,e.useQuery)({queryKey:["wp-attachment",t],queryFn:s,enabled:!!t})}async function s({queryKey:[,e]}){if(!e)return null;const t=a().attachment(e),n=t.toJSON();if("url"in n)return c(n);try{return c(await t.fetch())}catch(e){return null}}function f(e){const t=(0,o.useRef)();return(0,o.useEffect)((()=>()=>{d(t.current)}),[]),{open:(n={})=>{d(t.current),t.current=function({onSelect:e,multiple:t,types:n,selected:r,title:o,mode:i="browse"}){const u=a()({title:o,multiple:t,library:{type:n}}).on("open",(()=>{!function(e,t="browse"){e.content.mode(t)}(u,i),function(e,t){const n=("number"==typeof t?[t]:t)?.filter((e=>!!e)).map((e=>a().attachment(e)));e.state().get("selection").set(n||[])}(u,r)})).on("close",(()=>d(u))).on("insert select",(()=>function(e,t,n){const r=e.state().get("selection").toJSON().map(c);n(t?r:r[0])}(u,t,e)));return u}({...e,...n}),t.current?.open()}}}function d(e){e?.detach(),e?.remove()}}(),(window.elementorV2=window.elementorV2||{}).wpMedia=r}();