Can anyone help me, i need to do an online booking system for a hotel, with further custimisations. Will drupal help me with this? If not, can anyone give me any good hotel online booking systems with php and/ or java? Which maybe are open source or any package software which proves its good?

Thanks

Comments

lionheart8’s picture

Check out this module http://drupal.org/project/openresort:

OpenResort is a new solution for the drupal community that provides full featured online booking functionality for all types of accommodation. OpenResort also offers a suite of other solutions for the tourism industry. For more details visit www.openresort.org

The OpenResort Community Edition is completely open source and free to use by anyone. This version allows for the creation of properties, and any number of bookable units under a property. Units can only be created one at a time, regardless if they are of the same type. Rates and availability also must be added one at a time for every unit. Check out a demo here. PLEASE NOTE the download includes a patch file which needs to be applied to the ecommerce suite. Once this patch is applied ecommerce can no longer be used as a standard shopping cart solution.

It might do what you want, but I'm almost certain there's no Drupal 6 version yet.
I think even if this does not do exactly what you want, with a combination of different modules, probably with some profi involvement a custome solution can be found.

Regards

andrewsl’s picture

I am going to develop a site for hotel with custom reservation module. It will send check-in data by e-mail. You are welcome to participate. If you intereset in such module, you can write me via contact form.

--
Andrew

wisdom’s picture

Yes I am interested to participate.

Online Business

Roxpace’s picture

Why not solve this easy with Content Access, ACL and CCK modules ?

CCK can very well manage this, just build up a correct CCK database structure for all kind of needs in a Hotelroom reservation, if it is needed with hotel club special fees use Feemanager and if you need online payment look at any e-Commerce solutions, but didnt sound like you needed the last.

Roberth Andersson
Administrator/Developer @ Jump-Gate and Webworqs, Inc

andrewsl’s picture

There are many reasons. One of them is flexibility. If I develop a module, I can get required functionality in several lines of code. I can validate input data, apply spam filters, send e-mail, provide an unique request link for users, etc. Another reason - modules are portable. Modules can be implemented by other users, they can make some improvements. Developing modules is not very difficult task.

--
Andrew

wisdom’s picture

I think it is better to go from ground up to build feature rich and scalable reservation application. Using only available modules like CCK I do not think it leads to that level but could be integrated to the application.
One difficulty I see to go with CCK is to make search of database hotels. The other is integration withe ecommerce transaction process.

Online Business

Roxpace’s picture

Well with that way to think it would also be better to develop your own CMS which is perfectly fit for Hotel businesses.

Not sure why you say CCK would not be feature rich with other modules like Views, Content Access, ACL and maybe shopping cart system ?

CCK is also a "de facto" standard module, very close core modules. If you develop anything in CCK today it will work in the future versions of CCK with Drupal in one or other way.

But if you develop a very narrow module only for hotel room reservation it is not even sure anyone have time to continue to contribute with development of it while CCK have a lot of developer since it's very wide user base.

Roberth Andersson
Administrator/Developer @ Jump-Gate and Webworqs, Inc

nodom’s picture

I'm looking for a management system and hotel reservation.
The idea of Roberth Andersson seems interesting, I try it and you realize

Seddik
Riad Marrakech - Marrakech Hotel

onejam’s picture

Great to build your own module but why not collaborate on existing module that aim to provide the same features or functionality you're looking for: http://drupal.org/project/simple_reservation

-----------------------------------------------------------------
We build engaging websites and intuitive designs that will benefit your business.
Duvien

danielkroon’s picture

Hi


I would recomend the Hotel Booking system at Hotel Booking System @ www.internetbookingsystem.com


This works with both drupal or no drupal. This way you get a system that works and dont drop any reservations because of programing failure.

Good luck!

agill’s picture

Here ( hoteldemo.mightech.de ) is what is done so far. Need a few more months because
i have a full-timejob.
But if someone knows a customer who wants to pay for the development
of a drupalsolution for a hotelsoftware it could be done faster.

I am building a modul agreservations which ist dependent on these Drupalmodules: Calendar and MERCI which are
really cool moduls with alot of possibilities.

baxterjones’s picture

i too had to make a reservation system with calendar, bookings and easy booking of rooms etc. plus views a block etc.

i don't know where i can attach this, but here is my view export:

with a few neat blocks

