FAQ

 

Pre-Sales Questions

It's one time cost. You can use your purchased version of Booking Calendar as long as you need on your website.

Also, you can request free updates your version of Booking Calendar (if such updates ready) during 6 months after purchase of plugin. You can request new update of Booking Calendar on this page.
If you will need to extend period (of support and getting free updates) to the next 6 months, it will cost 50% from the original cost.

You can request free updates your version of Booking Calendar (if such updates ready) during 6 months after purchase of plugin. You can request new update of Booking Calendar on this page.
If you will need to extend period (of support and getting free updates) to the next 6 months, it will cost 50% from the original cost.

Each specific version of Booking Calendar can be single site usage version, developer or multi site usage version.
Single site usage version, possible to install and activate only at 1 specific website.
Developer edition version, possible to install and activate at 2 different websites. Its can be test (developer) server and live website.
Multi site usage version, possible to install and activate maximum on 5 different websites.

You can check overview of different Booking Calendar versions.
You can also check all available features for different versions of Booking Calendar.
Also you can test live demo of specific versions (both client and admin sides) to be sure in functionality and do not have misunderstanding.

Unfortunately we can not make personal customization or custom development on customer demand. But we can add features, that you need to our TODO list for implementing them in a future updates. You can add your request of specific feature at this page.
Please note, we can not specify some approximate time for implementation of the specific feature but we will make the best to implement specific feature ASAP.

Yes, its possible to make upgrade from lower version to the higher versions of the same editions (for example from the Booking Calendar Personal single site usage version to the Booking Calendar Business Small single site usage version).
But its does not possible to make upgrade from the single site usage version to the "developer" or multi site usage versions or from the "developer" to the multi site usage versions.
The cost of upgrade from the lower to higher versions, usually higher than difference in cost between 2 versions.
The cost of upgrade from the lower to higher versions of single site usage versions higher on $20 than difference in cost between 2 versions.
The cost of upgrade from the lower to higher versions of "developer" edition versions higher on $30 than difference in cost between 2 versions.
The cost of upgrade from the lower to higher versions of multi site usage versions higher on $50 than difference in cost between 2 versions.

 

Other questions relative to Booking Calendar

No, you do not need to make update from WordPress directory, because then you will use Booking Calendar Free version.
We will send to you update(s) of your Booking Calendar version (if these update(s) are ready) by email directly, after you are request update at this page.
You can check according new updates at this page.
Please check about ability of getting free updates here and here (if you was purchasing your version from 15/12/2013 until 15/12/2014).

The update 4.0 of Booking Calendar have a new names of the versions.
The Booking Calendar Standard become Booking Calendar Free,
Booking Calendar Professional -> Booking Calendar Personal,
Booking Calendar Premium -> Booking Calendar Business Small,
Booking Calendar Premium Plus -> Booking Calendar Business Medium,
Booking Calendar Hotel Edition -> Booking Calendar Business Large,
Booking Calendar MultiUser -> Booking Calendar MultiUser.

Good news! If you was purchasing your version of Booking Calendar in this terms from 15/12/2013 until 15/12/2014,
then we extend period of ability request free updates of your version of Booking Calendar to additional 6 months.
It means that, if you purchased your version of Booking Calendar on 15/12/2013, then you can request free updates of your version until 15/06/2015. If you purchased your version of Booking Calendar on 15/12/2014, then you can request free updates of your version until 15/06/2016. Etc... You can request the new update of Booking Calendar on this page.

All customers who was purchased Booking Calendar single site usage version until 15/12/2014, automatically switching to the same "developer edition" version, which possible to use on 2 websites - live and test.

 

Configuration of Booking Calendar

1) You need to create the booking resources for the each of your properties or services on the Booking > Resources page.
You can read more info about the booking resources and how to configure them on this page.

2) Then you be able to insert the booking form for the specific resource (your property or service, which need to be booked) into the any posts or pages. You can check how to insert and configure booking shortcode into the posts or pages here. Also check how manually to configure Booking Calendar shortcodes here.

3) Finally you can reconfigure settings, form fields and email templates, if you need the different options, on the Booking > Settings pages.

The Booking Calendar MultiUser version have 2 types of the users: super booking admin and usual user.

The "first" WordPress admin user by default is "super booking admin" user.

So, firstly after activation of the plugin you have to see the booking panel for that user.

Then you are need to open the "general booking settings" page (this page is available only for the super booking admin users), then expand the User settings section at the right side and set the correct permissions (user roles) for the pages of the booking admin panel. Its required for the new wordpress users possibility to open the admin booking admin panel.

Now, you can create new wordpress user (the role of this user have to be higher or equal to the roles, which you are set at the previous step).

Now, you are need to open the Booking > Settings > Users page (you are have to be logged in as booking super admin user) and make activation of the booking admin panel for the new wordpress user.

Finally, you can log in as new wordpress user, and you will see own booking admin panel for this user. You can create new booking resource(s), configure the settings and insert the booking form(s) of this user into posts or pages, which is created by this user.

01. To get Google Calendar API key please follow this instruction:

  1. Go to Google Developer Console: https://console.developers.google.com. And then click on Google Calendar API link.

    api-01

  2. Click "Create Project".

    api-02

  3. Give your project a name and click "Create".

    api-03

  4. Click on Enable button.

    api-04

  5. In the sidebar click on "Credentials".

    credentials-01

  6. Click on "Create credentials" to expand dropdown list and select "API Key".

    credentials-02

  7. On the popup click the button "Server Key".

    credentials-03

  8. Enter Name of your API Key and click on "Create" button

    credentials-04

  9. Copy "API Key" and paste it into Google API Key field at Booking > Settings > Import > Google Calendar Events Import page in your WP admin panel.

    credentials-05


02. Set Your Calendar to Public:

  1. Navigate to your Google calendars.

  2. Open the settings for the calendar.

    cal-1

  3. Click the "Share this Calendar" link.

    cal-2

  4. Click the checkbox to make calendar public. Do not check the other option.

    cal-3


03. Find Your Calendar ID:

  1. Navigate to your Google calendars.

  2. Open the settings for the calendar.

    cal-1

  3. Now copy the Calendar ID to use in the Booking > Settings > Import > Google Calendar Events Import page in your WP admin panel for "Calendar ID" field(s). Make sure to use the Calendar ID only, not the entire XML feed URL.

    cal-4


04. Test Import of Google Calendar Events:

  1. Open your WordPress admin panel and Navigate to Booking > Settings > Import > Google Calendar Events Import page.

  2. Paste your Google API Key and Google Calendar ID into specific fields. Important! Please be sure that you do not paste any white spaces at the beginning or ending of API Key or Google Calendar ID. Save the changes.
    In the paid versions of Booking Calendar you can assign at this page different Google Calendar ID for the different booking resources.

    wpbc-01

  3. Open Booking Listing page and switch to the "Actions toolbar", then click on "Import" button.

    wpbc-02

  4. In popup dialog configure your parameters (during first test import, please be sure that you selected time interval, where for sure exist your Google Calendar Events). And then click on Import button.

    wpbc-03

  5. You have to see your imported events. Reload the page to see them as bookings.

    wpbc-04

At the Business Small and higher versions of Booking Calendar are supported several payment systems integrations.
Each payment system support own list of currencies.
So you can change and check the list of the currency at the Booking > Settings > Payment page at the each section of payment system integrations.

It's possible at the Booking Calendar Business Small and Business Medium versions of Booking Calendar in update 4.1 or newer.

You can activate "Use check in/out time:" option at the General Booking Settings page.
Then in the sub-settings set the "Check in" time as 15:00 and "Check out" time as 10:00. (You can set the different times there, but be sure to set the "Check In" time older than "Check Out").
Save the settings page.

Now, your visitors will be able to use the same date as check in/out date for the different bookings, its mean if the some booking is finished on the specific date, other visitor can start the new booking on the same specific date.
The check in/out days in calendar will be marked as half booked (diagonal line) and not by clock icon as for the usual timeslots.

Please note, this option will apply globally to the all booking resources and will overwrite any time slots, if you will use them in the booking form.

If you are need to use just time slots in the booking form, so you are need to deactivate this option and configure the time slot selection at the Booking > Settings > Fields page. Please read more about the booking form fields configuration here.

Please note, this configuration is possible at the Business Medium or higher versions.

Description
If you are need to add the additional costs, like tax or some other additional charges (cleaning,breakfast, excursion...), or just increase the cost depend from the visitor number selection at the selectbox, which is depend from the selection of the selectboxes or checkboxes in the booking form, so then you can make this configuration in the Business Medium or higher versions.

Configuration
1) You can insert into the Booking form, at the Booking > Settings > Fields page some checkbox, like this:

Tax: [checkbox* my_tax ""]

If you are need to have this checkbox invisible and checked by default in this way:

</p>
<div style="display:none;">[checkbox* my_cleaning ""]</div>
<p>

If you are need to have this checkbox checked by default so use it in this way:

Cleaning service: [checkbox* my_cleaning default:on ""]

For the selectbox, its can look like this:

</p>
<p>Visitors [select visitors "1" "2" "3" "4"]</p>
<p>

Please read more about the booking form fields configuration here

2) Then at the Booking > Resources > Advanced cost page at the advanced cost management section for the option my_tax or/and visitors, set some additional cost.

For example, for the tax 6% you need to set value 106% there.

Or if you want to add the fixed cost value, you can set this value to this "my_cleaning" option:

my_cleaning = 50

or for the visitors selections you can leave this configuration:

visitors:
1 = 100%
2 = 200%
3 = 300%
4 = 400%

etc....

Description
At the Booking Calendar Business Large (old Hotel Edition) and MultiUser versions are possible to set the capacity of the booking resources. It's mean that visitors of your site can make several bookings per same selected FULL (not a time slot) date in specific calendar (booking resource). It's usefull if you are have several rooms of the same type or several seats for some place or any other service or properties, where is need to have possibility to book several times for the same date. So at these versions are possible to set capacity of the booking resource, so date(s) in calendar will be available until number of reservations is less then capacity of the booking resource; but in these versions are possible to make reservation only for FULL date, not a time slots (time slots in this version only record data in DB, but not play any logic in reservation) for the booking resources with specific capacity.
Configuration
If you are need to configure the booking resource(s) with some capacity, so you are need to add the "child" resources to your "parent" resource at the top form of Booking > Resources admin page. 
Just create one resource, and then create several child resources (set parent resource for them as a first resource), so the capacity of the first resource will increase.
Capacity it's number of times, which is possible to reserve the same date in calendar, based on number of selected visitors in the booking form. Resource its more like room, where is possible to be several seats for the visitors. 

