Files

10 lines
11 KiB
JavaScript
Raw Permalink Normal View History

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
/*!
* Dialogs Manager v4.9.3
* https://github.com/kobizz/dialogs-manager
*
* Copyright Kobi Zaltzberg
* Released under the MIT license
* https://github.com/kobizz/dialogs-manager/blob/master/LICENSE.txt
*/
!function(t,e){"use strict";var n={widgetsTypes:{},createWidgetType:function(e,i,o){o||(o=this.Widget);var s=function(){o.apply(this,arguments)},r=s.prototype=new o(e);return r.types=r.types.concat([e]),t.extend(r,i),r.constructor=s,s.extend=function(t,e){return n.createWidgetType(t,e,s)},s},addWidgetType:function(t,e,n){return e&&e.prototype instanceof this.Widget?this.widgetsTypes[t]=e:this.widgetsTypes[t]=this.createWidgetType(t,e,n)},getWidgetType:function(t){return this.widgetsTypes[t]}};n.Instance=function(){var e=this,i={},o={},s=function(e){t.extend(o,{classPrefix:"dialog",effects:{show:"fadeIn",hide:"fadeOut"}},e)};this.createWidget=function(t,i){var o=new(n.getWidgetType(t))(t);return i=i||{},o.init(e,i),o},this.getSettings=function(t){return t?o[t]:Object.create(o)},this.maybeLoadAssets=async function(){if(!!window.elementorFrontend?.utils?.assetsLoader)try{await elementorFrontend.utils.assetsLoader.load("style","dialog")}catch(t){console.error("Failed to load assets:",t)}},this.init=function(n){return this.maybeLoadAssets(),s(n),i.body=t("body"),e},e.init()},n.Widget=function(e){var i=this,o={},s={},r={},a=0,c=["refreshPosition"],u=function(t,e){var n=o.effects[t],i=r.widget;if("function"==typeof n)n.apply(i,e);else{if(!i[n])throw"Reference Error: The effect "+n+" not found";i[n].apply(i,e)}},d=function(e){if(!g(e)){if(o.hide.onClick){if(t(e.target).closest(o.selectors.preventClose).length)return}else if(e.target!==this)return;i.hide()}},l=function(e){g(e)||t(e.target).closest(r.widget).length||function(e){return!!o.hide.ignore&&!!t(e.target).closest(o.hide.ignore).length}(e)||i.hide()},f=function(){t.each(o,(function(t){var e=t.match(/^on([A-Z].*)/);e&&(e=e[1].charAt(0).toLowerCase()+e[1].slice(1),i.on(e,this))}))},g=function(t){return"click"===t.type&&2===t.button},h=function(t){27===t.which&&i.hide()},p=function(){var t=[r.window];r.iframe&&t.push(jQuery(r.iframe[0].contentWindow)),t.forEach((function(t){o.hide.onEscKeyPress&&t.off("keyup",h),o.hide.onOutsideClick&&t[0].removeEventListener("click",l,!0),o.hide.onOutsideContextMenu&&t[0].removeEventListener("contextmenu",l,!0),o.position.autoRefresh&&t.off("resize",i.refreshPosition)})),(o.hide.onClick||o.hide.onBackgroundClick)&&r.widget.off("click",d)};this.addElement=function(e,n,i){var s=r[e]=t(n||"<div>"),a=function(t){return t.replace(/([a-z])([A-Z])/g,(function(){return arguments[1]+"-"+arguments[2].toLowerCase()}))}(e);return i=i?i+" ":"",i+=o.classes.globalPrefix+"-"+a,i+=" "+o.classes.prefix+"-"+a,s.addClass(i),s},this.destroy=function(){return p(),r.widget.remove(),i.trigger("destroy"),i},this.getElements=function(t){return t?r[t]:r},this.getSettings=function(t){var e=Object.create(o);return t?e[t]:e},this.hide=function(){if(i.isVisible())return clearTimeout(a),u("hide",arguments),p(),o.preventScroll&&i.getElements("body").removeClass(o.classes.preventScroll),i.trigger("hide"),i},this.init=function(s,a){if(!(s instanceof n.Instance))throw"The "+i.widgetName+" must to be initialized from an instance of DialogsManager.Instance";var u;return u=c.concat(i.getClosureMethods()),t.each(u,(function(){var t=i[this];i[this]=function(){t.apply(i,arguments)}})),i.trigger("init",a),function(n,s){var r=t.extend(!0,{},n.getSettings());o={headerMessage:"",message:"",effects:r.effects,classes:{globalPrefix:r.classPrefix,prefix:r.classPrefix+"-"+e,preventScroll:r.classPrefix+"-prevent-scroll"},selectors:{preventClose:"."+r.classPrefix+"-prevent-close"},container:"body",preventScroll:!1,iframe:null,closeButton:!1,closeButtonOptions:{iconClass:r.classPrefix+"-close-button-icon",attributes:{role:"button",tabindex:0,"aria-label":"Close",href:"#"},iconElement:"<i>"},position:{element:"widget",my:"center",at:"center",enable:!0,autoRefresh:!1},hide:{auto:!1,autoDelay:5e3,onClick:!1,onOutsideClick:!0,onOutsideContextMenu:!1,onBackgroundClick:!0,onEscKeyPress:!0,ignore:""}},t.extend(!0,o,i.getDefaultSettings(),s),f()}(s,a),function(){if(i.addElement("widget"),i.addElement("header"),i.addElement("message"),i.addElement("window",window),i.addElement("body",document.body),i.