Looking for a booking / reservation tool in Confluence

Jan March 8, 2018

As we are using Confluence as a social intranet with the Linchpin Plugins, we would like to provide a booking (reservation) function for several purposes.

We are already using the Event Plugin from Seibert for Event registrations with which users can register for events with limited capacities. 

Now we need something where users can book / reserve time slots that can be pre defined. 

Requirements:

  1. Providing time individual time slots on specific days / time ranges with capacities
  2. Users can book in to these time slots; as soon as capycity is full, the slot is not available 
  3. Notifications and reports 

Examples: 

  • We are having yearly flu vaccinations where you can opt in for 5 mins time slots. 
  • We are having a massage seat (1 for 2000 emplyoees) where you can reserve 30 mins or 40 mins slots 
  • Probably more use cases when something like this would be available

 

1 answer

2 votes
Davin Studer
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
March 8, 2018

Check out the ConfiForms add-on. You can do this, and so much more, with it. I don't work for them, we just use it in our environment and I know it can do what you are asking. There might be other add-on in the marketplace can can do this kind of thing as well, I am just not as familiar with them.

Jan September 26, 2018

Thanks @Davin Studer - I am just playing a little with ConfiForms and I really like it a lot. But I did not find out how to do what I was looking for above, here is an example: 

- There are 10 minute time slots available on a specific day's afternoon

- Each time slot can be booked by one user and are blocked afterwards

- When loading the page with form, a user should see or be able to book available slots only

Rafael Reder December 6, 2018

Hi

Have you found something? I am searching for something similar.

We need a booking/reservation system in our company for rental devices and meetingrooms.

Regards.

Jan December 7, 2018

Unfortunately not yet, @Rafael Reder. I guess someone developping an Addon could make a fortune :) 

Davin Studer
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
December 7, 2018

We recently ran into this very issue. I have written a user macro for ConfiForms that will limit the number of entries per dropdown field option. This may not be exactly what you are looking for but the concept could be adapted.

Macro Name:
confiforms_limit_dropdown_options

Macro Title:
ConfiForms Limit Dropdown Options

Description:
This macro will limit a ConfiForms dropdown field to only have a certain number of entries for each option.

Macro Body Processing:
No macro body

Template:

## Developed by: Davin Studer
## Date created: 12/07/2018

## @param Page:title=Page name where the form is defined|type=confluence-content|required=false|desc=Leave blank if the form is defined on the same page
## @param FormName:title=ConfiForms Form name|type=string|required=true|desc=
## @param Field:title=Field name|type=string|required=true|desc=
## @param Max:title=Max per option|type=int|required=true|desc=The max number if entries per option of the specified field name.

#set( $containerManagerClass=$content.class.forName('com.atlassian.spring.container.ContainerManager') )
#set( $getInstanceMethod=$containerManagerClass.getDeclaredMethod('getInstance',null) )
#set( $containerManager=$getInstanceMethod.invoke(null,null) )
#set( $containerContext=$containerManager.containerContext )
#set( $pageManager=$containerContext.getComponent('pageManager') )

## Create a unique ID for this macro so it can be put on a page multiple times
#set( $id = $action.dateFormatter.calendar.timeInMillis )

## A velocity variable to get around issues with velocity and jQuery
#set( $d = '$' )

## Get the id of the current page or the page specified in the macro parameters
#if( $paramPage && $paramPage != "" )
    ##########################
    ## Get the page manager ##
    ##########################
    
    ##########################
    ## Find the page        ##
    ##########################
    #set( $parts = $paramPage.split(":") )
    #set( $i = 0 )
    #set( $len = 0 )
    #set( $key = "" )
    #set( $name = "" )

    ##Having trouble finding out the length/size of $parts ... brute force it
    #foreach ( $part in $parts )
        #set ( $len = $len + 1 )
    #end
    
    #if ( $len == 1 )
        #set ( $key = $content.spaceKey )
        #set ( $name = $paramPage )
    #else
        #foreach ( $part in $parts )
            #if ( $i == 0 )
              #set ( $key = $part )
              #set ( $i = $i + 1 )
           #else
              #set ( $name = $part )
           #end
        #end
    #end

    #set ( $tempcontent = "" )

    #if ( $pageManager )
        #set ( $tempcontent = $pageManager.getPage($key, $name) )
    #end
    #if ( $tempcontent && $tempcontent != "" )
        #set( $pageId = $tempcontent.id )
    #else
        The page "$paramPage" was not found in this space.
        #set( $pageId = "" )
    #end
#else
    #set( $pageId = $content.id )
#end

<script type="text/javascript">
//<![CDATA[
var ConfiFormsDropDownFilter${id} = {
    pageId: $pageId,
    formName: '$paramFormName',
    fieldName: '$paramField',
    maxCount: $paramMax,
    init: function(){
        var t = this;
        var json = t.getData(t.pageId, t.formName);
        
        // Don't bother to do anything if there are no entries
        if(json.list.entry.length > 0) {
            // Loop through the dropdown options and count how many entries have that option
            AJS.$('select[id=i_' + t.fieldName + '] option').each(function(){
                var count = 0;
                var val = AJS.$(this).val();
                for(var i in json.list.entry) {
                    if(typeof json.list.entry[i].fields[t.fieldName] !== "undefined" && val == json.list.entry[i].fields[t.fieldName]) {
                        // This entry counts against the max number for this option
                        count ++;
                    }
                    
                    if(count == t.maxCount) {
                        // We've hit the max entries for this option ... remove it and go to the next option
                        t.removeOption(t.fieldName, val);
                        break;
                    }
                }
            });
        }
    },
    getData: function(pageId, formName) {
        var t = this;
        var url = AJS.params.baseUrl + '/ajax/confiforms/rest/filter.action?pageId=' + pageId + '&f=' + formName + '&q=';
        var ret = null;
        AJS.${d}.ajax({
            url: url,
            async: false
        })
        .done(function (json) {
            ret = json;
        })
        .fail(function (jqXHR, textStatus) {
            ret = null;
        });

        return ret;
    },
    removeOption: function(field, option) {
        var t = this;
        AJS.$('select[id=i_' + field + '] option[value="' + option + '"]').remove();
    }
};

AJS.toInit(function(){
    ConfiFormsDropDownFilter${id}.init();
});
//]]>
</script>
Like # people like this
Jonathan May 8, 2020

Hi Davin,

ok thanks, how exactly would this be to incorporate in a ConfiForms Form?

Would I build a form for each day or each timeslot? or is there a way to do it all in one form?

Davin Studer
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 8, 2020

Just build your form like normal. Have the dropdown have all the entries. Then put this user macro on the page ... anywhere on the page. Set up the properties in the user macro and when you visit the form it will check the current entries in the form and if you have reached the max number of entries for any dropdown option it will be removed from the dropdown.

Like Jonathan likes this
Jonathan May 11, 2020

Hi,

thanks, I got it to work now, I had the user makro inside the confiforms box which did not work.

A really nice imrpovement would be to be able to use the Datetime slot field for this instead of a dropdown list. Also Datetime slot should be restrictable, e.g. define half hours slots but only between 11 and 13.

But it's quite close to what we need :)

Jonathan May 14, 2020

@Davin Studer one more problem we just stumbled on.

It seems like the dropdown limiter macro only works for users with page edit rights for some reason? I just testet this with a user with read-only permissions (which would be the vast majority of users filling out the form ideally) and with that user I had the used-up slot options still available to choose from whereas users with page edit rights would not see those options any more.

Any way we can quickly fix that?

Davin Studer
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 14, 2020

You will need to check this in the form definition.

image.png

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events