Notice: ABPro's Stripe payment processor uses the Legacy Checkout and is not SCA compatible. read more..

You can use ABPro together with the data plotting component Plotalot to visualized ABPro data.

 


 

Query for above..

SELECT
    #__sv_apptpro3_resources.name,Count(*)
FROM
   #__sv_apptpro3_requests INNER JOIN #__sv_apptpro3_resources
   ON #__sv_apptpro3_requests.resource = #__sv_apptpro3_resources.id_resources
WHERE startdate>='2014-01-01' and startdate<='2014-01-31'
AND request_status = 'accepted'
GROUP BY
   #__sv_apptpro3_resources.name;


 

  

Query for above..

SELECT
    #__sv_apptpro3_resources.name, sum(booking_total) as Revenue
FROM
    #__sv_apptpro3_requests INNER JOIN #__sv_apptpro3_resources
    ON #__sv_apptpro3_requests.resource = #__sv_apptpro3_resources.id_resources
WHERE startdate>='2013-12-01' and startdate<='2013-12-31'
AND request_status = 'accepted'
GROUP BY
    #__sv_apptpro3_resources.name

 


Require a specific query ?

For a quote, email details of your requirement to This email address is being protected from spambots. You need JavaScript enabled to view it.

 

 

 

You can add a link to ABPro into a content page.

This might be used where you describe a resource then have a 'Book Now!' link to go to ABPro. The link can open ABPro in a specific mode, date, grid time range, etc. Because the link can have several options this plug-in was developed to assist in creating it.

With the plug-in enabled a link can be added to a page with something as simple as..

Here shown here as an image so Joomla won't make it into a link.

  

Here in action..

Book Now!

In this case the booking screen opens with settings based on the ABPro Configuration settings.

 

The plug-in allows you to override the default settings..

 

 Fields left empty in the plug-in setup screen will default to the component settings.

 

 You can also override in the tag itself so you can have multiple different links on the same page..

Book Dr Bar!

 

Or in a popup..

 

 


Download plug-in here 

 

Tag Parameters

Tag Valid Values Description
link_text Text String String to use for the link text
view gad, simple, wizard Which booking screen
mode normal, single_resource, single_category, single_service  Use only for single resource/category/service mode
id number - the id of the resource/category/service if not using normal above resource, category or service id
date YYYY-MM-DD Used for events when you want the booking screen to open showing a specific date
starttime HH:MM Use if you want the grid start time different than the component default setting.
endtime HH:MM Use if you want the grid end time different than the component default setting.
popup  Yes, No Open booking screen in popup window - not compatible with PayPal 
popup_x number  width of the popup window 
popup_y  number  height of the popup window 
link_class a class you have defined for your Joomla content pages Class to be used to display the link in the content page.
link_image Absolute path to an image If you wish to use an image link rather than text, enter the path to the image here.

 

Notes:

  1. Requires ABPro running under Joomla 2.5 or 3.0
  2. Popup uses an iFrame and is not compatible with PayPal. Authroize.net and 2Checkout.com appear to work fine through an iFrame.
  3. Popup requires ABPro 2.0.5, 3.0 or the minor code change to the confirmation screen explained in setup 2 of this How-to

 

 Example from demo page..

To support an unlimited number of UDFs, the UDF data cannot be stored in the booking, it must be stored in a separate table where each row is one UDF's values. If you join the booking table to the udf_values table and you have say 3 UDFs defined, you will get 3 copies of each booking row, one for each UDF.
The only way around this is to use some fancy SQL aggregating and grouping. 

You will need to:

  1. Modify the query that pulls booking data
  2. Modify the view to display the UDF data (the screen is already full so you may wish to replace some exiting columns with your UDF columns.)
 
Examples


Example #1 My Bookings

 

1. Modify the query 

In the case of the My Booking screen the query to fetch data is in the view itself.
File:\components\com_rsappt_pro2\views\mybookings\tmpl\default.php

 

Around line 101 look for:

// find requests

