map.resources :apis, :collection => {:ota => :post}


class ApisController < ApplicationController

require 'hpricot'
require 'rexml/document'
include REXML

layout false

def index
render :layout => 'application'
end

def ota
packages = []
req = params[:rq].to_s
doc = Hpricot.XML(req)
segments = (doc/:AvailRequestSegment)
segments.each do |seg|
dates = (seg/:StayDateRange)
dates.each do |d|
@start_date = d.attributes['Start'].to_date
@end_date = d.attributes['End'].to_date
end
@guests = 0
(seg/:RoomStayCandidate/:GuestCount).each do |g|
@guests += g.attributes['Count'].to_i
end
(seg/:HotelSearchCriteria/:Criterion).each do |criterion|
end
if @start_date.wday == 6 && @end_date > (@start_date + 5.days)
cottages = []
Cottage.find(:all).each do |cottage|
booked = ActiveRecord::Base.connection.select_value("
SELECT COUNT(*) FROM bookings WHERE cottage_id = #{cottage.id}
AND ((start_date, end_date) OVERLAPS (DATE '#{@start_date}',
DATE '#{@end_date}') = true);").to_i
if booked == 0
cottages << cottage
end
end
sleeps = 0
cottages.each{|i| sleeps += i.sleeps}
if sleeps >= @guests
cottages.each do |cottage|
package = []
price = ActiveRecord::Base.connection.select_value("
SELECT sterling FROM prices WHERE band = #{cottage.band}
AND ((start_date, end_date) OVERLAPS (DATE '#{@start_date}',
DATE '#{@end_date}') = true)
AND kind = 1;").to_f
[@start_date,@end_date,cottage.title,price].each{|i| package << i.to_s}
packages << package
end
end
end
end
ota_rs(packages)
end

def ota_rs(packages)
@uuid = "3e47ef1e-d081-11dc-ae8e-000cf10ee5d5"
doc = Document.new
ota = doc.add_element "OTA_HotelAvailRS"
ota.add_attributes({ "xmlns" => "http://www.opentravel.org/OTA/2003/05", "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation" => "http://www.opentravel.org/2004B/OTA_HotelAvailRQ.xsd", "Version" => "1.003"})
pos = ota.add_element "pos"
source = pos.add_element "source"
roomstays = ota.add_element "RoomStays"

packages.each do |package|
roomstay = roomstays.add_element "RoomStay"
roomstaytype = roomstay.add_element "RoomStayType"
roomtypes = roomstaytype.add_element "RoomTypes"
roomtype = roomtypes.add_element "RoomType"
roomtype.add_attributes({"RoomTypeCode" => package[2]})
roomrates = roomstay.add_element "RoomRates"
roomrate = roomrates.add_element "RoomRate"
roomrate.add_attributes({"EffectiveDate" => package[0], "ExpireDate" => package[1]})
rate = roomrate.add_element "Rate"
total = rate.add_element "Total"
total.add_attributes({"AdditionalFeesExcludedIndicator" => "true", "AmountBeforeTax" => package[3], "CurrencyCode" => "GBP"})
taxes = total.add_element "Taxes"
tax = taxes.add_element "Tax"
fees = rate.add_element "fees"
fee = fees.add_element "fee"
feetaxes = fee.add_element "Taxes"
feetax = feetaxes.add_element "Tax"
propinfo = roomstay.add_element "BasicPropertyInfo"
propinfo.add_attributes( {"ChainName"=>"lets_holiday", "HotelCode"=> '1'} )
end
respond_to do |wants|
wants.xml { render :xml => doc}
end
end


end