{"id":15712429,"url":"https://github.com/jigarius/toggl2redmine","last_synced_at":"2025-11-10T01:03:43.980Z","repository":{"id":47288174,"uuid":"138763017","full_name":"jigarius/toggl2redmine","owner":"jigarius","description":"Import time from Toggl 2 Redmine.","archived":false,"fork":false,"pushed_at":"2024-06-02T11:46:45.000Z","size":1380,"stargazers_count":26,"open_issues_count":9,"forks_count":6,"subscribers_count":10,"default_branch":"5.x","last_synced_at":"2025-03-28T02:22:01.631Z","etag":null,"topics":["redmine","redmine-plugin","toggl"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jigarius.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-26T16:15:04.000Z","updated_at":"2024-10-16T16:58:37.000Z","dependencies_parsed_at":"2024-05-21T09:26:37.061Z","dependency_job_id":"f3dc9273-4503-43e8-814d-bbf989a13463","html_url":"https://github.com/jigarius/toggl2redmine","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigarius%2Ftoggl2redmine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigarius%2Ftoggl2redmine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigarius%2Ftoggl2redmine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jigarius%2Ftoggl2redmine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jigarius","download_url":"https://codeload.github.com/jigarius/toggl2redmine/tar.gz/refs/heads/5.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248886328,"owners_count":21177644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["redmine","redmine-plugin","toggl"],"created_at":"2024-10-03T21:16:11.591Z","updated_at":"2025-11-10T01:03:43.950Z","avatar_url":"https://github.com/jigarius.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Toggl 2 Redmine\n\n![Redmine Version](https://img.shields.io/badge/Redmine-4.x-green.svg)\n\nThis dandy Redmine plugin imports time entries from Toggl to Redmine using\nREST API service calls for both Toggl and Redmine.\n\nAdditionally, the plugin groups similar Toggl time entries into a single Redmine\nentry. So, even if you start and stop your timer for a particular task multiple\ntimes on Toggl, at the end of day, when you import the time entries to Redmine,\nthey are grouped by the issue ID and the description, which keeps Redmine clean.\n\n## Disclaimer\n\nThis plugin has been made and tested with love and care. However, the makers\nof this plugin are in no way responsible for any damages - direct or indirect -\ncaused by the use of this plugin. In short, use it at your own risk.\n\n## Installation\n\n* Copy the plugin directory into the `plugins` directory of Redmine.\n* Run database migrations.\n  * You can read more about\n[plugin installation](http://www.redmine.org/projects/redmine/wiki/Plugins) on redmine.org\n```bash\n    RAILS_ENV=production bundle exec rake redmine:plugins:migrate\n```\n  * This creates a _Toggl API Token_ field on the user profile.\n* Your database **must** support [transactions](https://en.wikipedia.org/wiki/Database_transaction).\n  * Without transaction support, users might end up importing duplicate\n    time entries.\n\n## Usage\n\nHere's a quick video to get you started.\n\n[![Toggl 2 Redmine Video Tutorial](https://img.youtube.com/vi/FdwWUYllop4/0.jpg)](https://www.youtube.com/watch?v=FdwWUYllop4\u0026t=162)\n\nIf a certain topic is not mentioned in the video, you can find more information on it by reading this document.\n\n### One-time Setup\n\n* Go to the _My Account_ page on Redmine (`/my/account`).\n* Paste in your _Toggl API Token_ and save your profile.\n  * You can find this in your Toggl _profile settings_ page.\n* Update your time zone on Toggl and Redmine - this makes your time reports\n  show correctly according to your timezone.\n  * *Important:* Confirm with your Redmine administrator whether you need to\n    update your timezone. Some organizations use Redmine without configuring\n    timezones to avoid certain timezone-related bugs in Redmine.\n\n### Regular Usage\n\n* Login to Toggl and log your time when you're working.\n* Make sure your task description is in one of the following formats:\n```\n#1919 Feed the bunny wabbit.\nTracker #1919 Feed the bunny wabbit.\n```\n  * You can use the Toggl browser extension to make this easier.\n  * `#1919` is the Redmine issue ID.\n  * `Feed the bunny wabbit` is the comment.\n* When you're done working for the day, visit the _My Timesheet_ page on Redmine\n  and click on the _Toggl_ tab on Redmine (`/toggl2redmine`).\n  * Most of the options on this page have useful tooltips. If you are confused\n    about what something does, simply hover over the item to see if it has an\n    informational tooltip.\n  * You should see the time you've already logged on Redmine (if any) under the\n    heading _Time logged on Redmine_.\n  * You should see the time you've logged on Toggl for the day under the\n    heading _Time logged on Toggl_.\n  * If you want to import entries from some other date, you can change the\n    _Date_ filter and any other options as per your requirements.\n  * If you change any options, make sure you press _Apply_ for them to\n    take effect.\n* Now, in the Toggl report, check the entries you want to import into Redmine.\n  * For each entry, you can modify the comments, activity and time as per your\n    requirements.\n  * You can enter time as in decimal or as `hh:mm`. For example, `1h 30m` can\n    be written as `1.5` or `1:30` in the input boxes.\n* Once you've reviewed everything, click on the _Import to Redmine_ button\n  towards the bottom of the page.\n  * After you import the data, you cannot undo it, so BE CAREFUL.\n* You will see a success (or failure) message next to each item.\n  * Entries which imported successfully will be marked in green.\n  * Entries which failed to import will be marked in red.\n\n### Advanced options\n\n#### Default Activity\n\nYou can specify a _Default activity_ in the options form. This activity will\nbe pre-populated in your Toggl report, making it easier to import data.\n\n#### Toggl Workspace\n\nIf you use multiple workspaces on Toggl, you can choose the workspace from\nwhich you want to import data using the _Toggl Workspace_ field in the options\nform.\n\n#### Date\n\nAs mentioned before, the _Date_ option allows you to import time entries from\npast dates.\n\n#### Duration rounding\n\nYou can use this option to round your time entries as per your requirements.\nLet's say, the option to round to the nearest 10 minutes. There are 3 ways in\nwhich you can round your time entries.\n\n* *Round Up:* 1h 26m becomes 1h 30m.\n* *Round Down:* 1h 26m becomes 1h 20m.\n* *Round Off:* 1h 26m becomes 1h 30m whereas 1h 24m becomes 1h 20m.\n\nTo disable rounding, you can choose the *Don't round* option.\n\n## Development\n\nWant to fiddle with the code? Or just get a demo of the plugin? If you use\nDocker, you can do so with ease.\n\n  * Clone the code repository.\n    ```\n    # Replace x.y with a real branch name, e.g. 5.x\n    git clone --branch x.y git@github.com:jigarius/toggl2redmine.git\n    cd toggl2redmine\n    ```\n  * Prepare docker containers.\n    ```\n    docker compose up\n    # When Redmine is ready, you'll see a message like:\n    # INFO  WEBrick::HTTPServer#start: pid=X port=3000\n    # At this point, press Ctrl+C and run the next command.\n    docker compose start\n    ```\n  * Provision the environment, e.g. create seed data, etc.\n    ```\n    rake provision\n    ```\n\nRun `rake info` to learn how to access your demo installation!\n\n### Testing\n\nThanks to the Docker setup, the plugin code can easily be linted and tested.\n\n* `rake reset RAILS_ENV=test`: Prepare/reset the test environment.\n* `rake lint`: Run Rubocop.\n* `rake test`: Run tests.\n\n### Mailhog\n\nMailhog has been included in the Docker setup so that you can easily reset\nyour password or test Toggl 2 Redmine with more than one user accounts.\n\n# Acknowledgements\n\n* Thanks [Evolving Web](https://evolvingweb.ca/) for funding the initial\n  development of this plugin.\n* Thanks [Jigarius](https://jigarius.com/about) (that's me)\n  for spending many evenings and weekends to make this plugin possible.\n* Thanks [JetBrains](https://jetbrains.com/) for their Open Source License,\n  without which development would have been very difficult.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjigarius%2Ftoggl2redmine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjigarius%2Ftoggl2redmine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjigarius%2Ftoggl2redmine/lists"}