Projects
Projects in Kimai
You are viewing an older version of this documentation page. A newer version is available here.
Projects in Kimai are assigned to customers and are linked to activities, which are then used for time-records.
Creating a project
There is a configuration (can be configured at System > Settings - added with 1.28), which allows to copy teams of the current user to newly created projects. This is mostly useful when teamleads manage their own projects and should have immediate access to them after creation.
Managing projects
Colors
Each project can be assigned its own color, for easier identification in many places throughout Kimai.
If no color is applied, Kimai will fall back to the customers color and finally to the default color.
Start date / end date
Having a project start and end date is optional, but it can help you to limit the project visibility in the “edit timesheet record” screen.
Setting a date for project start or end will place an implicit restriction for project selection when creating a timesheet record. If the date of the record falls before the project start or after the project end the project will not be listed in the dropdown menu.
This behavior is intended to avoid ghost bookings on not yet started or already finished projects. If the booking of records is necessary, the team lead or admin can remove the date restriction in the project settings.
Start and end-date are inclusive, so both dates will be included when filtering any data.
Billable
The Billable
configuration of a Project defines whether new timesheet (in Automatic
mode) will be billable.
Please read the billable documentation to understand the billable
flag.
Budgets
Budgets help you to watch your progress and to stay within contract boundaries.
If the System > Settings configuration Allow overbooking of stored budgets
is not active,
Kimai will prevent that records will be created, which would go beyond your configured budgets.
Currently, the visibility of budgets cannot be limited independently. So if you want to show progress to your users, you cannot show only the time budget (this will be changed in the future).
The permissions budget_team_project
, budget_teamlead_project
and budget_project
are used
to check if the logged-in user can see the budgets.
Budget type
Kimai knows two budget types. The default budget type is lifetime
(which is used if the budget type
is empty),
the other available budget type is monthly
.
Lifetime budget
- uses all records of all times to calculate progress and budget usageMonthly budget
- uses all records of the selected month to calculate progress and budget usage
Limitations
No matter which budget type is used, it does not influence invoice amounts. There is no automatism that will add a monthly budget to your invoice (you have to create expenses or time records for that).
Monthly budgets are used for every month, no matter how many days are recorded. Kimai does not take range limits into account to calculate partial budgets (e.g. project start/end or the first record created for a customer).
Money budget
Money budgets will be used to calculate reports.
For Kimai there is no difference between money and time budgets. If there are multiple people with a different hourly rate working on the same tasks, then money and time budget will differ in their outcome.
Only billable records will be used to calculate the remaining budget.
Time budget
The time budget should be entered in the format hh:mm
or decimal hh.m
.
Time budgets will be used to calculate reports.
If you are using money budget and want to show progress to your users, it is a good idea to calculate the hourly rate by using money budget / average hourly rate
.
Only billable records will be used to calculate the remaining budget.
Rates
You can configure prices on different levels in Kimai. It starts from the user hourly prices and goes from Customers to Projects and Activities. Please read the price documentation to find out more how rates are calculated.
On the detail page of the selected item (which you find by clicking a row in the listing table or select Show
from the dropdown menu)
you find the Hourly price
section. By default, you see the message No prices have been configured
.
You configure new price rules by clicking the +
button in the upper-right of the Prices
table.
A user needs the two permissions to be able to see and edit prices:
- one of:
view_project
,view_team_project
,view_teamlead_project
- one of:
edit_project
,edit_team_project
,edit_teamlead_project
Edit price screen
The edit price
screen has four settings:
User
- the user this price applies to - if no user is chosen it applies to everyone without explicit personal rulePrice
- the price to be charged (per hour)Internal price
- the internal price (or “costs” if you will) to apply (per hour); if this is not specified, the normal price is used for calculation.Fixed price
- if this is ticked, each time record gets the configuredPrice
value applied, regardless of the record duration
Catch-all price
If no user was chosen, this rule applies to every user, except those who have a explicit User specific price
configured.
User specific price
Every rule the defines a user is a user specific price
and those always win over Catch-all price
configurations.
Pricing example
The following example contains two price rules:
The first one is a Catch-all price
that applies to everyone who is recording times for this project.
So every hour counts with 50 € towards the budget of this project and has internal costs of 25 €.
Every recorded hour has a gross margin of 25 € / hour.
The second rule applies to the user DY
who (as only user) has a User specific price
for this project.
Even though she has a higher internal cost of 45 € / hour, her work earns 85 € / hour, which leads to a gross margin of 40 € / hour.
Visibility
By toggling the visibility on a project, you:
- hide the project from all drop-downs
- hide the project from the default list in the project administration
- hide the activities for this project from all drop-downs, regardless of their visibility state
- hide the activities for this project from the default list in the activities administration
Please note:
- all currently linked objects will still show the project in the dropdown as pre-selected option
- you can still change the project on timesheet records and activities, which used it before
- you cannot create new activities for this project
- you cannot create new timesheet records for this project
- you can still access the hidden entries by changing the visibility filter on the toolbars
The visibility filter in the toolbar has three state:
- Visible: Yes (all projects that are “really” visible, meaning: the project and linked customer are visible)
- Visible: No (all projects that are exclusively invisible by their own visibility state)
- Visible “empty” (all projects: not filtering on their own or the customers visibility)
Filter and search
The search supports filtering by the fields:
customer
visibility
Besides these filters, you can query for a free search term, which will be searched in the fields:
name
comment
orderNumber
Additionally, you can filter for custom fields by using a search phrase like location:homeoffice
.
This would find all entries with the custom field location
matching the term homeoffice
.
The search terms will be found within the full value, so searching for office
would find:
I love working in my office
Office
This office is beautiful
Our offices are very noisy
Attention: checkboxes have the values 0
(not checked) and 1
(checked).
You can mix the search term and use multiple meta-field queries:
location:homeoffice hello
- find all entries matching the search termhello
with the custom fieldlocation
matching the termhomeoffice
location:homeoffice contract:fulltime
- find all entries with the custom field combination:location
matchinghomeoffice
andcontract
matchingfulltime
expired:0
finds all items whoseexpired
checkbox isoff
There are also special operators, which can be used in conjunction with custom fields (since Kimai 1.19.1):
- The
location:
) will find all entries whose value in thelocation
field is either empty or not existing - The
~
search term (e.g.location:~
) will find all entries that are missing the custom field (created before the field was created) - The
*
search term (e.g.location:*
) will find all entries that have any value in thelocation
field (basically the opposite of~
)