redben,
To address your concerns...
While a number of existing modules could probably be hacked together to get some kind of workable solution, a custom module makes everything much cleaner and easier to work with from an end-user stand point.
As an end user (and the admin side) when I want to add rooms and set rates, I don't want to have to go to 5 different sections to do so.
This module provides a list of rates, creates a Hotel Room-type node type, associates a calendar to hotel room-type nodes...
There's a bunch more, but lets pause here.
Ok, so The room types of the hotel aren't likely to change very often, hence it makes sense to have a room type that stays persistent rather than creating them over and over again as new products. By attaching a calendar to each of the room type nodes, you can then assign availability per room type, with a separate rate (from that list of rates) for every day of the year.
Since the availability is handled by these calendars, the existing stock module cannot handle that, but that's really not an issue.
When a customer chooses to book a room from the results of their search of available rooms, a custom product of a 'hotel-booking' type will be created and added to their cart. When this product is created, the number of available rooms of the type they're booking is decremented from the availability calendar tied to the node for that hotel room type from each of the dates for nights they will be staying.
So, example. If I were going to check in on Friday March 6th, and check out on Monday March 10th, that's a 3 night stay, so the available number of rooms will be decreased for Friday, Saturday, and Sunday.
If the user abandons their order, or removes the product from their cart, those nights will be credited back to the availability calendar and that product node will be deleted. This will be handled by either a cron task, or a hook into the remove_cart_item function depending on the circumstance.
The end result is that it keeps the database tidy, without a bunch of excess nodes laying around.
While I'm painfully behind schedule on this project, I've been making some good progress and anticipate it being completed and ready for testing by the end of the day today or tomorrow.
