gabor-boros / minutes Goto Github PK
View Code? Open in Web Editor NEWSync worklogs between multiple time trackers, invoicing, and bookkeeping software.
Home Page: https://gabor-boros.github.io/minutes/
License: MIT License
Sync worklogs between multiple time trackers, invoicing, and bookkeeping software.
Home Page: https://gabor-boros.github.io/minutes/
License: MIT License
Is your feature request related to a problem? Please describe.
The upload completion is indicated by an exit code 0, but nothing else.
Describe the solution you'd like
Add at least a message after the upload is completed to indicate successful upload.
Describe alternatives you've considered
N/A
Additional context
N/A
Method tempoClient.uploadEntry
has 5 arguments (exceeds 4 allowed). Consider refactoring.
Function getFetcher
has 7 return statements (exceeds 4 allowed).
https://codeclimate.com/github/gabor-boros/minutes/cmd/root.go#issue_616d28cfd586400001000041
Function getFetcher
has 63 lines of code (exceeds 50 allowed). Consider refactoring.
https://codeclimate.com/github/gabor-boros/minutes/cmd/root.go#issue_616d28ced58640000100003f
Describe the bug
When no config file present, an error raised that the config file cannot be located.
Setting the exact config file results in Error: Config File "/tmp/minutes.toml" Not Found in "[]"
To Reproduce
Steps to reproduce the behavior:
.minutes.toml
config fileminutes --version
Expected behavior
Minutes should work without a config file and with specific config locations.
Screenshots
N/A
System information:
minutes --version
): minutes version 0.2.1, commit d343fe3 (2021-11-04T08:43:07)
List of flags used:
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Adding (and maintaining) more sources and targets would be harder over time and "pollutes" the core logic in some way.
Describe the solution you'd like
To have a more flexible and well separated structure, extract the sources and targets into plugins. This way the core logic would be somewhat simpler and sources/targets would be self-contained.
Describe alternatives you've considered
Additional context
Method timewarriorClient.FetchEntries
has a Cognitive Complexity of 30 (exceeds 20 allowed). Consider refactoring.
Is your feature request related to a problem? Please describe.
Toggl Track support would be needed for v0.1.0, but it is not supported yet.
Describe the solution you'd like
Add Toggl Track support (using their updated API domains) as a source. Also, Toggl Track's paid plans support Tasks, so that should be considered too.
Describe alternatives you've considered
N/A
Additional context
Is your feature request related to a problem? Please describe.
minutes
is capable of syncing time between tools, but it cannot act as a source.
Describe the solution you'd like
Implement basic time tracking features and add minutes
as a source plugin.
Describe alternatives you've considered
Additional context
Is your feature request related to a problem? Please describe.
At the moment, filtering for workspaces, projects, and clients is not supported, though it would require low effort to support.
Describe the solution you'd like
When fetching entries from source, allow users to filter for a given users, project, and/or client.
Describe alternatives you've considered
N/A
Additional context
This will probably introduce some assumptions for some sources such as for Tempo.
Method clockifyClient.FetchEntries
has 71 lines of code (exceeds 50 allowed). Consider refactoring.
Is your feature request related to a problem? Please describe.
When uploading to a target, there is no way to override Client and Project parameters.
Describe the solution you'd like
In many cases, the target will have different Client and Project names compared to the source. For example, in the source (like Tempo) the Client is called "MC" (as per the AccountKey
is "MC"), though in the target tool it is called "My Company", hence it will be printed on the invoice. In the case of Project names, the situation is similar.
To eliminate this issue, create an override configuration, that can be configured per target. Why not source? Because sources have nothing to do with upload overrides.
Describe alternatives you've considered
N/A
Additional context
N/A
Is your feature request related to a problem? Please describe.
Zoho Books support would be needed for v0.1.0, but it is not supported yet.
Describe the solution you'd like
Implement Zoho Books as a sync target based on their documentation.
Describe alternatives you've considered
N/A
Additional context
Method timewarriorClient.FetchEntries
has 88 lines of code (exceeds 50 allowed). Consider refactoring.
Function runRootCmd
has 84 lines of code (exceeds 50 allowed). Consider refactoring.
https://codeclimate.com/github/gabor-boros/minutes/cmd/root.go#issue_616d28ced586400001000040
Describe the bug
Using Clockify and the settings below, both Task
and Summary
columns' values are missing if no tag
is set.
To Reproduce
Steps to reproduce the behavior:
minutes
Expected behavior
The Summary
field should have value, regardless of the missing Task
.
Screenshots
N/A
System information:
minutes --version
): minutes version 0.2.3, commit 31e9656 (2021-11-08T07:00:12Z)
List of flags used:
N/A
Additional context
# Source config
source = "clockify"
source-user = "<hidden>"
clockify-url = "https://api.clockify.me"
clockify-api-key = "<hidden>"
clockify-workspace = "<hidden>"
# Target config
target = "tempo"
target-user = "gabor-boros"
tempo-url = "<hidden>"
tempo-username = "gabor-boros"
tempo-password = "<hidden>"
# General config
tags-as-tasks = true
tags-as-tasks-regex = '[A-Z]{2,7}-\d{1,6}'
round-to-closest-minute = true
force-billed-duration = true
date-format = "2006-01-02"
table-column-config = {
summary = {
widthmax = 40
},
end = {
hidden = true
},
project = {
hidden = true
}
}
Function validateFlags
has a Cognitive Complexity of 23 (exceeds 20 allowed). Consider refactoring.
https://codeclimate.com/github/gabor-boros/minutes/cmd/root.go#issue_616de2ea2edb630001000037
Function SendRequest
has 8 return statements (exceeds 4 allowed).
Method clockifyClient.FetchEntries
has 5 return statements (exceeds 4 allowed).
Describe the bug
Some tools (like Tempo / older version of Tempo) may get confused when multiple entries are uploaded for the same task. The reason, in the case of Tempo, is that tries to calculate the remaining estimate for the task automatically, hence the calculation can go wrong and the remaining estimate will be set to a higher number than it should be.
Example:
Task TSK-123 has 3 entries with 1, 2, and 3 hours logged on them. When the entries are uploaded by the corresponding goroutines, Tempo will try to calculate the remaining time for TSK-123 at upload. If the calculation is done simultaneously for 2 out of the 3 entries, the remaining estimate on TSK-123 will not match the reality.
To Reproduce
Expected behavior
Entries for the same task are uploaded after each other, therefore not causing any race conditions on the server-side. A possible solution could be using linked lists for tasks and during upload, one goroutine would be responsible for one chain.
Screenshots
N/A
System information:
minutes --version
): masterList of flags used:
Not relevant
Additional context
N/A
Function getClientOpts
has 5 arguments (exceeds 4 allowed). Consider refactoring.
https://codeclimate.com/github/gabor-boros/minutes/cmd/root.go#issue_616d28ced58640000100003d
Is your feature request related to a problem? Please describe.
The fact of a new release is not shown when the app starts, hence it is harder to be informed about newer versions.
Describe the solution you'd like
Have a built-in mechanism for checking for newer versions at command start. The check should be optional and turned on by default.
Describe alternatives you've considered
N/A
Additional context
N/A
The current post build hook has upx listed, but strip command call could be added too.
Method timewarriorClient.FetchEntries
has 8 return statements (exceeds 4 allowed).
Function SendRequest
has 5 arguments (exceeds 4 allowed). Consider refactoring.
Method togglClient.FetchEntries
has 6 return statements (exceeds 4 allowed).
Is your feature request related to a problem? Please describe.
It is not visible how many users using what version of the app.
Describe the solution you'd like
Implement sending telemetry reports when the app starts. The telemetry should be optional and turned on by default. Also, the first start should warn the user about how to turn it off.
Describe alternatives you've considered
N/A
Additional context
N/A
Method timewarriorClient.FetchEntries
has a Cognitive Complexity of 30 (exceeds 20 allowed). Consider refactoring.
Is your feature request related to a problem? Please describe.
There are some sources that have no support for tags. In the case of these sources, like Harvest, the tags-as-tasks
flag is not considered.
Describe the solution you'd like
Create a new flag and config option to parse tags from the Summary
field of entries. Therefore, combining tags-as-tasks
and the new flag would provide a similar user experience compared to sources that are supporting tags natively.
The new flag should have a pair as well, which would stand for the regex used for parsing.
An example call:
minutes \
--tags-in-summary \
--tags-in-summary-regex '\[(\w+|\s+)+\]' \
--tags-as-tasks \
--tags-as-tasks-regex '[A-Z]{2,7}-\d{1,6}'
Describe alternatives you've considered
As an alternative tags-in-summary
could replace tags-as-tasks
. During the implementation it should be evaluated.
Additional context
N/A
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.