Customers in Kimai are used to manage project and activities, which are then used for time-records.
It is best-practice to have a customer for your own company, to track times for administrative and other internal work.
Default values for new customers can be configured at System > Settings.
Each customer can be assigned its own color, for easier identification in timesheet listing.
If a project or an activity linked to the customer does not have its own color, the customers color will be used.
The default color code is #d2d6de
.
The customer currency is used when displaying the recorded entries in the timesheet.
It is also used for printing invoices, which is the reason while the invoice screen needs one applied customer filter before any data will be shown.
The Billable
configuration of a Customer defines whether new timesheet (in Automatic
mode) will be billable.
Please read the billable documentation to understand the billable
flag.
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_customer
, budget_teamlead_customer
and budget_customer
are used
to check if the logged-in user can see the budgets.
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 usageLimitations
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 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.
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.
You can configure rates on different levels in Kimai. It starts from the user hourly rate and goes from Customers to Projects and Activities. Please read the rates 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 rate
section. By default, you see the message No hourly rates have yet been configured
.
You configure new rate rules by clicking the +
button in the upper-right of the Hourly rates
table.
A user needs the two permissions to be able to see and edit rates:
view_customer
, view_team_customer
, view_teamlead_customer
edit_customer
, edit_team_customer
, edit_teamlead_customer
The edit rate
screen has four settings:
User
- the user this rate applies to - if no user is chosen it applies to everyone without explicit personal ruleRate
- the rate to be charged (per hour)Internal rate
- the internal rate (or “costs” if you will) to apply (per hour); if this is not specified, the normal rate is used for calculation.Fixed rate
- if this is ticked, each time record gets the configured Rate
value applied, regardless of the record durationCatch-all rate
If no user was chosen, this rule applies to every user, except those who have a explicit User specific rate
configured.
User specific rate
Every rule the defines a user is a user specific rate
and those always win over Catch-all rate
configurations.
The following example contains two rate rules:
The first one is a Catch-all rate
that applies to everyone who is recording times for this customer.
So every hour counts with 50 € towards the budget of this customer and has internal costs of 25 €.
Every recorded hour has a gross margin of 25 € / hour.
The second rule applies to the user Susan Super
who (as only user) has a User specific rate
for this customer.
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.
By toggling the visibility on a customer, you:
Please note:
The visibility filter in the toolbar has three state:
The search supports filtering by the fields:
visibility
Besides these filters, you can query for a free search term, which will be searched in the fields:
name
comment
number
contact
email
phone
address
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 term hello
with the custom field location
matching the term homeoffice
location:homeoffice contract:fulltime
- find all entries with the custom field combination: location
matching homeoffice
and contract
matching fulltime
expired:0
finds all items whose expired
checkbox is off
There are also special operators, which can be used in conjunction with custom fields (since Kimai 1.19.1):
empty string (e.g. location:
) will find all entries whose value in the location
field is either empty or not existing~
search term (e.g. location:~
) will find all entries that are missing the custom field (created before the field was created)*
search term (e.g. location:*
) will find all entries that have any value in the location
field (basically the opposite of ~
)