$sql = "SELECT #__sv_apptpro2_requests.*, #__sv_apptpro2_resources.resource_admins, ".
"#__sv_apptpro2_resources.name as resname, ".
//"#__sv_apptpro2_services.name as ServiceName, ".
"CONCAT(#__sv_apptpro2_requests.startdate,#__sv_apptpro2_requests.starttime) as startdatetime, ".
" IF(CONCAT(#__sv_apptpro2_requests.startdate, ' ', #__sv_apptpro2_requests.starttime) > Now(),'no','yes') as expired, ";
if($apptpro_config->timeFormat == "12"){
$sql = $sql." DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e, %Y') as display_startdate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.starttime, '%l:%i %p') as display_starttime, ".
"DATE_FORMAT(#__sv_apptpro2_requests.enddate, '%b %e, %Y') as display_enddate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.endtime, '%l:%i %p') as display_endtime ";
} else {
$sql = $sql." DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e, %Y') as display_startdate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.starttime, '%k:%i') as display_starttime, ".
"DATE_FORMAT(#__sv_apptpro2_requests.enddate, '%b %e, %Y') as display_enddate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.endtime, '%k:%i') as display_endtime ";
}
$sql = $sql." FROM #__sv_apptpro2_requests INNER JOIN #__sv_apptpro2_resources ".
"ON #__sv_apptpro2_requests.resource = #__sv_apptpro2_resources.id_resources ".
//" INNER JOIN #__sv_apptpro2_services ON #__sv_apptpro2_requests.service = #__sv_apptpro2_services.id_services ".
"WHERE request_status!='deleted' AND ";
if($filter != ""){
$sql = $sql." request_status='".$filter."' AND ";
}
if($startdateFilter != ""){
$sql = $sql." startdate>='".$startdateFilter."' AND ";
}
if($enddateFilter != ""){
$sql = $sql." enddate<='".$enddateFilter."' AND ";
}
$sql = $sql."#__sv_apptpro2_requests.user_id = ".$user->id.
// " AND CONCAT(#__sv_apptpro2_requests.startdate, ' ', #__sv_apptpro2_requests.starttime) >= NOW() ".
" ORDER BY ".$ordering.' '.$direction;

 

Add the red code:

// find requests
$sql = "SELECT #__sv_apptpro2_requests.*, #__sv_apptpro2_resources.resource_admins, ".

"#__sv_apptpro2_resources.name as resname, ".
//"#__sv_apptpro2_services.name as ServiceName, ".

"GROUP_CONCAT(CASE #__sv_apptpro2_udfvalues.udf_id WHEN 3 THEN #__sv_apptpro2_udfvalues.udf_value END) as Fruit, ".
"GROUP_CONCAT(CASE #__sv_apptpro2_udfvalues.udf_id WHEN 8 THEN #__sv_apptpro2_udfvalues.udf_value END) as Event, ".

"CONCAT(#__sv_apptpro2_requests.startdate,#__sv_apptpro2_requests.starttime) as startdatetime, ".
" IF(CONCAT(#__sv_apptpro2_requests.startdate, ' ', #__sv_apptpro2_requests.starttime) > Now(),'no','yes') as expired, ";
if($apptpro_config->timeFormat == "12"){
$sql = $sql." DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e, %Y') as display_startdate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.starttime, '%l:%i %p') as display_starttime, ".
"DATE_FORMAT(#__sv_apptpro2_requests.enddate, '%b %e, %Y') as display_enddate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.endtime, '%l:%i %p') as display_endtime ";
} else {
$sql = $sql." DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e, %Y') as display_startdate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.starttime, '%k:%i') as display_starttime, ".
"DATE_FORMAT(#__sv_apptpro2_requests.enddate, '%b %e, %Y') as display_enddate, ".
"DATE_FORMAT(#__sv_apptpro2_requests.endtime, '%k:%i') as display_endtime ";
}
$sql = $sql." FROM #__sv_apptpro2_requests INNER JOIN #__sv_apptpro2_resources ".
"ON #__sv_apptpro2_requests.resource = #__sv_apptpro2_resources.id_resources ".

" LEFT JOIN #__sv_apptpro2_udfvalues ON request_id = #__sv_apptpro2_requests.id_requests ".