Here is examples of different configuration of capacity settings.

The availability (number of seats/maximum amount of people ) can be calculated only based on the "visitors" shortcode (shortcode

[select visitors "1" "2" "3" "4" "5"]
in the Booking > Settings > Fields page at top form ). Its can not calculate availability based on the adults or children shortcodes.

You need to activate "Set capacity based on number of visitors" option at the general booking settings page at advanced section. After that you will see the maximum number of visitors at the Resources page.

Also you can read more here: http://wpbookingcalendar.com/help/booking-resource/

Let say you are having booking resources like this:

test   (parent resource, capacity = 3)   Max. visitors = 2
- test 1
- test 2

A) If you are do not activate the "Set capacity based on number of visitors" so then, during reservation process you will book only ONE available booking resource, do not depend from the any number of visitors selections in the "visitors" select box. So it's mean if you are select 1 or 2 or 5 visitors in the select box at the booking form, you will reserve only one booking resource (firstly its will be parent resource "test", during the next new (second) reservation it's will be child resource "test 1" and during third reservation you will reserve "test 2" booking resource.
If the "Set capacity based on number of visitors" is not checked, the availability for the specific date will be 3 (based on capacity only) and during reservation process the selection number of visitors will not impact to the Availability and just will be saved as a any other field.

B) If you will set checked the "Set capacity based on number of visitors" option and activate first radio button in sub settings:

Add tooltip on calendar(s) to show availability based on the number of available booking resource items remaining for each day.
Note: Be sure to match the maximum number of visitors for the one booking resource with the number of visitors specified on the booking form.

Then the Availability in the mouse over tool-tip will be based on the capacity of the booking resource. So it's mean that for the free dates the availability will be show as 3, as in our previous example.

But during reservation process, you can not select more than 2 visitors in the select box. Because each booking resource, is support only 2 visitors per resource.

In other words, during reservation process you can reserve only 1 booking resource during one reservation, but the system is also check that the number of visitors, which you are selected in the booking form have to be not more then maximum number of visitors, which you are set at the Booking > Resource page. The availability in mouse over tooltip will be based on the capacity and in out example will be show as 3

C) And now last variant, if you had selected the bottom radios button option:

Display tooltip on calendar(s) to show availability based on total (fixed) number of visitors for the resource, which can be at free booking resource items.
Note: Be sure to match the maximum number of visitors for all booking resources with the number of visitors specified on the booking form.

So it's mean that availability over the specific date will be based on the capacity and number of maximum visitors per resource. In our example it's will be show as 6 ( 3 * 2 = 6 ).
During reservation process the system can book several booking resources, it's will calculate the visitors, which you are select in the booking form for the each booking resource (parent or child) and number of visitors per this resource.

So for example if you are select 3 visitors in the booking form. It's will reserve 2 booking resources. Because first resource is support 2 visitors and second is support also 2 but we are have only 1 ( 3 - 2 = 1 ), in other words one bed will be free in the second resource.

How all this capacity concept is working for search availability in search form at front-end side ?

You can test search form in action at the live demo of Booking Calendar Business Large version.

During searching availability in search form, number of selected visitors (shortcode [search_visitors] in the search form at Booking > Settings > Search page), can work in several ways. It's depend from selected or do not selected option: "Set capacity based on number of visitors" at the General Booking Settings page in advanced section and selected additional parameters.

A) If "Set capacity based on number of visitors" option UNCHECKED (not selected), then search availability form will search for available booking resources only based on the Check In/Out dates and possible some other parameters, but its will not depend from the selected number of visitors.

You can select any number of visitors and its will show items in search results, if other parameters (check in/out dates and possible some other parameters fit to selected options in search form).

B) If "Set capacity based on number of visitors" option CHECKED and you activated this sub option:

Add tooltip on calendar(s) to show availability based on the number of available booking resource items remaining for each day.
Note: Be sure to match the maximum number of visitors for the one booking resource with the number of visitors specified on the booking form.

Then during search process, the number of visitors (selected in the search form) must be equal or less then maximum number of visitors per booking resources (that you set at the Booking > Resources page). Its does not depend from the number of available "child booking resources", if the booking resource was configured with specific capacity (have child booking resources) and this booking resources (or at least one child booking resource) have available dates that you are searching.

C) If "Set capacity based on number of visitors" option CHECKED and you activated this sub option:

Display tooltip on calendar(s) to show availability based on total (fixed) number of visitors for the resource, which can be at free booking resource items.
Note: Be sure to match the maximum number of visitors for all booking resources with the number of visitors specified on the booking form.

Then during search process, the number of visitors (selected in the search form) must match the maximum number of visitors for all booking resource. Its means that availability per booking resource calculated as number of maximum visitors per resource multiply on capacity of booking resources (number of child booking resources). If we are having booking resource with capacity 3 (2 child booking resources), and maximum number of visitors as 2. Then maximum availability = 2 * 3 = 6 And its means that, if we selected 6 visitors in the search form we fit to get this booking resource in search results. If we select more than 6 visitors, then we do not match this criteria and this booking resource will not show in the search results.

1) Firstly, create a new post or page, and insert into content of the page this shortcode:

[bookingedit]

You can just click at the booking button at edit toolbar and then at popup dialog select second tab for inserting this shortcode or just write manually it. Publish or update page and COPY the URL to this page.

Important! Please note, if you open this page directly, you will see this warning "You do not set any parameters for booking editing". It's because system allow to open this page only from link(s) in email templates, which your website visitor had to received, after he/she made the booking (inside of that link will be specific parameter (secret HASH) for the identification of the booking).

2) Now, open the general booking settings page and at the "Advanced section" for field: "URL to edit bookings" write (paste) the URL to the page from point #1. Save the changes of this settings page.

3) Open Booking > Settings > Emails page and inside of email template(s), where it's possible (you can check it at help section under the each email template), you can use these shortcodes (for the inserting links into the email templates), which are sending to the visitors:

[visitorbookingediturl]
- inserting link of booking editing by visitor at client side of site,
[visitorbookingcancelurl]
- inserting link for booking cancellation by visitor at client side of site,
[visitorbookingpayurl]
- inserting link to payment page for visitor at client side of site.

4) You can test it for a new bookings.

 

Customization of Booking Calendar

This feature is available only at Premium Plus, Hotel Edition versions. Using this feature is require creation of new additional booking form customization, where will be inserted several calendars.
Example, of replacement standard [calendar] shortcode at the form fields customization page for activation of this feature:

<div style="float:left;margin:10px;">[calendar]</div>
<div style="float:left;margin:10px;">[calendar id=2]</div>
<div style="float:left;margin:10px;">[calendar id=3]</div>

Where [calendar] - Default calendar (You are select this resource at popup, when insert it into post/page);
[calendar id=2] - Calendar of resource ID=2;
[calendar id=3] - Calendar of resource ID=3

In the versions 4.1.6, 5.0, 5.0.1 is exist issue with this feature. Version update 5.0.2 working fine.

1. Please read what type of shortcodes you are want to insert here
2. Open for edit your theme (PHP) file. For example: single.php.
3. Insert this code for showing booking form

<?php echo do_shortcode("[booking type=1 nummonths=1]"); ?>

where instead of this shortcode: [booking type=1 nummonths=1], can be any other shortcode from the point #1.
4. save the changes in the PHP file.

This customization will open booking form in modal window, after visitor clicked on date in calendar.
Preparation:
- You need to have only one booking form on one specific visible page. This customization does not support several booking forms on the same page.
- You need to activate "Single day" selection mode at the General Booking Settings page in "Calendar" section
- Your theme or some other plugin require do not use any type of Bootstrap library. Otherwise its can be overwriting, and possible issues.
- If you are using Booking Calendar version update 5.4.3 or older, please make this small customization:
Please open this file ../{Booking Calendar Folder}/js/client.js
then find this code:

if(typeof( selectDayPro ) == 'function') {selectDayPro( date, bk_type);}

and replace it to this code:
if(typeof( selectDayPro ) == 'function') {selectDayPro( date, bk_type);}
jQuery( ".booking_form_div" ).trigger( "date_selected" , [ bk_type, date ] );

Customization:
Please open the Booking > Settings > Fields page, and make customization of your booking form in a way like this:

[calendar]
<div class="modal bookingFormModal"
     style="display:none;width: 600px !important;height: 950px !important;">
		<div class="modal-header">
			<a class="close" data-dismiss="modal">& #10006;</a>
			<h3 style="margin-top:-27px;">Booking Form</h3>
	    </div>
	    <div class="modal-body">
			<!-- Content of booking form -->
			<div class="form-hints">
				Selected Date and Times: [check_in_date_hint]   [start_time_hint] - [end_time_hint]<br>
				Total cost: [cost_hint]<br/><br/>
			</div>
			<p>Select Times:<br />[select* rangetime multiple "10:00 AM - 12:00 PM@@10:00 - 12:00" "12:00 PM - 02:00 PM@@12:00 - 14:00" "02:00 PM - 04:00 PM@@14:00 - 16:00" "04:00 PM - 06:00 PM@@16:00 - 18:00" "06:00 PM - 08:00 PM@@18:00 - 20:00"]</p>
			<p>First Name (required):<br />[text* name] </p>
			<p>Last Name (required):<br />[text* secondname] </p>
			<p>Email (required):<br />[email* email] </p>
			<p>Phone:<br />[text phone] </p>
			<p>Adults:  [select visitors class:span1 "1" "2" "3" "4"] Children: [select children class:span1 "0" "1" "2" "3"]</p>
			<p>Details:<br /> [textarea details] </p>
			<p>[checkbox* term_and_condition use_label_element "I Accept term and conditions"] </p>
			<p>[captcha]</p>
			<hr/>
			<div>
				[submit class:btn "Send"]
				<a href="javascript:void(0)" style="float: right;margin: 2px 20px;" onclick="javascript:jQuery('.bookingFormModal').modal('hide');" class="btn">Close</a>
			</div>
			<!-- End Content of booking form -->
	    </div>
</div>
<script type="text/javascript">
     jQuery( ".booking_form_div" ).on('date_selected', function(event, bk_type, date) {
           jQuery('.bookingFormModal').modal("show");
     });
