Web application for managing employee absences.
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.
Visit http://timeoff.management/
Create company account and use cloud based version.
Clone the repository
git clone https://github.com/bigheadsmith/timeoff-app.git timeoff-app
cd timeoff-app
Edit configuration variables inside .env.example and save as .env - environment variables table below
cp .env.example .env
Edit docker-compose-example.yaml and save as docker-compose.yaml
cp docker-compose-example.yaml docker-compose.yaml
Run the project
docker compose up --build -d
Variable | Description | Default value |
---|---|---|
APP SETTINGS | ||
NODE_ENV | Environment of NodeJs | development |
PORT | Port of the application | 3000 |
LOGIN_DEFAULT | Display the default login form | true |
BRANDING_URL | URL of the application | http://app.timeoff.management/ |
BRANDING_WEBSITE | URL of the company's website | http://timeoff.management/ |
BRANDING_TITLE | App title | Timeoff.Management |
BRANDING_CONTACTEMAIL | App contact email address | [email protected] |
OPTIONS_ALLOWREGISTRATION | Allows creation of company account. Set to false after setup | true |
OPTIONS_SENDEMAIL | False=write to email audit but do not send email | false |
OPTIONS_FORCELEAVESELECT | Forces user to select leave type instead of default | false |
OPTIONS_LOCALECODE | en | |
CRYPTO_SECRET | Secret for password hashing | changeme |
API_KEY | ||
LOCALE_CODE_FOR_SORTING | en | |
GOOGLE_ANALYTICS_TRACKER | Google Analytics tracker code | |
DATABASE SETTINGS | ||
DB_DATABASE | Database name | timeoff-db |
DB_USER | Database username | timeoff-user |
DB_PASSWORD | Database password | changeme |
DB_HOST | Database hostname, IP or container ID | postgres |
DB_DIALECT | Database dialect (sqlite, mysql, postgres) | postgres |
DB_PORT | For external DB access | |
DB_LOGGING | Logging of queries | false |
DB_POOL_MAX | Maximum number of connection in pool | 5 |
DB_POOL_MIN | Minimum number of connection in pool | 0 |
DB_POOL_ACQUIRE | The maximum time, in milliseconds, that pool will try to get connection before throwing error | 60000 |
DB_POOL_IDLE | The maximum time, in milliseconds, that a connection can be idle before being released. | 10000 |
DB_RETRY_MAX | Maximum attempts the app will retry when connecting to the database | 5 |
DB_RETRY_TIMEOUT | Maximum time app attempt when connecting to the database | 60000 |
EMAIL SETTINGS | ||
SMTP_FROM | Sender email | [email protected] |
SMTP_HOST | Host of the smtp server | localhost |
SMTP_PORT | Port of the smtp server | 25 |
SMTP_REQUIRE_TLS | Use STARTTLS | false |
SMTP_AUTH_REQUIRED | Sets whether the SMTP server requires authentication | true |
SMTP_AUTH_USER | Username for the smtp server. Leave blank or comment for no auth | |
SMTP_AUTH_PASS | Password for the smtp server | |
SESSION STORAGE SETTINGS | ||
SESSIONS_SECRET | Secret for the sessions | |
SESSIONS_STORE | Storage for the sessions (sequelize ,redis ) |
sequelize |
SESSIONS_REDIS_HOST | Redis hostname | localhost |
SESSIONS_REDIS_PORT | Redis port | 6379 |
SLACK SETTINGS | ||
SLACK_TOKEN | If set, the Slack token to send message | |
SLACK_BOT_NAME | Name of the bot on Slack | |
SLACK_ICON_URL | Icon of the bot on Slack | |
GOOGLE LOGIN SETTINGS | ||
LOGIN_GOOGLE | Enable the authentication with Google | false |
GOOGLE_AUTH_CLIENTID | Google Auth client ID | |
GOOGLE_AUTH_CLIENTSECRET | Google Auth client secret | |
GOOGLE_AUTH_DOMAINS | Allowed domains |
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.
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
There are some customizations available.
Follow instructions on this page.
There are few options to configure an installation.
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 options_localecode
entry.
By default the value is en
(English). One can override it with other locales such as cs
, fr
, de
etc.
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.
Follow instructions on this page.
Please report any issues or feedback to twitter or Email: pavlo at timeoff.management