Code Monkey home page Code Monkey logo

paid-plugins'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, 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.

paid-plugins's People

Contributors

kevinpapst avatar

Stargazers

 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

Forkers

bigvictorio

paid-plugins's Issues

Evaluation hours per employee via kiosk terminal

It would be great if employees could view their times at the terminal or via the barcode page.

Checkin with token -> 10 seconds display appears (as usual), but additionally a button "Show times" and you can call up your personal reports (week, month etc. reports as in the web interface). We hang out touchscreens, so control via buttons would be possible. At the top right or similar, there should always be a flashing red button "Logout" in this menu, so that you can log out.


Original:

Toll wäre eine Möglichkeit für die Arbeitnehmer, am Terminal bzw. über die Barcode-Seite ihre Zeiten einzusehen.

Checkin mit Token -> 10 Sekunden Anzeige erscheint (wie gehabt) allerdings zusätzlich ein Button "Zeiten anzeigen" und man kann seine persönlichen Reports aufrufen (woche, Monat etc. Reports wie in Weboberfläche). Wir hängen Touchscreens aus, daher wäre die Steuerung über Buttons möglich. Oben rechts. o.Ä. sollte in dieserm Menü immer ein blinkender, roter Button sein "Abmelden", damit man sich auslogt.

custom field in kimai2 and mobile

Hi,
I may be interested in the custom field plugin but...