</script>

Update the booking form, and test it at the front-end.

Please note, starting from this line:

<!-- Content of booking form -->

to this line
<!-- End Content of booking form -->

is going on your booking form customization. So you can insert or remove your booking form shortcodes.

This customization, was made for the Booking Calendar Business Medium version, so here is using some shortcodes (like [cost_hint], [check_in_date_hint], [start_time_hint], [end_time_hint], [select rangetime ...]), that can be unavailable in lower versions.

P.S. One additional little fix. Please remove empty space (second symbol) after & in this code "& #10006;" at the booking form. Its will show correctly "x" symbol in the top of modal form.

If you need to show or hide some form fields in the booking form, depend from the selected option in some selectbox, you can make it with JavaScript customization.

For example, if you need to show additional fields for entering "First and Last Names" of the each visitor, depend from the selected number of this visitors, then you can have this customization in your booking form at the Booking > Settings > Fields page:

<p>Adults:  [select visitors class:visitors_selection "1" "2" "3" "4"] </p>
<p>First Name (required):<br />[text* name] </p>
<p>Last Name (required):<br />[text* secondname] </p>
<p>Email (required):<br />[email* email] </p>
<div class="visitors_selection_div v_num2 v_num3 v_num4" style="display:none;">
   <p>First Name of 2nd visitor:<br />[text* name_2nd] </p>
   <p>Last Name of 2nd visitor:<br />[text* secondname_2nd] </p>
</div>
<div class="visitors_selection_div v_num3 v_num4" style="display:none;">
   <p>First Name of 3rd visitor:<br />[text* name_3rd] </p>
   <p>Last Name of 3rd visitor:<br />[text* secondname_3rd] </p>
</div>
<div class="visitors_selection_div v_num4" style="display:none;">
   <p>First Name of 4th visitor:<br />[text* name_4th] </p>
   <p>Last Name of 4th visitor:<br />[text* secondname_4th]</p>
</div>
<script type="text/javascript">
   jQuery('.visitors_selection').on('change', function() {
       var visitors_num = jQuery(this).find(":selected").val();
       jQuery('.visitors_selection_div').hide();
       jQuery('.visitors_selection_div.v_num' + visitors_num ).show();
   });
</script>

Description of this code:
We are having 3 additional DIV elemtns, where exist fields shortcodes for entering First and Last names of visitors. All these DIV elements does not visible for the visitors

style="display:none;"
.

We attach JavaScript function for selection of the visitors number:

jQuery('.visitors_selection').on('change', function() {

Then we get the number of selected visitors:
var visitors_num = jQuery(this).find(":selected").val();

Hide by default all our additional DIV elements:
jQuery('.visitors_selection_div').hide();

And show DIV elements, that fit to our number of selected visitors:
jQuery('.visitors_selection_div.v_num' + visitors_num ).show();

The trick here in how we apply CSS CLASSes to the DIV elements structure.

Its possible to make a trick for scrolling months in several calendars at the same page by clicking on "external links".
Its means that you will have 2 external links (do not inside of calendars for scrolling months forward or backward).
Example:

<a class="button" onclick="jQuery('div.hasDatepick').each(function( index ) { jQuery.datepick._adjustDate(this, -1, 'M'); });" href="javascript:void(0)">Previous Month in all calendars</a> - <a class="button" onclick="jQuery('div.hasDatepick').each(function( index ) { jQuery.datepick._adjustDate(this, +1, 'M'); });" href="javascript:void(0)">Next Month in all calendars</a></p>
<div class="clear"></div>
<div style="float:left;width:45%;margin-right:5%;">[booking type=3 form_type='standard' nummonths=1]</div>
<div style="float:left;width:45%;margin-right:5%;">[booking type=4 form_type='standard' nummonths=1]</div>
<div class="clear"></div>
<p>
P.S. Please read how manually to configure Booking Calendar shortcodes here.

1) Open the WordPress Plugins menu page.

2) Click on "Edit" link under the "Booking Calendar" plugin.

3) On the right side of that page, please find specific file, like this:

booking/css/client.css

Or some other that you require. Click on that link.

4) Make edit of this file.

5) Then click on "Update file" button to save changes.

6) Clear browser cache and test it.

You can use the code like this for opening your booking form in poup (modal window):

<a href="javascript:void(0)" onclick="javascript:jQuery('.bookingFormModal').modal('show');" class="btn button">Booking form in popup window</a></p>
<div class="wpdevbk">
<div class="modal bookingFormModal" style="display:none;width: 700px !important;height: 1000px !important;">
<div class="modal-header"><a class="close" data-dismiss="modal">& #10006;</a></p>
<h3 style="margin-top:-27px;">Booking Form</h3>
</div>
<div class="modal-body"> [booking type=4 nummonths=2] </div>
</div>
</div>
<p>

where [booking type=4 nummonths=2] - shortcode for your booking form.
Probably additionally you will be need to customize some CSS classes and CSS styles relative to your actual theme.

In new update 7.0 (or newer) exist new solid way of integration of your custom gateways.

This instruction is explain how to start work with integration your payment gateway into Booking Calendar Business Small or higher versions of update 7.0 or newer, based on exist payment gateway.

Let say that your new payment gateway have name: loc_payment.

1) You need to create new folder at like this:

../{Booking Calendar Folder}/inc/gateways/loc_payment/

then create new PHP file with following name:

../{Booking Calendar Folder}/inc/gateways/loc_payment/wpbc-gw-loc_payment.php

2) After this you can copy paste code from file

../{Booking Calendar Folder}/inc/gateways/sage/wpbc-gw-sage.php
(or some other, which you better like)
into your new file, and replace in content terms like "sage" or "SAGE" to "loc_payment" or "LOC_PAYMENT" accordingly.

3) Then check your code relative comments in this new file and configure your payment form and settings, relative to API and help info from website of your new payment gateway.

4) Additionally you need to add one new hook for ability to load the new payment gateway

// General API for Adding new gateways:
function add_my_gateway( $gateway ){ return $gateway . ',gateway_ID'; }
add_filters( 'wpbc_gateways_original_id_list', 'add_my_gateway' );

In your case you need to have something like this:

function add_my_loc_payment( $gateway ){ return $gateway . ',loc_payment'; }
add_filters( 'wpbc_gateways_original_id_list', 'add_my_loc_payment' );

Kind Regards.

If you want to make several steps for reservation process, so then you need to customize your booking form at Booking > Settings > Fields page.
Exmaple #1
Your customization have to look like this (Please take your attention to the bold code, which is make all this trick)

<div class="bk_calendar_step">
[calendar] 
<a href="javascript:bk_calendar_step_click();">Continue to step 2</a>
</div>

<div class="bk_form_step" style="display:none;">        
        <div style="text-align:left"> 
       <a href="javascript:bk_form_step_click();">Back to step 1</a>        
        <p>First Name (required):<br />  [text* name] </p> 
        
        <p>Last Name (required):<br />  [text* secondname] </p> 
        
        <p>Email (required):<br />  [email* email] </p> 
        
        <p>Phone:<br />  [text phone] </p> 
                
        <p>Details:<br /> [textarea details] </p> 
        
        <p>[submit "Send"]</p> 
        </div>
</div>

<script type="text/javascript">
function bk_calendar_step_click(){
                    jQuery('.bk_calendar_step' ).css({'display':'none'});
                    jQuery('.bk_form_step' ).css({'display':'block'});
}
function bk_form_step_click(){
                    jQuery('.bk_calendar_step' ).css({'display':'block'});
                    jQuery('.bk_form_step' ).css({'display':'none'});
}

</script>

Exmaple #2
This example of the booking form customization show the form fields and calendar in the "1st step" and at the second step show "confirmation" info about entering data by visitor. Please note, using this form template, you need to insert the booking shortcode into the separate pages only, if you insert the several booking forms into one page, then its possible some issues. Also in this customization possible issues of not showing "1st step", if visitor enter some wrong data (for example into email), or skip some required fields and press the "Send" button, but the warnings about this fields are showing in the first step. And its means that visitor need to click on "Back to 1st step" button.

<div class="bk_calendar_step"> 
     [calendar] 
     <p class="wpbc_first_name">First Name (required):<br />[text* name]<span class="wpbc_label" style="display:none;">First Name</span></p> 
     <p class="wpbc_last_name">Last Name (required):<br />[text* secondname]<span class="wpbc_label" style="display:none;">Last Name</span></p> 
     <p class="wpbc_email">Email (required):<br />[email* email]<span class="wpbc_label" style="display:none;">Email</span></p> 
     <p class="wpbc_phone">Phone:<br />[text phone]<span class="wpbc_label" style="display:none;">Phone</span></p> 
     <p><span class="wpbc_adults">Adults:  [select visitors class:span1 "1" "2" "3" "4"]<span class="wpbc_label" style="display:none;">Adults</span></span> <span  class="wpbc_children">Children: [select children class:span1 "0" "1" "2" "3"]<span class="wpbc_label" style="display:none;">Children</span></span></p> 
     <p class="wpbc_details">Details:<br /> [textarea details]<span class="wpbc_label" style="display:none;">Details</span></p> 
     <hr />
     <a href="javascript:void(0)" onclick="javascript:bk_calendar_step_click();" class="btn">Continue to step 2</a> 
</div> 

<div class="bk_form_step" style="display:none;clear:both;"> 
     <p>[captcha]</p> 
     <p><strong>Booking data:</strong></p>
     <p><strong>[cost_hint]</strong> - cost of the booking </p>
     <p><strong>[selected_timedates_hint]</strong> - dates for booking</p>
     <div class="wpbc_booking_data_container"></div>
     <hr/> 
     <p>[checkbox* term_and_condition use_label_element "I Accept term and conditions"] </p> 
    <div style="text-align:right;"><a href="javascript:void(0)" onclick="javascript:bk_form_step_click();" class="btn" style="margin:2px 15px 0;float:left;">Back to step 1</a> [submit class:btn "Send"]</div> 
</div> 

