GithubHelp home page GithubHelp logo

kimai / kimai Goto Github PK

View Code? Open in Web Editor NEW
2.9K 54.0 517.0 45.83 MB

Kimai is a web-based multi-user time-tracking application. Works great for everyone: freelancers, companies, organizations - everyone can track their times, generate reports, create invoices and do so much more. SaaS version available at https://www.kimai.cloud

Home Page: https://www.kimai.org

License: GNU Affero General Public License v3.0

PHP 84.76% CSS 0.53% JavaScript 3.54% SCSS 0.53% Twig 10.45% Shell 0.10% Dockerfile 0.09%
timetracker timetracking doctrine twig adminlte kimai symfony-application time-tracker time-tracking invoice

kimai's Introduction

Kimai logo

CI Status Code Coverage Latest stable version License Mastodon

Kimai - time-tracker

Kimai is a professional grade time-tracking application, free and open-source. It handles use-cases of freelancers as well as companies with dozens or hundreds of users. Kimai was build to track your project times and ships with many advanced features, including but not limited to:

JSON API, invoicing, data exports, multi-timer and punch-in punch-out mode, tagging, multi-user - multi-timezones - multi-language (over 30 translations existing!), authentication via SAML/LDAP/Database, two-factor authentication (2FA) with TOTP, customizable role and team permissions, responsive design, user/customer/project specific rates, advanced search & filtering, money and time budgets, advanced reporting, support for plugins and so much more.

Versions

There are two versions of Kimai existing:

  • Version 2 — the current stable release (PHP 8.1+)
  • Version 1 — EOL since mid of 2023 (PHP 7.4)

Do NOT use Version 1, it won't get any more updates!

Links

Requirements

  • PHP 8.1.3 minimum
  • MariaDB or MySQL
  • A webserver and subdomain (subdirectory is not supported)
  • PHP extensions: gd, intl, json, mbstring, pdo, tokenizer, xml, xsl, zip

Support for PHP 8.2 and 8.3.

Installation

There are also documentations for:

And if you don't want to host Kimai, you can use the Cloud version of it.

Updating Kimai

Plugins

Roadmap and releases

You can see a rough development roadmap in the Milestones sections. It is open for changes and input from the community, your ideas and questions are welcome.

Release versions will be created on a regular basis, every couple of weeks latest. Every code change, whether it's a new feature or a bugfix, will be done on the main branch.

Contributing

You want to contribute to this repository? This is so great! The best way to start is to open a new issue for bugs or feature requests or a discussion for questions, support and such.