//" INNER JOIN #__sv_apptpro2_services ON #__sv_apptpro2_requests.service = #__sv_apptpro2_services.id_services ".
"WHERE request_status!='deleted' AND ";
if($filter != ""){
$sql = $sql." request_status='".$filter."' AND ";
}
if($startdateFilter != ""){
$sql = $sql." startdate>='".$startdateFilter."' AND ";
}
if($enddateFilter != ""){
$sql = $sql." enddate<='".$enddateFilter."' AND ";
}
$sql = $sql."#__sv_apptpro2_requests.user_id = ".$user->id.
// " AND CONCAT(#__sv_apptpro2_requests.startdate, ' ', #__sv_apptpro2_requests.starttime) >= NOW() ".

" GROUP BY #__sv_apptpro2_requests.id_requests ".

" ORDER BY ".$ordering.' '.$direction;

 

In the above code I am joining to the udf_values table and grabbing two UDFs, Favourite Fruit (udf id #3) and 'Event Type' (udf id #8).
I am naming the returned data fields 'Fruit' and 'Event'. These names will be used below to display the data.

 

 

Modify the view

You may prefer to replace an existing display field rather than add a new field just for space consideration.

For this example I will replace the 'Booked Seats' column with the UDF Favourite Fruit.

The headers for the the bookings display start in the same file around line 307.

The booked_seats header is..

<th class="title" align="center"><?php echo JHTML::_( 'grid.sort', JText::_('RS1_MYBOOKINGS_SCRN_SEATS_HEAD'), 'booked_seats', $direction, $ordering); ?></th>

 

Change the header to:
<th class="title" align="center"><?php echo JHTML::_( 'grid.sort', 'Fav Fruit', 'fruit', $direction, $ordering); ?></th>

 

Now change the data section of the display a few lines below...
      <td align="center"><?php echo $row->booked_seats; ?> </td>

to:
      <td align="center"><?php echo $row->Fruit; ?> </td>

 

 

Example #2 Advanced Admin Appointments List

 

1. Modify the query 

This is a bit different in that the query to get data is in the Model file, a more normal place for it to be.
File: \components\com_rsappt_pro2\models\requests.php

Around line 231 look for:

$query = ' SELECT '.
'#__sv_apptpro2_requests.*, #__sv_apptpro2_resources.name AS '.
'ResourceName, #__sv_apptpro2_services.name AS ServiceName, '.
'#__sv_apptpro2_categories.name AS CategoryName, '.
"CONCAT(#__sv_apptpro2_requests.startdate,#__sv_apptpro2_requests.starttime) as startdatetime, ".
"DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e ') as display_startdate, ";
// if($apptpro_config->timeFormat == "12"){
// $query .= "DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %h:%i %p') as display_starttime, ";
// } else {
$query .= "DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %H:%i') as display_starttime, ";
// }
$query .= '#__sv_apptpro2_paypal_transactions.id_paypal_transactions AS id_transaction '.
'FROM ('.
'#__sv_apptpro2_requests LEFT JOIN '.
'#__sv_apptpro2_resources ON #__sv_apptpro2_requests.resource = '.
'#__sv_apptpro2_resources.id_resources LEFT JOIN '.
'#__sv_apptpro2_services ON #__sv_apptpro2_requests.service = '.
'#__sv_apptpro2_services.id_services LEFT JOIN '.
'#__sv_apptpro2_categories ON #__sv_apptpro2_resources.category_id = '.
'#__sv_apptpro2_categories.id_categories LEFT JOIN '.
'#__sv_apptpro2_paypal_transactions ON '.
'#__sv_apptpro2_paypal_transactions.custom = '.
'#__sv_apptpro2_requests.id_requests) '.
' WHERE #__sv_apptpro2_resources.resource_admins LIKE \'%|'.$user->id.'|%\' ';

if($filter != ""){
$query = $query." AND ".$filter;
}

$query = $query.' '.$orderby;

 

Add the red code:

$query = ' SELECT '.
'#__sv_apptpro2_requests.*, #__sv_apptpro2_resources.name AS '.
'ResourceName, #__sv_apptpro2_services.name AS ServiceName, '.
'#__sv_apptpro2_categories.name AS CategoryName, '.

'GROUP_CONCAT(CASE #__sv_apptpro2_udfvalues.udf_id WHEN 3 THEN #__sv_apptpro2_udfvalues.udf_value END) as Fruit, '.

"CONCAT(#__sv_apptpro2_requests.startdate,#__sv_apptpro2_requests.starttime) as startdatetime, ".
"DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e ') as display_startdate, ";
// if($apptpro_config->timeFormat == "12"){
// $query .= "DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %h:%i %p') as display_starttime, ";
// } else {
$query .= "DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %H:%i') as display_starttime, ";
// }
$query .= '#__sv_apptpro2_paypal_transactions.id_paypal_transactions AS id_transaction '.
'FROM ('.
'#__sv_apptpro2_requests LEFT JOIN '.
'#__sv_apptpro2_resources ON #__sv_apptpro2_requests.resource = '.
'#__sv_apptpro2_resources.id_resources LEFT JOIN '.
'#__sv_apptpro2_services ON #__sv_apptpro2_requests.service = '.
'#__sv_apptpro2_services.id_services LEFT JOIN '.
'#__sv_apptpro2_categories ON #__sv_apptpro2_resources.category_id = '.
'#__sv_apptpro2_categories.id_categories LEFT JOIN '.
'#__sv_apptpro2_paypal_transactions ON '.
'#__sv_apptpro2_paypal_transactions.custom = '.
'#__sv_apptpro2_requests.id_requests '.   <-- note: the  ). is moved to line below.