<script type="text/javascript"> 
     function bk_calendar_step_click(){ 
          var booking_data = '';
          booking_data +=  jQuery(".wpbc_first_name .wpbc_label").html() +': <span class="fieldvalue"><strong>' + jQuery(".wpbc_first_name input").val() + '</strong></span><br/> ';
          booking_data +=  jQuery(".wpbc_last_name .wpbc_label").html() + ': <span class="fieldvalue"><strong>' + jQuery(".wpbc_last_name input").val() + '</strong></span><br/> ';
          booking_data +=  jQuery(".wpbc_email .wpbc_label").html() + ': <span class="fieldvalue"><strong>' + jQuery(".wpbc_email input").val() + '</strong></span><br/> ';
          booking_data +=  jQuery(".wpbc_phone .wpbc_label").html() + ': <span class="fieldvalue"><strong>' + jQuery(".wpbc_phone input").val() + '</strong></span><br/> ';
          booking_data +=  jQuery(".wpbc_adults .wpbc_label").html() + ': <span class="fieldvalue"><strong>' + jQuery(".wpbc_adults select option:selected").text() + '</strong></span><br/> ';
          booking_data +=  jQuery(".wpbc_children .wpbc_label").html() + ': <span class="fieldvalue"><strong>' + jQuery(".wpbc_children select option:selected").text() + '</strong></span><br/> ';
          booking_data +=  jQuery(".wpbc_details .wpbc_label").html() + ': <span class="fieldvalue"><strong>' + jQuery(".wpbc_details textarea").val() + '</strong></span><br/> ';
          jQuery(".wpbc_booking_data_container" ).html( booking_data );
          jQuery(".bk_calendar_step" ).css({"display":"none"}); 
          jQuery(".bk_form_step" ).css({"display":"block"}); 
          makeScroll('.bk_form_step');
     } 
     function bk_form_step_click(){ 
          jQuery(".bk_calendar_step" ).css({"display":"block"}); 
          jQuery(".bk_form_step" ).css({"display":"none"}); 
     } 
</script> 

Exmaple #3
This example of booking form have 5 steps procedure with showing summary info about entering booking form fields and selected date(s) at final step. Also this configuration check about any errors, and show step with specific error, before submitting the booking.

<div class="wpbc_steps wpbc_step_1"> 
     <h2>Step 1/5</h2>
     [calendar] 
     <hr/> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(2);" class="btn">Continue to step 2</a> 
</div> 
<div class="wpbc_steps wpbc_step_2" style="display:none;clear:both;"> 
     <h2>Step 2/5</h2>
     <p>First Name (required):<br />[text* name] </p> 
     <p>Last Name (required):<br />[text* secondname] </p> 
     <hr/> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(1);" class="btn">Back to step 1</a> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(3);" class="btn">Continue to step 3</a> 
</div>
<div class="wpbc_steps wpbc_step_3" style="display:none;clear:both;"> 
     <h2>Step 3/5</h2>
     <p>Email (required):<br />[email* email] </p> 
     <p>Phone:<br />[text phone] </p> 
     <hr/> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(2);" class="btn">Back to step 2</a> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(4);" class="btn">Continue to step 4</a> 
</div>
<div class="wpbc_steps wpbc_step_4" style="display:none;clear:both;"> 
     <h2>Step 4/5</h2>
     <p>Adults:  [select visitors class:span1 "1" "2" "3" "4"] Children: [select children class:span1 "0" "1" "2" "3"]</p> 
     <p>Details:<br /> [textarea details] </p> 
     <hr/> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(3);" class="btn">Back to step 3</a> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(5);" class="btn">Continue to step 5</a> 
</div>
<div class="wpbc_steps wpbc_step_5" style="display:none;clear:both;"> 
     <h2>Step 5/5</h2>
     <h3>Summary</h3>
     <div class="wpbc_summary">
		<strong>Dates</strong>:<span class="fieldvalue dates"></span><br/> 
		<strong>First Name</strong>:<span class="fieldvalue name"></span><br/> 
		<strong>Last Name</strong>:<span class="fieldvalue secondname"></span><br/> 
		<strong>Email</strong>:<span class="fieldvalue email"></span><br/> 
		<strong>Phone</strong>:<span class="fieldvalue phone"></span><br/> 
		<strong>Adults</strong>:<span class="fieldvalue visitors"></span><br/> 
		<strong>Children</strong>:<span class="fieldvalue children"></span><br/> 
		<strong>Details</strong>:<br /><span class="fieldvalue details"></span> 
     </div>
	 <hr/> 
     <p>[checkbox* term_and_condition use_label_element "I Accept term and conditions"] </p> 
     <p>[captcha]</p> 
     <hr/> 
     <a href="javascript:void(0)" onclick="javascript:wpbc_to_step(4);" class="btn">Back to step 4</a> 
     [submit class:btn "Send"]
</div> 

<script type="text/javascript"> 
	 // Show next/prior steps
     function wpbc_to_step( step_num ){ 
          jQuery(".wpbc_steps" ).hide(); 
          jQuery(".wpbc_step_" + step_num ).show(); 
		  wpbc_show_summary( step_num );
     } 	
	 // Show Summary
	 function wpbc_show_summary( step_num ){ 
	    if ( step_num == 5 ) {
		
			var bk_type = jQuery( "input[name^='bk_type']" ).val();
			jQuery('.fieldvalue.dates').html( wpbc_get_selected_dates() );
			jQuery('.fieldvalue.name').html( jQuery( "input[name='name"+bk_type+"']" ).val() );
			jQuery('.fieldvalue.secondname').html( jQuery( "input[name='secondname"+bk_type+"']" ).val() );
			jQuery('.fieldvalue.email').html( jQuery( "input[name='email"+bk_type+"']" ).val() );
			jQuery('.fieldvalue.phone').html( jQuery( "input[name='phone"+bk_type+"']" ).val() );
			jQuery('.fieldvalue.visitors').html( jQuery( "select[name='visitors"+bk_type+"']" ).val() );
			jQuery('.fieldvalue.children').html( jQuery( "select[name='children"+bk_type+"']" ).val() );
			jQuery('.fieldvalue.details').html( jQuery( "textarea[name='details"+bk_type+"']" ).val() );
		}
	 }	 
	 // Get selected dates
	 function wpbc_get_selected_dates() {
		
		var bk_type = jQuery( "input[name^='bk_type']" ).val();
		var inst = jQuery.datepick._getInst(document.getElementById('calendar_booking'+bk_type));
		var d_check_in = inst.dates[0];
		var d_check_out = inst.dates[ (inst.dates.length - 1) ];
		var show_check_in = jQuery.datepick.formatDate('mm/dd/yy'
						 , d_check_in
						 , jQuery.datepick._getFormatConfig(inst) 
					   );
		var show_check_out = jQuery.datepick.formatDate('mm/dd/yy'
						 , d_check_out
						 , jQuery.datepick._getFormatConfig(inst) 
					   );
		if ( show_check_in != show_check_out )	 
			return show_check_in + ' - ' + show_check_out;
		else
			return show_check_in;
	 }
    jQuery(document).ready(function(){
        jQuery(".wpbc_steps" ).hide();
        jQuery(".wpbc_step_1" ).show(); 
    });
	jQuery( ".booking_form_div input[type='button']" ).on( "click", function() {
		//Catch  Submit event
		jQuery('.wpdev-help-message.alert' ).each(function(){

			if ( jQuery(this).css('display') != 'none') {
			
				jQuery('.wpbc_steps').hide();
				jQuery(this).parents('.wpbc_steps').show();
			}
		});

	});
</script> 

This JavaScript is possible to use before the booking shortcode, like this:

[booking type=1 form_type='standard' nummonths=1]
in the edit post or edit page WordPress menu pages. In all examples below we will use that shortcode, but in your examples the parameters of the booking shortcode will be other, of course. Please read more how to insert and configure the booking shortcode into the post or page here.

Important! Please note, you be able to insert the JavaScript if you are logged in as admin user (the subscriber users have not rights to insert the JavaScript into the posts or pages) and turn the edit post content form into the "Text" mode instead of the "Visual" (you can activate this "Text tab" at the top right side of the edit post content form).

This customization is possible for the Business Small or higher versions of update 4.2 or newer.

Please note, for do not have any conflicts, please use this customizations, when you are insert into the post or page only single booking form. Its mean you are not insert the other booking shortcode into this page and do not have any booking widgets at this page.


Activating Single day selection mode.
Please use this code, for activating that type of days selection for the current booking form, if by default you are using the other type of days selections at the General Booking Settings page:

<script type="text/javascript">
   bk_days_selection_mode = 'single';
</script>
[booking type=1 form_type='standard' nummonths=1]


Activating Multiple days selection mode.
Please use this code, for activating that type of days selection for the current booking form, if by default you are using the other type of days selections at the General Booking Settings page:

<script type="text/javascript">
   bk_days_selection_mode = 'multiple';
</script>
[booking type=1 form_type='standard' nummonths=1]


Activating Range days selection as a FIXED number of days with 1 mouse click.
Please use this code, for activating that type of days selection for the current booking form, if by default you are using the other type of days selections at the General Booking Settings page:

<script type="text/javascript">
   bk_days_selection_mode    = 'fixed';
   bk_1click_mode_days_num   = 7;    // Number of days selection with 1 mouse click
   bk_1click_mode_days_start = [-1]; // { -1 - Any | 0 - Su,  1 - Mo,  2 - Tu, 3 - We, 4 - Th, 5 - Fr, 6 - Sat }
</script>
[booking type=1 form_type='standard' nummonths=1]

In this example we are used 2 new variables: bk_1click_mode_days_num and bk_1click_mode_days_start.

bk_1click_mode_days_num - its number of days selection with 1 mouse click. You can assign number of days selections to this variable. For example for having 5 days selections, please use this code:

bk_1click_mode_days_num   = 5;

bk_1click_mode_days_start - its array, where we can specify the start day of the range days selection.
If we are need to set the start day of range selection as any day of week, please use this code:

bk_1click_mode_days_start   = [-1];

If we are need to set the specific start day of week selections or multiple days of week as start day for the range selections, please assign these values:
0 - Sunday,
1 - Monday,
2 - Tuesday,
3 - Wednesday,
4 - Thursday,
5 - Friday,
6 - Saturday.
So if you are need to set the start day of range selection as Saturday, please use this code:
bk_1click_mode_days_start   = [6];

If you are need to set the start day of range selections as Monday and Friday, please use this code:
bk_1click_mode_days_start   = [1,5];

This code

bk_1click_mode_days_start   = [-1];

and this code:
bk_1click_mode_days_start   = [0,1,2,3,4,5,6];

is equivalent.


