This project is not covered by Drupal’s security advisory policy.

Appointment scheduling is a configurable module that lets you set a calendar (days and active hours) and receive reservations requests for the available dates, for different offices.

The module is present in the 7.x and 8.x version. The module's behavior is the same for each of the two, the only difference is in the more extensive use of the entities for 8.x version. The Appointment and the Applicant are both entities and as such you can add or remove fields as needed.

General Workflow

  • On the front-end, the calendar will be displayed in two colors for the 2 possible states for any given day: available and not available
  • Active hours can be divided into 30min slots or 1hr slots
  • The module administrator can set a maximum number of N requests that can be received for each slot
  • If a day on calendar is marked as available, at least one slot is available for reservation request
  • If a day on calendar is marked as not available, no slots are available for reservation request
  • After N requests received for a given slot, such gets marked as not available
  • The back-office operator has a maximum of N pending requests per slot to evaluate: if all accepted, the slot stays not available; if ; if less than N get accepted, the slot is marked as available
  • The back-office operator can perform three actions for each request: confirm, deny and delete
  • The user that makes the requests receives a confirmation email
  • The user that makes the requests receives a second email in case the requests is accepted or denied; if the request id deleted the user receives no email
  • Reservations requests are not modifiable, the user must submit a new request in case of request denied or deleted

Calendar & Form UI

  • Days are organized in a monthly view
  • If the user clicks on an available day, the form is displayed
  • The form has the following fields: Name, Surname, Email, Cell number, Notes. Fields labels are modifiable in the settings.php file. All fields are mandatory.

User Privileges

  • Both registered and anonymous users can submit reservations requests
  • Registered user: the form autocomplete the fields with the user's Name, Surname and email information
  • Anonymous user: the form will also display a privacy text and checkbox (the text can be modified by the module administrator)

Time slots & Reservation requests limit

  • Time slots can be of 30min or 1hr, starting from the clock (9.00, 10.00, 11.00, ...)
  • In case of 30min slots, reservations can be made as 9.00-9.30, 9.30-10, 10-10.30, etc. It's not possible to reserve slots as 9.40-10.10
  • In case of 1hr slots, reservations can be made as 9.00-10.00, 10.00-11.00, 11.00-12.00, etc. It's not possible to reserve slots as 10.30-11.30
  • Time slots are configurable in the settings.php file and the configuration is shared among all offices.
  • The reservation requests limit is configurable from the back-office, independently for each office.

General office settings (opening hours, receiving emails) can be set from /node/OFFICE-NODE-ID/appointments_management/configure

Security

  • The form is protected by a captcha (configurable from Drupal CAPTCHA) for anonymous users

User email

  • The user receives an email upon making a reservations request
  • The user receives a second email in case the request is confirmed or denied. No mail is received if the request is deleted.
  • The email text can be different for each office, configurable from the back-office.

Requirements

Calendar management is built on the powerful library BAT, downloadable with Composer. In Drupal 7 you can use Composer manager to let Drupal manage this step.

Javascript libraries:

  • moment.js
  • query.validate
  • fullcalendar
  • tooltipster (only D8)

Download libraries and put them in a place that Libraries can found.

For Drupal 8 version, libraries dependency are managed by composer. To adds the libraries in your composer.json you have to run this comands:

composer config repositories.jquery-validation '{"type": "package","package": {"name": "jquery-validation/jquery-validation","version": "1.15.0","type": "drupal-library","source": {"url": "https://github.com/jquery-validation/jquery-validation","type": "git","reference": "1.15.0"}}}'
composer config repositories.moment '{"type": "package","package": {"name": "moment/moment","version": "2.17.1","type": "drupal-library","source": {"url": "https://github.com/moment/moment","type": "git","reference": "2.17.1"}}}'
composer config repositories.fullcalendar '{"type": "package","package": {"name": "arshaw/fullcalendar","version": "3.1.0","type": "drupal-library","source": {"url": "https://github.com/arshaw/fullcalendar","type": "git","reference": "v3.1.0"}}}'
composer config repositories.tooltipster '{"type": "package","package": {"name": "iamceege/tooltipster","version": "4.2.6","type": "drupal-library","source": {"url": "https://github.com/iamceege/tooltipster/","type": "git","reference": "4.2.6"}}}'

Or you can use the Composer Merge Plugin in your main composer.json to merge the module's composer.json on it.

And to control the path to which libraries will be installed add the following:

  "extra": {
    "installer-paths": {
        "web/libraries/{$name}": [
          "type:drupal-library"
        ]
    }
  }

Check the composer.json into the module.

The maintainers can be contacted for paid customisations of this module./strong>

Supporting organizations: 

Project information

Releases