In case you want to contribute, but you wouldn't know how, here are some suggestions:

  • Spread the word: Please [write a testimonial for our Wall of love]{https://love.kimai.org}, vote for Kimai on any software platform, you can toot or tweet about it, share it on LinkedIn, Reddit and any other social media platform!
  • Answer questions: You know the answer to another user's problem? Share your knowledge.
  • Something can be done better? An essential feature is missing? Create a feature request.
  • Report bugs makes Kimai better for everyone.
  • You don't have to be programmer, the documentation and translation could always use some attention.
  • Sponsor the project: free software costs money to create!

There is one simple rule in our "Code of conduct": Don't be an ass!

Credits

Kimai is based on modern technologies and frameworks such as PHP, Symfony and Doctrine, Bootstrap and Tabler, and countless others.

kimai's People

Contributors

abrain avatar adrianrudnik avatar bibz87 avatar buoncri avatar cayacdev avatar dabenzel avatar honzakopecky avatar infeeeee avatar ixfail avatar j0hannesr0th avatar jeau avatar jelle-s avatar kevinpapst avatar kubof avatar lduer avatar liaraalis avatar milotype avatar oscariremma avatar pfrenssen avatar ronaldderksen avatar sabbelasichon avatar sanjitlpatel avatar scolson avatar simone-gasparini avatar simonschaufi avatar tobybatch avatar trentks avatar weblate avatar willianveiga avatar yayitazale avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kimai's Issues

Do not show hidden Activities

  • hide in recent activities navbar
  • hide in "create timesheet" form
  • hide in "edit timesheet" form, unless it is currently assigned

Change to users language after login

The original idea was to respect user language after login, which could result in a redirect to another language after seeing the login form.

I decided to remove the language setting completely from the users profile instead.
Kimai uses the http header and URL routing to choose the display language.
I don't want to work around the RedirectToPreferredLocaleListener which is working perfectly with the browsers language setting.

If a user still wants to switch the language its possible through the control sidebar. And to go even a step further: browser support bookmarks ^^ and the user can add /de or /en to his bookmarks.

Add Timesheet Voter

  • add a Voter class for Timesheet entries
  • use the Voter on the existing Timesheet Controller
  • use the Voter on the existing Admin Timesheet Controller

Add configurable system configuration

  • database to store system specific key-value configurations
  • settings need a name, value, type
  • defaults will be stored in config model
  • fetch settings with an event, so modules can extend them
  • admin section to change the settings
  • add setting: color scheme
  • add setting: migrate from twig.globals.kimai_context

Edit users role

  • add select box to user profile
  • make sure only admins can change the users role

Delete Project

  • add function to fetch project statistics
  • use is_granted('delete', entry) twig function for delete action button
  • show warning (including the statistics) form if a project owns time-records
  • only admin can delete projects

Add basic security Voter

  • for Customer and usage in Admin\CustomerController
  • for Project and usage in Admin\ProjectController
  • for Activity and usage in Admin\ActivityController

Translate LanguageType choices

Currently the choices for the LanguageType form type are using the \Locale::getDefault().
Use the current locale instead.

Using the %locale% as argument from services.yaml doesn't work, as it contains the default locale.

Developer improvements

  • add basic phpcs support
  • cleanup current phpcs problems
  • add basic phpunit support
  • add command for "kimai:install" which performs all the basic boostrapping for a fresh install
  • add command for "kimai:dev:reset" which cleans the cache, resets the database and loads the fixtures

Delete Customer

  • add function to fetch statistics by customer 
  • use is_granted('delete', entry) twig function for delete action button
  • show warning (including the customer statistics) form if a customer owns time-records
  • only admins can delete projects

Delete activity

  • use is_granted('delete', entry) twig function to check if delete is possible
  • add function to fetch activity statistics
  • show warning before before deleting if any time-record is attached (including activity statistics)
  • only admin can delete activity

Support app.json for heroku deployments

Example:

{
    "name": "Kimai v2",
    "description": "The reloaded Kimai Time-tracking application",
    "keywords": [
        "php",
        "kimai"
    ],
    "website": "https://www.kimai.org.com/",
    "repository": "https://github.com/kevinpapst/kimai2",
    "logo": "",
    "success_url": "/",
    "scripts": {
        "postdeploy": "php bin/console doctrine:schema:create && php bin/console doctrine:fixtures:load -n"
    },
    "env": {
        "SYMFONY_ENV": "prod",
        "SYMFONY_SECRET": {
            "description": "Extra entropy for %kernel.secret%; used for CSRF tokens, cookies and signed URLs.",
            "generator": "secret"
        }
    },
    "addons": [
        "heroku-postgresql"
    ],
    "image": "heroku/php"
}

For more information see:

Add user settings

  • add database to store user specific key-value settings
  • defaults will be stored in model
  • fetch by using an event, to allow bundles to add settings
  • the form to render uses the dynamically configured UserPreferences for rendering and validation
  • only users should be able to change these settings, so add a tab to the control_sidebar for handling these settings

Add remember me login

  • activate checkbox in login screen

  • support remember me functionality (see symfony docu)

  • menu items are (depending on the users role) visible, but opening the admin screens leads to log-in

  • own timesheet entries can be worked on, except for deleting

  • Check token_provider (default value: null)

Defines the service id of a token provider to use. By default, tokens are stored in a cookie. For example, you might want to store the token in a database, to not have a (hashed) version of the password in a cookie. The DoctrineBridge comes with a Symfony\Bridge\Doctrine\Security\RememberMe\DoctrineTokenProvider that you can use.

Add console command to create user

  • Add a new console command to create a user with the most important fields:
  • username
  • email
  • password
  • language (optional)
  • role (optional)
  • validate user before inserting

Reason for this feature request:
This is requested, so people can install Kimai properly, as long as there is no installer

Add preferences sidebar

  • enable configurable sidebar via twig config

Possible contents:

  • language switcher
  • a tab pane for Kimai announcements (currently static)

Add installation docu

  • document the kimai:install command
  • document the kimai:dev:reset command
  • document development install
  • document production install
     

Show revenue only for Admin (wrong currency shown)

  • Currently the Dashboard statistic widget uses the money filter and threfore always displays the default currency
  • The user profile shows two money fields

Intermediate solution:

  • Display all values without currency
  • All widgets/values should only be visible for ROLE_ADMIN

Delete other users timesheet entries

Delete timesheet entries for other users:

  • use is_granted('delete', entry) twig function to check if delete is possible
  • add action to admin controller
  • admin can delete all user entries
  • teamleads can stop all user entries

Delete timesheet entries

Delete own timesheet entries:

  • use is_granted('delete', entry) twig function to check if delete is possible
  • add action to users timesheet controller
  • only user can delete their own entries
  • admin can delete other user entries

Roles should become a real table

  • change the roles table to be a real linked table from the User entity
  • adjust entity methods
  • adjust findByQuery method
  • add default join to always fetch roles

Add role SUPER_ADMIN

  • add a user with the role ROLE_SUPER_ADMIN to LoadFixtures
  • The new role is the only one to access the admin controller "edit users"

The normal ADMIN role should be used to configure Customers, Projects and Actvities.

Hide inactive delete user button

As deleting a user is an expensive task (also unclear what should happen with his time logs) and not yet implemented, hide the delete user button for now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.