Activating Range days selection as a DYNAMIC range of days with 2 mouse clicks.
Please use this code, for activating that type of days selection for the current booking form, if by default you are using the other type of days selections at the General Booking Settings page:

<script type="text/javascript">
   bk_days_selection_mode    = 'dynamic';
   bk_2clicks_mode_days_min       = 1;    // Min. Number of days selection with 2 mouse clicks
   bk_2clicks_mode_days_max       = 10;   // Max. Number of days selection with 2 mouse clicks
   bk_2clicks_mode_days_specific  = [];   // Example [5,7]
   bk_2clicks_mode_days_start     = [-1]; // { -1 - Any | 0 - Su,  1 - Mo,  2 - Tu, 3 - We, 4 - Th, 5 - Fr, 6 - Sat }
</script>
[booking type=1 form_type='standard' nummonths=1]

In this example we are used 4 new variables: bk_2clicks_mode_days_min, bk_2clicks_mode_days_max, bk_2clicks_mode_days_specific and bk_2clicks_mode_days_start.

bk_2clicks_mode_days_min - Minimum number of days selection with 2 mouse clicks. You can assign number of days selections to this variable. For example for having minimum 7 days selections, please use this code:

bk_2clicks_mode_days_min   = 7;

bk_2clicks_mode_days_max - Maximum number of days selection with 2 mouse clicks. You can assign specific number of days selections to this variable. For example for having maximum 14 days selections, please use this code:

bk_2clicks_mode_days_max   = 14;

bk_2clicks_mode_days_specific - its array, where we can specify that is possible to select only specific number of days selection.
For having possibility to select any number of days, please use this code:

bk_2clicks_mode_days_specific   = [];

For having possibility to select only weeks - 7 days, 14 days, 21 days... please use this code:
bk_2clicks_mode_days_specific = [7];

For having possibility to select only - 5, 7, 10, 14, 20, 21 days... please use this code:
bk_2clicks_mode_days_specific = [5,7];

bk_2clicks_mode_days_start - its array, where we can specify the start day of the range days selection.
If we are need to set the start day of range selection as any day of week, please use this code:

bk_2clicks_mode_days_start   = [-1];

If we are need to set the specific start day of week selections or multiple days of week as start day for the range selections, please assign these values:
0 - Sunday,
1 - Monday,
2 - Tuesday,
3 - Wednesday,
4 - Thursday,
5 - Friday,
6 - Saturday.
So if you are need to set the start day of range selection as Saturday, please use this code:
bk_2clicks_mode_days_start   = [6];

If you are need to set the start day of range selections as Monday and Friday, please use this code:
bk_2clicks_mode_days_start   = [1,5];

This code

bk_2clicks_mode_days_start   = [-1];

and this code:
bk_2clicks_mode_days_start   = [0,1,2,3,4,5,6];

is equivalent.

In the search availability form possible to use additional parameters for searching. For example searching by specific location or some other attributes.

How to configure it?

"Custom fields".
You can use the "custom fields" in the posts or pages, were you inserted shortcode for booking form.

One general rule for the "custom fields" - each custom field must start from "booking_" term.

For example, if you wan to search by City, then you need to make this configuration:

1) In the search form (at the Booking > Settings > Search page), you can use this selectbox configuration:

<label>City:</label>
<select id="booking_city" name="booking_city">
   <option value="">Any</option>
   <option value="Salernes">Salernes</option>
   <option value="Barjols">Barjols</option>
   <option value="Lorgues">Lorgues</option>
</select>

2) Then at the post or page, where you inserted booking form, you need to add new "custom field" with name "booking_city" and value (for example): "Lorgues".

In the same way you can add new additional parameter(s).
For example:

<label>Pool:</label>
<select id="booking_pool" name="booking_pool">
 <option value="">Any</option>
 <option value="1">Yes</option>
 <option value="0">No</option>
</select>

And of course in the page or post you need to create custom field: "booking_pool" with value "1" or "0"

General rules.

If you are having additional parameters, like this
- property_ab (this is some parameter)
- property_ac (number of beds)
- property_ad (square meters)
- ... etc...

you need to have parameters in format, where names of the custom fields starts from "booking_" terms:

- booking_property_ab (this is some parameter)
- booking_property_ac (number of beds)
- booking_property_ad (square meters)

Then inside of the search form you can have this selections:

    Number of beds:
    <select id="booking_property_ac" name="booking_property_ac">
    <option value="1">1</option>
    <option value="2">2</option>
    </select>

And for the posts or pages you can use custom fields with names "booking_property_XX", where XX = {ab | ac | ad}.

Tags
You can use "tags" in the posts or pages, where you are inserted the booking form for the specific booking resource.
In the search form you are need to use this keyword:

[search_tag] - search inside of posts/pages, which are have this tag.

Please note, its text field, so your visitors need manually to enter the tag for the searching.

Trick
Its also possible to customize this element as selectbox instead of the text field. You will be need to replace the [search_tag] shortcode to this HTML element:

<select id="booking_search_tag" name="tag">
<option value="">Any</option>
<option value="room">Room</option>
<option value="apartment">Apartment</option>
</select>

where "<option value="room">Room</option>" - list of options to select; "room" its value of the tag, and "Room" - its label, which is showing for the visitors....

Please click at the "Reset cache" button at the bottom of the Booking > Settings > Search page, after you are finish configuration, before making tests at the client side. You can check this troubleshooting instruction, if you do not see search results: http://wpbookingcalendar.com/faq/no-search-results/

This customizations is available for the versions 4.0.2 or older.
Inside of the versions 4.1 or newer you can use the special shortcode for the insertion of the booking resource selections into the page or post. Please read more how to insert and configure the booking shortcode into the post or page here.

Firstly you need to open file of your actual theme, where you want to show this selection (For example: if you want to show it at pages, so then you need t open page.php file).
Then you need to add to specific place of this file next code:

<?php if ( strpos($_SERVER['REQUEST_URI'],'/bookingpage/') !==false ) { ?>
<label for="calendar_type">Type of booking:</label>
<select name="active_booking_form" onchange="jQuery('.bk_forms').css('display', 'none');
document.getElementById(this.value).style.display='block';" >
    <option selected="selected" value="select">Please Select</option>
    <?php global $wpdb;
    $types_list = $wpdb->get_results( "SELECT booking_type_id as id, title FROM ".$wpdb->prefix ."bookingtypes" );
    foreach ($types_list as $tl) { ?>
        <option value="<?php echo $tl->id; ?>"><?php echo $tl->title; ?></option>
    <?php } ?>
 </select></p>
<p><?php foreach ($types_list as $tl) { ?>
<div class="bk_forms" id="<?php echo $tl->id; ?>" style="display: none;"><?php do_action('wpdev_bk_add_form', $tl->id, 1); ?></div>
<?php } ?>
<?php } ?>

At this example, this line

<?php if ( strpos($_SERVER['REQUEST_URI'],'/bookingpage/') !==false ) { ?>

is condition to showing the selection of form only at the specific page. In this case its page, which have term in URL, like this: 'bookingpage'

You can check this example at this page.

 

CSS customization of plugin

Since update 4.2 of the Booking Calendar the calendar structure CSS file is located at the ../booking/css/calendar.css (please do not edit it or edit it very carefully). The calendar color skins are located in the ../booking/css/skins folder. Inside of these files (for better compatibility), please modify only following parameters:
* background , background-color, background-repeat, background-image, background-repeat, background-position
* border
* box-shadow, -moz-box-shadow, -webkit-box-shadow
* border-radius, -moz-border-radius, -webkit-border-radius
* color
* font-weight
* text-shadow
* text-transform


If you want to add new style.
Go to the folder “BOOKING_PLUGIN_PATH/css/skins/” and add new CSS file (the template you can get from this directory) to this directory. After this select this file at the general booking settings page and save settings.
If you want to customize exist skin.
Go to the folder “BOOKING_PLUGIN_PATH/css/skins/” open your file from this directory and customize it. After customization you need to select this style at the general booking settings page and save settings.

Important! Please note, if you will make upgrade of plugin to the new update, all plugin files is overwriting. Its means that your custom calendar skin also will be overwriting. That's why please backup your custom calendar skin before update and then restore it after update process.

Since new update 5.4 you do not need to backup/restore your custom calendar skins anymore. Just put your custom calendar skin to the special folder. Please save your own custom calendar skin to the /wp-content/uploads/wpbc_skins/ folder. You need to create this folder /wpbc_skins/ inside of your /wp-content/uploads/ folder, because this folder has not created automatically. Its will save your custom calendar skin, if you will make upgrade of plugin to new plugin update.

You can check this instruction how to edit CSS file from WordPress menu.

This feature possible to configure, only in the Booking Calendar Business Large or higher versions. Because only in these versions possible to set capacity per calendar, and to have different availability per days depend from number of bookings. Please check more about this here: http://wpbookingcalendar.com/overview/#capacity

1) Firstly please check this instruction how possible to configure your calendar skin by modification CSS file: http://wpbookingcalendar.com/faq/change-skin-and-colors/

2) Then you need to activate this Calendar Skin: "Multidays" at the Booking Settings General page in Calendar section.

This calendar skin have special CSS classes for ability to define different colors in calendar depend from capacity of booking resource (calendar) and number of bookings per specific date(s) (in other words based on availability on specific date). Probably you will be need to copy this calendar skin to separate folder, as explained in above instruction for future customization.

3) Each calendar day cells (in this calendar skin) have specific CSS classes like:

.reserved_days_count1
.reserved_days_count2
.reserved_days_count3
...
.reserved_days_count8
.reserved_days_count9
.reserved_days_count10
...
The number at the end of this class is explain the availability per specific days.

So in case (if you have capacity per booking resource as 10) you can configure in your calendar skin these colors for the different color for the different availability:
You can just add this code to the bottom of that calendar skin.