'LEFT JOIN #__sv_apptpro2_udfvalues ON request_id = #__sv_apptpro2_requests.id_requests ) '.

' WHERE #__sv_apptpro2_resources.resource_admins LIKE \'%|'.$user->id.'|%\' ';

if($filter != ""){
$query = $query." AND ".$filter;
}

$query = $query.' GROUP BY #__sv_apptpro2_requests.id_requests ';

$query = $query.' '.$orderby;

In the above code I am joining to the udf_values table and grabbing the UDF Favourite Fruit (udf id #3). 
I am naming the returned data field as 'Fruit'. This name will be used below to display the data.

  

Modify the View

 
File: \components\com_rsappt_pro2\views\advadmin\tmpl\default.php
 

You may prefer to replace an existing display field rather than add a new field just for space consideration.

For this example I will replace the 'ServiceName' column with the UDF Favourite Fruit.

The headers for the the bookings display start around line 594.

The ServiceName header is..

<th class="svtitle" align="left"><?php echo JHTML::_( 'grid.sort', JText::_('RS1_ADMIN_SCRN_SERVICE_COL_HEAD'), 'ServiceName', $this->lists['order_Dir_req'], $this->lists['order_req'], 'req_'); ?></th>

Change to:

<th class="svtitle" align="left"><?php echo JHTML::_( 'grid.sort', 'Fav Fruit', 'Fruit', $this->lists['order_Dir_req'], $this->lists['order_req'], 'req_'); ?></th>

 

Now change the data section of the display a few lines below...
<td align="left"><?php echo JText::_(stripslashes($row->ServiceName)); ?> </td>

Change to:

<td align="left"><?php echo $row->Fruit; ?> </td>

 

 

Front Desk, Week and Day views

 

1. Modify the query 

For the Front Desk everything happens in one file:
\components\com_rsappt_pro2\svcalendar.php

 
Around line 607 look for:

$sql = "SELECT #__sv_apptpro2_requests.*, #__sv_apptpro2_resources.resource_admins, #__sv_apptpro2_resources.id_resources as res_id, ".
    "#__sv_apptpro2_resources.max_seats, #__sv_apptpro2_resources.name as resname, #__sv_apptpro2_services.name AS ServiceName, ".
    // "#__sv_apptpro2_categories.name AS CategoryName, ".
    "#__sv_apptpro2_resources.id_resources as resid, DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e ') as display_startdate, ";
    if($apptpro_config->timeFormat == '24'){
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %H:%i') as display_starttime, ";
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.endtime, ' %H:%i') as display_endtime ";
    } else {
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %l:%i %p') as display_starttime, ";
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.endtime, ' %l:%i %p') as display_endtime ";
    }
    $sql .= " FROM ( ".
    '#__sv_apptpro2_requests LEFT JOIN '.
    '#__sv_apptpro2_resources ON #__sv_apptpro2_requests.resource = '.
    '#__sv_apptpro2_resources.id_resources LEFT JOIN '.
    // '#__sv_apptpro2_categories ON #__sv_apptpro2_requests.category = '.
    // '#__sv_apptpro2_categories.id_categories LEFT JOIN '.
    '#__sv_apptpro2_services ON #__sv_apptpro2_requests.service = '.
    '#__sv_apptpro2_services.id_services ) '.
    "WHERE ";