$view = new view;
$view->name = 'rooms';
$view->description = 'Photos belonging to a particular gallery';
$view->tag = 'gallery';
$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('relationships', array(
'field_room_nid' => array(
'label' => 'Room',
'required' => 0,
'delta' => -1,
'id' => 'field_room_nid',
'table' => 'node_data_field_room',
'field' => 'field_room_nid',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
));
$handler->override_option('fields', array(
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'none',
),
'field_gallery_image_fid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'default_thumb_90_linked',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_gallery_image_fid',
'table' => 'node_data_field_gallery_image',
'field' => 'field_gallery_image_fid',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
'created' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'date_format' => 'time ago',
'custom_date_format' => '2',
'exclude' => 0,
'id' => 'created',
'table' => 'node',
'field' => 'created',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('sorts', array(
'created' => array(
'order' => 'ASC',
'granularity' => 'second',
'id' => 'created',
'table' => 'node',
'field' => 'created',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('arguments', array(
'field_room_nid' => array(
'default_action' => 'not found',
'style_plugin' => 'default_summary',
'style_options' => array(),
'wildcard' => 'all',
'wildcard_substitution' => 'All',
'title' => '',
'breadcrumb' => '',
'default_argument_type' => 'fixed',
'default_argument' => '',
'validate_type' => 'node',
'validate_fail' => 'not found',
'break_phrase' => 0,
'not' => 0,
'id' => 'field_room_nid',
'table' => 'node_data_field_room',
'field' => 'field_room_nid',
'validate_user_argument_type' => 'uid',
'validate_user_roles' => array(
'2' => 0,
),
'relationship' => 'none',
'default_options_div_prefix' => '',
'default_argument_user' => 0,
'default_argument_fixed' => '',
'default_argument_php' => '',
'validate_argument_node_type' => array(
'rooms' => 'rooms',
'booking' => 0,
'gallery' => 0,
'gallery_image' => 0,
'links' => 0,
'page' => 0,
'story' => 0,
),
'validate_argument_node_access' => 0,
'validate_argument_nid_type' => 'nid',
'validate_argument_vocabulary' => array(),
'validate_argument_type' => 'tid',
'validate_argument_transform' => 0,
'validate_user_restrict_roles' => 0,
'validate_argument_php' => '',
),
));
$handler->override_option('filters', array(
'status_extra' => array(
'operator' => '=',
'value' => '',
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'status_extra',
'table' => 'node',
'field' => 'status_extra',
'relationship' => 'none',
),
));
$handler->override_option('access', array(
'type' => 'none',
));
$handler->override_option('cache', array(
'type' => 'none',
));
$handler->override_option('title', 'Block1');
$handler->override_option('empty', 'No photos have been added to this gallery.');
$handler->override_option('empty_format', '1');
$handler->override_option('use_ajax', TRUE);
$handler->override_option('items_per_page', 15);
$handler->override_option('use_pager', 'mini');
$handler->override_option('style_plugin', 'grid');
$handler->override_option('style_options', array(
'grouping' => '',
'columns' => '3',
'alignment' => 'horizontal',
));
$handler = $view->new_display('node_content', 'Rooms available', 'node_content_2');
$handler->override_option('relationships', array(
'field_room_nid' => array(
'label' => 'Room',
'required' => 0,
'delta' => -1,
'id' => 'field_room_nid',
'table' => 'node_data_field_room',
'field' => 'field_room_nid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('fields', array(
'created' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'date_format' => 'time ago',
'custom_date_format' => '',
'exclude' => 0,
'id' => 'created',
'table' => 'node',
'field' => 'created',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
'field_gallery_image_fid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => 'node/%1',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'gallery_thumb_default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 1,
'id' => 'field_gallery_image_fid',
'table' => 'node_data_field_gallery_image',
'field' => 'field_gallery_image_fid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
'nid' => array(
'label' => '',
'alter' => array(
'alter_text' => 1,
'text' => '[field_gallery_image_fid]',
'make_link' => 1,
'path' => 'node/[nid]',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'exclude' => 0,
'id' => 'nid',
'table' => 'node',
'field' => 'nid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('items_per_page', 1);
$handler->override_option('use_pager', '0');
$handler->override_option('style_plugin', 'default');
$handler->override_option('style_options', array(
'grouping' => '',
));
$handler->override_option('types', array(
'booking' => 'booking',
));
$handler->override_option('modes', array(
'0' => 'full',
));
$handler->override_option('argument_mode', 'nid');
$handler->override_option('default_argument', 'nid');
$handler = $view->new_display('page', 'Page', 'page_1');
$handler->override_option('arguments', array());
$handler->override_option('filters', array(
'status_extra' => array(
'operator' => '=',
'value' => '',
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'status_extra',
'table' => 'node',
'field' => 'status_extra',
'relationship' => 'none',
),
'type' => array(
'operator' => 'in',
'value' => array(
'rooms' => 'rooms',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('title', 'Rooms');
$handler->override_option('items_per_page', 10);
$handler->override_option('use_pager', '1');
$handler->override_option('distinct', 1);
$handler->override_option('style_plugin', 'default');
$handler->override_option('style_options', array(
'grouping' => '',
));
$handler->override_option('row_plugin', 'node');
$handler->override_option('row_options', array(
'relationship' => 'none',
'build_mode' => 'teaser',
'links' => 1,
'comments' => 0,
));
$handler->override_option('path', 'rooms');
$handler->override_option('menu', array(
'type' => 'normal',
'title' => 'Rooms',
'description' => '',
'weight' => '0',
'name' => 'primary-links',
));
$handler->override_option('tab_options', array(
'type' => 'none',
'title' => '',
'description' => '',
'weight' => 0,
));
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->override_option('relationships', array());
$handler->override_option('fields', array(
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 1,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'none',
'override' => array(
'button' => 'Use default',
),
),
'field_image_fid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'product_list_linked',
'multiple' => array(
'group' => 1,
'multiple_number' => '1',
'multiple_from' => '',
'multiple_reversed' => 0,
),
'exclude' => 0,
'id' => 'field_image_fid',
'table' => 'node_data_field_image',
'field' => 'field_image_fid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
'field_room_nid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_room_nid',
'table' => 'node_data_field_room',
'field' => 'field_room_nid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'field_room_nid',
),
'field_size_value' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_size_value',
'table' => 'node_data_field_size',
'field' => 'field_size_value',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('arguments', array());
$handler->override_option('filters', array(
'status_extra' => array(
'operator' => '=',
'value' => '',
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'status_extra',
'table' => 'node',
'field' => 'status_extra',
'relationship' => 'none',
),
'type' => array(
'operator' => 'in',
'value' => array(
'rooms' => 'rooms',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('use_ajax', FALSE);
$handler->override_option('items_per_page', 1);
$handler->override_option('use_pager', '0');
$handler->override_option('style_plugin', 'default');
$handler->override_option('style_options', array(
'grouping' => '',
));
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);
$handler = $view->new_display('block', 'Block2', 'block_2');
$handler->override_option('relationships', array());
$handler->override_option('fields', array(
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_node' => 0,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'none',
),
'created' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'date_format' => 'time ago',
'custom_date_format' => '2',
'exclude' => 0,
'id' => 'created',
'table' => 'node',
'field' => 'created',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
'field_image_fid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'product_list_linked',
'multiple' => array(
'group' => 1,
'multiple_number' => '1',
'multiple_from' => '',
'multiple_reversed' => 0,
),
'exclude' => 0,
'id' => 'field_image_fid',
'table' => 'node_data_field_image',
'field' => 'field_image_fid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
'field_size_value' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_size_value',
'table' => 'node_data_field_size',
'field' => 'field_size_value',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
'field_room_nid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'default',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_room_nid',
'table' => 'node_data_field_room',
'field' => 'field_room_nid',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('arguments', array());
$handler->override_option('title', 'Block2');
$handler->override_option('use_pager', '0');
$handler->override_option('style_plugin', 'default');
$handler->override_option('style_options', array(
'grouping' => '',
));
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);

my content types with fields
Name: Make a booking, booking removed body field
fields:
Time to book field_time_book Datetime
Comment field_comment Text
Room field_room Node reference (node reference to room content type, more info below)

Name: Room, rooms renamed body field to Description
fields:
Size field_size Text
Comment field_comment Text
Images field_image File

i use imagecache for the images, usually scale and crop if i want consistent image sizes for use with views and panels.

you'll create a room, which in normal circumstances would be up for bookings
then when viewing the node you'll see a link to make a booking.

i am working hard to get the calendar working for bookings... i assume it'll be availability calendar module.

Enjoy ;)