Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
I'm just playing around with the module and found out that some of the features that a normal booking portal will have are missing.
A Hotel is not created any where on the module. But, with my previous experiences with working on hotel portals. A hotel should be created and then we would assign/create availability (rooms). In this way it leaves room for us to setup Hotel Policies (Booking, Cancellation etc)
It would be better if someone works on these things as additional features in the future.
Comments
Comment #1
willvincent CreditAttribution: willvincent commentedThis should already be doable, to a certain degree, with taxonomy. By assigning a different taxonomy term to rooms of different properties, you can establish what rooms belong where.
This module was never intended to be used for multiple locations, it is specifically designed to manage a single property. If this kind of usage is going to be accommodated in a more complete way than the method I mentioned above, it will not be until the system is more complete and functional for single properties, as that is what it's being developed for.
Comment #2
willvincent CreditAttribution: willvincent commentedThis feature will be readdressed when single property functionality is complete and working.
A few thoughts...
The default operation of the module should not be geared toward multiple properties. The module is and always has been intended to be focused on a single hotel. However, this functionality should be available to those who require it, perhaps through an optional add-on.
The short list of things that will have to be addressed for this to fully work:
Comment #3
terramedia CreditAttribution: terramedia commentedHi Tcindie,
I realise that this isn't intended for multiple hotels or the like, but with that sort of support, this would be perfect for what I need.
If there is anything I can do to help get it to a point where it could be developed to support multiple hotels, I'd be quite happy to do so, including sponsorship of development.
Basically the way I need it would be so that each hotel could set its own rates and modifiers and upgrades for each of its own rooms. It's basically what I need already except for each being able to set them independently of each other.
Like I said, I'm happy to help or sponsor development, or anything like that.
Thanks for your help mate,
Matt
Comment #4
saurabh.bhambry CreditAttribution: saurabh.bhambry commentedsounds good . subscribing
Comment #5
weblance CreditAttribution: weblance commentedFolks,
Just an FYI for those who have interest.
Until Tcindie gets to this I have set out with a series of workarounds that are proving quite successful. I am nearing completion with only a few minor bugs to work out. I am happy to share what I have done if there is interest. I do believe it is currently possible to have a working site that does what you are asking with few minor compromises. I am even able to provide an ASP like service that allows hotels to use the system manage their bookings.
If there interest, you can ask me about you current challenge with this and I will tell you how I addressed it.
To see what I mean www.bookangeles.com
Below are the details of my current bug. I have not posted this in this before because I don't want to bog down Tcindie with features the module is not currently providing. However, it seems there is some interest and I don't know when he will get a chance to build this feature so I thought some might like to know....
Last Bug: Views argument with room type content in quicktabs
Basically, I have a hotel page with quicktabs. One tab shows all rooms that are the child node of hotel through node relativity. I have created an argument in views to accomplish this. However, it does not seem to produce the desired result. Often showing nothing at all.
All other tabs seem to handle the same argument to display only child node content except the rooms content type. FYI - Rooms content type is part of the UC hotel booking module.
To see the page with no arguments:
http://bookangeles.com/content/hotels/bourbon-street-condotel
My argument was:
Node Relativity: Parent Node ID
filter by parent
Provide default argument
Node ID from URL
Export of views:
$view = new view;
$view->name = 'room_view_for_hotelnode_page';
$view->description = 'room_view_for_hotelnode_page';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 1,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
'field_image_cache_fid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 0,
'ellipsis' => 0,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'feature_block_image_linked',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_image_cache_fid',
'table' => 'node_data_field_image_cache',
'field' => 'field_image_cache_fid',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'field_bestrate_value' => array(
'label' => 'Best Rate',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'label_type' => 'custom',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_bestrate_value',
'table' => 'node_data_field_bestrate',
'field' => 'field_bestrate_value',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'tid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'type' => 'ol',
'separator' => ', ',
'empty' => '',
'link_to_taxonomy' => 0,
'limit' => 1,
'vids' => array(
'9' => 9,
'6' => 0,
'10' => 0,
'5' => 0,
),
'exclude' => 0,
'id' => 'tid',
'table' => 'term_node',
'field' => 'tid',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
'body' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'exclude' => 0,
'id' => 'body',
'table' => 'node_revisions',
'field' => 'body',
'relationship' => 'none',
),
));
$handler->override_option('arguments', array(
'parent_nid' => array(
'default_action' => 'default',
'style_plugin' => 'default_summary',
'style_options' => array(),
'wildcard' => 'all',
'wildcard_substitution' => 'All',
'title' => '',
'breadcrumb' => '',
'default_argument_type' => 'node',
'default_argument' => '',
'validate_type' => 'none',
'validate_fail' => 'empty',
'id' => 'parent_nid',
'table' => 'relativity',
'field' => 'parent_nid',
'validate_user_argument_type' => 'uid',
'validate_user_roles' => array(
'2' => 0,
'3' => 0,
'4' => 0,
),
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
'default_options_div_prefix' => '',
'default_argument_user' => 0,
'default_argument_fixed' => '',
'default_argument_php' => '',
'validate_argument_node_type' => array(
'flashnode' => 0,
'product' => 0,
'hotel_room_type' => 0,
'barvenue' => 0,
'date' => 0,
'event' => 0,
'grandopening' => 0,
'happyhour' => 0,
'hotel' => 0,
'livemusic' => 0,
'node_gallery_gallery' => 0,
'node_gallery_image' => 0,
'page' => 0,
'pagent' => 0,
'party' => 0,
'poker' => 0,
'raffle' => 0,
'show' => 0,
'sports' => 0,
'story' => 0,
),
'validate_argument_node_access' => 0,
'validate_argument_nid_type' => 'nid',
'validate_argument_vocabulary' => array(
'6' => 0,
'14' => 0,
'12' => 0,
'5' => 0,
),
'validate_argument_type' => 'tid',
'validate_argument_transform' => 0,
'validate_user_restrict_roles' => 0,
'validate_argument_php' => '',
),
));
$handler->override_option('filters', array(
'type' => array(
'operator' => 'in',
'value' => array(
'hotel_room_type' => 'hotel_room_type',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('access', array(
'type' => 'none',
));
$handler->override_option('cache', array(
'type' => 'none',
));
$handler->override_option('header_format', '3');
$handler->override_option('header_empty', 0);
$handler->override_option('style_plugin', 'fluid_grid');
$handler->override_option('style_options', array(
'advanced_layout' => array(
'align' => TRUE,
'margins' => TRUE,
'css3' => TRUE,
),
'items_width' => '',
'items_height' => '',
'list_alignment' => 'left',
'items_alignment' => 'left',
'items_h_margin' => '2px',
'items_v_margin' => '6px',
'box_shadow' => '1',
'border_radius' => '1',
));
$handler->override_option('row_plugin', 'node');
$handler->override_option('row_options', array(
'relationship' => 'none',
'build_mode' => 'full',
'links' => 0,
'comments' => 0,
));
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);
Comment #6
terramedia CreditAttribution: terramedia commentedThanks for sharing that Jeff, that's a great setup!
Unfortunately though, I need different people to be able to setup hotels but without having access to edit other people's hotels.
Using a combination of ACL, Content Access and Node Checkout, I've been able to set it up so that a user purchases a hotel node, they then create their hotel listing. ACL and Content Access only allow hotel owners to edit the hotels that they are the author of. I've then just entered a variety of fixed base price and price modifier options that give users just about any option for pricing.
Then I hit one dilemma that I hadn't thought of before. The hotel booking module permission for editing hotel room availability can only be assigned to a role.
If I assign it to the hotel owner role that I have, then any hotel owner can edit the availability of any hotel room. I haven't yet been able to figure out a way around this, I need hotel owners to only be able to edit the availability of the hotel nodes that they are the author of.
Does anyone have any ideas?
Thanks,
Matt
Comment #7
willvincent CreditAttribution: willvincent commentedThat will most likely require a change to the code.
If you write a patch that adds permissions for 'edit own hotel room type nodes' and 'edit all hotel room type nodes' I would be willing to roll that into module.
Comment #8
weblance CreditAttribution: weblance commentedI solved the issues #5 above with taxonomy instead of relativity. I have a shopping habit on drupal and sometimes I just need to be more clever with what I got...like taxonomy.
I would really like to see your site. Sounds like you and I are setting up the same config. Maybe we should work together on a few patches.
Your issue is on my list too. I would be interested in working with you on that. If you are not a hard core coder I employ a guy who is outstanding. I could make that his next project. Don't rely on me though. My priority is to get my site up and running.
Right now, I am currently looking for workaround to only charge a % of the hotel price. This way we charge our commission up front and let the guest pay the hotel directly. At this point it looks like I might either create a patch for modifying the discount module. I might just patch hotel module too. Just waiting for my dev guy to get back to me on the best way.
Comment #9
terramedia CreditAttribution: terramedia commentedI'm not a hard core coder by any means, thanks for the offer to use your guy Jeff. I need it sorted soon though so I will have someone here look at it and see if we can put together a patch which I am happy to provide.
Tcindie, to clarify a couple of things, would "edit own" and "edit all" affect the room availability?
As I mentioned, using ACL and Content Access, I can restrict users to only be allowed to edit their own nodes, yet the room availability can still be edited by any user with the "edit hotel room availability" permission. So I would assume it would be this permission that needs to split into two to solve my issue, one permission for editing all room availabilities and one for editing own availabilities. Would this be correct?
It certainly would be useful though to split the edit room types permission into two as well though so that ACL and Content Access are not needed.
Thanks,
Matt
Comment #10
terramedia CreditAttribution: terramedia commentedJeff, if you figure out how to take a percentage out, that would be great to know, it's not the direction my project is taking, but it is definitely something that would be useful to know how to do!
Thanks mate,
Matt
Comment #11
willvincent CreditAttribution: willvincent commentedThat's correct. The existing permission could change to Edit All hotel room availabilities. And a second permission edit own hotel room availabilities could be added.
Then within the hotel calendar module, a check would have to be run to see if either the current node belongs to the current user and they have the edit own permission, or if the current user has the edit all permission, otherwise don't display the edit link.
Comment #12
weblance CreditAttribution: weblance commentedYou also might want to think about adding permissions to view prices in calendar.
It would be nice for hotels to view a summary of their price in calendar but some hotels may wish to keep their overall pricing strategy hidden from public view. I know some hotels do feel protective about that.
Comment #13
smurferboy CreditAttribution: smurferboy commentedDid anyone of you eventually manage to create a patch or a working change code for the uc_hotels module, so that a 'edit own hotel availiability' permission is added (changed described in #11). Or more in general: did anyone eventually manage to alter / use the module in a way it has multiple properties each administrated by the respective hotel owner.
I'm attempting this through uc_hotels and uc marketplace but I'm also stuck on the permissions level for uc-hotels.
thanks,
wouter
Comment #15
weblance CreditAttribution: weblance commentedKind of looks like an advertisement here....? Do you have something useful to contribute to this topic friend?
Comment #16
weblance CreditAttribution: weblance commentedYes I have created many to make this work but I just don't have time to commit with a patch. Anyone interested, I could send to you and you could work it up into patch for me...... :( so so busy ....uhg
Comment #17
bryanhidalgo CreditAttribution: bryanhidalgo commentedThis is a great moduel, now I'm looking for a multi-hotel solution, I'd appreciate any help. thanks
Comment #18
larowlanHi
This functionality can now be built with v2 without hacks as all forms/output etc is modifiable via templates/hook_form_alter.
Note also v2 exposes a hook hook_modify_room_rate allowing modules to define rate modifiers. Refer hotel_booking_modify_room_rate for an example.
Lee
Comment #20
muhammad.tanweer CreditAttribution: muhammad.tanweer commentedHi,
I need uc_hotel integration with ubercart marketplace module. Did someone manage to create a patch or something for the marketplace module so that it works with the uc_hotel module as well? Basically I need the multi hotels setup using uc_hotel and marketplace. Any help would be appreciated..
Thank you,
Muhammad.
http://www.drupalxpert.com
Comment #21
tonirv CreditAttribution: tonirv commentedI don´t know if this could be a way to move you towards a solution, but, in my scenario, with 3 website domain levels, managed with Domain Acess, I figure out this approach:
**Region 1 (1 domain)
***City 1 (1 subdomain)
****Hotel 1 (1 subdomain)
****Hotel 2 (1 subdomain)
***City 2 (1 subdomain)
****Hotel 3 (1 subdomain)
****Hotel 4 (1 subdomain)
**Region 2 (1 domain)
***City 3 (1 subdomain)
****Hotel 5 (1 subdomain)
****Hotel 6 (1 subdomain)
I need to have diferent hotels with several rooms. I have defined one subdomain for each hotel. And one subdomain for each area, which should show all the hotels belonging to that area (published in that domain). We could also think in a City domain, to allow grouping hotels by their cities.
The criteria then should be if an hotel is published in a city website, then It should be consider a set of that city. The same for regions.
The problem was that module uc_hotel search result showed all hotels, despite of they were published or not on that domain. For example, in hotel 4 if I search for certain dates, we receive the whole hotel list as result.
Diving inside source code, I found a little bit dirty solution, but I think that it works and It shouldn´t be a problem for diferent scenarios.
If you look at function hotel_booking_get_available_rooms, at the end:
You could replace
with
This code changes results, applying db_rewrite_sql to add domain access control to the query. And, as I mentioned before, this shouldn´t be an obstacle for module normal behavior.
I think it could be more elegant if we changed only main query defined at the beginning of the function, but an SQL exception is thrown. Perhaps recoding the function make it more efficient and clean.
Perhaps a similar case could be added to an "edit own hotel" permission and access. In my case, I share all data, but you could make different $dbprefix for {permission} table.
Comment #22
mogop CreditAttribution: mogop commentedsubscribe