... 

Add the red code.

$sql = "SELECT #__sv_apptpro2_requests.*, #__sv_apptpro2_resources.resource_admins, #__sv_apptpro2_resources.id_resources as res_id, ".
    "#__sv_apptpro2_resources.max_seats, #__sv_apptpro2_resources.name as resname, #__sv_apptpro2_services.name AS ServiceName, ". 
    // "#__sv_apptpro2_categories.name AS CategoryName, ". 

"GROUP_CONCAT(CASE #__sv_apptpro2_udfvalues.udf_id WHEN 3 THEN #__sv_apptpro2_udfvalues.udf_value END) as Fruit, ".

    "#__sv_apptpro2_resources.id_resources as resid, DATE_FORMAT(#__sv_apptpro2_requests.startdate, '%a %b %e ') as display_startdate, ";
    if($apptpro_config->timeFormat == '24'){
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %H:%i') as display_starttime, ";
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.endtime, ' %H:%i') as display_endtime ";
    } else {
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.starttime, ' %l:%i %p') as display_starttime, ";
        $sql .=" DATE_FORMAT(#__sv_apptpro2_requests.endtime, ' %l:%i %p') as display_endtime ";
    } 
    $sql .= " FROM ( ".
    '#__sv_apptpro2_requests LEFT JOIN '.
    '#__sv_apptpro2_resources ON #__sv_apptpro2_requests.resource = '.
    '#__sv_apptpro2_resources.id_resources LEFT JOIN '. 
    // '#__sv_apptpro2_categories ON #__sv_apptpro2_requests.category = '.
    // '#__sv_apptpro2_categories.id_categories LEFT JOIN '.
    '#__sv_apptpro2_services ON #__sv_apptpro2_requests.service = '.
    '#__sv_apptpro2_services.id_services '.   <-- note: the  ). is moved to line below.

'LEFT JOIN #__sv_apptpro2_udfvalues ON request_id = #__sv_apptpro2_requests.id_requests ) '.

    "WHERE ";
... 

 
Around line 664 look for:

$sql .= " ORDER BY startdate, starttime";

Add the red code:
 
$sql = $sql.' GROUP BY #__sv_apptpro2_requests.id_requests ';
$sql .= " ORDER BY startdate, starttime";
 
 

Modify the View

For this example I will replace the 'ServiceName' column with the UDF Favourite Fruit.

The file has 3 sections; month, week and day.

 

For the Week view, around line 441 look for:

$s .= " <td width=\"15%\" align=\"left\"> ".stripslashes($booking->ServiceName)."</td>";

Change to:

$s .= " <td width=\"15%\" align=\"left\">".$booking->Fruit."</td>";

 

 

For the Day View, around line 560 look for:

$s .= " <td align=\"left\"> ".stripslashes($booking->ServiceName)."</td>\n";

Change to:

$s .= "  <td align=\"left\"> ".$booking->Fruit."</td>\n";

 

 


Caution 1: The following procedure will replace your existing ABPro with a newer version. Any code changes you have made will be lost and must be re-added manually.

 

Caution 2: Always do a system backup before upgrading.  

 


Starting with ABPro 4.0.3 you can install an update without uninstalling ABProsmile

If you are upgrading from a release older than 4.0.2 beta 2, you will still need to use the procedure below.

Also starting with ABPro 4.0.3, the Joomla Update system is supported.

If you are customizing ABPro for your client, make sure you tell them NOT to use the Joomla Update or it will overwrite your customization.

 