/* Partially availability: 1-7 */
.datepick-inline .reserved_days_count1,
.datepick-inline .reserved_days_count2,
.datepick-inline .reserved_days_count3,
.datepick-inline .reserved_days_count4,
.datepick-inline .reserved_days_count5,
.datepick-inline .reserved_days_count6,
.datepick-inline .reserved_days_count7{
    background-color: #eb5;
     color: #eeeeee;
     text-shadow: 0px -1px 0px #888888;
}
/* Availability 8-10 */
.datepick-inline .reserved_days_count8,
.datepick-inline .reserved_days_count9,
.datepick-inline .reserved_days_count10 {
    background-color: #1A5;
     color: #eeeeee;
     text-shadow: 0px -1px 0px #888888;
}
/* Approved */
.block_hints .date_approved.block_check_in_out,
.block_hints .block_booked,
.datepick-inline .date_approved,
td.timespartly.check_in_time.check_out_time.check_in_time_date2approve.check_out_time_date_approved div.check-in-div,
td.timespartly.check_in_time.check_out_time.check_out_time_date2approve.check_in_time_date_approved div.check-out-div {
    background-color: #ee5933;
}
/* Pending */
.block_hints .date2approve.block_check_in_out,
.block_hints .block_pending,
.datepick-inline .date2approve,
td.timespartly.check_in_time.check_out_time.check_in_time_date_approved.check_out_time_date2approve div.check-in-div,
td.timespartly.check_in_time.check_out_time.check_out_time_date_approved.check_in_time_date2approve div.check-out-div {
  background-color: #ee5933;
}

P.S. Please do not forget to clear browser cache before testing these changes.

This customization is only for the Booking Calendar Free version. In the paid versions, you can easily configure booking form fields and their style at the advanced form configuration at the Booking > Settings > Fields page.

Customization.
1) Please open this file ../wp-content/plugins/{Booking Calendar Folder}/css/client.css
and add to the bottom of that file this code:

.booking_form .control-label {
  color: #FFF;
}

Of course instead of white color #FFF you can set some other.

2) In the same way possible to change the color of text inside of the text fields, text-area elements and selectboxes. You need to add to the bottom of this file ../wp-content/plugins/{Booking Calendar Folder}/css/client.css this code:

.booking_form_div select,
.booking_form_div textarea,
.booking_form_div input[type="text"] {
  color: #FFF;
}

Again instead of white color #FFF you can set some other color.

Important! Please note after update of plugin to the newer version update, you will be need to make this fix again, because all Booking Calendar files will be overwritten.

You can define showing calendar months in several rows in "option" parameter of Booking Calendar shortcode, during inserting this shortcode into your page or post. Please read more about this configuration here.

 

Translations

You can download the original translations files from here. You can check instruction how to make or update translations files at this page.

Translations available in paid versions of Booking Calendar:

  • English
  • Spanish [99% Completed]
  • Italian [99% Completed]
  • French [99% Completed]
  • Polish [99% Completed]
  • Greece[99% Completed]
  • Slovak [99% Completed]
  • Czech [99% Completed]
  • Dutch [99% Completed]
  • Danish [99% Completed]
  • Bulgarian [99% Completed]
  • Russian [99% Completed]
  • Croatian [99% Completed]
  • German [99% Completed]
  • Swedish [99% Completed]
  • Norwegian [99% Completed]
  • Hungarian [99% Completed]
  • Finnish [99% Completed]
  • Catalan [99% Completed]
  • Ukrainian [99% Completed]
  • Portugal [99% Completed]
  • Brazilian Portuguese [95% Completed]
  • Hebrew [17% Completed]
  • Belorussian [11% Completed]

On the Booking Listing page exist ability to change language (locale) of emails, that will send to visitor during approving or declining of the booking. But how to detect language/locale of webpage, from where visitor submit the booking.
Here is instruction how to do this.
Please open the Booking > Settings > Fields page and add to the booking form this shortcode and JavaScript code:

</p>
<div style="display:none;"> Active Language: [text active_language class:wpbc_lang_field]</div>
<p><script type="text/javascript">
 jQuery(document).ready(function(){
    jQuery('.wpbc_lang_field').val( wpbc_active_locale );
 });
</script>

Its will add to your booking form new field [active_language] and JavaScript for auto-inserting active locale into this field. Please note, this field is not visible for visitors, because of this CSS: style="display:none;"

Also you will be need to add to the "Content of booking fields data" form (its at the bottom of Booking > Settings > Fields page) this shortcode:

<strong>Active Language</strong>:<span class="fieldvalue">[active_language]</span>

For showing this field at the Booking Listing page.

  1. Before making translation of wordpress plugin, you need to have Poedit program. You can download it from here. Its completly free.
  2. Start Poedit program.
  3. Select File -> New catalog from POT file from menu and select POT file for translation usually its inside of languages folder.
  4. Type description of your translation.
  5. Enter The name of PO file.
    Name of file consist from 2 parts:
    1st part its the filename of the plugin (in our situation its "wpdev-booking"),
    2nd part its the Locale (for Spanish translation: "es_ES").
    So we will have name "wpdev-booking-es_ES.po".
  6. Save file to the "languages" folder of plugin.
  7. Make translation.
  8. If you find in translation "%s" symbol you should leave it at the same place as at original translation line.
  9. Please be sure that you do not set specific translation line as "Fuzzy". You can check it at the "Edit menu" - "Translation is fuzzy" (Ctrl + U)
  10. Save file after translation.
  11. If you make translation, you can send this translation files (*.po, *.mo) to info@wpbookingcalendar.com and we will add them to the next release of plugin. Thank you.

Paid versions of Booking Calendar support configuration in different languages of the booking form, email templates and some other text options in the settings . The active language of the booking form is depending from the active locale of the site.

Booking Calendar is supported WPML and qTranslate plugins for dynamic changing of website locale (language).

General Usage:
[lang=LOCALE] - start new translation section in specific language, where LOCALE - locale of the translation.

Example of English and French translation of "Thank you" message:

Thank you for your booking.[lang=fr_FR]Je vous remercie de votre reservation.
-

Important! Please note, by default you need to have the English section and then divided by this shortcode [lang=LOCALE] sections in all other languages.

Of course you can have more than 2 language sections.

Example of configuration booking form in English and French languages at the Booking > Settings > Fields page:

[calendar]
First Name (required): [text* name]
Last Name (required): [text* secondname]
Email (required): [email* email]
Visitors: [select visitors "1" "2" "3" "4"]
Details: [textarea details]
[submit "Send"]
[lang=fr_FR]
[calendar]
Prénom (obligatoire): [text* name]
Deuxième prénom (requis) [text* secondname]
Email (obligatoire) [email* email]
Visiteurs : [select visitors "1" "2" "3" "4"]
Détails : [textarea details]
[submit "Envoyer"]

In the same way, you can configure the email templates on the Booking > Settings > Emails page and search form on the Booking > Settings > Search page, etc..

 

Troubleshooting

1) Firstly check SPAM / JUNK folder in your mail system.

2) Open Booking > Settings > Emails page and for each email template (switch tabs at toolbar) recheck that you have correct email addresses. Tip. Try to use insatead of complex email like this:
Booking System <info@your_server.com> just simple email like this info@your_server.com

3) Please be sure that you activated specific email templates for sending at Booking > Settings > Emails page.
Check-box status "Active" must be checked at each email template, that you want to use.

4) Check that your PHP mail function is working correctly. You can open your login page and try to retry the password, then check if you received email.

5) This is most common reason of not receiving emails !!!
If your emails aren't being received by Gmail, Hotmal, Yahoo Mail accounts, here's information that should help you understand why this is happening.

Issue description
Here is typical situation:
The admin email for your booking system is a “yahoo.com” account.
Customers were receiving emails, if they had a “isp.com” account but not a: gmail.com, hotmail.com, yahoo.com.au

Reason
Those emails were rejected by hotmail/yahoo/gmail servers due to their new email policy.
Error logs are showing to refer below links :
https://support.google.com/mail/answer/2451690
https://help.yahoo.com/kb/SLN7253.html?impressions=true

Solution
If your WordPress is sending emails from some custom email address (for example like this: ‘username@orion-dse.fastwebservers.com.au’), then you needed to enable SMTP authentication with WordPress site so the emails would send from your yahoo/gmail/hotmail email address instead of custom email ( username@orion-dse.fastwebservers.com.au - cPanel default username). This have to fix this issue.

You can fix this problem by installing the “Configure SMTP” WordPress plugin.
You can setup SMTP authentication through any WordPress smtp plugin.
Please refer https://www.youtube.com/watch?v=ZZPfkzEaJaQ

P.S. Thanks to dscottfl about this solution.

6) You can check the info about similar troubleshooting story here: https://wordpress.org/support/topic/e-mail-not-sending-3

7) If the issue still exist, please recheck ( with your hosting provider support ) email log file about the reason of not sending emails.

8) Finally if it's will not help try to change emails to wordpress@server.com , where server.com - your server. Here is more detail info about is issue.

If you notice Booking > Settings General page is not saving, Suhosin (a security module in PHP) may be preventing the POST data from being saved. This issue can also be caused by servers with version PHP 5.3.9+ and servers running mod_security.

If enabled, Suhosin may need to be configured to increase its data submission limits. Changing Suhsoin settings differ from host to host so it’s usually better to consult with the provider than attempt it yourself, however some hosts allow you to change settings via php.ini, suhosin.ini, or .htaccess.
Commonly, the following vars will need changing:

General PHP section

memory_limit = 256M
max_execution_time = 120
post_max_size = 8M
upload_max_filesize = 8M
max_input_vars = 20480
post_max_size = 64M

Suhosin section

suhosin.post.max_array_index_length = 1024
suhosin.post.max_totalname_length = 65535
suhosin.post.max_vars = 2048
suhosin.post.max_value_length = 1000000
suhosin.post.max_name_length = 256
suhosin.post.max_array_depth = 1000
suhosin.request.max_array_index_length = 1024
suhosin.request.max_totalname_length = 65535
suhosin.request.max_vars = 2048
suhosin.request.max_value_length = 1000000
suhosin.request.max_varname_length = 256
suhosin.request.max_array_depth = 1000

After saving you will need to restart the server for the changes to take effect. See http://www.hardened-php.net/suhosin/configuration.html for more information on Suhosin settings.

In shared hosting environments it may not be possible to edit php.ini, in which case you may be able to set the suhosin settings via .htaccess
It is still recommended however to consult your hosting providers documentation, or raise a ticket with them for assistance.

1) Firstly please open the Booking > Settings > Emails page and deactivate all email templates.
Then try to make new booking. If you will be able to make new booking, so then its means following:

Some severs can block sending emails and generate "500 Internal Error", when you send it to visitor from domain different from your website. You need to check, if this condition set in your server configuration.

  • Please try to set in the field "From" instead of visitor email shortcode, your email (its at the Booking > Settings > Emails page). The same email that you set in the field "To".
  • Sometimes mail servers block emails, if the address "From" different from the domain of website, from where this email was sending. Its not really depend from the Booking Calendar. So please open the Booking > Settings > Emails page and recheck that field "From", its have to the same as your website domain. For example: info@your-server.com and not like this your_email@gmail.com

Otherwise, please contact support of your hosting company about recheck conditions, when your server block sending of emails.

2) Such error can be because in your server configuration (probably at the WordPress > Settings > General page for the options "WordPress Address (URL)" or "Site Address (URL)") configured different Domain that you try to submit the booking

For example, in Ajax URL its can be set as "https://www.yourserver.com/wp-admin/admin-ajax.php"
and you try to submit the booking from http://www.yourserver.com/education/bookings/

Because booking is sending from HTTP to HTTPS, we are having such type of error.

Please recheck your server configuration at the Settings General page as in above description, or in some other place, where you are set using HTTPS instead of HTTP protocol.

You need to use the same protocol in both ways. If you will have difficulty with searching where exactly you are having this issue, please contact your server administrator who make that configuration.

The same issue can be if you configured sever address with "www." But trying to submit booking from URL without "www." prefix in URL. Or backward.

3) Also please try to deactivate one by one all your active plugins at the WordPress > Plugins menu. Then retest it again.
If its not help, please deactivate your active theme and active the default WordPress theme. And then retest it again. May be there exist some conflict with some active plugin or actual theme and just need to find the reason of that issue.

4) If the previous solutions will not help, please recheck your error.log file from your server configuration (please contact your server administrator or support of the hosting company, if you will have troubles with searching of this file) to be sure in a reason of that issue.

If you are using the booking calendar free version
Try to open the login dialog and retry the password. Then recheck what the email address is used in this email. If you will see the "Wordpress title", so then its somewhere in the settings of WordPress.

Try to open the wp_options table in your DB (using the phpMyAdmin tool or some other DB tool),

Find the option with name "admin_email" and recheck that the email for this field do not have the "WordPress" title.

If you are using the paid version of Booking Calendar, please check this:
Booking Calendar use the standard "WordPress" wp_mail function for sending of the emails, which possibly can be overridden by the other plugins or theme.

Firstly please open the Booking > Settings > Emails page and recheck that you correctly configured the emails in fields "From". that there was no any "WordPress titles". Test it.

Then please try to deactivate one by obe all other active plugins and test if its help or not, may be some other active plugin is override the wp_mail function and thats why you are having that "WordPress" title in the email template. try the same with theme.

For any versions:
Also please open your contact book at youe email account and try to delete that email contact, may be this contact already have the "WordPress" title saved in your contact book at your email account, and thats why you have that "WordPress" title in the emails.

Issue
If you have the situation that calendar is not visible in your booking form but all other fields is visible.

And you are have JavaScript error, similar to this:

Error: jQuery("#calendar_booking" + bk_type).datepick is not a function
Source: .../wp-content/plugins/booking/js/wpdev.bk.js
Line: 161

Reason
So possible reason of this issue is loading of jQuery library 2 times in your site/

The loading process is next:
1) Firstly is loaded the standard jQuery (ver 1.7) from wordpress (and its fine):

<script type='text/javascript' src='.../wp-includes/js/jquery/jquery.js?ver=1.7.1'></script>

2) Then load the scripts of the Booking Calendar, where is defined all functions, including the datepick funcion.
3) Then your theme (or may be some other plugin) is load the jQuery again, (its possible that its some old version of jQuery, like ver. 1.5).
<script type="text/javascript" src="..../wp-content/themes/my_custom_theme/js/jquery.min.js"></script>

This load of the jQuery is overwrite previous load and we are get that error.

Solution.
Please open the header.php file of your theme and deactivate (comment), the loading of the jQuery, so you do not load it for the second time.

This issue is relative of showing the several booking calendars (booking forms) of the same booking resource at the same "visible" page. Its possible to show only one calendar (booking form) of the specific booking resource at one visible page. You will have no problems to show the calendars (booking forms) of the different booking resources at the same page.

At the Booking Calendar Free version is available only one default booking resource, so its mean that any calendars (booking forms) in this version is belong to the same booking resource. And thats why its not possible to show several booking calendars (booking forms) at the same visible page.

This info is relative to the several booking calendars (booking forms) inside of the content of the page or inside of the content of page and visible booking calendar widget (in this case you are need to deactivate the booking calendar widget, or add the exception of showing the widget at this page).

Probably your actual theme or some active plugin is using the new version of jQuery 1.9 or 2.0, which is not support the "a.browser" property.
So for fixing this issue, please open this file: ../booking/lib/wpdev-booking-class.php
find this code:

    function bc_enqueue_scripts() {
        wp_enqueue_script('jquery');
        // enqueue the jQuery by Default
        if (class_exists('wpdev_bk_biz_s')) {
            // Load the jQuery 1.7.1 if the them load the older jQuery and version of booking Calendar is BS or higher
            global $wp_scripts;
            if (  is_a( $wp_scripts, 'WP_Scripts' ) ) {
                if (isset( $wp_scripts->registered['jquery'] )) {
                    $version = $wp_scripts->registered['jquery']->ver;
                    if ( version_compare( $version, '1.7.1', '<' ) ) {
                        wp_deregister_script('jquery');
                        wp_register_script('jquery', ("http://code.jquery.com/jquery-1.7.1.min.js"), false, '1.7.1');
                        //wp_register_script('jquery', ("http://code.jquery.com/jquery-latest.min.js"), false, false);
                        wp_enqueue_script('jquery');
                    }
                }
            }
        }
    }

and replace it to this code:
    function bc_enqueue_scripts() {
        wp_enqueue_script('jquery');
        // enqueue the jQuery by Default
        if (class_exists('wpdev_bk_biz_s')) {
            // Load the jQuery 1.7.1 if the them load the older jQuery and version of booking Calendar is BS or higher
            global $wp_scripts;
            if (  is_a( $wp_scripts, 'WP_Scripts' ) ) {
                if (isset( $wp_scripts->registered['jquery'] )) {
                    $version = $wp_scripts->registered['jquery']->ver;
                    if ( version_compare( $version, '1.7.1', '<' ) ) {
                        wp_deregister_script('jquery');
                        wp_register_script('jquery', ("http://code.jquery.com/jquery-1.7.1.min.js"), false, '1.7.1');
                        //wp_register_script('jquery', ("http://code.jquery.com/jquery-latest.min.js"), false, false);
                        wp_enqueue_script('jquery');
                    }
                    if ( version_compare( $version, '1.9', '>=' ) ) {
                        wp_register_script('jquerymigrate', ("http://code.jquery.com/jquery-migrate-1.0.0.js"), false, '1.0.0');
                        wp_enqueue_script('jquerymigrate');
                    }
                }
            }
        }
    }

Usually, this issue is relative to conflict(s) with some theme or plugins of the Booking Calendar version 3.0 or older. So please update firstly , your version of booking calendar to the most recent version. Otherwise try solution bellow:
This situation can be, when some other JS script (from some other plugin or active theme) is generate JavaScript error. You can check if you page have errors at the IE at the status bar or at Firefox using Console2 addon. So you need to fix that JavaScript error, or deactivate plugin or theme, which is generate that error. After this Booking Calendar will show up.

The reason of this issue can be any JavaScript errors at your site. Probably some other active plugin or actual theme is generate some JavaScript error, because of that the calendar will not show up. You are need to fix this error(s).
Firstly try to find what plugin or may be theme is generate this issue.
- Try to deactivate one by one all actual plugins to check if the calendar will show up or not, to find what plugin is generate this issue.
- If the previous do not help, try to deactivate the actual theme and activate the default WordPress theme, then test it, if the reason of issue in the actual theme.
- If the previous steps do not help, and you can not solve the issue, please check the description of the JavaScript error, and send it with link to the page, where this issue is exist. so then we will try to help you.

Some other possible issues.

I am get this JavaScript error:

Error: a("body").on is not a function
Source: .../booking/interface/bs/js/bs.min.js
Line: 7

Solution:
Its seems, that this issue is because your theme is used the old version of jQuery.
Please, download the latest version of jQuery and integrate it into your actual theme or just use the latest version of jQuery from WordPress installation (just comment loading of the jQuery from the theme and the Booking calendar will add load of the jQuery from your wordpress installation (of course, recheck that this installation also have to be up to date)).

If you are get the JavaScript error similar to this:

Error: jQuery("#calendar_booking" + bk_type).datepick is not a function
Source: .../wp-content/plugins/booking/js/wpdev.bk.js
Line: 161

So then please check the troubleshooting instruction here.

Reason of issue.
This issue can appear, if you was using the old version of Booking Calendar (older than 4.1 version) and made update to the new WordPress version.
This issue was fixed since the update 4.1 of the Booking Calendar. You can check about that at the change-log here.

Solution.
You are need to update your version of Booking Calendar to the latest version.
If you are using the free version of Booking Calendar you can update your version in the WordPress > Plugins menu page.
If you are using the paid version of Booking Calendar you can request the new update at this page.

If you try to edit additional cost at the Booking > Resources > Advanced cost page and during saving, all your changes removed back to default values "100%", then please check these steps:

1) Please be sure, if you are using custom booking forms, that the length of custom booking form name not longer than 30 symbols. If its longer, then you need to recreate your custom booking forms.
For doing that, please open the Booking > Settings > Fields page. Select your custom booking form.
Then copy content of "booking form" and "content of booking fields data" form to some TXT file.
Click on "Delete" button in the toolbar to delete this custom form.
Then create new custom form, where name must be not longer than 30 symbols. Paste in the forms your saved data and save changes.
If you was inserting into the posts or pages, booking shortcodes with previous custom form, you need to reinsert them.
Now you can test it.

2) Please be sure that you do not use in the names and values of checkboxes and selectboxes in your booking form some non standard symbols, like umlauts, or % or ' ,etc...
That's why please open the Booking > Settings > Fields page and for the each booking form (if you are having several custom booking forms), please recheck (re-create) shortcodes by using only standard symbols in the names and values.

This issue is relative to the configuration of the DNS in your website.
Please try to reconfigure it or contact your administrator for fixing this issue.

Description of reason of the issue.
1) This error "0", can be because in your server configuration somewhere (probably in the WordPress > Settings > General page for the options "WordPress Address (URL)" or "Site Address (URL)") configured different Domain that you try to submit the booking.