Which version is compatible. I see the v2 is not (even if I don't understand what is the v2 - I have the version 1.30.1 from git)
On the Kimai mobile can we "see" these custom fields and if yes which version - BTW the Kimai mobile shows all the activities even without any client/project selected
Thanks.
PS: Bravo for the project and best wishes for this new year.

New field type for using Kimai variables in meta fields

In the Meta Projects area, allow the definition of a data field in which variables from Kimai can be used. Also for mathematical calculations regarding the budgets, sum of working hours and numerous META fields in this section.

Expenses in Reports

Would like to see Expenses in Report view.

  • For admin: Tabular view with the total of all expenses for each individual user, if possible showing total of all types of expenses
  • For users: tabular annual view of expenses, monthly seperated, showing all types

Referecnce should be for both views "Settings > Financial year"

Tasks - Datasheet: search and assign

Hi there!
My colleagues asked me if there was a way to assign a specific datasheet entry to a task because they sometimes uses the Kemai app instead of the webapp and they wanted to link a measurement to the task they are working on.
Is it possible to develop?

BR,

Giorgio

Calendar View - Team Task assignment and visibility

In calendar view, it does not appear possible to view team tasks, only tasks assigned to me. Desired functionality would be as follows:

  1. Teamlead can view the list of all tasks assigned to his team. The tasks already assigned and scheduled are displayed on the calendar, and the tasks not assigned show up on the left side.
  2. Teamlead can drag and drop any team assignment to the calendar. If the task is assigned to the team (and not a user), the software prompts the user to assign a user.

E-Mail Notifications

  • automated notifications to configured e-mail adresses of users, which get a task assigned would improve quality of life.

V2 Expenses in Reports

Filtering in Expenses works good, but there are no totals: weekly, monthly and yearly like in the dashboard.

Describe the solution you'd like:
Add in the Symbol Menu with the stacked three sheets Expenses totals

image

Close / Export expense with export push button

When I am exporting time sheets, it would also be nice to be able to close the expenses with the push button on the top right corner of the Export page. I use this feature a lot to close out time sheets so it would be nice to have inline with the expenses as well. Currently as is, I have to go into each expense and switch to exported individually. Maybe this could be a optional selection that could be included in the push button.

Tasks - can there be a from time

Could you help create some task where the from time could be assigned in advance or it could be a said duration before the to time which is configurable (also having a default value). The tasks need not start exactly from the time time, but are an indicator that they should start by them. If they do not start by then they are to be flagged as amber or red.

Also can one task be linked to another task indicating the second is dependent on the first and if the first breaches the to time and this time is greater than the from start time for the second task them its a breach and tuns the second task also into red. Chaining or linking could be a powerful feature. If chaining of tasks is not set then they are independent tasks capable of being executed in parallel or sequentially as required.

Also can there be a setting available like a set amount of time configurable (and a default value if to time is set) by when if any task has breached the threshold the status turns to amber indicating if action is not taken then the task would fall into jeopardy of not being able to meet the final deadline.

Money input field not matching currency icon

When using the money input field, the icon does not seems to match the global currency. I could not seem to find a way to change this directly. It is a very small thing, but thought I would share awareness.

image

tasks in the calender view

It would be a great feature to display scheduled tasks in the calendar view. In this way, a better overview of the planned workload is possible.

Task and Subtasks linked to the master task

In a task i define the to date. And for one task I define multiiple subtasks. The end data for all of the subtasks is the to date of the master or main task. All sub tasks can run in parallel, but cant be done by the same user hence ideally each sub task would be an independent task but one that has a linking to the main task and all time against all of the sub-tasks get accumulated to the main task.

Pausing of the main task puts on hold all of the subtasks, but pausing of one of the subtask does not put the main one on hold.

It would be like just referencing
main
child 1
child 2
child 3
child 4

or even more powerful

master
child1
child1.1
child1.2
child2
child3
child3.1
child3.2
child3.2.1
child4

These may be difficult but linking one record to a master and so on is what makes this a chain or tasks. A task creation where you can + add master then if you need add child and keep going. Finally you have all these pending tasks which ideally are individual tasks but can be traced back using the linking.

Custom translations not in export files

Hi!

Great plugin, exactly what we need.

I have the following issue: the translations are not considered when generating PDF exports. There the standard translations (in my case German) are used.

Thx M

add meta-fields to post request

At the moment meta-fields have to be patched one by one after creating a timesheet entry via the api.

I'd be better if the meta-fields could be send with the timesheet creation post request.

Json example:

{
   "begin":"2020-07-02T11:07:27",
   "end":"2020-07-02T11:07:27",
   "duration":"string",
   "project":0,
   "activity":0,
   "description":"string",
   "tags":"string",
   "fixedRate":0,
   "hourlyRate":0,
   "description":null,
   "metaFields":[
      {
         "name":"key1",
         "value":"value1"
      },
      {
         "name":"key2",
         "value":"value2"
      },
      {
         "name":"key3",
         "value":"value3"
      }
   ]
}

New field type for selecting a user of the Kimai database

I'd like to ask for a new field that shows a drop-down with the currently registered users.
The idea is to be able to assign a user e.g. to a project, activity or customer.

I understand this could be sort of problematic to rely on entities that could be deleted anytime, so I suggest the selected user name in the drop-down list is saved as clear text only for this requested field type.
An alternative is to build a custom field of drop-down type and write down a list of registered users, but I would prefer just to be able to select an existing user of the database without the need to maintain another "user list".

Add expense with two ore more categories

Is your feature request related to a problem? Please describe.
We use the expenses to record attendance fees. For example, if I have a meeting tonight, I make an entry for 1 attendance fee. In addition, I make another entry for travel expenses. I have saved two types for this. Once the attendance fee, which I enter with the number 1, and once the travel expenses, which I enter with the number of kilometers. This means that I have to enter two entries for each session.

Describe the solution you'd like
It would be a big simplification if I only had to enter one entry per session where the attendance fee can be selected and the travel expenses can also be recorded.

Describe alternatives you've considered
I tried to do this with the add-on module custom-fields, but I cannot use it to enter additional amounts in the expenses that count as total.

Screenshot
It would be great if I could add several categories with one + icon.
image

Dashboard as a plugin - To show the count of tasks created, unassigned, pending, spillover grouped by customer, project activity, custom filelds

Tasks are linked to the customer, project and activity. What would be great would be a dashboard which shows count of all tasks created, assigned, pending in a dashboard view which categorises by customer, project and activity and by any custom field set by the user.

Also if the dasboard so created gives the count as links and they can show all tasks sorted in the order of the completion time this would be a killer feature. In addition to this tasks which have spilled over beyond the set completing time shown in some colour and easily identifiable from with the list and the user currently working on them and the time spent by each user would be fabulous. Something that could be a dashboard plugin which all users might be looking for.

This bashboard can be replicated per team, and depending on the team only those tasks linked with the team and users in them their count are shown.

Restrict custom project fields to multiple Customers

Hello everyone,

we request a change related to the limitation field within the creation of custom fields for a project.

Is it possible to change the limitation from a single customer to a multiple choice field? Would make us life much easier during the analysis of our projects.

Rationale:

in our current design we are requied to set a specific date field for projects for a couple of customers. This custom field is currently required to be defined for each customer seperatley. Is it possible to limit a single custom field definition for multiple customers that those are identical within exports and not alligned within different columns?

Best regards.

More flexibility in the barcode checkin process

Hi,

as seen in kevinpapst/KioskBundle#10 and kevinpapst/KioskBundle#20, it would be great to have some more flexibility for the login process via barcode.

I have two usecases for this:

First, i would like to just let users login (without logout!). The logout should happen automatically (read: the duration should be set on login and determine the end date of the timesheet). In general, this could be reached by defining a default duration in the setup of the kiosk plugin.

Second, i would like to let the user choose the activity to participate in after the barcode check-in. This would require a change in the kiosk setup dialogue to allow only selecting a project without activity and in the barcode ui to select the activity after scanning the barcode.

This led me to think about the barcode login more generally. To create a new timesheet, you need some mandatory fields:

  • start date and -time
  • end date and -time or duration
  • project
  • activity

An approach would be to encode as many fields as needed in the barcode and leave those blank, that should be selected by the user (depending on users permissions in projects/activities). For my usecases, this would make it possible to define a default project and a default duration, but lets the user select which activity of the project he/she wants to participate in in a second step.

This would make the use of the barcode scanner really flexible, but requires a strict rights management to prevent users from logging into activities they're not permitted to. Additionally, i'm afraid it would require more information in the barcode, perhaps by using qrcodes as mentioned in kevinpapst/KioskBundle#1? :-)

Make custom fields sortable

It would be great if custom fields could be sorted the same way as the existing fields provided by Kimai.
It would be even greater, if custom fields could be included within text search or you could define custom fields to be shown in the search mask as filter options.

Heading and dividing lines

For grouping it would be helpful if dividing lines with an integrated heading could be defined at any point.
------------------ "Heading" ----------------------------- -----------------

Edit Billable Permissions

Currently a user is able to change whether an expense is billable even if they do not have edit permissions on their timesheet. This could be good in some cases, but it might be nice to be able to choose whether or not a role can edit that option or not.

Task Management With 2.0.0 Alpha

The latest Task Management release seems to be still using PHP 7, has it been migrated to PHP 8 yet? I see that it's working in the 2.0.0 demo instance and was wondering if that ported version has been uploaded yet

Translation plugin: add possibility to translate user defined content

This can be moved to the translation plugin (to which I have no access so far).

Is your feature request related to a problem? Please describe.
No.

Describe the solution you'd like
I'd like to ask for a feature to be able to translate user defined content like meta-field names, meta-field descriptions and possibly even meta-field values e.g. in drop-downs.
If Kimai is used in multiple languages by the users, it would be very helpful to be able to translate those so they are shown in the selected language. Also, if you want to add any of the custom meta-fields in invoice templates, you could have them translated in the languages used.

Describe alternatives you've considered
I don't think there is any alternative.

Screenshot
None.

Expenses invoice/receipt - upload files

Hi @kevinpapst ,

in our case for some customers we need to attach invoices for the expenses.
Of course I'm not suggesting to attach any file, but I think it would be very nice if there was a field where to save an url/path to the folder and filename where the invoice pdf scan in actually stored.

Do you think that would be feasible?

Ciao,
A.

Accessing custom fields for report

I need to create a custom report page that will show all logged hours for a month for every customer->project->activity. For this I went and copied&modified the prepareMonthlyData function inside the ReportingController.php:

    private function prepareMonthlyDataForAll(array $allUsersData): array
    {
        $days = [];

        foreach ($allUsersData as $userDays) {
            foreach($userDays as $day){
                $days[$day->getDay()->format('Ymd')] = ['date' => $day->getDay(), 'duration' => 0];
            }
        }

        $rows = [];

        /** @var Day $day */
        foreach ($allUsersData as $userDays) {
            foreach($userDays as $day) {
                $dayId = $day->getDay()->format('Ymd');
                foreach ($day->getDetails() as $id => $detail) {

                    echo "<script>console.log(".json_encode( $detail ).");</script>";

                    // Set customer data
                    $customerId = $detail['project']->getCustomer()->getId();
                    if (!\array_key_exists($customerId, $rows)) {
                        $rows[$customerId] = [
                            'customer' => $detail['project']->getCustomer(),
                            'duration' => 0,
                            'duration_percent' => 0,
                            'travel' => 0,
                            'travel_percent' => 0,
                            'days' => $days,
                            'projects' => [],
                        ];
                    }
    
                    $rows[$customerId]['duration'] += $detail['duration'];
                    $rows[$customerId]['days'][$dayId]['duration'] += $detail['duration'];

                    // Set project data
                    $projectId = $detail['project']->getId();
                    if (!\array_key_exists($projectId, $rows[$customerId]['projects'])) {
                        $rows[$customerId]['projects'][$projectId] = [
                            'project' => $detail['project'],
                            'duration' => 0,
                            'duration_percent' => 0,
                            'travel' => 0,
                            'travel_percent' => 0,
                            'days' => $days,
                            'activities' => [],
                        ];
                    }

                    $rows[$customerId]['projects'][$projectId]['duration'] += $detail['duration'];
                    $rows[$customerId]['projects'][$projectId]['days'][$dayId]['duration'] += $detail['duration'];

                    // Set activity data
                    $activityId = $detail['activity']->getId();
                    if (!\array_key_exists($activityId, $rows[$customerId]['projects'][$projectId]['activities'])) {
                        $rows[$customerId]['projects'][$projectId]['activities'][$activityId] = [
                            'activity' => $detail['activity'],
                            'duration' => 0,
                            'travel' => 0,
                            'days' => $days,
                        ];
                    }
    
                    $rows[$customerId]['projects'][$projectId]['activities'][$activityId]['duration'] += $detail['duration'];
                    $rows[$customerId]['projects'][$projectId]['activities'][$activityId]['days'][$dayId]['duration'] += $detail['duration'];
                }
            }
        }

        $currentUser = $this->getUser();

        $query = new CustomerQuery();
        $query->setCurrentUser($currentUser);
        $allCustomers = $this->customerRepository->getCustomersForQuery($query);

        $totalTime = 0;
        foreach($allCustomers as $customer){
            $stats = $this->customerRepository->getCustomerStatistics($customer);
            $totalTime += $stats->getRecordDuration();
        }

        $totalTravel = 1;

        // echo "<script>console.log(".json_encode( $totalTime ).");</script>";

        foreach($rows as $customer){
            $customerId = $customer['customer']->getId();
            $rows[$customerId]['duration_percent']  = number_format(($customer['duration'] / $totalTime) * 100, 2) ;
            $rows[$customerId]['travel_percent']    = number_format(($customer['travel'] / $totalTravel) * 100, 2) ;

            foreach($customer['projects'] as $project){
                $projectId = $project['project']->getId();
                $rows[$customerId]['projects'][$projectId]['duration_percent']  = number_format(($project['duration'] / $totalTime) * 100, 2) ;
                $rows[$customerId]['projects'][$projectId]['travel_percent']    = number_format(($project['travel'] / $totalTravel) * 100, 2) ;
            }
        }
        
        return $rows;
    }

I also created a corresponding twig template and everything works as expected. Now my problem is, that besides the hours, I also want to display a custom field for travel length. I'm not familiar with PHP so I have trouble understanding where and how to access those fields. Since the timesheet records are accessed via a query I expected the custom fields to be included in the query results or that I could access the custom fields the same way but I wasn't able to find a way of doing that.

Could you please point me in the right direction?

add time as input

currently it's only possible to add datetime values, but only the time (like in Begin and End) is not possible.

grafik

Integrate Expenses fields in input form of time bookings

The Expenses module is not really linked to the time and attendance input mask.
Idea: If the Expenses module is available in Kimai, automatically use another input mask in which the two relevant input fields for Expenses are also available and can be optionally filled.
This would greatly simplify the workflow for the user.

Include audit trail in timesheets

Recently I had to track down where a timesheet entry was coming from. I knew the audit trail plugin had this information somewhere but I couldn't find the corresponding audit trail entry.

In the end I could only find it by searching in the database for the timesheet id and look up the time of creation with that info in the audit trail plugin which I could filter then to find it in the audit trail web interface.

A simple connection somehow should be established to make it usable I think, also maybe number of changes or something showen in the timesheet.

Thank you very much for your development, it has been a really good tool so far!

Relation between Fields

Would be nice if its possible to make relationships between fields.

eg. Outside Meeting yes/no -> visibilty and need of duration of voyage and trip distance

Deutsch:
Feldabhängigkeiten, Mitarbeiter sagt war Einsatz war vor Ort- > dann muss er angeben die Reisezeit und Entfernung dahin. evtl sogar mit möglichkeit zu sagen Reisekosten durch Auftraggeber bezahlt

Rate multiplier for specific Meta field

It would be useful to have rate multiplier for specific meta fileds, just like for week days.
I have a meta field for in presence/remote work. The hourly rate is different, but I cannot make a distinction.

Sum Invoice items by task

It would be helpful, to sum Invoice items by task, similiar to the ExpensesBundle (ExpensesBundle/Invoice/Calculator).

Expected fields: startdate, task title, description of every timesheet item, duration (sum), total price

Weitere Spalte(n) "Kunde" und/oder "Projekt" in Änderungshistorie

Es wäre toll, wenn man die zusätzliche(n) Spalte(n) "Kunde" und/oder "Projekt" in der Änderungshistorie einblenden kann, und auch nach diesen Spalten filtern kann. Derzeit ist es unübersichtlich, eine länger zurückliegende Änderung eines Timesheet-Eintrags bei einem bestimmen Kunden aufzufinden bzw. zu verifizieren:
Spalten Audit Trail

Expand ACL of Metas with writable option

The new ACL for MetaFields for visibility for certain roles is great.
It would be optimal if the right to write could be granted not dependend on the global rights for the window.
In this special case I would like to have some writable Metas in the first part of the project overview for ROLE_USER. Now the metas can be seen by user but not edited.

Optical solution:
Next to the definition field Access right (role) insert a check button for write right.

external data source for custom items

Ability to load custom items from external data source (preferably a JSON endpoint) would be great. Or at least allow the selection of a custom data separator.

Show all team tasks

There should be a new widget for teamleads, which shows all assigned tasks of team member.

Capture GEO position

Add new field type to capture the geo position.

Two flavors:

  • one with no option to edit the detected position
  • one that is changeable by the user?

What do we do with this data?
Simple longitude and latitude data is not human friendly.

Expenses in Dashboard

There is no integration of Expenses in the Dashboard.
Users are missing overviews even from the categories of Expenses in the Dashboard.

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.