Moving from one beta, or dot release, to the next ( ex 3.0.1 to 3.0.2 to 3.0.x, or 3.0.x to 4.0.0 etc ):

  1. Go to the ABPro Control Panel and select Backup/Restore. Do a 'Backup' - this will save all your current settings and stuff. The screen will show everything it backs up. When complete (a few seconds) scan down the screen to ensure everything looks ok. You may see errors if you are not using some features. For example if you are not using User Credit, it may report no user credit table to backup.

  2. If you are using Google Calendar you will need to ftp your .P12 key file and the google-api-php-client-master folder to your desktop so you can restore them after the update. (Joomla will delete them in step 3)
     
  3. Uninstall old, install new.
     
  4. Go to the ABPro Control Panel and select Backup/Restore. Do a 'Restore' - this will put back all your settings. It will again, show everything it is restoring and only take a couple of seconds. Scan down the screen to check that it looks ok. 
    If your are upgrading to 2.0.3 (or higher) and use categories, on the ABPro Restore screen select the option 'Backfill Category IDs'. Also, you will need to re-assign your resources to categories as the category/resource relationship has changed to support assigning a resource to more that one category. 

  5. If you are using Google Calendar, ftp the key file and folder from step 2 back to your server.

  6. Check menus that call ABPro, you will likely need to open and re-save them in Joomla Menu Manager.

  7. Do you use Categories? If so, and you are upgrading from a pre-4.0.1 version of ABPro, you will need to open each one and set its 'Access' to the Joomla Groups you want. Typically 'Public' and 'Super User'.

 

Note 1: The backup/restore does not currently retain the CSS file across an uninstall/reinstall so if you have made changes to the ABPro CSS you will need to manually backup/restore the file 'sv_apptpro.css'

Note 2: When you uninstall then re-install, the component id changes so you MUST open each ABPro menu item, in the Joomla Admin Menu system, then just save again

ABPro 4 allows you to turn on/off, and reposition, screen sections.
This is done in the Menu Setup screen via menu parameters.
If you upgraded from ABPro 3, your menus are still there from ABPro 3.
You will need to open and re-save the menu item that calls ABPro so the new parameters get set and stored.

Note 3: If upgrading to 2.0.3 from a previous version see also http://appointmentbookingpro.com/component/kunena/18-errors-and-error-messages/10040-broken-image-links.html?Itemid=0#10040

Note 4: Google Calendar library and key file are not preserved across a Joomla uninstall/reinstall so you will need to copy the library folder and key file to your local PC and re-upload them after the upgrade.

When upgrading a production site, it is advised you backup your entire site with AkeebaBackup, or a similar product, to safeguard against data loss should unforeseen problems arise.

 

  


Moving from Joomla 2.5 - ABPro 2.0.x to Joomla 3 - ABPro 3.x

On the same server (you plan to use Joomla Update to update your existing server)

  1. Make a backup of your ABPro 2.x using ABPro's backup  (must be done before you update Joomla)
  2. Make a copy of your CSS file (sv_apptpro.css) if you wish to bring it forward as the install of ABPro will overwrite the old css file.
  3. Upgrade your site to Joomla 3 with Joomla Update.
  4. Install ABPro 3
  5. Use ABPro 3's 'Restore from an ABPro 2 backup' option.
  6. Check menus that call ABPro, you will likely need to open and re-save them in Joomla Menu Manager.

 

Moving to a new server (you plan to move to a new Joomla 3 install on a new server)

  1. Make a backup of your ABPro 2.x using ABPro's backup
  2. Copy _backup tables to your Joomla 3 server ** see link below
  3. Use ABPro 3's 'Restore from an ABPro 2 backup' option.

 

See also http://appointmentbookingpro.com/migrate-to-a-new-server.html

 

 


Moving from 1.4.x to 2.0 (Joomla 1.5)

ABPro 2.0 uses different tables so you install 2.0 without uninstalling 1.4.x.

Use the ABPro 2.0 Backup/Restore screen's 'Import From 1.4.x' function to bring data from 1.4.x over to 2.0.

See http://appointmentbookingpro.com/index.php?option=com_content&view=article&id=126 

Note: ABPro 2.0 has TWO confirmation messages, one for the customer and one for admin. When you upgrade the message to admin will get blanked out. You will need to go in and create a new one or admin will get blank confirmations. 
ABPro Control Panel | Configure | Messages tab.

 


Moving from 1.4.x to 2.0 (Joomla 2.5)

See http://appointmentbookingpro.com/index.php?option=com_content&view=article&id=126

 


Note: Any code changes you made to ABPro will need to be re-applied after an upgrade. This includes How-To changes and language specific changes.