For example, in Ajax URL its can be set as "https://www.yourserver.com/wp-admin/admin-ajax.php"
and you try to submit the booking from http://www.yourserver.com/bookings/ Or backward.

You can check it is by viewing the HTML code of your loaded page, in the section:

<!-- Booking Calendar Scripts -->

Because booking is sending from HTTP to HTTPS, we are having such type of error.

Please recheck your server configuration at the WordPress > Settings > General page as in above description, or in some other place, where you are set using HTTPS instead of HTTP protocol.

You need to use the same protocol in both ways. If you will have difficulty with searching where exactly you are having this issue, please contact your server administrator who make that configuration.

The same issue can be if you configured sever address with "www." But trying to submit booking from URL without "www." prefix in URL. Or backward.

2) Also please try to deactivate one by one all your active plugins at the WordPress > Plugins menu. Then retest it again.
If its not help, please deactivate your active theme and active the default WordPress theme. And then retest it again. May be there exist some conflict with some active plugin or actual theme and just need to find the reason of that issue.

If the previous solutions will not help, please recheck your error.log file from your server configuration (please contact your server administrator or support of the hosting company, if you will have troubles with searching of this file) to be sure in a reason of that issue.

This error can be at some servers of 1&1 hosting, or may be at some other ones.
For fixing this issue, please add this line to their .htaccess file:

AddType x-mapp-php5 .php

Firstly you need to check access to the wpdev-booking.php file. If booking plugin is installed to the http://www.myserver.com/wp-content/booking/wpdev-booking.php so copy that link to your browser and check access. Its have to show this error: Fatal error: Call to undefined function get_option(). If you see something like:Error 500 Internal Server Error, so then you need to set access to the wpdev-booking.php file. In most case you just need to set atribute to that file as 755 using your FTP client, sometimes is needed editing .htaccess file. So contact your administrator or check .htaccess file by yourself.

Sometimes wp-content and/or wp-content/plugins and/or wp-content/plugins/booking directories and/or file wp-content/plugins/booking/wpdev-booking.php had permissions set to 777. So its also can make this issue. Please change permissions on those directories and file to 755 and it have to work.

This error is appear because of wrong installation of plugin.
1) Please, open the General Booking Settings page and set this option "Delete booking data during uninstall", as unchecked, at the right side of page, otherwise your exist booking data will be delete during deactivation of plugin.
2) Then open the Plugins menu and press Deactivate link of Booking Calendar. Wait, for the message about: "plugin is deactivated successfully".
3) Then press activate link. Wait, until message will show up that plugin is activated successfully.
Now, you can test it again.

This issue can happens at the some servers, depend from the configuration of the MySQL at the version 4.0 - 4.0.1 of Booking calendar.

So for fixing this issue, please open the phpMyAdmin or similar tool for the working with DB

and execute this SQL command:

ALTER TABLE bookingdates DROP INDEX booking_id_dates

or this (depend from the prefix at your DB tables):

ALTER TABLE wp_bookingdates DROP INDEX booking_id_dates

then test it again.

This issue is exist at the version 4.0 and 4.0.1 of the Booking Calendar.
For fixing this issue, please make this small modifications:
1) please open the ../booking/inc/payments/paypal.php file:
2) find this code:

update_bk_option( 'booking_paypal_return_url' ,    $_POST['paypal_return_url'] );

and replace it to this code:
                 update_bk_option( 'booking_paypal_return_url' ,    $_POST['paypal_return_url'] );
                 update_bk_option( 'booking_paypal_cancel_return_url' ,    $_POST['paypal_cancel_return_url'] );

I am activated the "Auto cancel bookings" feature (Cancel only pending, not paid bookings, which is older then at this selection), but its still not work even after specific amount of time after creation of bookings for the bookings, which are have no successful payment status and not approved. How to fix it ?
Its known issue in the versions 4.0 and 4.0.1 of the Booking Calendar.

So for fixing this issue, please open this file ../booking/inc/biz_s.php

find this function declaration:
function check_pending_not_paid_auto_cancell_bookings($bk_type)

inside of the content of that function, please find this code:

$labels_payment_status_ok = implode( ', ', $labels_payment_status_ok);
$labels_payment_status_pending = get_payment_status_pending();
$labels_payment_status_pending = implode( ', ', $labels_payment_status_pending);
$labels_payment_status_ok .= ', ' . $labels_payment_status_pending;

and replace it to this code:

$labels_payment_status_ok = implode( "', '" , $labels_payment_status_ok);
$labels_payment_status_ok = "'" . $labels_payment_status_ok;
$labels_payment_status_pending = get_payment_status_pending();
$labels_payment_status_pending = implode( "', '", $labels_payment_status_pending);
$labels_payment_status_ok .= "', '" . $labels_payment_status_pending . "'";

My Regular Users can see the bookings from other user(s) in MultiUser version, after reconfiguration parameters in filter tab. How to fix it ?
Its known issue in the versions 4.0 - 4.0.2 of the Booking Calendar.

For fixing this issue, please open file ../booking/inc/multiuser.php

find this code:

if (! isset($_REQUEST['wh_booking_type'])) {

and replace it to this code:

if ( (! isset($_REQUEST['wh_booking_type'])) || (empty($_REQUEST['wh_booking_type'])) ) {

1) Go to the general booking settings page and check ON use CAPTCHA check box and save a page.
2) If you use Standard (free) version skip this step, otherwise go to the form fields customization page add captcha shortcode to the customization form:

<p>[captcha]</p>

3) Check write permission at the folder YOUR_WORDPRES_SERVER/wp-content/plugins/booking/js/captcha/tmp/. This folder have to be write-able.

4) Check that your server was configured for using 2.0 GD library.
Reason.
The cause is that you do not have the version 2.0 GD library loaded in PHP which defines this function, which is used for the captcha in this plugin.

Checking
Use this PHP code to view what extensions you have loaded on your hosting account.

print_r(get_loaded_extensions());
print_r(var_dump(gd_info()));

Just create a text file with the these lines above in your public_html folder (or wherever your web root is), name it with a .php extension like "test.php" and then run it by using your web browser like "http://www.yourdomain.com/test.php "

This does not write correct HTML but will show you the info you need. (Just do a View/Source on your browser if you want a nicer looking format.) Look for text like "[some number] => gd". If you don't see this, you do NOT have the GD library loaded.
Next you want to look for the version number. Something like: ["GD Version"]=> string(27) "bundled (2.0.28 compatible)"
This needs to say version 2.0 or later.

If you do not see GD version 2.0, you must get your hosting provider to install or upgrade your system.

LEARN MORE:
Learn more about the GD library:
http://www.php.net/manual/en/ref.image.php

Learn more about this function:
http://www.php.net/manual/en/function.imagecreatetruecolor.php

5) If you are using Cache plugin (like "WP Super Cache" ), please deactivate it or add the exception to the page with booking form to do not cache this page.

4) Finally, please try to deactivate one by one all your active plugins at the WordPress > Plugins menu. Then retest it again.
If its not help, please deactivate your active theme and active the default WordPress theme. And then retest it again. May be there exist some conflict with some active plugin or actual theme and just need to find the reason of that issue.

If you are still will have this issue, please recheck the error.log in your server configurations to be sure in a reason of that issue.

Kind Regards.

Plugins

advanced-custom-fields [Version 4.1.4]

This plugin can be a reason of not possibility to insert the booking shortcode into the post or page by cliking on "Ok" button in the popup configuration dialog. Please read more how to insert and configure the booking shortcode into the post or page here

So please deactivate this plugin, if you want to insert the booking shortcode into the post or page using the popup configuration dialog or you can insert the booking shortcode manually. Please read how manually to configure Booking Calendar shortcodes here

html5-jquery-audio-player [Version 2.1]

Please check about the reason of issue here
Fix:
Open file: ../html5-jquery-audio-player/index.php
Find this code:
    wp_enqueue_script('jquery');
    wp_deregister_script( 'hmp-jquery' );
    wp_register_script( 'hmp-jquery', "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js");

and replace it to this code:
//    wp_enqueue_script('jquery');
//    wp_deregister_script( 'hmp-jquery' );
//    wp_register_script( 'hmp-jquery', "http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js");

Comprehensive Google Map Plugin [Version 7.0.31]

Issue is exist, when mouse over specific buttons in the booking admin panel.
This issue is fixed in the Booking Calendar since update 4.2.
For the older versions please check this fix.
Fix:
Open file: ../booking/lib/wpdev-booking-class.php
1) Find this code:
        add_action( 'init', array(&$this,'add_custom_buttons') );
        add_action( 'admin_head', array(&$this,'insert_wpdev_button'));

and replace it to this code:
        add_action( 'init', array(&$this,'add_custom_buttons') );
        add_action( 'admin_head', array(&$this,'insert_wpdev_button'));
        // Remove the scripts, which generated conflicts
        add_action('admin_init', array(&$this, 'wpdevbk_remove_conflict_scripts'), 999);

2) Then find this code:

    // add hook for printing scripts only at this plugin page
    function on_add_admin_js_files() {

and replace it to this code:
    // Deregister scripts, which  is generate conflicts - only at the Booking Admin  menu pages
    function wpdevbk_remove_conflict_scripts(){
        if (strpos($_SERVER['REQUEST_URI'], 'wpdev-booking.phpwpdev-booking') !== false) {
            wp_dequeue_script( 'cgmp-jquery-tools-tooltip' );
        }
    }
    // add hook for printing scripts only at this plugin page
    function on_add_admin_js_files() {

Themes

1) Please recheck for any cache plugins, like "WP Super Cache" or "W3 Total Cache". If you are using someone, please deactivate it or add the exception to the pages with booking form and search form and search results for do not cache these pages.

2) Please recheck that you inserted into the content of separated posts or pages the booking forms (shortcode [booking ...]) for the parent (resource with some capacity) or single booking resources. If you had inserted the child resources, then these booking resources will not display in search results.
Please read more about configuration of booking resources here and about capacity concept here.

3) Please open the Booking > Settings > Search page and click on "Clear cache" button, you have to see the number of found pages with booking forms.

4) Please recheck how the search availability functionality is working depend from settings of different parameters.

After this you can test search form at front-end.

You can also be interesting in adding different additional parameters to the search form.

Ask more questions in here or contact directly