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:
Examples:
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.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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 :)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
@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?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You will need to check this in the form definition.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.