[2025-10-06 07:26:33] slim-app.INFO: Petition {"incoming":{"Method":"GET","api":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Route":"https://omnibees.clubsolaris.com/Omnibees/full_test?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Data":{"api_key":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du"}},"response":{"status":200,"type":"text/html; charset=UTF-8","body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Document</title>\n  \n  <style>\n    body {\n      background: #d5d2d2 !important;\n      font-family: Arial, sans-serif;\n    }\n    #rooms_list.disabled {\n      pointer-events: none;\n    }\n  </style>\n\n  <!-- You MUST include jQuery 3.4+ before Fomantic -->\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js\"></script>\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.4/semantic.min.css\">\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.4/semantic.min.js\"></script>\n\n  <script src=\"https://pfau-software.de/json-viewer/dist/iife/index.js\"></script>\n  <script>\n    function setActiveMenuItem() {\n      const path = window.location.hash;\n      const menuItems = document.querySelectorAll('.ui.menu .item');\n      menuItems.forEach(item => {\n        if (item.getAttribute('href') === path) {\n          item.classList.add('active');\n        } else {\n          item.classList.remove('active');\n        }\n      });\n    }\n\n    function createInput(id, name, placeholder,type,value) {\n      const input = document.createElement(\"input\");\n      input.id = id;\n      input.name = name;\n      input.placeholder = placeholder;\n      input.className = \"ui input\";\n      input.type = type;\n      input.value = value;\n      return input;\n    }\n\n    function createFormField(id, name, placeholder,type,value,label_text) {\n      const field = document.createElement(\"div\");\n      field.className = \"field\";\n      const label = document.createElement(\"label\");\n      label.htmlFor = id;\n      label.textContent = label_text ?? placeholder;\n      field.appendChild(label);\n      field.appendChild(createInput(id, name, placeholder,type,value));\n      return field;\n    }\n\n    function pings(event) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      fetch('/Omnibees/ping?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du')\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function hotelSearch(event) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      fetch('/Omnibees/HotelSearch?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&checkIn=2023-10-01&checkOut=2023-10-02&cityCode=NYC')\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function GetHotelDescriptiveInfo(event, hotelCode = 198335) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      fetch(`/Omnibees/GetHotelDescriptiveInfo?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&hotelCode=${hotelCode}`)\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n          let resort_data = data.HotelDescriptiveContentsType.HotelDescriptiveContents[0];\n          let policies = ``;\n          resort_data.Policies.ChildTerms.forEach(policy => {\n            policies += `<p>${policy.Name} - ${policy.MinAge} to ${policy.MaxAge}</p>`;\n          });\n\n          let amenities = ``;\n          resort_data.HotelInfo.HotelAmenities.forEach(amenity => {\n            amenities += `<li>${amenity.HotelAmenity}</li>`;\n          });\n          \n          let hotel_card = `\n          <div class=\"ui card\">\n            <div class=\"content\">\n              <a class=\"header\">${resort_data.HotelRef.HotelName}</a>\n              <div class=\"meta\">\n                <span class=\"date\">\n                 Checkin Time: ${resort_data.HotelInfo.CheckInHours.Start} - Checkout Time: ${resort_data.HotelInfo.CheckInHours.End}\n                </span>\n              </div>\n              <div class=\"description\">\n                ${resort_data.HotelInfo.Descriptions.DescriptiveText}\n              </div>\n            </div>\n            <div class=\"extra content\">\n              Age Policies:\n              ${policies}\n              <br/>\n              Amenities:\n              <ul>${amenities}</ul>\n            </div>\n          </div>\n          `;\n\n          document.getElementById(\"viewArea\").innerHTML = \"\";\n          document.getElementById(\"viewArea\").innerHTML = hotel_card;\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function ResortSelector(Container,resorts){\n      let hotel_selector = createDropdown(\"hotel_selector\", \"hotel_selector\", resorts);\n\n      let resort_selector = document.createElement(\"div\");\n      resort_selector.className = \"field\";\n\n      let resort_label = document.createElement(\"label\");\n      resort_label.textContent = \"Select a hotel\";\n      resort_label.htmlFor = \"hotel_selector\";\n\n      resort_selector.appendChild(resort_label);\n      resort_selector.appendChild(hotel_selector);\n\n      Container.appendChild(resort_selector);\n\n      let rates_selector = document.createElement(\"div\");\n      rates_selector.className = \"field\";\n      let rates_label = document.createElement(\"label\");\n      rates_label.textContent = \"Select a rate plan\";\n      rates_label.htmlFor = \"rates_selector\";\n\n      rates_selector.appendChild(rates_label);\n      let rates_selector_input = document.createElement(\"select\");\n      rates_selector_input.id = \"rates_selector\";\n      rates_selector_input.name = \"rates_selector\";\n      rates_selector_input.className = \"ui loading disabled dropdown\";\n      rates_selector.appendChild(rates_selector_input);\n      Container.appendChild(rates_selector);\n\n      // Initialize the dropdown\n      $(hotel_selector).dropdown(\n        { \n          placeholder: 'Select a hotel', \n          onChange: function(value) {\n            \n            GetHotelRatePlans(event, value, function(data){\n              // Clear previous options\n              rates_selector_input.innerHTML = '';\n              \n              // Populate the rates selector with new options\n              data.RatePlans.RatePlan\t.forEach(rate => {\n                let option = document.createElement(\"option\");\n                option.value = rate.RatePlanID;\n                option.textContent = rate.RatePlanName;\n                rates_selector_input.appendChild(option);\n              });\n\n              // Reinitialize the dropdown\n              $(rates_selector_input).dropdown();\n              $(rates_selector_input).parent().removeClass(\"disabled loading\");\n            }\n          );\n      } });\n    }\n    \n    function createRatesSelector(rates,selector){\n\n    }\n\n    function Calendars(Container){\n      let cin = createDateField(\"checkIn\", \"checkIn\", \"2025-10-01\");\n      let cinContainer = document.createElement(\"div\");\n      cinContainer.className = \"field\";\n      \n      let cinLabel = document.createElement(\"label\");\n      cinLabel.textContent = \"Check In\";\n      cinLabel.htmlFor = \"checkIn\";\n      cinContainer.appendChild(cinLabel);\n      cinContainer.appendChild(cin);\n\n\n      let cout = createDateField(\"checkOut\", \"checkOut\", \"2025-10-02\");\n      let coutContainer = document.createElement(\"div\");\n      coutContainer.className = \"field\";\n\n      let coutLabel = document.createElement(\"label\");\n      coutLabel.textContent = \"Check Out\";\n      coutLabel.htmlFor = \"checkOut\";\n      coutContainer.appendChild(coutLabel);\n      coutContainer.appendChild(cout);\n\n\n      Container.appendChild(cinContainer);\n      Container.appendChild(coutContainer);\n\n      $(cin).calendar({\n        type: 'date',\n        endCalendar: $(\"#checkOut\"),\n        formatter: {\n          date: 'YYYY-MM-DD'\n        }\n      });\n      $(cout).calendar({\n        type: 'date',\n        startCalendar: $(\"#checkIn\"),\n        formatter: {\n          date: 'YYYY-MM-DD'\n        }\n      });\n\n    }\n\n    function PaxSelector(Container){\n\n      let adults = document.createElement(\"input\");\n      adults.type = \"number\";\n      adults.name = \"adults\";\n      adults.id = \"adults\";\n      adults.value = 1;\n      adults.className = \"ui input\";\n      \n      let adultsLabel = document.createElement(\"label\");\n      adultsLabel.textContent = \"Adults\";\n      adultsLabel.htmlFor = \"adults\";\n      \n      let adultsDiv = document.createElement(\"div\");\n      adultsDiv.className = \"ui input\";\n      adultsDiv.appendChild(adults);\n\n      let adultsField = document.createElement(\"div\");\n      adultsField.className = \"field\";\n      adultsField.appendChild(adultsLabel);\n      adultsField.appendChild(adultsDiv);\n      Container.appendChild(adultsField);\n\n      let childs = document.createElement(\"input\");\n      childs.type = \"number\";\n      childs.name = \"childs\";\n      childs.id = \"childs\";\n      childs.value = 0;\n      childs.className = \"ui input\";\n      \n      let childsLabel = document.createElement(\"label\");\n      childsLabel.textContent = \"Childs\";\n      childsLabel.htmlFor = \"childs\";\n      \n      let childsDiv = document.createElement(\"div\");\n      childsDiv.className = \"ui input\";\n      childsDiv.appendChild(childs);\n\n      let childsField = document.createElement(\"div\");\n      childsField.className = \"field\";\n      childsField.appendChild(childsLabel);\n      childsField.appendChild(childsDiv);\n      Container.appendChild(childsField);\n\n      let childs_ages = document.createElement(\"input\");\n      childs_ages.type = \"text\";\n      childs_ages.name = \"childs_ages\";\n      childs_ages.id = \"childs_ages\";\n      childs_ages.value = \"\";\n      childs_ages.className = \"ui input\";\n\n      let childs_agesLabel = document.createElement(\"label\");\n      childs_agesLabel.textContent = \"Childs Ages\";\n      childs_agesLabel.htmlFor = \"childs_age\";\n\n      let childsDiv_age = document.createElement(\"div\");\n      childsDiv_age.className = \"ui input\";\n      childsDiv_age.appendChild(childs_ages);\n\n      let childsField_age = document.createElement(\"div\");\n      childsField_age.className = \"field\";\n      childsField_age.appendChild(childs_agesLabel);\n      childsField_age.appendChild(childsDiv_age);\n      Container.appendChild(childsField_age);\n    }\n\n    function ShowReservationStartForm(event){\n      let viewArea = document.getElementById(\"viewArea\");\n      viewArea.innerHTML = \"\";\n      \n      let Container = document.createElement(\"div\");\n      Container.className = \"ui form segment\";\n      viewArea.appendChild(Container);\n\n      let header = document.createElement(\"h3\");\n      header.textContent = \"Hotel Availability Calendar\";\n      header.className = \"ui header\";\n      Container.appendChild(header);\n      \n      let resorts = [\n        { value: 6220, text: \"Royal Solaris Los Cabos\" }\n      ];\n\n      let main_row = document.createElement(\"div\");\n      main_row.className = \"two fields\";\n      Container.appendChild(main_row);\n\n      ResortSelector(main_row, resorts);\n      \n\n\n      let second_row = document.createElement(\"div\");\n      second_row.className = \"fields\";\n      Container.appendChild(second_row);\n\n      Calendars(second_row);\n\n      let third_row = document.createElement(\"div\");\n      third_row.className = \"fields\";\n      Container.appendChild(third_row);\n      PaxSelector(second_row);\n\n      let fourth_row = document.createElement(\"div\");\n      fourth_row.className = \"fields\";\n      Container.appendChild(fourth_row);\n\n\n      let searchButton = document.createElement(\"button\");\n      searchButton.className = \"ui primary button\";\n      searchButton.textContent = \"Search Availability\";\n      searchButton.onclick = function() {\n        GetHotelAvail(event);\n      };\n\n      \n\n      let btnContainer = document.createElement(\"div\");\n      btnContainer.className = \"sixteen wide field\";\n      btnContainer.appendChild(searchButton);\n\n      let searchButton2 = document.createElement(\"button\");\n      searchButton2.className = \"ui orange button\";\n      searchButton2.textContent = \"second search\";\n      searchButton2.onclick = function() {\n        HotelAvailCalendar(event);\n      };\n      btnContainer.appendChild(searchButton2);\n\n      fourth_row.appendChild(btnContainer);\n\n\n      let rooms_segment = document.createElement(\"div\");\n      rooms_segment.className = \"ui segment\";\n\n      let rooms_list = document.createElement(\"div\");\n      rooms_list.className = \"ui list\";\n      rooms_list.id = \"rooms_list\";\n\n      let rooms_header = document.createElement(\"h4\");\n      rooms_header.textContent = \"Available Rooms\";\n      rooms_header.className = \"ui header\";\n      rooms_segment.appendChild(rooms_header);\n\n      rooms_segment.appendChild(rooms_list);\n\n      viewArea.appendChild(rooms_segment);\n\n      let warnings_area = document.createElement(\"div\");\n      warnings_area.className = \"ui list\";\n      warnings_area.id = \"warnings_area\";\n      viewArea.appendChild(warnings_area);\n\n      event.target.classList.add(\"active\");\n      setActiveMenuItem();\n    }\n\n\n    function showRooms(rooms,rates,reservation_details){\n\n      let rooms_list = document.getElementById(\"rooms_list\");\n      rooms_list.innerHTML = \"\"; // Clear previous rooms\n\n      if (!rooms || rooms.length === 0) {\n        let noRoomsMessage = document.createElement(\"div\");\n        noRoomsMessage.textContent = \"No rooms available for the selected dates.\";\n        noRoomsMessage.className = \"ui message\";\n        rooms_list.appendChild(noRoomsMessage);\n        return;\n      }\n      \n\n      rooms.forEach(room => {\n        let roomItem = document.createElement(\"div\");\n        roomItem.className = \"item\";\n\n        let roomContent = document.createElement(\"div\");\n        roomContent.className = \"content\";\n\n        let roomHeader = document.createElement(\"div\");\n        roomHeader.className = \"header\";\n        roomHeader.textContent = `${room.RoomID} - ${room.RoomName}`;\n\n        let roomDescription = document.createElement(\"div\");\n        roomDescription.className = \"description\";\n        roomDescription.textContent = `${room.RoomDescription.Description}`;\n\n        roomContent.appendChild(roomHeader);\n        roomContent.appendChild(roomDescription);\n        roomItem.appendChild(roomContent);\n\n        rooms_list.appendChild(roomItem);\n\n        let floatingDiv = document.createElement(\"div\");\n        floatingDiv.className = \"right floated content\";\n\n        let price = document.createElement(\"div\");\n        price.className = \"ui small header\";\n        price.setAttribute('data-idroom', room.RoomID);\n        floatingDiv.appendChild(price);\n\n        let bookButton = document.createElement(\"button\");\n        bookButton.className = \"ui orange button\";\n        bookButton.textContent = \"Book Now\";\n        bookButton.onclick = function() {\n          // Implement booking functionality here\n          //alert(`Booking for room: ${room.RoomID}`);\n          reservation_details.roomCode = room.RoomID;\n          startCheckout(reservation_details);\n        };\n        floatingDiv.appendChild(bookButton);\n        roomItem.appendChild(floatingDiv);\n      });\n\n    }\n\n    function HotelAvailCalendar(){\n       let hotelCode = document.getElementById(\"hotel_selector\").value;\n      let checkIn = document.getElementById(\"checkIn_field\").value;\n      let checkOut = document.getElementById(\"checkOut_field\").value;\n      let adultsCount = document.getElementById(\"adults\").value;\n      let childsCount = document.getElementById(\"childs\").value;\n      let ratesPlan = document.getElementById(\"rates_selector\").value;\n\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n\n      const postData = {\n        api_key: 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du',\n        hotelCode: hotelCode,\n        checkIn: checkIn,\n        checkOut: checkOut,\n        ratesPlan: ratesPlan,\n        guests: {\n          adults: adultsCount,\n          children: childsCount\n        }\n      };\n\n      fetch(`/Omnibees/HotelAvailCalendar`,{\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            // You can also use 'application/x-www-form-urlencoded' if needed\n          },\n          body: JSON.stringify(postData)\n        })\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n        })\n        \n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          \n        });\n    }\n\n    function GetHotelRatePlans(event,resort,action){\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n\n      fetch(`/Omnibees/GetHotelRatePlans?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&hotelCode=${resort}`)\n        .then(response => response.json())\n        .then(data => {\n          if(typeof action === 'function') {\n            action(data);\n          } else {\n            jsonViewer.data = data;\n          }\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          if(typeof action !== 'function') {\n            jsonViewerContainer.classList.remove(\"loading\");\n            jsonViewerContainer.classList.remove(\"disabled\");\n            event.target.classList.add(\"active\");\n            setActiveMenuItem();\n          }\n        });\n    }\n\n    function GetHotelAvail(event) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      var warnings_area = document.getElementById(\"warnings_area\");\n      warnings_area.innerHTML = \"\"; // Clear previous warnings\n\n      let checkIn = document.getElementById(\"checkIn_field\").value;\n      let checkOut = document.getElementById(\"checkOut_field\").value;\n      let hotelCode = document.getElementById(\"hotel_selector\").value;\n      let ratesPlan = document.getElementById(\"rates_selector\").value;\n      let adults = document.getElementById(\"adults\").value;\n      let children = document.getElementById(\"childs\").value;\n      let children_ages = document.getElementById(\"childs_ages\").value;\n\n      fetch(`/Omnibees/GetHotelAvail`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({\n          api_key: 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du',\n          checkIn: checkIn,\n          checkOut: checkOut,\n          hotelCode: hotelCode,\n          ratesPlan: ratesPlan,\n          adults: adults,\n          children: children,\n          children_ages: children_ages\n        })\n      })\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n          return data;\n        })\n        .then(data => {\n          if(data.WarningsType !== null){\n            data.WarningsType.forEach(warning => {\n              console.warn('Warning:', warning);\n              let warning_item = document.createElement(\"div\");\n              warning_item.className = \"item\";\n              warning_item.textContent = warning;\n              warnings_area.appendChild(warning_item);\n            });\n          }else{\n\n            let reservation_details = {\n              checkIn: checkIn,\n              checkOut: checkOut,\n              hotelCode: hotelCode,\n              ratesPlan: ratesPlan,\n              adults: adults,\n              children: children,\n              children_ages: children_ages\n            };\n\n            showRooms(data.RoomStaysType.RoomStays[0].RoomTypes,data.RoomStaysType.RoomStays[0].RoomRates,reservation_details);\n\n            data.RoomStaysType.RoomStays[0].RoomRates\t.forEach(roomRate => {\n\n              let tot = roomRate.Total.AmountAfterTax;\n              $(`[data-idroom=${roomRate.RoomID}]`).text(`$: ${tot} USD`);\n            });\n          }\n          \n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function createDateField(name,id, value) {\n      let dateField = document.createElement(\"input\");\n      dateField.type = \"text\";\n      dateField.name = name;\n      dateField.id = id + \"_field\";\n      dateField.value = value;\n\n      let div = document.createElement(\"div\");\n      div.className = \"ui input left icon\";\n      div.appendChild(dateField);\n\n      let icon = document.createElement(\"i\");\n      icon.className = \"calendar icon\";\n      div.appendChild(icon);\n\n      let Container = document.createElement(\"div\");\n      Container.className = \"ui calendar\";\n      Container.id = id;\n\n      Container.appendChild(div);\n\n      return Container;\n    }\n\n    function createDropdown(name, id, options) {\n      let select = document.createElement(\"select\");\n      select.name = name;\n      select.id = id;\n      select.className = \"ui dropdown\";\n      let defaultOption = document.createElement(\"option\");\n      defaultOption.value = \"\";\n      defaultOption.textContent = \"Select an option\";\n      select.appendChild(defaultOption);\n      options.forEach(option => {\n        let opt = document.createElement(\"option\");\n        opt.value = option.value;\n        opt.textContent = option.text;\n        select.appendChild(opt);\n      });\n\n      return select;\n    }\n\n    function localStart() {\n      $(\".generalRequest\").unbind().click(function(event) {\n        event.preventDefault();\n        const rute = $(this).data(\"rute\");\n        const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n        jsonViewerContainer.classList.add(\"loading\");\n        jsonViewerContainer.classList.add(\"disabled\");\n        postSecuence = false;\n        if($(this).data(\"postsecuence\"))\n          postSecuence = $(this).data(\"postsecuence\");\n        \n        let postData = {};\n\n        if ($(this).data(\"form\")) {\n          const form = document.getElementById($(this).data(\"form\"));\n          const formData = new FormData(form);\n          formData.forEach((value, key) => {\n            postData[key] = value;\n          });\n        }\n\n        fetch(`/Omnibees/${rute}?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du`,{\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            // You can also use 'application/x-www-form-urlencoded' if needed\n          },\n          body: JSON.stringify(postData)\n        })\n          .then(response => response.json())\n          .then(data => {\n            jsonViewer.data = data;\n            console.log(\"Data fetched:\", data);\n            console.log(\"Post secuence:\", postSecuence);\n            if(postSecuence){\n              console.log(\"Executing post secuence\" + postSecuence);\n              window[postSecuence](data);\n            }\n          })\n          .catch(error => console.error('Error:', error))\n          .finally(() => {\n            jsonViewerContainer.classList.remove(\"loading\");\n            jsonViewerContainer.classList.remove(\"disabled\");\n            event.target.classList.add(\"active\");\n            setActiveMenuItem();\n          });\n      });\n    }\n\n    function startCheckout(reservation_details){\n      let container = document.createElement(\"div\");\n      container.className = \"ui segment\";\n\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Checkout\";\n      container.appendChild(title);\n\n      var form = document.createElement(\"form\");\n      form.className = \"ui form\";\n\n      form.appendChild(createFormField(\"resortCode\", \"resortCode\", \"resortCode\", \"text\", reservation_details.hotelCode));\n      form.appendChild(createFormField(\"roomCode\", \"roomCode\", \"roomCode\", \"text\", reservation_details.roomCode));\n      form.appendChild(createFormField(\"RatePlanID\", \"RatePlanID\", \"RatePlanID\", \"text\", reservation_details.ratesPlan));\n      form.appendChild(createFormField(\"checkIn\", \"checkIn\", \"checkIn\", \"text\", reservation_details.checkIn));\n      form.appendChild(createFormField(\"checkOut\", \"checkOut\", \"checkOut\", \"text\", reservation_details.checkOut));\n      form.appendChild(createFormField(\"adults\", \"adults\", \"adults\", \"text\", reservation_details.adults));\n      form.appendChild(createFormField(\"children\", \"children\", \"children\", \"text\", reservation_details.children));\n      form.appendChild(createFormField(\"children_ages\", \"children_ages\", \"children_ages\", \"text\", reservation_details.children_ages));\n\n      let title_pax = document.createElement(\"h3\");\n      title_pax.textContent = \"Pax contact details\";\n      form.appendChild(title_pax);\n\n      let contactArea = document.createElement(\"div\");\n\n      for(let i=0; i < parseInt(reservation_details.adults); i++){\n        let paxForm = contactForPax(i+1);\n        contactArea.appendChild(paxForm);\n      }\n      form.appendChild(contactArea);\n\n      container.appendChild(form);\n      document.getElementById(\"viewArea\").appendChild(container);\n      document.getElementById(\"rooms_list\").classList.add(\"disabled\");\n\n      let SendHotelReservation = document.createElement(\"div\");\n      SendHotelReservation.className = \"ui teal button\";\n      SendHotelReservation.textContent = \"Send Hotel Reservation\";\n      SendHotelReservation.onclick = function() {\n        // Implement booking functionality here\n        //alert(`Sending reservation`);\n        SendHotelReservationFunction(form);\n      };\n      form.appendChild(SendHotelReservation);\n    }\n\n    function contactForPax(index){\n      let container = document.createElement(\"div\");\n      container.className = \"ui segment\";\n\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Contact for Pax #\" + index;\n      container.appendChild(title);\n\n      let form = document.createElement(\"div\");\n      form.className = \"ui form\";\n\n      let first_name = document.createElement(\"input\");\n      first_name.type = \"text\";\n      first_name.name = \"first_name_\" + index;\n      first_name.placeholder = \"First Name\";\n      form.appendChild(first_name);\n\n      let last_name = document.createElement(\"input\");\n      last_name.type = \"text\";\n      last_name.name = \"last_name_\" + index;\n      last_name.placeholder = \"Last Name\";\n      form.appendChild(last_name);\n\n      let email = document.createElement(\"input\");\n      email.type = \"email\";\n      email.name = \"email_\" + index;\n      email.placeholder = \"Email\";\n      form.appendChild(email);\n\n      let phone = document.createElement(\"input\");\n      phone.type = \"tel\";\n      phone.name = \"phone_\" + index;\n      phone.placeholder = \"Phone\";\n      form.appendChild(phone);\n      container.appendChild(form);\n      return container\n    }\n\n\n    function SendHotelReservationFunction(form) {\n      var warnings_area = document.getElementById(\"warnings_area\");\n      warnings_area.innerHTML = \"\";\n      let formData = new FormData(form);\n      let jsonData = {};\n\n      formData.forEach( (value, key) => {\n        jsonData[key] = value;\n      });\n\n      jsonData.api_key = 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du';\n\n      fetch(`/Omnibees/SendHotelResInitiate`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(jsonData)\n      })\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n          return data;\n        })\n        .then(data => {\n          if(data.WarningsType !== null){\n            data.WarningsType.forEach(warning => {\n              console.warn('Warning:', warning);\n              let warning_item = document.createElement(\"div\");\n              warning_item.className = \"item\";\n              warning_item.textContent = warning;\n              warnings_area.appendChild(warning_item);\n            });\n          }else{\n            if(data.HotelReservationsType !== null){\n              if(data.HotelReservationsType.HotelReservations.length >0){\n                var reservation_code = data.HotelReservationsType.HotelReservations[0].UniqueID.ID;\n                var transaction_id = data.TransactionIdentifier;\n                console.log('Reservation Code:', reservation_code);\n                console.log('Transaction ID:', transaction_id);\n                alert(`Reservation successful! Your reservation code is: ${reservation_code}`);\n                ShowCommitArea(reservation_code, transaction_id);\n              }\n            }\n          }\n          \n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          //event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function ShowCommitArea(reservation_code, transaction_id) {\n      var commit_area = document.createElement(\"div\");\n      commit_area.className = \"ui segment\";\n\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Commit Reservation\";\n      commit_area.appendChild(title);\n\n      let form = document.createElement(\"form\");\n      form.className = \"ui form\";\n\n      form.appendChild(createFormField(\"reservationId\", \"reservationId\", \"Reservation ID\", \"text\", reservation_code));\n\n      form.appendChild(createFormField(\"transactionId\", \"transactionId\", \"Transaction ID\", \"text\", transaction_id));\n\n      var button = document.createElement(\"div\");\n      button.className = \"ui teal button\";\n      button.textContent = \"Commit Reservation\";\n      button.onclick = function() {\n        sendCommit(reservation_code, transaction_id);\n      };\n      form.appendChild(button);\n\n      commit_area.appendChild(form);\n      document.getElementById(\"viewArea\").appendChild(commit_area);\n    }\n\n    function sendCommit(reservationId, transactionId) {\n      var commitData = {\n        reservationId: reservationId,\n        transactionId: transactionId,\n        api_key: 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du'\n      };\n\n      fetch(`/Omnibees/SendHotelResCommit`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(commitData)\n      })\n        .then(response => response.json())\n        .then(data => {\n          if(data.WarningsType !== null){\n            data.WarningsType.forEach(warning => {\n              console.warn('Warning:', warning);\n              let warning_item = document.createElement(\"div\");\n              warning_item.className = \"item\";\n              warning_item.textContent = warning;\n              warnings_area.appendChild(warning_item);\n            });\n          }else{\n            if(data.ResResponseType == \"Commited\"){\n              alert(`Reservation committed successfully!`);\n            }else{\n              alert(`Reservation commit failed: ${data.ResResponseType}`);\n            }\n          }\n          \n        })\n        .catch(error => console.error('Error:', error));\n    }\n\n    function showReservationList(data){\n      let viewArea = document.getElementById(\"viewArea\");\n      viewArea.innerHTML = \"\";\n      let container = document.createElement(\"div\");\n      container.className = \"ui segment\";\n      viewArea.appendChild(container);\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Reservations List\";\n      container.appendChild(title);\n\n      let list = document.createElement(\"div\");\n      list.className = \"ui list\";\n      container.appendChild(list);\n\n      data.HotelReservationsType.HotelReservations.forEach(reservation => {\n        let item = document.createElement(\"div\");\n        item.className = \"item\";\n\n        let content = document.createElement(\"div\");\n        content.className = \"content\";\n\n        let header = document.createElement(\"div\");\n        header.className = \"header\";\n        header.textContent = `Reservation ID: ${reservation.UniqueID.ID} `;\n\n        let description = document.createElement(\"div\");\n        description.className = \"description\";\n        description.innerHTML = ``;\n        reservation.RoomStaysType.RoomStays.forEach(room => {\n          description.innerHTML += `<p>Room: ${room.IndexNumber} \n          - CheckIn: ${room.RoomRates.EffectiveDate} \n          - CheckOut: ${room.RoomRates.ExpireDate} \n          - Total: ${room.Total.AmountAfterTax}\n          </p>`;\n        });\n        content.appendChild(description);\n\n        content.appendChild(header);\n        item.appendChild(content);\n        list.appendChild(item);\n      });\n    }\n\n  </script>\n</head>\n<body onload=\"localStart()\">\n  <br>\n  <div class=\"ui container\">\n    <div class=\"ui grid\">\n      <div class=\"sixteen wide column\">\n        <div class=\"ui header\">\n          Omnibees API Test\n        </div>\n      </div>\n      <div class=\" row\">\n        <div class=\"six wide column\">\n          <div class=\"ui vertical fluid  menu\">\n            <a class=\"item\" href=\"#Omnibees/ping\" onClick=\"pings(event);\">Ping</a>\n\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetCountry\" data-rute=\"GetCountry\">GetCountry</a>\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetState\" data-rute=\"GetState\" data-form=\"getStateForm\">GetState</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getStateForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"country_uid\">Country Code</label>\n                    <input type=\"text\" id=\"country_uid\" name=\"country_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"state_search_code\">state search code</label>\n                    <input type=\"text\" id=\"state_search_code\" name=\"state_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"zone_search_code\">zone search code</label>\n                    <input type=\"text\" id=\"zone_search_code\" name=\"zone_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  \n                </div>\n              </form>\n\n            </div>\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetCity\" data-rute=\"GetCity\" data-form=\"getCityForm\">GetCity</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getCityForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"country_uid_city\">Country Code</label>\n                    <input type=\"text\" id=\"country_uid_city\" name=\"country_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"state_search_code_city\">state search code</label>\n                    <input type=\"text\" id=\"state_search_code_city\" name=\"state_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  \n                </div>\n              </form>\n\n            </div>\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetZones\" data-rute=\"GetZones\" data-form=\"getZonesForm\">GetZones</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getZonesForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"country_uid_zone\">Country Code</label>\n                    <input type=\"text\" id=\"country_uid_zone\" name=\"country_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"state_search_code_zone\">state search code</label>\n                    <input type=\"text\" id=\"state_search_code_zone\" name=\"state_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"zone_search_code_zone\">zone search code</label>\n                    <input type=\"text\" id=\"zone_search_code_zone\" name=\"zone_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"cities_data_uid_zone\">cities data uid</label>\n                    <input type=\"text\" id=\"cities_data_uid_zone\" name=\"cities_data_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  \n                </div>\n              </form>\n\n            </div>\n            <div class=\"ui divider\"></div>\n            <a class=\"item\" href=\"#Omnibees/HotelSearch\" onClick=\"hotelSearch(event)\">HotelSearch</a>\n            <div class=\"item\">\n              <div class=\"header\">GetHotelDescriptiveInfo</div>\n              <div class=\"menu\">\n              \n                  <a href=\"#viewHotel_198335\" class=\"item\" onClick=\"GetHotelDescriptiveInfo(event,6220)\"> Hotel 6220 - Royal cabo </a>\n              </div>\n            </div>\n            \n            <a class=\"item\" href=\"#Omnibees/HotelAvailCalendar\" onClick=\"ShowReservationStartForm(event)\">Reservation Start</a>\n            <div class=\"item\">\n              <form action=\"\" id=\">HotelAvailCalendarForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"resort_uuid_bookings\">Resort UUID</label>\n                    <input type=\"text\" id=\"resort_uuid_bookings\" name=\"resort_uuid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"from_bookings\">Start date</label>\n                    <input type=\"date\" id=\"from_bookings\" name=\"start_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                  <div class=\"field\">\n                    <label for=\"to_bookings\">End date</label>\n                    <input type=\"date\" id=\"to_bookings\" name=\"end_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                </div>\n              </form>\n            </div>\n            <div class=\"item\">\n              <div class=\"header\">GetHotelRatePlans</div>\n              <div class=\"menu\">\n              \n                  <a href=\"#viewHotel_6220\" class=\"item\" onClick=\"GetHotelRatePlans(event,6220,'')\"> Hotel 6220 - Royal cabo </a>\n              </div>\n            </div>\n            <a class=\"item\" href=\"#Omnibees/SendHotelRes\">SendHotelRes</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResCommit\">SendHotelResCommit</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResModify\">SendHotelResModify</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResModifyCommit\">SendHotelResModifyCommit</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResCancel\">SendHotelResCancel</a>\n            \n            <a class=\"item generalRequest\" href=\"#Omnibees/GetBookings\" data-rute=\"GetBookings\" data-form=\"getBookingsForm\" data-postSecuence=\"showReservationList\">GetBookings</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getBookingsForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"resort_uuid_bookings\">Resort UUID</label>\n                    <input type=\"text\" id=\"resort_uuid_bookings\" name=\"resort_uuid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"from_bookings\">Start date</label>\n                    <input type=\"date\" id=\"from_bookings\" name=\"start_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                  <div class=\"field\">\n                    <label for=\"to_bookings\">End date</label>\n                    <input type=\"date\" id=\"to_bookings\" name=\"end_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                </div>\n              </form>\n            </div>\n            \n          </div>\n        </div>\n        <div class=\"ten wide column\" id=\"viewArea\">\n          \n        </div>\n      </div>\n      <div class=\"sixteen wide column\">\n        <div class=\"ui divider\"></div>\n        <div class=\"ui header\">\n           Logs\n        </div>\n      </div>\n      <div class=\" row\">\n        <div class=\"sixteen wide column\">\n          <div class=\"ui basic segment\" id=\"jsonViewerContainer\" style=\"padding:0;\">\n            <andypf-json-viewer id=\"jsonViewer\"></andypf-json-viewer>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <script>\n    const jsonViewer = document.getElementById(\"jsonViewer\");\n    jsonViewer.id = \"json\"\n    jsonViewer.expanded = 2\n    jsonViewer.indent = 2\n    jsonViewer.showDataTypes = true\n    jsonViewer.theme = \"monokai\"\n    jsonViewer.showToolbar = true\n    jsonViewer.showSize = true\n    jsonViewer.showCopy = true\n    jsonViewer.expandIconType = \"square\"\n    jsonViewer.data = { example: \"data\" }\n\n\n    \n  </script>\n</body>\n</html>"}} {"uid":"30134e3"}
[2025-10-06 09:31:59] slim-app.INFO: Petition {"incoming":{"Method":"GET","api":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Route":"https://omnibees.clubsolaris.com/Omnibees/full_test?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Data":{"api_key":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du"}},"response":{"status":200,"type":"text/html; charset=UTF-8","body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Document</title>\n  \n  <style>\n    body {\n      background: #d5d2d2 !important;\n      font-family: Arial, sans-serif;\n    }\n    #rooms_list.disabled {\n      pointer-events: none;\n    }\n  </style>\n\n  <!-- You MUST include jQuery 3.4+ before Fomantic -->\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js\"></script>\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.4/semantic.min.css\">\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.9.4/semantic.min.js\"></script>\n\n  <script src=\"https://pfau-software.de/json-viewer/dist/iife/index.js\"></script>\n  <script>\n    function setActiveMenuItem() {\n      const path = window.location.hash;\n      const menuItems = document.querySelectorAll('.ui.menu .item');\n      menuItems.forEach(item => {\n        if (item.getAttribute('href') === path) {\n          item.classList.add('active');\n        } else {\n          item.classList.remove('active');\n        }\n      });\n    }\n\n    function createInput(id, name, placeholder,type,value) {\n      const input = document.createElement(\"input\");\n      input.id = id;\n      input.name = name;\n      input.placeholder = placeholder;\n      input.className = \"ui input\";\n      input.type = type;\n      input.value = value;\n      return input;\n    }\n\n    function createFormField(id, name, placeholder,type,value,label_text) {\n      const field = document.createElement(\"div\");\n      field.className = \"field\";\n      const label = document.createElement(\"label\");\n      label.htmlFor = id;\n      label.textContent = label_text ?? placeholder;\n      field.appendChild(label);\n      field.appendChild(createInput(id, name, placeholder,type,value));\n      return field;\n    }\n\n    function pings(event) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      fetch('/Omnibees/ping?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du')\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function hotelSearch(event) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      fetch('/Omnibees/HotelSearch?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&checkIn=2023-10-01&checkOut=2023-10-02&cityCode=NYC')\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function GetHotelDescriptiveInfo(event, hotelCode = 198335) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      fetch(`/Omnibees/GetHotelDescriptiveInfo?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&hotelCode=${hotelCode}`)\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n          let resort_data = data.HotelDescriptiveContentsType.HotelDescriptiveContents[0];\n          let policies = ``;\n          resort_data.Policies.ChildTerms.forEach(policy => {\n            policies += `<p>${policy.Name} - ${policy.MinAge} to ${policy.MaxAge}</p>`;\n          });\n\n          let amenities = ``;\n          resort_data.HotelInfo.HotelAmenities.forEach(amenity => {\n            amenities += `<li>${amenity.HotelAmenity}</li>`;\n          });\n          \n          let hotel_card = `\n          <div class=\"ui card\">\n            <div class=\"content\">\n              <a class=\"header\">${resort_data.HotelRef.HotelName}</a>\n              <div class=\"meta\">\n                <span class=\"date\">\n                 Checkin Time: ${resort_data.HotelInfo.CheckInHours.Start} - Checkout Time: ${resort_data.HotelInfo.CheckInHours.End}\n                </span>\n              </div>\n              <div class=\"description\">\n                ${resort_data.HotelInfo.Descriptions.DescriptiveText}\n              </div>\n            </div>\n            <div class=\"extra content\">\n              Age Policies:\n              ${policies}\n              <br/>\n              Amenities:\n              <ul>${amenities}</ul>\n            </div>\n          </div>\n          `;\n\n          document.getElementById(\"viewArea\").innerHTML = \"\";\n          document.getElementById(\"viewArea\").innerHTML = hotel_card;\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function ResortSelector(Container,resorts){\n      let hotel_selector = createDropdown(\"hotel_selector\", \"hotel_selector\", resorts);\n\n      let resort_selector = document.createElement(\"div\");\n      resort_selector.className = \"field\";\n\n      let resort_label = document.createElement(\"label\");\n      resort_label.textContent = \"Select a hotel\";\n      resort_label.htmlFor = \"hotel_selector\";\n\n      resort_selector.appendChild(resort_label);\n      resort_selector.appendChild(hotel_selector);\n\n      Container.appendChild(resort_selector);\n\n      let rates_selector = document.createElement(\"div\");\n      rates_selector.className = \"field\";\n      let rates_label = document.createElement(\"label\");\n      rates_label.textContent = \"Select a rate plan\";\n      rates_label.htmlFor = \"rates_selector\";\n\n      rates_selector.appendChild(rates_label);\n      let rates_selector_input = document.createElement(\"select\");\n      rates_selector_input.id = \"rates_selector\";\n      rates_selector_input.name = \"rates_selector\";\n      rates_selector_input.className = \"ui loading disabled dropdown\";\n      rates_selector.appendChild(rates_selector_input);\n      Container.appendChild(rates_selector);\n\n      // Initialize the dropdown\n      $(hotel_selector).dropdown(\n        { \n          placeholder: 'Select a hotel', \n          onChange: function(value) {\n            \n            GetHotelRatePlans(event, value, function(data){\n              // Clear previous options\n              rates_selector_input.innerHTML = '';\n              \n              // Populate the rates selector with new options\n              data.RatePlans.RatePlan\t.forEach(rate => {\n                let option = document.createElement(\"option\");\n                option.value = rate.RatePlanID;\n                option.textContent = rate.RatePlanName;\n                rates_selector_input.appendChild(option);\n              });\n\n              // Reinitialize the dropdown\n              $(rates_selector_input).dropdown();\n              $(rates_selector_input).parent().removeClass(\"disabled loading\");\n            }\n          );\n      } });\n    }\n    \n    function createRatesSelector(rates,selector){\n\n    }\n\n    function Calendars(Container){\n      let cin = createDateField(\"checkIn\", \"checkIn\", \"2025-10-01\");\n      let cinContainer = document.createElement(\"div\");\n      cinContainer.className = \"field\";\n      \n      let cinLabel = document.createElement(\"label\");\n      cinLabel.textContent = \"Check In\";\n      cinLabel.htmlFor = \"checkIn\";\n      cinContainer.appendChild(cinLabel);\n      cinContainer.appendChild(cin);\n\n\n      let cout = createDateField(\"checkOut\", \"checkOut\", \"2025-10-02\");\n      let coutContainer = document.createElement(\"div\");\n      coutContainer.className = \"field\";\n\n      let coutLabel = document.createElement(\"label\");\n      coutLabel.textContent = \"Check Out\";\n      coutLabel.htmlFor = \"checkOut\";\n      coutContainer.appendChild(coutLabel);\n      coutContainer.appendChild(cout);\n\n\n      Container.appendChild(cinContainer);\n      Container.appendChild(coutContainer);\n\n      $(cin).calendar({\n        type: 'date',\n        endCalendar: $(\"#checkOut\"),\n        formatter: {\n          date: 'YYYY-MM-DD'\n        }\n      });\n      $(cout).calendar({\n        type: 'date',\n        startCalendar: $(\"#checkIn\"),\n        formatter: {\n          date: 'YYYY-MM-DD'\n        }\n      });\n\n    }\n\n    function PaxSelector(Container){\n\n      let adults = document.createElement(\"input\");\n      adults.type = \"number\";\n      adults.name = \"adults\";\n      adults.id = \"adults\";\n      adults.value = 1;\n      adults.className = \"ui input\";\n      \n      let adultsLabel = document.createElement(\"label\");\n      adultsLabel.textContent = \"Adults\";\n      adultsLabel.htmlFor = \"adults\";\n      \n      let adultsDiv = document.createElement(\"div\");\n      adultsDiv.className = \"ui input\";\n      adultsDiv.appendChild(adults);\n\n      let adultsField = document.createElement(\"div\");\n      adultsField.className = \"field\";\n      adultsField.appendChild(adultsLabel);\n      adultsField.appendChild(adultsDiv);\n      Container.appendChild(adultsField);\n\n      let childs = document.createElement(\"input\");\n      childs.type = \"number\";\n      childs.name = \"childs\";\n      childs.id = \"childs\";\n      childs.value = 0;\n      childs.className = \"ui input\";\n      \n      let childsLabel = document.createElement(\"label\");\n      childsLabel.textContent = \"Childs\";\n      childsLabel.htmlFor = \"childs\";\n      \n      let childsDiv = document.createElement(\"div\");\n      childsDiv.className = \"ui input\";\n      childsDiv.appendChild(childs);\n\n      let childsField = document.createElement(\"div\");\n      childsField.className = \"field\";\n      childsField.appendChild(childsLabel);\n      childsField.appendChild(childsDiv);\n      Container.appendChild(childsField);\n\n      let childs_ages = document.createElement(\"input\");\n      childs_ages.type = \"text\";\n      childs_ages.name = \"childs_ages\";\n      childs_ages.id = \"childs_ages\";\n      childs_ages.value = \"\";\n      childs_ages.className = \"ui input\";\n\n      let childs_agesLabel = document.createElement(\"label\");\n      childs_agesLabel.textContent = \"Childs Ages\";\n      childs_agesLabel.htmlFor = \"childs_age\";\n\n      let childsDiv_age = document.createElement(\"div\");\n      childsDiv_age.className = \"ui input\";\n      childsDiv_age.appendChild(childs_ages);\n\n      let childsField_age = document.createElement(\"div\");\n      childsField_age.className = \"field\";\n      childsField_age.appendChild(childs_agesLabel);\n      childsField_age.appendChild(childsDiv_age);\n      Container.appendChild(childsField_age);\n    }\n\n    function ShowReservationStartForm(event){\n      let viewArea = document.getElementById(\"viewArea\");\n      viewArea.innerHTML = \"\";\n      \n      let Container = document.createElement(\"div\");\n      Container.className = \"ui form segment\";\n      viewArea.appendChild(Container);\n\n      let header = document.createElement(\"h3\");\n      header.textContent = \"Hotel Availability Calendar\";\n      header.className = \"ui header\";\n      Container.appendChild(header);\n      \n      let resorts = [\n        { value: 6220, text: \"Royal Solaris Los Cabos\" }\n      ];\n\n      let main_row = document.createElement(\"div\");\n      main_row.className = \"two fields\";\n      Container.appendChild(main_row);\n\n      ResortSelector(main_row, resorts);\n      \n\n\n      let second_row = document.createElement(\"div\");\n      second_row.className = \"fields\";\n      Container.appendChild(second_row);\n\n      Calendars(second_row);\n\n      let third_row = document.createElement(\"div\");\n      third_row.className = \"fields\";\n      Container.appendChild(third_row);\n      PaxSelector(second_row);\n\n      let fourth_row = document.createElement(\"div\");\n      fourth_row.className = \"fields\";\n      Container.appendChild(fourth_row);\n\n\n      let searchButton = document.createElement(\"button\");\n      searchButton.className = \"ui primary button\";\n      searchButton.textContent = \"Search Availability\";\n      searchButton.onclick = function() {\n        GetHotelAvail(event);\n      };\n\n      \n\n      let btnContainer = document.createElement(\"div\");\n      btnContainer.className = \"sixteen wide field\";\n      btnContainer.appendChild(searchButton);\n\n      let searchButton2 = document.createElement(\"button\");\n      searchButton2.className = \"ui orange button\";\n      searchButton2.textContent = \"second search\";\n      searchButton2.onclick = function() {\n        HotelAvailCalendar(event);\n      };\n      btnContainer.appendChild(searchButton2);\n\n      fourth_row.appendChild(btnContainer);\n\n\n      let rooms_segment = document.createElement(\"div\");\n      rooms_segment.className = \"ui segment\";\n\n      let rooms_list = document.createElement(\"div\");\n      rooms_list.className = \"ui list\";\n      rooms_list.id = \"rooms_list\";\n\n      let rooms_header = document.createElement(\"h4\");\n      rooms_header.textContent = \"Available Rooms\";\n      rooms_header.className = \"ui header\";\n      rooms_segment.appendChild(rooms_header);\n\n      rooms_segment.appendChild(rooms_list);\n\n      viewArea.appendChild(rooms_segment);\n\n      let warnings_area = document.createElement(\"div\");\n      warnings_area.className = \"ui list\";\n      warnings_area.id = \"warnings_area\";\n      viewArea.appendChild(warnings_area);\n\n      event.target.classList.add(\"active\");\n      setActiveMenuItem();\n    }\n\n\n    function showRooms(rooms,rates,reservation_details){\n\n      let rooms_list = document.getElementById(\"rooms_list\");\n      rooms_list.innerHTML = \"\"; // Clear previous rooms\n\n      if (!rooms || rooms.length === 0) {\n        let noRoomsMessage = document.createElement(\"div\");\n        noRoomsMessage.textContent = \"No rooms available for the selected dates.\";\n        noRoomsMessage.className = \"ui message\";\n        rooms_list.appendChild(noRoomsMessage);\n        return;\n      }\n      \n\n      rooms.forEach(room => {\n        let roomItem = document.createElement(\"div\");\n        roomItem.className = \"item\";\n\n        let roomContent = document.createElement(\"div\");\n        roomContent.className = \"content\";\n\n        let roomHeader = document.createElement(\"div\");\n        roomHeader.className = \"header\";\n        roomHeader.textContent = `${room.RoomID} - ${room.RoomName}`;\n\n        let roomDescription = document.createElement(\"div\");\n        roomDescription.className = \"description\";\n        roomDescription.textContent = `${room.RoomDescription.Description}`;\n\n        roomContent.appendChild(roomHeader);\n        roomContent.appendChild(roomDescription);\n        roomItem.appendChild(roomContent);\n\n        rooms_list.appendChild(roomItem);\n\n        let floatingDiv = document.createElement(\"div\");\n        floatingDiv.className = \"right floated content\";\n\n        let price = document.createElement(\"div\");\n        price.className = \"ui small header\";\n        price.setAttribute('data-idroom', room.RoomID);\n        floatingDiv.appendChild(price);\n\n        let bookButton = document.createElement(\"button\");\n        bookButton.className = \"ui orange button\";\n        bookButton.textContent = \"Book Now\";\n        bookButton.onclick = function() {\n          // Implement booking functionality here\n          //alert(`Booking for room: ${room.RoomID}`);\n          reservation_details.roomCode = room.RoomID;\n          startCheckout(reservation_details);\n        };\n        floatingDiv.appendChild(bookButton);\n        roomItem.appendChild(floatingDiv);\n      });\n\n    }\n\n    function HotelAvailCalendar(){\n       let hotelCode = document.getElementById(\"hotel_selector\").value;\n      let checkIn = document.getElementById(\"checkIn_field\").value;\n      let checkOut = document.getElementById(\"checkOut_field\").value;\n      let adultsCount = document.getElementById(\"adults\").value;\n      let childsCount = document.getElementById(\"childs\").value;\n      let ratesPlan = document.getElementById(\"rates_selector\").value;\n\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n\n      const postData = {\n        api_key: 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du',\n        hotelCode: hotelCode,\n        checkIn: checkIn,\n        checkOut: checkOut,\n        ratesPlan: ratesPlan,\n        guests: {\n          adults: adultsCount,\n          children: childsCount\n        }\n      };\n\n      fetch(`/Omnibees/HotelAvailCalendar`,{\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            // You can also use 'application/x-www-form-urlencoded' if needed\n          },\n          body: JSON.stringify(postData)\n        })\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n        })\n        \n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          \n        });\n    }\n\n    function GetHotelRatePlans(event,resort,action){\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n\n      fetch(`/Omnibees/GetHotelRatePlans?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&hotelCode=${resort}`)\n        .then(response => response.json())\n        .then(data => {\n          if(typeof action === 'function') {\n            action(data);\n          } else {\n            jsonViewer.data = data;\n          }\n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          if(typeof action !== 'function') {\n            jsonViewerContainer.classList.remove(\"loading\");\n            jsonViewerContainer.classList.remove(\"disabled\");\n            event.target.classList.add(\"active\");\n            setActiveMenuItem();\n          }\n        });\n    }\n\n    function GetHotelAvail(event) {\n      const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n      jsonViewerContainer.classList.add(\"loading\");\n      jsonViewerContainer.classList.add(\"disabled\");\n      var warnings_area = document.getElementById(\"warnings_area\");\n      warnings_area.innerHTML = \"\"; // Clear previous warnings\n\n      let checkIn = document.getElementById(\"checkIn_field\").value;\n      let checkOut = document.getElementById(\"checkOut_field\").value;\n      let hotelCode = document.getElementById(\"hotel_selector\").value;\n      let ratesPlan = document.getElementById(\"rates_selector\").value;\n      let adults = document.getElementById(\"adults\").value;\n      let children = document.getElementById(\"childs\").value;\n      let children_ages = document.getElementById(\"childs_ages\").value;\n\n      fetch(`/Omnibees/GetHotelAvail`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({\n          api_key: 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du',\n          checkIn: checkIn,\n          checkOut: checkOut,\n          hotelCode: hotelCode,\n          ratesPlan: ratesPlan,\n          adults: adults,\n          children: children,\n          children_ages: children_ages\n        })\n      })\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n          return data;\n        })\n        .then(data => {\n          if(data.WarningsType !== null){\n            data.WarningsType.forEach(warning => {\n              console.warn('Warning:', warning);\n              let warning_item = document.createElement(\"div\");\n              warning_item.className = \"item\";\n              warning_item.textContent = warning;\n              warnings_area.appendChild(warning_item);\n            });\n          }else{\n\n            let reservation_details = {\n              checkIn: checkIn,\n              checkOut: checkOut,\n              hotelCode: hotelCode,\n              ratesPlan: ratesPlan,\n              adults: adults,\n              children: children,\n              children_ages: children_ages\n            };\n\n            showRooms(data.RoomStaysType.RoomStays[0].RoomTypes,data.RoomStaysType.RoomStays[0].RoomRates,reservation_details);\n\n            data.RoomStaysType.RoomStays[0].RoomRates\t.forEach(roomRate => {\n\n              let tot = roomRate.Total.AmountAfterTax;\n              $(`[data-idroom=${roomRate.RoomID}]`).text(`$: ${tot} USD`);\n            });\n          }\n          \n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function createDateField(name,id, value) {\n      let dateField = document.createElement(\"input\");\n      dateField.type = \"text\";\n      dateField.name = name;\n      dateField.id = id + \"_field\";\n      dateField.value = value;\n\n      let div = document.createElement(\"div\");\n      div.className = \"ui input left icon\";\n      div.appendChild(dateField);\n\n      let icon = document.createElement(\"i\");\n      icon.className = \"calendar icon\";\n      div.appendChild(icon);\n\n      let Container = document.createElement(\"div\");\n      Container.className = \"ui calendar\";\n      Container.id = id;\n\n      Container.appendChild(div);\n\n      return Container;\n    }\n\n    function createDropdown(name, id, options) {\n      let select = document.createElement(\"select\");\n      select.name = name;\n      select.id = id;\n      select.className = \"ui dropdown\";\n      let defaultOption = document.createElement(\"option\");\n      defaultOption.value = \"\";\n      defaultOption.textContent = \"Select an option\";\n      select.appendChild(defaultOption);\n      options.forEach(option => {\n        let opt = document.createElement(\"option\");\n        opt.value = option.value;\n        opt.textContent = option.text;\n        select.appendChild(opt);\n      });\n\n      return select;\n    }\n\n    function localStart() {\n      $(\".generalRequest\").unbind().click(function(event) {\n        event.preventDefault();\n        const rute = $(this).data(\"rute\");\n        const jsonViewerContainer = document.getElementById(\"jsonViewerContainer\");\n        jsonViewerContainer.classList.add(\"loading\");\n        jsonViewerContainer.classList.add(\"disabled\");\n        postSecuence = false;\n        if($(this).data(\"postsecuence\"))\n          postSecuence = $(this).data(\"postsecuence\");\n        \n        let postData = {};\n\n        if ($(this).data(\"form\")) {\n          const form = document.getElementById($(this).data(\"form\"));\n          const formData = new FormData(form);\n          formData.forEach((value, key) => {\n            postData[key] = value;\n          });\n        }\n\n        fetch(`/Omnibees/${rute}?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du`,{\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            // You can also use 'application/x-www-form-urlencoded' if needed\n          },\n          body: JSON.stringify(postData)\n        })\n          .then(response => response.json())\n          .then(data => {\n            jsonViewer.data = data;\n            console.log(\"Data fetched:\", data);\n            console.log(\"Post secuence:\", postSecuence);\n            if(postSecuence){\n              console.log(\"Executing post secuence\" + postSecuence);\n              window[postSecuence](data);\n            }\n          })\n          .catch(error => console.error('Error:', error))\n          .finally(() => {\n            jsonViewerContainer.classList.remove(\"loading\");\n            jsonViewerContainer.classList.remove(\"disabled\");\n            event.target.classList.add(\"active\");\n            setActiveMenuItem();\n          });\n      });\n    }\n\n    function startCheckout(reservation_details){\n      let container = document.createElement(\"div\");\n      container.className = \"ui segment\";\n\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Checkout\";\n      container.appendChild(title);\n\n      var form = document.createElement(\"form\");\n      form.className = \"ui form\";\n\n      form.appendChild(createFormField(\"resortCode\", \"resortCode\", \"resortCode\", \"text\", reservation_details.hotelCode));\n      form.appendChild(createFormField(\"roomCode\", \"roomCode\", \"roomCode\", \"text\", reservation_details.roomCode));\n      form.appendChild(createFormField(\"RatePlanID\", \"RatePlanID\", \"RatePlanID\", \"text\", reservation_details.ratesPlan));\n      form.appendChild(createFormField(\"checkIn\", \"checkIn\", \"checkIn\", \"text\", reservation_details.checkIn));\n      form.appendChild(createFormField(\"checkOut\", \"checkOut\", \"checkOut\", \"text\", reservation_details.checkOut));\n      form.appendChild(createFormField(\"adults\", \"adults\", \"adults\", \"text\", reservation_details.adults));\n      form.appendChild(createFormField(\"children\", \"children\", \"children\", \"text\", reservation_details.children));\n      form.appendChild(createFormField(\"children_ages\", \"children_ages\", \"children_ages\", \"text\", reservation_details.children_ages));\n\n      let title_pax = document.createElement(\"h3\");\n      title_pax.textContent = \"Pax contact details\";\n      form.appendChild(title_pax);\n\n      let contactArea = document.createElement(\"div\");\n\n      for(let i=0; i < parseInt(reservation_details.adults); i++){\n        let paxForm = contactForPax(i+1);\n        contactArea.appendChild(paxForm);\n      }\n      form.appendChild(contactArea);\n\n      container.appendChild(form);\n      document.getElementById(\"viewArea\").appendChild(container);\n      document.getElementById(\"rooms_list\").classList.add(\"disabled\");\n\n      let SendHotelReservation = document.createElement(\"div\");\n      SendHotelReservation.className = \"ui teal button\";\n      SendHotelReservation.textContent = \"Send Hotel Reservation\";\n      SendHotelReservation.onclick = function() {\n        // Implement booking functionality here\n        //alert(`Sending reservation`);\n        SendHotelReservationFunction(form);\n      };\n      form.appendChild(SendHotelReservation);\n    }\n\n    function contactForPax(index){\n      let container = document.createElement(\"div\");\n      container.className = \"ui segment\";\n\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Contact for Pax #\" + index;\n      container.appendChild(title);\n\n      let form = document.createElement(\"div\");\n      form.className = \"ui form\";\n\n      let first_name = document.createElement(\"input\");\n      first_name.type = \"text\";\n      first_name.name = \"first_name_\" + index;\n      first_name.placeholder = \"First Name\";\n      form.appendChild(first_name);\n\n      let last_name = document.createElement(\"input\");\n      last_name.type = \"text\";\n      last_name.name = \"last_name_\" + index;\n      last_name.placeholder = \"Last Name\";\n      form.appendChild(last_name);\n\n      let email = document.createElement(\"input\");\n      email.type = \"email\";\n      email.name = \"email_\" + index;\n      email.placeholder = \"Email\";\n      form.appendChild(email);\n\n      let phone = document.createElement(\"input\");\n      phone.type = \"tel\";\n      phone.name = \"phone_\" + index;\n      phone.placeholder = \"Phone\";\n      form.appendChild(phone);\n      container.appendChild(form);\n      return container\n    }\n\n\n    function SendHotelReservationFunction(form) {\n      var warnings_area = document.getElementById(\"warnings_area\");\n      warnings_area.innerHTML = \"\";\n      let formData = new FormData(form);\n      let jsonData = {};\n\n      formData.forEach( (value, key) => {\n        jsonData[key] = value;\n      });\n\n      jsonData.api_key = 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du';\n\n      fetch(`/Omnibees/SendHotelResInitiate`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(jsonData)\n      })\n        .then(response => response.json())\n        .then(data => {\n          jsonViewer.data = data;\n          return data;\n        })\n        .then(data => {\n          if(data.WarningsType !== null){\n            data.WarningsType.forEach(warning => {\n              console.warn('Warning:', warning);\n              let warning_item = document.createElement(\"div\");\n              warning_item.className = \"item\";\n              warning_item.textContent = warning;\n              warnings_area.appendChild(warning_item);\n            });\n          }else{\n            if(data.HotelReservationsType !== null){\n              if(data.HotelReservationsType.HotelReservations.length >0){\n                var reservation_code = data.HotelReservationsType.HotelReservations[0].UniqueID.ID;\n                var transaction_id = data.TransactionIdentifier;\n                console.log('Reservation Code:', reservation_code);\n                console.log('Transaction ID:', transaction_id);\n                alert(`Reservation successful! Your reservation code is: ${reservation_code}`);\n                ShowCommitArea(reservation_code, transaction_id);\n              }\n            }\n          }\n          \n        })\n        .catch(error => console.error('Error:', error))\n        .finally(() => {\n          jsonViewerContainer.classList.remove(\"loading\");\n          jsonViewerContainer.classList.remove(\"disabled\");\n          //event.target.classList.add(\"active\");\n          setActiveMenuItem();\n        });\n    }\n\n    function ShowCommitArea(reservation_code, transaction_id) {\n      var commit_area = document.createElement(\"div\");\n      commit_area.className = \"ui segment\";\n\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Commit Reservation\";\n      commit_area.appendChild(title);\n\n      let form = document.createElement(\"form\");\n      form.className = \"ui form\";\n\n      form.appendChild(createFormField(\"reservationId\", \"reservationId\", \"Reservation ID\", \"text\", reservation_code));\n\n      form.appendChild(createFormField(\"transactionId\", \"transactionId\", \"Transaction ID\", \"text\", transaction_id));\n\n      var button = document.createElement(\"div\");\n      button.className = \"ui teal button\";\n      button.textContent = \"Commit Reservation\";\n      button.onclick = function() {\n        sendCommit(reservation_code, transaction_id);\n      };\n      form.appendChild(button);\n\n      commit_area.appendChild(form);\n      document.getElementById(\"viewArea\").appendChild(commit_area);\n    }\n\n    function sendCommit(reservationId, transactionId) {\n      var commitData = {\n        reservationId: reservationId,\n        transactionId: transactionId,\n        api_key: 'yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du'\n      };\n\n      fetch(`/Omnibees/SendHotelResCommit`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        body: JSON.stringify(commitData)\n      })\n        .then(response => response.json())\n        .then(data => {\n          if(data.WarningsType !== null){\n            data.WarningsType.forEach(warning => {\n              console.warn('Warning:', warning);\n              let warning_item = document.createElement(\"div\");\n              warning_item.className = \"item\";\n              warning_item.textContent = warning;\n              warnings_area.appendChild(warning_item);\n            });\n          }else{\n            if(data.ResResponseType == \"Commited\"){\n              alert(`Reservation committed successfully!`);\n            }else{\n              alert(`Reservation commit failed: ${data.ResResponseType}`);\n            }\n          }\n          \n        })\n        .catch(error => console.error('Error:', error));\n    }\n\n    function showReservationList(data){\n      let viewArea = document.getElementById(\"viewArea\");\n      viewArea.innerHTML = \"\";\n      let container = document.createElement(\"div\");\n      container.className = \"ui segment\";\n      viewArea.appendChild(container);\n      let title = document.createElement(\"h3\");\n      title.textContent = \"Reservations List\";\n      container.appendChild(title);\n\n      let list = document.createElement(\"div\");\n      list.className = \"ui list\";\n      container.appendChild(list);\n\n      data.HotelReservationsType.HotelReservations.forEach(reservation => {\n        let item = document.createElement(\"div\");\n        item.className = \"item\";\n\n        let content = document.createElement(\"div\");\n        content.className = \"content\";\n\n        let header = document.createElement(\"div\");\n        header.className = \"header\";\n        header.textContent = `Reservation ID: ${reservation.UniqueID.ID} `;\n\n        let description = document.createElement(\"div\");\n        description.className = \"description\";\n        description.innerHTML = ``;\n        reservation.RoomStaysType.RoomStays.forEach(room => {\n          description.innerHTML += `<p>Room: ${room.IndexNumber} \n          - CheckIn: ${room.RoomRates.EffectiveDate} \n          - CheckOut: ${room.RoomRates.ExpireDate} \n          - Total: ${room.Total.AmountAfterTax}\n          </p>`;\n        });\n        content.appendChild(description);\n\n        content.appendChild(header);\n        item.appendChild(content);\n        list.appendChild(item);\n      });\n    }\n\n  </script>\n</head>\n<body onload=\"localStart()\">\n  <br>\n  <div class=\"ui container\">\n    <div class=\"ui grid\">\n      <div class=\"sixteen wide column\">\n        <div class=\"ui header\">\n          Omnibees API Test\n        </div>\n      </div>\n      <div class=\" row\">\n        <div class=\"six wide column\">\n          <div class=\"ui vertical fluid  menu\">\n            <a class=\"item\" href=\"#Omnibees/ping\" onClick=\"pings(event);\">Ping</a>\n\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetCountry\" data-rute=\"GetCountry\">GetCountry</a>\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetState\" data-rute=\"GetState\" data-form=\"getStateForm\">GetState</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getStateForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"country_uid\">Country Code</label>\n                    <input type=\"text\" id=\"country_uid\" name=\"country_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"state_search_code\">state search code</label>\n                    <input type=\"text\" id=\"state_search_code\" name=\"state_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"zone_search_code\">zone search code</label>\n                    <input type=\"text\" id=\"zone_search_code\" name=\"zone_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  \n                </div>\n              </form>\n\n            </div>\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetCity\" data-rute=\"GetCity\" data-form=\"getCityForm\">GetCity</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getCityForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"country_uid_city\">Country Code</label>\n                    <input type=\"text\" id=\"country_uid_city\" name=\"country_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"state_search_code_city\">state search code</label>\n                    <input type=\"text\" id=\"state_search_code_city\" name=\"state_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  \n                </div>\n              </form>\n\n            </div>\n            <a class=\"item generalRequest\" href=\"#Omnibees/GetZones\" data-rute=\"GetZones\" data-form=\"getZonesForm\">GetZones</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getZonesForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"country_uid_zone\">Country Code</label>\n                    <input type=\"text\" id=\"country_uid_zone\" name=\"country_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"state_search_code_zone\">state search code</label>\n                    <input type=\"text\" id=\"state_search_code_zone\" name=\"state_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"zone_search_code_zone\">zone search code</label>\n                    <input type=\"text\" id=\"zone_search_code_zone\" name=\"zone_search_code\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"cities_data_uid_zone\">cities data uid</label>\n                    <input type=\"text\" id=\"cities_data_uid_zone\" name=\"cities_data_uid\" value=\"\" placeholder=\"\">\n                  </div>\n                  \n                </div>\n              </form>\n\n            </div>\n            <div class=\"ui divider\"></div>\n            <a class=\"item\" href=\"#Omnibees/HotelSearch\" onClick=\"hotelSearch(event)\">HotelSearch</a>\n            <div class=\"item\">\n              <div class=\"header\">GetHotelDescriptiveInfo</div>\n              <div class=\"menu\">\n              \n                  <a href=\"#viewHotel_198335\" class=\"item\" onClick=\"GetHotelDescriptiveInfo(event,6220)\"> Hotel 6220 - Royal cabo </a>\n              </div>\n            </div>\n            \n            <a class=\"item\" href=\"#Omnibees/HotelAvailCalendar\" onClick=\"ShowReservationStartForm(event)\">Reservation Start</a>\n            <div class=\"item\">\n              <form action=\"\" id=\">HotelAvailCalendarForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"resort_uuid_bookings\">Resort UUID</label>\n                    <input type=\"text\" id=\"resort_uuid_bookings\" name=\"resort_uuid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"from_bookings\">Start date</label>\n                    <input type=\"date\" id=\"from_bookings\" name=\"start_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                  <div class=\"field\">\n                    <label for=\"to_bookings\">End date</label>\n                    <input type=\"date\" id=\"to_bookings\" name=\"end_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                </div>\n              </form>\n            </div>\n            <div class=\"item\">\n              <div class=\"header\">GetHotelRatePlans</div>\n              <div class=\"menu\">\n              \n                  <a href=\"#viewHotel_6220\" class=\"item\" onClick=\"GetHotelRatePlans(event,6220,'')\"> Hotel 6220 - Royal cabo </a>\n              </div>\n            </div>\n            <a class=\"item\" href=\"#Omnibees/SendHotelRes\">SendHotelRes</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResCommit\">SendHotelResCommit</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResModify\">SendHotelResModify</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResModifyCommit\">SendHotelResModifyCommit</a>\n            <a class=\"item\" href=\"#Omnibees/SendHotelResCancel\">SendHotelResCancel</a>\n            \n            <a class=\"item generalRequest\" href=\"#Omnibees/GetBookings\" data-rute=\"GetBookings\" data-form=\"getBookingsForm\" data-postSecuence=\"showReservationList\">GetBookings</a>\n            <div class=\"item\">\n              <form action=\"\" id=\"getBookingsForm\">\n                <div class=\"ui form\">\n                  <div class=\"field\">\n                    <label for=\"resort_uuid_bookings\">Resort UUID</label>\n                    <input type=\"text\" id=\"resort_uuid_bookings\" name=\"resort_uuid\" value=\"\" placeholder=\"\">\n                  </div>\n                  <div class=\"field\">\n                    <label for=\"from_bookings\">Start date</label>\n                    <input type=\"date\" id=\"from_bookings\" name=\"start_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                  <div class=\"field\">\n                    <label for=\"to_bookings\">End date</label>\n                    <input type=\"date\" id=\"to_bookings\" name=\"end_date\" value=\"\" placeholder=\"\">\n                  </div>\n\n                </div>\n              </form>\n            </div>\n            \n          </div>\n        </div>\n        <div class=\"ten wide column\" id=\"viewArea\">\n          \n        </div>\n      </div>\n      <div class=\"sixteen wide column\">\n        <div class=\"ui divider\"></div>\n        <div class=\"ui header\">\n           Logs\n        </div>\n      </div>\n      <div class=\" row\">\n        <div class=\"sixteen wide column\">\n          <div class=\"ui basic segment\" id=\"jsonViewerContainer\" style=\"padding:0;\">\n            <andypf-json-viewer id=\"jsonViewer\"></andypf-json-viewer>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <script>\n    const jsonViewer = document.getElementById(\"jsonViewer\");\n    jsonViewer.id = \"json\"\n    jsonViewer.expanded = 2\n    jsonViewer.indent = 2\n    jsonViewer.showDataTypes = true\n    jsonViewer.theme = \"monokai\"\n    jsonViewer.showToolbar = true\n    jsonViewer.showSize = true\n    jsonViewer.showCopy = true\n    jsonViewer.expandIconType = \"square\"\n    jsonViewer.data = { example: \"data\" }\n\n\n    \n  </script>\n</body>\n</html>"}} {"uid":"9980351"}
[2025-10-06 09:32:14] slim-app.INFO: Petition {"incoming":{"Method":"GET","api":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Route":"https://omnibees.clubsolaris.com/Omnibees/GetHotelRatePlans?api_key=yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du&hotelCode=6220","Data":{"api_key":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","hotelCode":"6220"}},"response":{"status":200,"type":"application/json","body":{"EchoToken":"system_f662af32-6b22-c221-ca88-b3cd5ab02d62","TimeStamp":"2025-10-06T16:32:14.1040703Z","Target":0,"Version":7.20000000000000017763568394002504646778106689453125,"PrimaryLangID":1,"Success":[],"WarningsType":null,"ErrorsType":null,"RatePlans":{"HotelRef":{"HotelCode":6220,"ChainCode":null,"HotelName":null,"BrandName":null,"ChainName":null},"RatePlan":[{"SellableProducts":{"SellableProduct":[{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39120,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39121,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39122,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39123,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39124,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}}]},"ServiceRPHs":null,"SupplierCode":"C1420_44922","EffectiveDate":"2023-12-30T00:00:00","ExpireDate":null,"RatePlanName":"Public Rate BX USD","Guarantees":[{"Start":null,"Duration":null,"End":null,"GuaranteeDescription":{"Name":"Deposit/Guarantee Policy 14 days","Language":null,"Description":"Prepayment: The full payment for the reservation must be made 14 days prior to arrival.\n\nImportant: If payment is not made on the established days or before the guest's arrival, the reservation may be canceled with prior notice, and the guest will be charged the Rack (high) rate upon check-in.\n\nFor credit card payments, please consider the following:\nPayment with VISA or Mastercard has a bank fee of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank fee of 4.49% of the total, which must be absorbed by the agency.\nThe bank transfer fee is not the hotel's responsibility.\n\"If you request an invoice, please inform us at the time of booking and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":22499}],"CancelPenalties":[{"NonRefundable":false,"Start":null,"Duration":null,"End":null,"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":7,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":2,"Amount":0,"Percent":0,"CurrencyCode":109},"PenaltyDescription":{"Name":"CANCELLATION 2 NIGHTS PENALTY","Language":null,"Description":"Cancellations made 7 days or less before arrival, no-shows and early departures will be penalized with a 2-night penalty of the total cost of the stay.\n\nIf it is a situation external to the client such as a cancelled flight, positive for covid-19, etc., the credit will remain in favor of a future reservation paying the difference in stay if it has a different rate, policies subject to change without prior notice."},"AmountRules":null}],"RatePlanInclusions":null,"MealsIncluded":null,"RatePlanID":412006,"TaxPolicies":null,"RatePlanDescription":{"Language":null,"Description":""},"AdditionalDetailsType":{"AdditionalDetails":[{"DetailDescription":{"Name":"General policy","Language":null,"Description":"Check-out: 11 am\rMinimum check-in age is 18\rChildren are welcome:\r0 - 4 years old: Free\r5 - 12 years old: additional cost depending of season.\rClients must present an identification at check-in.\rSpecial requests are subject to availability upon check-in and may incur additional charges. \rSpecial requests cannot be guaranteed.\rAll payments made by American Express credit card applies a 5% fee in case of cancellations and/or refund. For more details, please contact the office using the information on the reservation confirmation received after booking.\rA resort fee is included in the total price displayed. Only registered guests are allowed in the guestrooms.\r"}}]},"Offers":null,"PaymentPolicies":{"AcceptedPayments":[{"RPH":4,"GuaranteeTypeCode":4,"PaymentCard":null,"GuaranteeID":null}]},"Commission":null,"CurrencyCode":109,"RatePlanTypeCode":13,"SortOrder":null,"PriceViewableInd":true,"TPA_Extensions":{"POS":{"Sources":[{"ISOCountry":"AFG"},{"ISOCountry":"ALB"},{"ISOCountry":"DZA"},{"ISOCountry":"AND"},{"ISOCountry":"AGO"},{"ISOCountry":"ATG"},{"ISOCountry":"ARG"},{"ISOCountry":"ARM"},{"ISOCountry":"AUS"},{"ISOCountry":"AUT"},{"ISOCountry":"AZE"},{"ISOCountry":"BHS"},{"ISOCountry":"BHR"},{"ISOCountry":"BGD"},{"ISOCountry":"BRB"},{"ISOCountry":"BLR"},{"ISOCountry":"BEL"},{"ISOCountry":"BLZ"},{"ISOCountry":"BEN"},{"ISOCountry":"BTN"},{"ISOCountry":"BOL"},{"ISOCountry":"BIH"},{"ISOCountry":"BWA"},{"ISOCountry":"BRA"},{"ISOCountry":"BRN"},{"ISOCountry":"BGR"},{"ISOCountry":"BFA"},{"ISOCountry":"BDI"},{"ISOCountry":"KHM"},{"ISOCountry":"CMR"},{"ISOCountry":"CAN"},{"ISOCountry":"CPV"},{"ISOCountry":"CAF"},{"ISOCountry":"TCD"},{"ISOCountry":"CHL"},{"ISOCountry":"CHN"},{"ISOCountry":"COL"},{"ISOCountry":"COM"},{"ISOCountry":"COG"},{"ISOCountry":"COD"},{"ISOCountry":"CRI"},{"ISOCountry":"HRV"},{"ISOCountry":"CUB"},{"ISOCountry":"CYP"},{"ISOCountry":"CZE"},{"ISOCountry":"DNK"},{"ISOCountry":"DJI"},{"ISOCountry":"DMA"},{"ISOCountry":"DOM"},{"ISOCountry":"TLS"},{"ISOCountry":"ECU"},{"ISOCountry":"EGY"},{"ISOCountry":"SLV"},{"ISOCountry":"GNQ"},{"ISOCountry":"ERI"},{"ISOCountry":"EST"},{"ISOCountry":"ETH"},{"ISOCountry":"FJI"},{"ISOCountry":"FIN"},{"ISOCountry":"FRA"},{"ISOCountry":"GAB"},{"ISOCountry":"GMB"},{"ISOCountry":"GEO"},{"ISOCountry":"DEU"},{"ISOCountry":"GHA"},{"ISOCountry":"GRC"},{"ISOCountry":"GRD"},{"ISOCountry":"GTM"},{"ISOCountry":"GIN"},{"ISOCountry":"GNB"},{"ISOCountry":"GUY"},{"ISOCountry":"HTI"},{"ISOCountry":"HND"},{"ISOCountry":"HUN"},{"ISOCountry":"ISL"},{"ISOCountry":"IND"},{"ISOCountry":"IDN"},{"ISOCountry":"IRN"},{"ISOCountry":"IRQ"},{"ISOCountry":"IRL"},{"ISOCountry":"ISR"},{"ISOCountry":"ITA"},{"ISOCountry":"CIV"},{"ISOCountry":"JAM"},{"ISOCountry":"JPN"},{"ISOCountry":"JOR"},{"ISOCountry":"KAZ"},{"ISOCountry":"KEN"},{"ISOCountry":"KIR"},{"ISOCountry":"PRK"},{"ISOCountry":"KOR"},{"ISOCountry":"XKX"},{"ISOCountry":"KWT"},{"ISOCountry":"KGZ"},{"ISOCountry":"LVA"},{"ISOCountry":"LBN"},{"ISOCountry":"LSO"},{"ISOCountry":"LBR"},{"ISOCountry":"LBY"},{"ISOCountry":"LIE"},{"ISOCountry":"LTU"},{"ISOCountry":"LUX"},{"ISOCountry":"MKD"},{"ISOCountry":"MDG"},{"ISOCountry":"MWI"},{"ISOCountry":"MYS"},{"ISOCountry":"MDV"},{"ISOCountry":"MLI"},{"ISOCountry":"MLT"},{"ISOCountry":"MRT"},{"ISOCountry":"MUS"},{"ISOCountry":"MEX"},{"ISOCountry":"MDA"},{"ISOCountry":"MCO"},{"ISOCountry":"MNG"},{"ISOCountry":"MNE"},{"ISOCountry":"MAR"},{"ISOCountry":"MOZ"},{"ISOCountry":"MMR"},{"ISOCountry":"NAM"},{"ISOCountry":"NRU"},{"ISOCountry":"NPL"},{"ISOCountry":"NLD"},{"ISOCountry":"NZL"},{"ISOCountry":"NIC"},{"ISOCountry":"NER"},{"ISOCountry":"NGA"},{"ISOCountry":"NOR"},{"ISOCountry":"OMN"},{"ISOCountry":"PAK"},{"ISOCountry":"PAN"},{"ISOCountry":"PNG"},{"ISOCountry":"PRY"},{"ISOCountry":"PER"},{"ISOCountry":"PHL"},{"ISOCountry":"POL"},{"ISOCountry":"PRT"},{"ISOCountry":"QAT"},{"ISOCountry":"ROU"},{"ISOCountry":"RUS"},{"ISOCountry":"RWA"},{"ISOCountry":"KNA"},{"ISOCountry":"LCA"},{"ISOCountry":"VCT"},{"ISOCountry":"WSM"},{"ISOCountry":"SMR"},{"ISOCountry":"STP"},{"ISOCountry":"SAU"},{"ISOCountry":"SEN"},{"ISOCountry":"SRB"},{"ISOCountry":"SYC"},{"ISOCountry":"SLE"},{"ISOCountry":"SGP"},{"ISOCountry":"SVK"},{"ISOCountry":"SVN"},{"ISOCountry":"SLB"},{"ISOCountry":"SOM"},{"ISOCountry":"ZAF"},{"ISOCountry":"ESP"},{"ISOCountry":"LKA"},{"ISOCountry":"SDN"},{"ISOCountry":"SUR"},{"ISOCountry":"SWZ"},{"ISOCountry":"SWE"},{"ISOCountry":"CHE"},{"ISOCountry":"SYR"},{"ISOCountry":"TWN"},{"ISOCountry":"TJK"},{"ISOCountry":"TZA"},{"ISOCountry":"THA"},{"ISOCountry":"TGO"},{"ISOCountry":"TON"},{"ISOCountry":"TTO"},{"ISOCountry":"TUN"},{"ISOCountry":"TUR"},{"ISOCountry":"TKM"},{"ISOCountry":"TUV"},{"ISOCountry":"UGA"},{"ISOCountry":"UKR"},{"ISOCountry":"ARE"},{"ISOCountry":"GBR"},{"ISOCountry":"USA"},{"ISOCountry":"URY"},{"ISOCountry":"UZB"},{"ISOCountry":"VUT"},{"ISOCountry":"VAT"},{"ISOCountry":"VEN"},{"ISOCountry":"VNM"},{"ISOCountry":"YEM"},{"ISOCountry":"ZMB"},{"ISOCountry":"ZWE"},{"ISOCountry":"HKG"},{"ISOCountry":"CUW"},{"ISOCountry":"BES"},{"ISOCountry":"MAF"},{"ISOCountry":"PRI"},{"ISOCountry":"VGB"}]},"WLCode":9,"ProviderName":"Omnibees","ProviderCode":"OMNB","Markup":null,"Package":null}},{"SellableProducts":{"SellableProduct":[{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39120,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39121,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39122,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39123,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39124,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}}]},"ServiceRPHs":null,"SupplierCode":"C1420_44922","EffectiveDate":"2024-01-04T00:00:00","ExpireDate":null,"RatePlanName":"Flex Package Rate USD","Guarantees":[{"Start":null,"Duration":null,"End":null,"GuaranteeDescription":{"Name":"Deposit/Guarantee Policy 14 days","Language":null,"Description":"Prepayment: The full payment for the reservation must be made 14 days prior to arrival.\n\nImportant: If payment is not made on the established days or before the guest's arrival, the reservation may be canceled with prior notice, and the guest will be charged the Rack (high) rate upon check-in.\n\nFor credit card payments, please consider the following:\nPayment with VISA or Mastercard has a bank fee of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank fee of 4.49% of the total, which must be absorbed by the agency.\nThe bank transfer fee is not the hotel's responsibility.\n\"If you request an invoice, please inform us at the time of booking and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":22499}],"CancelPenalties":[{"NonRefundable":false,"Start":null,"Duration":null,"End":null,"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":7,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":2,"Amount":0,"Percent":0,"CurrencyCode":109},"PenaltyDescription":{"Name":"CANCELLATION 2 NIGHTS PENALTY","Language":null,"Description":"Cancellations made 7 days or less before arrival, no-shows and early departures will be penalized with a 2-night penalty of the total cost of the stay.\n\nIf it is a situation external to the client such as a cancelled flight, positive for covid-19, etc., the credit will remain in favor of a future reservation paying the difference in stay if it has a different rate, policies subject to change without prior notice."},"AmountRules":null}],"RatePlanInclusions":null,"MealsIncluded":{"Breakfast":true,"Lunch":true,"Dinner":true,"MealPlanIndicator":true,"MealPlanCode":1,"ID":19269,"Name":"All inclusive","Description":"Royal Solaris Los Cabos offers an all-inclusive plan.","Price":{"Start":null,"Duration":null,"End":null,"AmountBeforeTax":0,"AmountAfterTax":0,"CurrencyCode":109},"ServicePricingType":18},"RatePlanID":414718,"TaxPolicies":null,"RatePlanDescription":{"Language":null,"Description":""},"AdditionalDetailsType":{"AdditionalDetails":[{"DetailDescription":{"Name":"General policy","Language":null,"Description":"Check-out: 11 am\rMinimum check-in age is 18\rChildren are welcome:\r0 - 4 years old: Free\r5 - 12 years old: additional cost depending of season.\rClients must present an identification at check-in.\rSpecial requests are subject to availability upon check-in and may incur additional charges. \rSpecial requests cannot be guaranteed.\rAll payments made by American Express credit card applies a 5% fee in case of cancellations and/or refund. For more details, please contact the office using the information on the reservation confirmation received after booking.\rA resort fee is included in the total price displayed. Only registered guests are allowed in the guestrooms.\r"}}]},"Offers":null,"PaymentPolicies":{"AcceptedPayments":[{"RPH":5,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null},{"RPH":2,"GuaranteeTypeCode":2,"PaymentCard":null,"GuaranteeID":null},{"RPH":3,"GuaranteeTypeCode":3,"PaymentCard":null,"GuaranteeID":null},{"RPH":4,"GuaranteeTypeCode":4,"PaymentCard":null,"GuaranteeID":null}]},"Commission":null,"CurrencyCode":109,"RatePlanTypeCode":13,"SortOrder":null,"PriceViewableInd":true,"TPA_Extensions":{"POS":{"Sources":[{"ISOCountry":"AFG"},{"ISOCountry":"DZA"},{"ISOCountry":"AGO"},{"ISOCountry":"ATG"},{"ISOCountry":"ARG"},{"ISOCountry":"ARM"},{"ISOCountry":"AUS"},{"ISOCountry":"AZE"},{"ISOCountry":"BHS"},{"ISOCountry":"BHR"},{"ISOCountry":"BGD"},{"ISOCountry":"BRB"},{"ISOCountry":"BLZ"},{"ISOCountry":"BEN"},{"ISOCountry":"BTN"},{"ISOCountry":"BOL"},{"ISOCountry":"BWA"},{"ISOCountry":"BRA"},{"ISOCountry":"BRN"},{"ISOCountry":"BFA"},{"ISOCountry":"BDI"},{"ISOCountry":"KHM"},{"ISOCountry":"CMR"},{"ISOCountry":"CAN"},{"ISOCountry":"CPV"},{"ISOCountry":"CAF"},{"ISOCountry":"TCD"},{"ISOCountry":"CHL"},{"ISOCountry":"CHN"},{"ISOCountry":"COL"},{"ISOCountry":"COM"},{"ISOCountry":"COG"},{"ISOCountry":"COD"},{"ISOCountry":"CRI"},{"ISOCountry":"CUB"},{"ISOCountry":"CYP"},{"ISOCountry":"DJI"},{"ISOCountry":"DMA"},{"ISOCountry":"DOM"},{"ISOCountry":"TLS"},{"ISOCountry":"ECU"},{"ISOCountry":"EGY"},{"ISOCountry":"SLV"},{"ISOCountry":"GNQ"},{"ISOCountry":"ERI"},{"ISOCountry":"ETH"},{"ISOCountry":"FJI"},{"ISOCountry":"GAB"},{"ISOCountry":"GMB"},{"ISOCountry":"GEO"},{"ISOCountry":"GHA"},{"ISOCountry":"GRD"},{"ISOCountry":"GTM"},{"ISOCountry":"GIN"},{"ISOCountry":"GNB"},{"ISOCountry":"GUY"},{"ISOCountry":"HTI"},{"ISOCountry":"HND"},{"ISOCountry":"IND"},{"ISOCountry":"IDN"},{"ISOCountry":"IRN"},{"ISOCountry":"IRQ"},{"ISOCountry":"ISR"},{"ISOCountry":"CIV"},{"ISOCountry":"JAM"},{"ISOCountry":"JPN"},{"ISOCountry":"JOR"},{"ISOCountry":"KAZ"},{"ISOCountry":"KEN"},{"ISOCountry":"KIR"},{"ISOCountry":"PRK"},{"ISOCountry":"KOR"},{"ISOCountry":"KWT"},{"ISOCountry":"KGZ"},{"ISOCountry":"LBN"},{"ISOCountry":"LSO"},{"ISOCountry":"LBR"},{"ISOCountry":"LBY"},{"ISOCountry":"MDG"},{"ISOCountry":"MWI"},{"ISOCountry":"MYS"},{"ISOCountry":"MDV"},{"ISOCountry":"MLI"},{"ISOCountry":"MHL"},{"ISOCountry":"MRT"},{"ISOCountry":"MUS"},{"ISOCountry":"MEX"},{"ISOCountry":"FSM"},{"ISOCountry":"MNG"},{"ISOCountry":"MAR"},{"ISOCountry":"MOZ"},{"ISOCountry":"MMR"},{"ISOCountry":"NAM"},{"ISOCountry":"NRU"},{"ISOCountry":"NPL"},{"ISOCountry":"NZL"},{"ISOCountry":"NIC"},{"ISOCountry":"NER"},{"ISOCountry":"NGA"},{"ISOCountry":"OMN"},{"ISOCountry":"PAK"},{"ISOCountry":"PLW"},{"ISOCountry":"PAN"},{"ISOCountry":"PNG"},{"ISOCountry":"PRY"},{"ISOCountry":"PER"},{"ISOCountry":"PHL"},{"ISOCountry":"QAT"},{"ISOCountry":"RWA"},{"ISOCountry":"KNA"},{"ISOCountry":"LCA"},{"ISOCountry":"VCT"},{"ISOCountry":"WSM"},{"ISOCountry":"STP"},{"ISOCountry":"SAU"},{"ISOCountry":"SEN"},{"ISOCountry":"SYC"},{"ISOCountry":"SLE"},{"ISOCountry":"SGP"},{"ISOCountry":"SLB"},{"ISOCountry":"SOM"},{"ISOCountry":"ZAF"},{"ISOCountry":"LKA"},{"ISOCountry":"SDN"},{"ISOCountry":"SUR"},{"ISOCountry":"SWZ"},{"ISOCountry":"SYR"},{"ISOCountry":"TWN"},{"ISOCountry":"TJK"},{"ISOCountry":"TZA"},{"ISOCountry":"THA"},{"ISOCountry":"TGO"},{"ISOCountry":"TON"},{"ISOCountry":"TTO"},{"ISOCountry":"TUN"},{"ISOCountry":"TKM"},{"ISOCountry":"TUV"},{"ISOCountry":"UGA"},{"ISOCountry":"ARE"},{"ISOCountry":"USA"},{"ISOCountry":"URY"},{"ISOCountry":"UZB"},{"ISOCountry":"VUT"},{"ISOCountry":"VEN"},{"ISOCountry":"VNM"},{"ISOCountry":"YEM"},{"ISOCountry":"ZMB"},{"ISOCountry":"ZWE"},{"ISOCountry":"HKG"},{"ISOCountry":"MAF"},{"ISOCountry":"PRI"},{"ISOCountry":"VGB"}]},"WLCode":9,"ProviderName":"Omnibees","ProviderCode":"OMNB","Markup":null,"Package":null}},{"SellableProducts":{"SellableProduct":[{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39120,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39121,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39122,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39123,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39124,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137946,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137947,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137950,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137951,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137952,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137965,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}}]},"ServiceRPHs":[{"RPH":99128,"IsPerRoom":true}],"SupplierCode":"C1420_44922","EffectiveDate":"2025-09-17T00:00:00","ExpireDate":null,"RatePlanName":"Solaris Club Members","Guarantees":[{"Start":null,"Duration":null,"End":null,"GuaranteeDescription":{"Name":"Deposit/Guarantee Policy 14 days","Language":null,"Description":"Prepayment: The full payment for the reservation must be made 14 days prior to arrival.\n\nImportant: If payment is not made on the established days or before the guest's arrival, the reservation may be canceled with prior notice, and the guest will be charged the Rack (high) rate upon check-in.\n\nFor credit card payments, please consider the following:\nPayment with VISA or Mastercard has a bank fee of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank fee of 4.49% of the total, which must be absorbed by the agency.\nThe bank transfer fee is not the hotel's responsibility.\n\"If you request an invoice, please inform us at the time of booking and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":22499},{"Start":"2025-09-17T00:00:00","Duration":null,"End":"2026-12-20T00:00:00","GuaranteeDescription":{"Name":"Deposit Policy / Guarantee 7 days","Language":null,"Description":"Prepayment: Full payment for the reservation must be made 7 days before arrival.\n\nImportant: If payment for the reservation is not made on the established days or before the client's arrival, the reservation may be cancelled with prior notice and the client will be charged the Rack rate at check in.\n\nFor payment by credit card please consider the following:\nPayment with VISA or Mastercard has a bank commission of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank commission of 4.49% of the total, which must be absorbed by the agency.\n\n\"If you request an invoice, please inform us at the time of making the reservation and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":7,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":9715}],"CancelPenalties":[{"NonRefundable":false,"Start":null,"Duration":null,"End":null,"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"PenaltyDescription":{"Name":"POLITICS 14 DAYS","Language":null,"Description":"Cancellations made 14 days or less before arrival, no-shows and early departures will be penalized with 100% of the stay\n\nIf it is a situation external to the client such as a cancelled flight, positive for covid-19, etc., the credit will remain in favor for a future reservation paying the difference in stay if there is a different rate, policies subject to change without prior notice."},"AmountRules":null}],"RatePlanInclusions":null,"MealsIncluded":{"Breakfast":true,"Lunch":true,"Dinner":true,"MealPlanIndicator":true,"MealPlanCode":1,"ID":19269,"Name":"All inclusive","Description":"Royal Solaris Los Cabos offers an all-inclusive plan.","Price":{"Start":null,"Duration":null,"End":null,"AmountBeforeTax":0,"AmountAfterTax":0,"CurrencyCode":109},"ServicePricingType":18},"RatePlanID":560301,"TaxPolicies":null,"RatePlanDescription":{"Language":null,"Description":"Club Solaris Member Rate"},"AdditionalDetailsType":{"AdditionalDetails":[{"DetailDescription":{"Name":"General policy","Language":null,"Description":"Check-out: 11 am\rMinimum check-in age is 18\rChildren are welcome:\r0 - 4 years old: Free\r5 - 12 years old: additional cost depending of season.\rClients must present an identification at check-in.\rSpecial requests are subject to availability upon check-in and may incur additional charges. \rSpecial requests cannot be guaranteed.\rAll payments made by American Express credit card applies a 5% fee in case of cancellations and/or refund. For more details, please contact the office using the information on the reservation confirmation received after booking.\rA resort fee is included in the total price displayed. Only registered guests are allowed in the guestrooms.\r"}}]},"Offers":null,"PaymentPolicies":{"AcceptedPayments":[{"RPH":5,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null},{"RPH":2,"GuaranteeTypeCode":2,"PaymentCard":null,"GuaranteeID":null},{"RPH":3,"GuaranteeTypeCode":3,"PaymentCard":null,"GuaranteeID":null},{"RPH":4,"GuaranteeTypeCode":4,"PaymentCard":null,"GuaranteeID":null}]},"Commission":null,"CurrencyCode":109,"RatePlanTypeCode":13,"SortOrder":null,"PriceViewableInd":true,"TPA_Extensions":{"POS":{"Sources":[{"ISOCountry":"AFG"},{"ISOCountry":"ALB"},{"ISOCountry":"DZA"},{"ISOCountry":"AND"},{"ISOCountry":"AGO"},{"ISOCountry":"ATG"},{"ISOCountry":"ARG"},{"ISOCountry":"ARM"},{"ISOCountry":"AUS"},{"ISOCountry":"AUT"},{"ISOCountry":"AZE"},{"ISOCountry":"BHS"},{"ISOCountry":"BHR"},{"ISOCountry":"BGD"},{"ISOCountry":"BRB"},{"ISOCountry":"BLR"},{"ISOCountry":"BEL"},{"ISOCountry":"BLZ"},{"ISOCountry":"BEN"},{"ISOCountry":"BTN"},{"ISOCountry":"BOL"},{"ISOCountry":"BIH"},{"ISOCountry":"BWA"},{"ISOCountry":"BRA"},{"ISOCountry":"BRN"},{"ISOCountry":"BGR"},{"ISOCountry":"BFA"},{"ISOCountry":"BDI"},{"ISOCountry":"KHM"},{"ISOCountry":"CMR"},{"ISOCountry":"CAN"},{"ISOCountry":"CPV"},{"ISOCountry":"CAF"},{"ISOCountry":"TCD"},{"ISOCountry":"CHL"},{"ISOCountry":"CHN"},{"ISOCountry":"COL"},{"ISOCountry":"COM"},{"ISOCountry":"COG"},{"ISOCountry":"COD"},{"ISOCountry":"CRI"},{"ISOCountry":"HRV"},{"ISOCountry":"CUB"},{"ISOCountry":"CYP"},{"ISOCountry":"CZE"},{"ISOCountry":"DNK"},{"ISOCountry":"DJI"},{"ISOCountry":"DMA"},{"ISOCountry":"DOM"},{"ISOCountry":"TLS"},{"ISOCountry":"ECU"},{"ISOCountry":"EGY"},{"ISOCountry":"SLV"},{"ISOCountry":"GNQ"},{"ISOCountry":"ERI"},{"ISOCountry":"EST"},{"ISOCountry":"ETH"},{"ISOCountry":"FJI"},{"ISOCountry":"FIN"},{"ISOCountry":"FRA"},{"ISOCountry":"GAB"},{"ISOCountry":"GMB"},{"ISOCountry":"GEO"},{"ISOCountry":"DEU"},{"ISOCountry":"GHA"},{"ISOCountry":"GRC"},{"ISOCountry":"GRD"},{"ISOCountry":"GTM"},{"ISOCountry":"GIN"},{"ISOCountry":"GNB"},{"ISOCountry":"GUY"},{"ISOCountry":"HTI"},{"ISOCountry":"HND"},{"ISOCountry":"HUN"},{"ISOCountry":"ISL"},{"ISOCountry":"IND"},{"ISOCountry":"IDN"},{"ISOCountry":"IRN"},{"ISOCountry":"IRQ"},{"ISOCountry":"IRL"},{"ISOCountry":"ISR"},{"ISOCountry":"ITA"},{"ISOCountry":"CIV"},{"ISOCountry":"JAM"},{"ISOCountry":"JPN"},{"ISOCountry":"JOR"},{"ISOCountry":"KAZ"},{"ISOCountry":"KEN"},{"ISOCountry":"KIR"},{"ISOCountry":"PRK"},{"ISOCountry":"KOR"},{"ISOCountry":"XKX"},{"ISOCountry":"KWT"},{"ISOCountry":"KGZ"},{"ISOCountry":"LAO"},{"ISOCountry":"LVA"},{"ISOCountry":"LBN"},{"ISOCountry":"LSO"},{"ISOCountry":"LBR"},{"ISOCountry":"LBY"},{"ISOCountry":"LIE"},{"ISOCountry":"LTU"},{"ISOCountry":"LUX"},{"ISOCountry":"MKD"},{"ISOCountry":"MDG"},{"ISOCountry":"MWI"},{"ISOCountry":"MYS"},{"ISOCountry":"MDV"},{"ISOCountry":"MLI"},{"ISOCountry":"MLT"},{"ISOCountry":"MHL"},{"ISOCountry":"MRT"},{"ISOCountry":"MUS"},{"ISOCountry":"MEX"},{"ISOCountry":"FSM"},{"ISOCountry":"MDA"},{"ISOCountry":"MCO"},{"ISOCountry":"MNG"},{"ISOCountry":"MNE"},{"ISOCountry":"MAR"},{"ISOCountry":"MOZ"},{"ISOCountry":"MMR"},{"ISOCountry":"NAM"},{"ISOCountry":"NRU"},{"ISOCountry":"NPL"},{"ISOCountry":"NLD"},{"ISOCountry":"NZL"},{"ISOCountry":"NIC"},{"ISOCountry":"NER"},{"ISOCountry":"NGA"},{"ISOCountry":"NOR"},{"ISOCountry":"OMN"},{"ISOCountry":"PAK"},{"ISOCountry":"PLW"},{"ISOCountry":"PAN"},{"ISOCountry":"PNG"},{"ISOCountry":"PRY"},{"ISOCountry":"PER"},{"ISOCountry":"PHL"},{"ISOCountry":"POL"},{"ISOCountry":"PRT"},{"ISOCountry":"QAT"},{"ISOCountry":"ROU"},{"ISOCountry":"RUS"},{"ISOCountry":"RWA"},{"ISOCountry":"KNA"},{"ISOCountry":"LCA"},{"ISOCountry":"WSM"},{"ISOCountry":"SMR"},{"ISOCountry":"STP"},{"ISOCountry":"SAU"},{"ISOCountry":"SEN"},{"ISOCountry":"SRB"},{"ISOCountry":"SYC"},{"ISOCountry":"SLE"},{"ISOCountry":"SGP"},{"ISOCountry":"SVK"},{"ISOCountry":"SVN"},{"ISOCountry":"SLB"},{"ISOCountry":"SOM"},{"ISOCountry":"ZAF"},{"ISOCountry":"ESP"},{"ISOCountry":"LKA"},{"ISOCountry":"SDN"},{"ISOCountry":"SUR"},{"ISOCountry":"SWZ"},{"ISOCountry":"SWE"},{"ISOCountry":"CHE"},{"ISOCountry":"SYR"},{"ISOCountry":"TWN"},{"ISOCountry":"TJK"},{"ISOCountry":"TZA"},{"ISOCountry":"THA"},{"ISOCountry":"TGO"},{"ISOCountry":"TON"},{"ISOCountry":"TTO"},{"ISOCountry":"TUN"},{"ISOCountry":"TUR"},{"ISOCountry":"TKM"},{"ISOCountry":"TUV"},{"ISOCountry":"UGA"},{"ISOCountry":"UKR"},{"ISOCountry":"ARE"},{"ISOCountry":"GBR"},{"ISOCountry":"USA"},{"ISOCountry":"URY"},{"ISOCountry":"UZB"},{"ISOCountry":"VUT"},{"ISOCountry":"VAT"},{"ISOCountry":"VEN"},{"ISOCountry":"VNM"},{"ISOCountry":"YEM"},{"ISOCountry":"ZMB"},{"ISOCountry":"ZWE"},{"ISOCountry":"HKG"},{"ISOCountry":"CUW"},{"ISOCountry":"BES"},{"ISOCountry":"MAF"},{"ISOCountry":"PRI"},{"ISOCountry":"VGB"}]},"WLCode":9,"ProviderName":"Omnibees","ProviderCode":"OMNB","Markup":null,"Package":null}},{"SellableProducts":{"SellableProduct":[{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39120,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39121,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39122,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39123,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":39124,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137946,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}},{"IsRoom":true,"GuestRoom":{"Quantity":null,"MaxOccupancy":null,"MaxAdultOccupancy":null,"MinAdultOccupancy":null,"ID":137947,"MaxChildOccupancy":null,"MaxFreeChildOccupancy":null,"AmenitiesType":null,"MultimediaDescriptionsType":null,"DescriptiveText":null,"TypeRoom":null,"WLCode":null}}]},"ServiceRPHs":[{"RPH":99128,"IsPerRoom":true}],"SupplierCode":"C1420_44922","EffectiveDate":"2025-09-17T00:00:00","ExpireDate":null,"RatePlanName":"Guests and referrals","Guarantees":[{"Start":null,"Duration":null,"End":null,"GuaranteeDescription":{"Name":"Deposit/Guarantee Policy 14 days","Language":null,"Description":"Prepayment: The full payment for the reservation must be made 14 days prior to arrival.\n\nImportant: If payment is not made on the established days or before the guest's arrival, the reservation may be canceled with prior notice, and the guest will be charged the Rack (high) rate upon check-in.\n\nFor credit card payments, please consider the following:\nPayment with VISA or Mastercard has a bank fee of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank fee of 4.49% of the total, which must be absorbed by the agency.\nThe bank transfer fee is not the hotel's responsibility.\n\"If you request an invoice, please inform us at the time of booking and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":22499},{"Start":"2025-09-17T00:00:00","Duration":null,"End":"2025-09-30T00:00:00","GuaranteeDescription":{"Name":"Prepaid Virtual Card","Language":null,"Description":"Prepayment: full payment of the reservation must be paid 3 days before arrival."},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":3,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":24405},{"Start":"2025-12-01T00:00:00","Duration":null,"End":"2026-12-20T00:00:00","GuaranteeDescription":{"Name":"Deposit Policy / Guarantee 7 days","Language":null,"Description":"Prepayment: Full payment for the reservation must be made 7 days before arrival.\n\nImportant: If payment for the reservation is not made on the established days or before the client's arrival, the reservation may be cancelled with prior notice and the client will be charged the Rack rate at check in.\n\nFor payment by credit card please consider the following:\nPayment with VISA or Mastercard has a bank commission of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank commission of 4.49% of the total, which must be absorbed by the agency.\n\n\"If you request an invoice, please inform us at the time of making the reservation and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":7,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":9715},{"Start":"2025-10-01T00:00:00","Duration":null,"End":"2025-10-31T00:00:00","GuaranteeDescription":{"Name":"Invoiced Payment (Voucher)","Language":null,"Description":"Voucher is accepted as a payment method invoiced"},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":18,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":null,"AmountPercent":null,"GuaranteeCode":45504},{"Start":"2025-11-01T00:00:00","Duration":null,"End":"2025-11-30T00:00:00","GuaranteeDescription":{"Name":"Direct payment at the hotel","Language":null,"Description":"Huésped paga directo a su llegada en el hotel"},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":8,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":null,"AmountPercent":null,"GuaranteeCode":45503}],"CancelPenalties":[{"NonRefundable":false,"Start":null,"Duration":null,"End":null,"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"PenaltyDescription":{"Name":"POLITICS 14 DAYS","Language":null,"Description":"Cancellations made 14 days or less before arrival, no-shows and early departures will be penalized with 100% of the stay\n\nIf it is a situation external to the client such as a cancelled flight, positive for covid-19, etc., the credit will remain in favor for a future reservation paying the difference in stay if there is a different rate, policies subject to change without prior notice."},"AmountRules":null}],"RatePlanInclusions":null,"MealsIncluded":{"Breakfast":true,"Lunch":true,"Dinner":true,"MealPlanIndicator":true,"MealPlanCode":1,"ID":19269,"Name":"All inclusive","Description":"Royal Solaris Los Cabos offers an all-inclusive plan.","Price":{"Start":null,"Duration":null,"End":null,"AmountBeforeTax":0,"AmountAfterTax":0,"CurrencyCode":109},"ServicePricingType":18},"RatePlanID":560302,"TaxPolicies":null,"RatePlanDescription":{"Language":null,"Description":"Solaris Club Guest and Referral Rates"},"AdditionalDetailsType":{"AdditionalDetails":[{"DetailDescription":{"Name":"General policy","Language":null,"Description":"Check-out: 11 am\rMinimum check-in age is 18\rChildren are welcome:\r0 - 4 years old: Free\r5 - 12 years old: additional cost depending of season.\rClients must present an identification at check-in.\rSpecial requests are subject to availability upon check-in and may incur additional charges. \rSpecial requests cannot be guaranteed.\rAll payments made by American Express credit card applies a 5% fee in case of cancellations and/or refund. For more details, please contact the office using the information on the reservation confirmation received after booking.\rA resort fee is included in the total price displayed. Only registered guests are allowed in the guestrooms.\r"}}]},"Offers":null,"PaymentPolicies":{"AcceptedPayments":[{"RPH":5,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null},{"RPH":2,"GuaranteeTypeCode":2,"PaymentCard":null,"GuaranteeID":null},{"RPH":3,"GuaranteeTypeCode":3,"PaymentCard":null,"GuaranteeID":null},{"RPH":4,"GuaranteeTypeCode":4,"PaymentCard":null,"GuaranteeID":null}]},"Commission":null,"CurrencyCode":109,"RatePlanTypeCode":13,"SortOrder":null,"PriceViewableInd":true,"TPA_Extensions":{"POS":{"Sources":[{"ISOCountry":"AFG"},{"ISOCountry":"ALB"},{"ISOCountry":"DZA"},{"ISOCountry":"AND"},{"ISOCountry":"AGO"},{"ISOCountry":"ATG"},{"ISOCountry":"ARG"},{"ISOCountry":"ARM"},{"ISOCountry":"AUS"},{"ISOCountry":"AUT"},{"ISOCountry":"AZE"},{"ISOCountry":"BHS"},{"ISOCountry":"BHR"},{"ISOCountry":"BGD"},{"ISOCountry":"BRB"},{"ISOCountry":"BLR"},{"ISOCountry":"BEL"},{"ISOCountry":"BLZ"},{"ISOCountry":"BEN"},{"ISOCountry":"BTN"},{"ISOCountry":"BOL"},{"ISOCountry":"BIH"},{"ISOCountry":"BWA"},{"ISOCountry":"BRA"},{"ISOCountry":"BRN"},{"ISOCountry":"BGR"},{"ISOCountry":"BFA"},{"ISOCountry":"BDI"},{"ISOCountry":"KHM"},{"ISOCountry":"CMR"},{"ISOCountry":"CAN"},{"ISOCountry":"CPV"},{"ISOCountry":"CAF"},{"ISOCountry":"TCD"},{"ISOCountry":"CHL"},{"ISOCountry":"CHN"},{"ISOCountry":"COL"},{"ISOCountry":"COM"},{"ISOCountry":"COG"},{"ISOCountry":"COD"},{"ISOCountry":"CRI"},{"ISOCountry":"HRV"},{"ISOCountry":"CUB"},{"ISOCountry":"CYP"},{"ISOCountry":"CZE"},{"ISOCountry":"DNK"},{"ISOCountry":"DJI"},{"ISOCountry":"DMA"},{"ISOCountry":"DOM"},{"ISOCountry":"TLS"},{"ISOCountry":"ECU"},{"ISOCountry":"EGY"},{"ISOCountry":"SLV"},{"ISOCountry":"GNQ"},{"ISOCountry":"ERI"},{"ISOCountry":"EST"},{"ISOCountry":"ETH"},{"ISOCountry":"FJI"},{"ISOCountry":"FIN"},{"ISOCountry":"FRA"},{"ISOCountry":"GAB"},{"ISOCountry":"GMB"},{"ISOCountry":"GEO"},{"ISOCountry":"DEU"},{"ISOCountry":"GHA"},{"ISOCountry":"GRC"},{"ISOCountry":"GRD"},{"ISOCountry":"GTM"},{"ISOCountry":"GIN"},{"ISOCountry":"GNB"},{"ISOCountry":"GUY"},{"ISOCountry":"HTI"},{"ISOCountry":"HND"},{"ISOCountry":"HUN"},{"ISOCountry":"ISL"},{"ISOCountry":"IND"},{"ISOCountry":"IDN"},{"ISOCountry":"IRN"},{"ISOCountry":"IRQ"},{"ISOCountry":"IRL"},{"ISOCountry":"ISR"},{"ISOCountry":"ITA"},{"ISOCountry":"CIV"},{"ISOCountry":"JAM"},{"ISOCountry":"JPN"},{"ISOCountry":"JOR"},{"ISOCountry":"KAZ"},{"ISOCountry":"KEN"},{"ISOCountry":"KIR"},{"ISOCountry":"PRK"},{"ISOCountry":"KOR"},{"ISOCountry":"XKX"},{"ISOCountry":"KWT"},{"ISOCountry":"KGZ"},{"ISOCountry":"LAO"},{"ISOCountry":"LVA"},{"ISOCountry":"LBN"},{"ISOCountry":"LSO"},{"ISOCountry":"LBR"},{"ISOCountry":"LBY"},{"ISOCountry":"LIE"},{"ISOCountry":"LTU"},{"ISOCountry":"LUX"},{"ISOCountry":"MKD"},{"ISOCountry":"MDG"},{"ISOCountry":"MWI"},{"ISOCountry":"MYS"},{"ISOCountry":"MDV"},{"ISOCountry":"MLI"},{"ISOCountry":"MLT"},{"ISOCountry":"MHL"},{"ISOCountry":"MRT"},{"ISOCountry":"MUS"},{"ISOCountry":"MEX"},{"ISOCountry":"FSM"},{"ISOCountry":"MDA"},{"ISOCountry":"MCO"},{"ISOCountry":"MNG"},{"ISOCountry":"MNE"},{"ISOCountry":"MAR"},{"ISOCountry":"MOZ"},{"ISOCountry":"MMR"},{"ISOCountry":"NAM"},{"ISOCountry":"NRU"},{"ISOCountry":"NPL"},{"ISOCountry":"NLD"},{"ISOCountry":"NZL"},{"ISOCountry":"NIC"},{"ISOCountry":"NER"},{"ISOCountry":"NGA"},{"ISOCountry":"NOR"},{"ISOCountry":"OMN"},{"ISOCountry":"PAK"},{"ISOCountry":"PLW"},{"ISOCountry":"PAN"},{"ISOCountry":"PNG"},{"ISOCountry":"PRY"},{"ISOCountry":"PER"},{"ISOCountry":"PHL"},{"ISOCountry":"POL"},{"ISOCountry":"PRT"},{"ISOCountry":"QAT"},{"ISOCountry":"ROU"},{"ISOCountry":"RUS"},{"ISOCountry":"RWA"},{"ISOCountry":"KNA"},{"ISOCountry":"LCA"},{"ISOCountry":"WSM"},{"ISOCountry":"SMR"},{"ISOCountry":"STP"},{"ISOCountry":"SAU"},{"ISOCountry":"SEN"},{"ISOCountry":"SRB"},{"ISOCountry":"SYC"},{"ISOCountry":"SLE"},{"ISOCountry":"SGP"},{"ISOCountry":"SVK"},{"ISOCountry":"SVN"},{"ISOCountry":"SLB"},{"ISOCountry":"SOM"},{"ISOCountry":"ZAF"},{"ISOCountry":"ESP"},{"ISOCountry":"LKA"},{"ISOCountry":"SDN"},{"ISOCountry":"SUR"},{"ISOCountry":"SWZ"},{"ISOCountry":"SWE"},{"ISOCountry":"CHE"},{"ISOCountry":"SYR"},{"ISOCountry":"TWN"},{"ISOCountry":"TJK"},{"ISOCountry":"TZA"},{"ISOCountry":"THA"},{"ISOCountry":"TGO"},{"ISOCountry":"TON"},{"ISOCountry":"TTO"},{"ISOCountry":"TUN"},{"ISOCountry":"TUR"},{"ISOCountry":"TKM"},{"ISOCountry":"TUV"},{"ISOCountry":"UGA"},{"ISOCountry":"UKR"},{"ISOCountry":"ARE"},{"ISOCountry":"GBR"},{"ISOCountry":"USA"},{"ISOCountry":"URY"},{"ISOCountry":"UZB"},{"ISOCountry":"VUT"},{"ISOCountry":"VAT"},{"ISOCountry":"VEN"},{"ISOCountry":"VNM"},{"ISOCountry":"YEM"},{"ISOCountry":"ZMB"},{"ISOCountry":"ZWE"},{"ISOCountry":"HKG"},{"ISOCountry":"CUW"},{"ISOCountry":"BES"},{"ISOCountry":"MAF"},{"ISOCountry":"PRI"},{"ISOCountry":"VGB"}]},"WLCode":9,"ProviderName":"Omnibees","ProviderCode":"OMNB","Markup":null,"Package":null}}],"TPA_Extensions":null},"TPA_Extensions":{"ApprovalInvoiced":null,"Services":[{"ServicePricingType":18,"ServiceRPH":99128,"RatePlanCode":null,"Quantity":0,"RequestIndicator":false,"ID":99128,"ServiceDescription":{"Name":"Airport - Hotel Transportation ","Language":null,"Description":"Round trip transportation","ImageURL":null},"Price":[{"Start":null,"Duration":null,"End":null,"AmountBeforeTax":150,"AmountAfterTax":150,"CurrencyCode":109}],"ServiceCategoryCode":null,"TPA_Extensions":{"Schedules":null,"SortOrder":null,"SupplierCode":"C1420_44922"}}],"GuestsTotalRate":null,"Rates":null,"TotalDiscountValue":null,"IsPreferredHotel":null}}}} {"uid":"d341b60"}
[2025-10-06 09:32:21] slim-app.INFO: Petition {"incoming":{"Method":"POST","api":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Route":"https://omnibees.clubsolaris.com/Omnibees/GetHotelAvail","Data":{"api_key":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","checkIn":"2025-10-13","checkOut":"2025-10-14","hotelCode":"6220","ratesPlan":"414718","adults":"2","children":"0","children_ages":""}},"response":{"status":200,"type":"application/json","body":{"MaxResponses":50,"PageNumber":null,"EchoToken":"system_135e43d5-834a-1e53-4261-2e9f989eef60","TimeStamp":"2025-10-06T16:32:20.9622687Z","Target":0,"Version":7.20000000000000017763568394002504646778106689453125,"PrimaryLangID":1,"POS":null,"WarningsType":null,"Success":[],"ErrorsType":null,"HotelStaysType":null,"Criteria":{"AvailableOnlyIndicator":null,"Criterion":{"Position":null,"Address":null,"HotelRefs":[{"HotelCode":6220,"ChainCode":null,"HotelName":null,"BrandName":null,"ChainName":null}],"Radius":null,"HotelAmenity":null,"RoomAmenity":null,"Award":null,"ProfilesType":null,"RateRanges":null,"StayDateRange":{"Start":"2025-10-13T00:00:00","Duration":null,"End":"2025-10-14T00:00:00"},"RoomStayCandidatesType":{"RoomStayCandidates":[{"GuestCountsType":{"GuestCounts":[{"Age":null,"AgeQualifyCode":10,"Count":2,"ResGuestRPH":null}]},"RoomID":null,"Quantity":1,"RPH":0,"BookingCode":null}]},"RatePlanCandidatesType":null,"Location":null,"GetPricesPerGuest":true,"TPA_Extensions":{"AmountIncludingMarkup":true,"AmountNotIncludingMarkup":true,"AmountIsPackageRates":true,"MultimediaObjects":{"SendData":false},"IsForMobile":false,"OnlyPreferredHotels":null,"BestOnlyWithTaxes":null,"RatePlanIds":[414718],"RoomTypeIds":null,"MealPlanId":null,"RateRoomIds":null,"WLCode":null},"InfoSource":null,"GetPricesPerDay":null}},"RoomStaysType":null,"Services":null,"TPA_Extensions":null}}} {"uid":"ccedd16"}
[2025-10-06 09:32:59] slim-app.INFO: Petition {"incoming":{"Method":"POST","api":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","Route":"https://omnibees.clubsolaris.com/Omnibees/GetHotelAvail","Data":{"api_key":"yOhwJPXl1kMW9Zs2Cv7tszKBD90iH9Du","checkIn":"2025-10-13","checkOut":"2025-10-14","hotelCode":"6220","ratesPlan":"412006","adults":"2","children":"0","children_ages":""}},"response":{"status":200,"type":"application/json","body":{"MaxResponses":50,"PageNumber":null,"EchoToken":"system_1e1f3fee-af00-f074-b3bb-c441aabbe46c","TimeStamp":"2025-10-06T16:32:59.473431Z","Target":0,"Version":7.20000000000000017763568394002504646778106689453125,"PrimaryLangID":1,"POS":null,"WarningsType":null,"Success":[],"ErrorsType":null,"HotelStaysType":{"HotelStays":[{"Status":"Open","RoomStayRPH":0,"Availability":{"Start":"2025-10-13T00:00:00","Duration":null,"End":"2025-10-14T00:00:00","Restrictions":[{"Time":1,"RestrictionType":0,"TimeUnit":0}]},"BasicPropertyInfo":{"CurrencyCode":109,"Position":{"Latitude":"23.045394","Longitude":"-109.695654"},"Address":{"CountryCode":130,"StateProvCode":5889279,"CityCode":8009649,"AddressLine":"Boulevard San José Lote 10, Zona Hotelera, San José del Cabo, Baja California Sur, 23400","CityName":null,"PostalCode":null,"StateProv":null,"CountryName":null,"ZoneCode":null,"ZoneName":null},"ContactNumbersType":null,"Award":{"Rating":5,"Name":null},"HotelAmenities":null,"Policy":null,"HotelRef":{"HotelCode":6220,"ChainCode":3247,"HotelName":"Royal Solaris Los Cabos","BrandName":null,"ChainName":"Hoteles Solaris"},"VendorMessagesType":null,"ImageURL":"https://media.omnibees.com/Images/6220/Property/223147.jpg"},"Price":{"Start":"2025-10-13T00:00:00","Duration":null,"End":"2025-10-14T00:00:00","AmountBeforeTax":253.520000000000010231815394945442676544189453125,"AmountAfterTax":253.520000000000010231815394945442676544189453125,"CurrencyCode":109},"TPA_Extensions":{"SupplierCode":"C1420_44922"}}]},"Criteria":{"AvailableOnlyIndicator":null,"Criterion":{"Position":null,"Address":null,"HotelRefs":[{"HotelCode":6220,"ChainCode":null,"HotelName":null,"BrandName":null,"ChainName":null}],"Radius":null,"HotelAmenity":null,"RoomAmenity":null,"Award":null,"ProfilesType":null,"RateRanges":null,"StayDateRange":{"Start":"2025-10-13T00:00:00","Duration":null,"End":"2025-10-14T00:00:00"},"RoomStayCandidatesType":{"RoomStayCandidates":[{"GuestCountsType":{"GuestCounts":[{"Age":null,"AgeQualifyCode":10,"Count":2,"ResGuestRPH":null}]},"RoomID":null,"Quantity":1,"RPH":0,"BookingCode":null}]},"RatePlanCandidatesType":null,"Location":null,"GetPricesPerGuest":true,"TPA_Extensions":{"AmountIncludingMarkup":true,"AmountNotIncludingMarkup":true,"AmountIsPackageRates":true,"MultimediaObjects":{"SendData":false},"IsForMobile":false,"OnlyPreferredHotels":null,"BestOnlyWithTaxes":null,"RatePlanIds":[412006],"RoomTypeIds":null,"MealPlanId":null,"RateRoomIds":null,"WLCode":null},"InfoSource":null,"GetPricesPerDay":null}},"RoomStaysType":{"RoomStays":[{"RPH":0,"RoomTypes":[{"RoomID":39120,"RoomName":"Deluxe room","RoomDescription":{"Language":1,"Description":"Discover this comfortable room with a king-size bed or two double beds. It features a balcony with garden or city views. It measures 42 m²."},"AmenitiesType":null,"Occupancies":[{"MinOccupancy":1,"MaxOccupancy":4,"AgeQualifyingCode":10,"MinAge":null,"MaxAge":null},{"MinOccupancy":1,"MaxOccupancy":2,"AgeQualifyingCode":8,"MinAge":null,"MaxAge":null}],"NumberOfUnits":206,"MaxOccupancy":4},{"RoomID":39121,"RoomName":"Deluxe Partial Ocean View","RoomDescription":{"Language":1,"Description":"Beautiful room with one king-size bed or two double beds. It features a balcony with partial ocean views. It measures 42 m2."},"AmenitiesType":null,"Occupancies":[{"MinOccupancy":1,"MaxOccupancy":4,"AgeQualifyingCode":10,"MinAge":null,"MaxAge":null},{"MinOccupancy":1,"MaxOccupancy":2,"AgeQualifyingCode":8,"MinAge":null,"MaxAge":null}],"NumberOfUnits":109,"MaxOccupancy":4}],"RatePlans":[{"EffectiveDate":null,"ExpireDate":null,"RatePlanName":"Public Rate BX USD","Guarantees":null,"CancelPenalties":null,"RatePlanInclusions":null,"MealsIncluded":null,"RatePlanID":412006,"TaxPolicies":null,"RatePlanDescription":{"Language":1,"Description":""},"AdditionalDetailsType":{"AdditionalDetails":[{"DetailDescription":{"Name":"General policy","Language":1,"Description":"Check-out: 11 am\rMinimum check-in age is 18\rChildren are welcome:\r0 - 4 years old: Free\r5 - 12 years old: additional cost depending of season.\rClients must present an identification at check-in.\rSpecial requests are subject to availability upon check-in and may incur additional charges. \rSpecial requests cannot be guaranteed.\rAll payments made by American Express credit card applies a 5% fee in case of cancellations and/or refund. For more details, please contact the office using the information on the reservation confirmation received after booking.\rA resort fee is included in the total price displayed. Only registered guests are allowed in the guestrooms.\r"}}]},"Offers":null,"PaymentPolicies":{"AcceptedPayments":[{"RPH":4,"GuaranteeTypeCode":4,"PaymentCard":null,"GuaranteeID":null}]},"Commission":{"Percent":0.01000000000000000020816681711721685132943093776702880859375},"CurrencyCode":109,"RatePlanTypeCode":13,"SortOrder":null,"PriceViewableInd":true,"TPA_Extensions":{"POS":{"Sources":[{"ISOCountry":"AFG"},{"ISOCountry":"ALB"},{"ISOCountry":"DZA"},{"ISOCountry":"AND"},{"ISOCountry":"AGO"},{"ISOCountry":"ATG"},{"ISOCountry":"ARG"},{"ISOCountry":"ARM"},{"ISOCountry":"AUS"},{"ISOCountry":"AUT"},{"ISOCountry":"AZE"},{"ISOCountry":"BHS"},{"ISOCountry":"BHR"},{"ISOCountry":"BGD"},{"ISOCountry":"BRB"},{"ISOCountry":"BLR"},{"ISOCountry":"BEL"},{"ISOCountry":"BLZ"},{"ISOCountry":"BEN"},{"ISOCountry":"BTN"},{"ISOCountry":"BOL"},{"ISOCountry":"BIH"},{"ISOCountry":"BWA"},{"ISOCountry":"BRA"},{"ISOCountry":"BRN"},{"ISOCountry":"BGR"},{"ISOCountry":"BFA"},{"ISOCountry":"BDI"},{"ISOCountry":"KHM"},{"ISOCountry":"CMR"},{"ISOCountry":"CAN"},{"ISOCountry":"CPV"},{"ISOCountry":"CAF"},{"ISOCountry":"TCD"},{"ISOCountry":"CHL"},{"ISOCountry":"CHN"},{"ISOCountry":"COL"},{"ISOCountry":"COM"},{"ISOCountry":"COG"},{"ISOCountry":"COD"},{"ISOCountry":"CRI"},{"ISOCountry":"HRV"},{"ISOCountry":"CUB"},{"ISOCountry":"CYP"},{"ISOCountry":"CZE"},{"ISOCountry":"DNK"},{"ISOCountry":"DJI"},{"ISOCountry":"DMA"},{"ISOCountry":"DOM"},{"ISOCountry":"TLS"},{"ISOCountry":"ECU"},{"ISOCountry":"EGY"},{"ISOCountry":"SLV"},{"ISOCountry":"GNQ"},{"ISOCountry":"ERI"},{"ISOCountry":"EST"},{"ISOCountry":"ETH"},{"ISOCountry":"FJI"},{"ISOCountry":"FIN"},{"ISOCountry":"FRA"},{"ISOCountry":"GAB"},{"ISOCountry":"GMB"},{"ISOCountry":"GEO"},{"ISOCountry":"DEU"},{"ISOCountry":"GHA"},{"ISOCountry":"GRC"},{"ISOCountry":"GRD"},{"ISOCountry":"GTM"},{"ISOCountry":"GIN"},{"ISOCountry":"GNB"},{"ISOCountry":"GUY"},{"ISOCountry":"HTI"},{"ISOCountry":"HND"},{"ISOCountry":"HUN"},{"ISOCountry":"ISL"},{"ISOCountry":"IND"},{"ISOCountry":"IDN"},{"ISOCountry":"IRN"},{"ISOCountry":"IRQ"},{"ISOCountry":"IRL"},{"ISOCountry":"ISR"},{"ISOCountry":"ITA"},{"ISOCountry":"CIV"},{"ISOCountry":"JAM"},{"ISOCountry":"JPN"},{"ISOCountry":"JOR"},{"ISOCountry":"KAZ"},{"ISOCountry":"KEN"},{"ISOCountry":"KIR"},{"ISOCountry":"PRK"},{"ISOCountry":"KOR"},{"ISOCountry":"XKX"},{"ISOCountry":"KWT"},{"ISOCountry":"KGZ"},{"ISOCountry":"LVA"},{"ISOCountry":"LBN"},{"ISOCountry":"LSO"},{"ISOCountry":"LBR"},{"ISOCountry":"LBY"},{"ISOCountry":"LIE"},{"ISOCountry":"LTU"},{"ISOCountry":"LUX"},{"ISOCountry":"MKD"},{"ISOCountry":"MDG"},{"ISOCountry":"MWI"},{"ISOCountry":"MYS"},{"ISOCountry":"MDV"},{"ISOCountry":"MLI"},{"ISOCountry":"MLT"},{"ISOCountry":"MRT"},{"ISOCountry":"MUS"},{"ISOCountry":"MEX"},{"ISOCountry":"MDA"},{"ISOCountry":"MCO"},{"ISOCountry":"MNG"},{"ISOCountry":"MNE"},{"ISOCountry":"MAR"},{"ISOCountry":"MOZ"},{"ISOCountry":"MMR"},{"ISOCountry":"NAM"},{"ISOCountry":"NRU"},{"ISOCountry":"NPL"},{"ISOCountry":"NLD"},{"ISOCountry":"NZL"},{"ISOCountry":"NIC"},{"ISOCountry":"NER"},{"ISOCountry":"NGA"},{"ISOCountry":"NOR"},{"ISOCountry":"OMN"},{"ISOCountry":"PAK"},{"ISOCountry":"PAN"},{"ISOCountry":"PNG"},{"ISOCountry":"PRY"},{"ISOCountry":"PER"},{"ISOCountry":"PHL"},{"ISOCountry":"POL"},{"ISOCountry":"PRT"},{"ISOCountry":"QAT"},{"ISOCountry":"ROU"},{"ISOCountry":"RUS"},{"ISOCountry":"RWA"},{"ISOCountry":"KNA"},{"ISOCountry":"LCA"},{"ISOCountry":"VCT"},{"ISOCountry":"WSM"},{"ISOCountry":"SMR"},{"ISOCountry":"STP"},{"ISOCountry":"SAU"},{"ISOCountry":"SEN"},{"ISOCountry":"SRB"},{"ISOCountry":"SYC"},{"ISOCountry":"SLE"},{"ISOCountry":"SGP"},{"ISOCountry":"SVK"},{"ISOCountry":"SVN"},{"ISOCountry":"SLB"},{"ISOCountry":"SOM"},{"ISOCountry":"ZAF"},{"ISOCountry":"ESP"},{"ISOCountry":"LKA"},{"ISOCountry":"SDN"},{"ISOCountry":"SUR"},{"ISOCountry":"SWZ"},{"ISOCountry":"SWE"},{"ISOCountry":"CHE"},{"ISOCountry":"SYR"},{"ISOCountry":"TWN"},{"ISOCountry":"TJK"},{"ISOCountry":"TZA"},{"ISOCountry":"THA"},{"ISOCountry":"TGO"},{"ISOCountry":"TON"},{"ISOCountry":"TTO"},{"ISOCountry":"TUN"},{"ISOCountry":"TUR"},{"ISOCountry":"TKM"},{"ISOCountry":"TUV"},{"ISOCountry":"UGA"},{"ISOCountry":"UKR"},{"ISOCountry":"ARE"},{"ISOCountry":"GBR"},{"ISOCountry":"USA"},{"ISOCountry":"URY"},{"ISOCountry":"UZB"},{"ISOCountry":"VUT"},{"ISOCountry":"VAT"},{"ISOCountry":"VEN"},{"ISOCountry":"VNM"},{"ISOCountry":"YEM"},{"ISOCountry":"ZMB"},{"ISOCountry":"ZWE"},{"ISOCountry":"HKG"},{"ISOCountry":"CUW"},{"ISOCountry":"BES"},{"ISOCountry":"MAF"},{"ISOCountry":"PRI"},{"ISOCountry":"VGB"}]},"WLCode":9,"ProviderName":"Omnibees","ProviderCode":"OMNB","Markup":null,"Package":null}}],"RoomRates":[{"RoomStayCandidateRPH":0,"EffectiveDate":"2025-10-13T00:00:00","ExpireDate":"2025-10-14T00:00:00","RatePlanID":412006,"RoomID":39120,"RatesType":{"Rates":[{"EffectiveDate":"2025-10-13T00:00:00","MinLOS":1,"MaxLOS":null,"Total":{"AmountBeforeTax":253.520000000000010231815394945442676544189453125,"AmountAfterTax":0,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":19,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":null,"Rates":[{"EffectiveDate":"2025-10-13T00:00:00","MinLOS":null,"MaxLOS":null,"Total":{"AmountBeforeTax":126.7600000000000051159076974727213382720947265625,"AmountAfterTax":0,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":7,"TPA_Extensions":null,"Taxes":null},"AgeQualifyingCode":10,"MinAge":null,"MaxAge":null,"MinGuestApplicable":2,"MaxGuestApplicable":2,"Status":null,"NumberOfUnits":null,"MinAdvancedBookingOffset":null,"StayThrough":null,"Duration":null,"FPLOS":null}],"TotalDiscountValue":null,"IsPreferredHotel":null},"Taxes":null},"AgeQualifyingCode":null,"MinAge":null,"MaxAge":null,"MinGuestApplicable":null,"MaxGuestApplicable":null,"Status":null,"NumberOfUnits":206,"MinAdvancedBookingOffset":null,"StayThrough":null,"Duration":null,"FPLOS":null}]},"Total":{"AmountBeforeTax":253.520000000000010231815394945442676544189453125,"AmountAfterTax":253.520000000000010231815394945442676544189453125,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":18,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":[{"AgeQualifyingCode":10,"Total":{"AmountBeforeTax":253.520000000000010231815394945442676544189453125,"AmountAfterTax":253.520000000000010231815394945442676544189453125,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":18,"TPA_Extensions":null,"Taxes":null}}],"Rates":null,"TotalDiscountValue":null,"IsPreferredHotel":null},"Taxes":null},"AdvanceBookingRestriction":null,"ServiceRPHs":[],"Discount":null,"PromotionCode":null,"GroupCode":null,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":null,"Rates":null,"TotalDiscountValue":null,"IsPreferredHotel":null,"OccupationFor":{"Adults":2,"Childs":0}},"Availability":[{"AvailabilityStatus":"AvailableForSale","WarningRPH":null}],"CancelPenalty":{"NonRefundable":false,"Start":null,"Duration":null,"End":null,"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":7,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":2,"Amount":0,"Percent":0,"CurrencyCode":109},"PenaltyDescription":{"Name":"CANCELLATION 2 NIGHTS PENALTY","Language":1,"Description":"Cancellations made 7 days or less before arrival, no-shows and early departures will be penalized with a 2-night penalty of the total cost of the stay.\n\nIf it is a situation external to the client such as a cancelled flight, positive for covid-19, etc., the credit will remain in favor of a future reservation paying the difference in stay if it has a different rate, policies subject to change without prior notice."},"AmountRules":null},"Guarantee":{"Start":null,"Duration":null,"End":null,"GuaranteeDescription":{"Name":"Deposit/Guarantee Policy 14 days","Language":1,"Description":"Prepayment: The full payment for the reservation must be made 14 days prior to arrival.\n\nImportant: If payment is not made on the established days or before the guest's arrival, the reservation may be canceled with prior notice, and the guest will be charged the Rack (high) rate upon check-in.\n\nFor credit card payments, please consider the following:\nPayment with VISA or Mastercard has a bank fee of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank fee of 4.49% of the total, which must be absorbed by the agency.\nThe bank transfer fee is not the hotel's responsibility.\n\"If you request an invoice, please inform us at the time of booking and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":22499}},{"RoomStayCandidateRPH":0,"EffectiveDate":"2025-10-13T00:00:00","ExpireDate":"2025-10-14T00:00:00","RatePlanID":412006,"RoomID":39121,"RatesType":{"Rates":[{"EffectiveDate":"2025-10-13T00:00:00","MinLOS":1,"MaxLOS":null,"Total":{"AmountBeforeTax":268.6000000000000227373675443232059478759765625,"AmountAfterTax":0,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":19,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":null,"Rates":[{"EffectiveDate":"2025-10-13T00:00:00","MinLOS":null,"MaxLOS":null,"Total":{"AmountBeforeTax":134.30000000000001136868377216160297393798828125,"AmountAfterTax":0,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":7,"TPA_Extensions":null,"Taxes":null},"AgeQualifyingCode":10,"MinAge":null,"MaxAge":null,"MinGuestApplicable":2,"MaxGuestApplicable":2,"Status":null,"NumberOfUnits":null,"MinAdvancedBookingOffset":null,"StayThrough":null,"Duration":null,"FPLOS":null}],"TotalDiscountValue":null,"IsPreferredHotel":null},"Taxes":null},"AgeQualifyingCode":null,"MinAge":null,"MaxAge":null,"MinGuestApplicable":null,"MaxGuestApplicable":null,"Status":null,"NumberOfUnits":109,"MinAdvancedBookingOffset":null,"StayThrough":null,"Duration":null,"FPLOS":null}]},"Total":{"AmountBeforeTax":268.6000000000000227373675443232059478759765625,"AmountAfterTax":268.6000000000000227373675443232059478759765625,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":18,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":[{"AgeQualifyingCode":10,"Total":{"AmountBeforeTax":268.6000000000000227373675443232059478759765625,"AmountAfterTax":268.6000000000000227373675443232059478759765625,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":18,"TPA_Extensions":null,"Taxes":null}}],"Rates":null,"TotalDiscountValue":null,"IsPreferredHotel":null},"Taxes":null},"AdvanceBookingRestriction":null,"ServiceRPHs":[],"Discount":null,"PromotionCode":null,"GroupCode":null,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":null,"Rates":null,"TotalDiscountValue":null,"IsPreferredHotel":null,"OccupationFor":{"Adults":2,"Childs":0}},"Availability":[{"AvailabilityStatus":"AvailableForSale","WarningRPH":null}],"CancelPenalty":{"NonRefundable":false,"Start":null,"Duration":null,"End":null,"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":7,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":2,"Amount":0,"Percent":0,"CurrencyCode":109},"PenaltyDescription":{"Name":"CANCELLATION 2 NIGHTS PENALTY","Language":1,"Description":"Cancellations made 7 days or less before arrival, no-shows and early departures will be penalized with a 2-night penalty of the total cost of the stay.\n\nIf it is a situation external to the client such as a cancelled flight, positive for covid-19, etc., the credit will remain in favor of a future reservation paying the difference in stay if it has a different rate, policies subject to change without prior notice."},"AmountRules":null},"Guarantee":{"Start":null,"Duration":null,"End":null,"GuaranteeDescription":{"Name":"Deposit/Guarantee Policy 14 days","Language":1,"Description":"Prepayment: The full payment for the reservation must be made 14 days prior to arrival.\n\nImportant: If payment is not made on the established days or before the guest's arrival, the reservation may be canceled with prior notice, and the guest will be charged the Rack (high) rate upon check-in.\n\nFor credit card payments, please consider the following:\nPayment with VISA or Mastercard has a bank fee of 2.73% of the total, which must be absorbed by the agency.\nPayment with American Express has a bank fee of 4.49% of the total, which must be absorbed by the agency.\nThe bank transfer fee is not the hotel's responsibility.\n\"If you request an invoice, please inform us at the time of booking and send the corresponding information. Once the guest has checked in, an invoice cannot be issued.\""},"GuaranteesAcceptedType":{"GuaranteesAccepted":[{"RPH":0,"GuaranteeTypeCode":5,"PaymentCard":null,"GuaranteeID":null}]},"DeadLine":{"AbsoluteDeadline":null,"OffsetUnitMultiplier":14,"TimeUnitType":0,"OffsetDropTime":0},"AmountPercent":{"NmbrOfNights":0,"Amount":0,"Percent":100,"CurrencyCode":109},"GuaranteeCode":22499}}],"Total":{"AmountBeforeTax":253.520000000000010231815394945442676544189453125,"AmountAfterTax":253.520000000000010231815394945442676544189453125,"CurrencyCode":109,"AmountIncludingMarkup":true,"AmountIsPackage":false,"ChargeType":12,"TPA_Extensions":null,"Taxes":null},"GuestCountsType":null,"BasicPropertyInfo":{"CurrencyCode":109,"Position":{"Latitude":"23.045394","Longitude":"-109.695654"},"Address":{"CountryCode":130,"StateProvCode":5889279,"CityCode":8009649,"AddressLine":"Boulevard San José Lote 10, Zona Hotelera, San José del Cabo, Baja California Sur, 23400","CityName":null,"PostalCode":null,"StateProv":null,"CountryName":null,"ZoneCode":null,"ZoneName":null},"ContactNumbersType":null,"Award":{"Rating":5,"Name":null},"HotelAmenities":null,"Policy":null,"HotelRef":{"HotelCode":6220,"ChainCode":3247,"HotelName":"Royal Solaris Los Cabos","BrandName":null,"ChainName":"Hoteles Solaris"},"VendorMessagesType":null,"ImageURL":"https://media.omnibees.com/Images/6220/Property/223147.jpg"},"Reference":null,"CommentsType":null,"SpecialRequestsType":null,"IndexNumber":null,"RoomStayStatus":null,"TPA_Extensions":{"ApprovalInvoiced":null,"Services":null,"GuestsTotalRate":null,"Rates":null,"TotalDiscountValue":null,"IsPreferredHotel":null,"SupplierCode":"C1420_44922"},"Guarantees":null,"RoomStayCandidateRPH":null,"AvailabilityStatus":null,"WarningRPH":null,"RoomStayLanguage":1}],"MoreIndicator":false},"Services":null,"TPA_Extensions":null}}} {"uid":"84311ff"}
