Skip to content

BeckeBauer/timeoff

Repository files navigation

TimeOff.Management

Web application for managing employee absences.

Build status

Features

Multiple views of staff absences

Calendar view, Team view, or Just plain list.

Tune application to fit into your company policy

Add custom absence types: Sickness, Maternity, Working from home, Birthday etc. Define if each uses vacation allowance.

Optionally limit the amount of days employees can take for each Leave type. E.g. no more than 10 Sick days per year.

Setup public holidays as well as company specific days off.

Group employees by departments: bring your organisational structure, set the supervisor for every department.

Customisable working schedule for company and individuals.

Third Party Calendar Integration

Broadcast employee whereabouts into external calendar providers: MS Outlook, Google Calendar, and iCal.

Create calendar feeds for individuals, departments or entire company.

Three Steps Workflow

Employee requests time off or revokes existing one.

Supervisor gets email notification and decides about upcoming employee absence.

Absence is accounted. Peers are informed via team view or calendar feeds.

Access control

There are following types of users: employees, supervisors, and administrators.

Optional LDAP authentication: configure application to use your LDAP server for user authentication.

Ability to extract leave data into CSV

Ability to back up entire company leave data into CSV file. So it could be used in any spreadsheet applications.

Works on mobile phones

The most used customer paths are mobile friendly:

  • employee is able to request new leave from mobile device

  • supervisor is able to record decision from the mobile as well.

Lots of other little things that would make life easier

Manually adjust employee allowances e.g. employee has extra day in lieu.

Upon creation employee receives pro-rated vacation allowance, depending on start date.

Email notification to all involved parties.

Optionally allow employees to see the time off information of entire company regardless of department structure.

Screenshots

TimeOff.Management Screenshot

Installation

Cloud hosting

Visit http://timeoff.management/

Create company account and use cloud based version.

Self hosting

Install TimeOff.Management application within your infrastructure:

(make sure you have Node.js (>=4.0.0) and SQLite installed)

git clone https://github.com/timeoff-management/application.git timeoff-management
cd timeoff-management
npm install
npm start

Open http://localhost:3000/ in your browser.

Run tests

We have quite a wide test coverage, to make sure that the main user paths work as expected.

Please run them frequently while developing the project.

Make sure you have Chrome driver installed in your path and Chrome browser for your platform.

If you want to see the browser execute the interactions prefix with SHOW_CHROME=1

USE_CHROME=1 npm test

(make sure that application with default settings is up and running)

Any bug fixes or enhancements should have good test coverage to get them into "master" branch.

Updating existing instance with new code

In case one needs to patch existing instance of TimeOff.Managenent application with new version:

git fetch
git pull origin master
npm install
npm run-script db-update
npm start

How to?

There are some customizations available.

How to amend or extend colours available for colour picker?

Follow instructions on this page.

Customization

There are few options to configure an installation.

Make sorting sensitive to particular locale

Given the software could be installed for company with employees with non-English names there might be a need to respect the alphabet while sorting customer entered content.

For that purpose the application config file has locale_code_for_sorting entry. By default the value is en (English). One can override it with other locales such as cs, fr, de etc.

Force employees to pick type each time new leave is booked

Some organizations require employees to explicitly pick the type of leave when booking time off. So employee makes a choice rather than relying on default settings. That reduce number of "mistaken" leaves, which are cancelled after.

In order to force employee to explicitly pick the leave type of the booked time off, change is_force_to_explicitly_select_type_when_requesting_new_leave flag to be true in the config/app.json file.

Use Redis as a sessions storage

Follow instructions on this page.

Deploying timeoff app to the cloud

In order to deploy the timeoff application to the cloud, we need the next resources available on the Cloud provider of your preference, for this example we are using Google Cloud provider. List of required resources:

  • Cloud SQL Database
  • GKE Kubernetes cluster
  • GCP Container Registry

This repo is currently configured with a CI/CD process to either automatically deploy the app to the cloud whenever a change happen to the code, or execute a manual deploy of the app if needed, this is the diagram of this architecture CI/CD Process

Before executing the workflow for the deployment of the timeoff app, we need to provision the required resources mentioned previously, to do that, we can make use of the other workflow called deploy-infrastructure.yaml which is in charge to provision all the necesary resources for the app to work, that wokrflow has also the ability to be executed either with the change of any file included in the infrastructure folder or by manually executing it, please follow the next steps to trigger it:

  • Go to the Actions tab on you repo
  • Click on the DEPLOY_Infrastructure link
  • On the right side, select the option Run workflow
  • A little modal will be displayed, select the master that you want and click on Run workflow

Once the steps above mentioned are completed, the deployment of the infrastructure is going to happent thanks to the help of terraform and because terraform is configures with the backed on GCP Cloud storage, we can guarantee that the state of this infrastructure will not be lost

After deploying the infrastructure, you can deploy the app by following the next steps:

  • Go to the Actions tab on you repo
  • Click on the DEPLOY_Dev/Prod_timeoff link
  • On the right side, select the option Run workflow
  • A little modal will be displayed, select the master that you want and click on Run workflow
  • If you are developing a new feature to the app, you just have to push your changes to github and the workflow will be automatically triggered

Feedback

Please report any issues or feedback to twitter or Email: pavlo at timeoff.management