Giter Site home page Giter Site logo

pond / trackrecord Goto Github PK

View Code? Open in Web Editor NEW
12.0 12.0 6.0 11.85 MB

TrackRecord is a Ruby On Rails application which lets users enter and analyse timesheets, based around a framework of customers, projects and tasks. It may be useful for sole traders and small businesses.

License: BSD 3-Clause "New" or "Revised" License

Ruby 15.01% JavaScript 78.38% CSS 3.16% HTML 3.46%

trackrecord's People

Contributors

pond avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

trackrecord's Issues

Make sure report's name is shown on generated report page

Minor feature request: when you generate a report, it'd be nice it it says on the report page what the name is (notably in the case where you create a report rather than Track Record auto-generating one for you).

I ran into this where I opened a few of my saved reports in tabs and later couldn't remember which one was which!

Change saved report frequency from integer to named key

A long-standing internal limitation of the report mechanism has been the use of an integer index into the report module's FREQUENCY array to indicate column duration (monthly report, daily, annual etc.) - this is clearly fragile. Change over to using a named key for saved reports. This is purely an internal improvement.

Bulk task import create project

When you bulk import tasks, you're asked for a project to assign them to. More often than not, I find that I forgot to create the project so have to go around the loop doing that and reimporting tasks.

So, a nice-to-have would be to create a new project by typing in the name and then going to the 'create project' page to fill in any remaining details. When done, the imported tasks are assigned to it.

Admins can't reset user passwords

The way the GUI and User model is built requires an existing password to set a new one, so an Admin is unable to reset a password for a user who has forgotten one (and the "curated user" approach of TrackRecord means they don't have a "forgotten password" link either).

We didn't notice this in the previous mid-size installation because everyone was using OpenID.

Automatically add a generic task when creating a project

Would it be possible to add a generic task to each project as it is create? We don't break our time sheets down into individual Gantt chart tasks, rather we simply book time against a project. Also we have non-project functions which also need to be recorded - technical support, management, Admin, IT etc. These don't fit into a particular project, but are necessary for the business to function, and the time needs to be recorded. How do you see these tasks fitting into the assumptions you've taken?

Rails 5, please

This looks like abandonware, but honestly, it isn't...! It urgently needs a full update to modern Everything though.

Anonymous users

Here's something I didn't consider in the TracRecord spec... in one project, we have an anonymous team of engineers in India doing work for us and their hours get reported to me as a lump. In a given week, this could concievably be more than the maximum possible number of hours for a single person.

I don't want to have to go through the hassle of creating lots of dummy OpenID accounts and TracRecord users just so that I can record these hours in the system (without doing so, generating reports means doing one in TracRecord and remembering to add all the India hours manually).

What I need to be able to do is record their hours in the system easily.
Maybe a special Project Manager feature that says I can input more hours than 24 in a given day (not my favourite idea) or a special flag for a Task in a project to say "ignore semantic checking of number of hours per day for this task"? I could then set that flag for any Genisys tasks in the project and add their hours myself.

The only problem with that is it distorts my own statistics of the hours
I've worked, unless I take the trouble of ignoring all of those magic tasks from any reports I generate for myself. Maybe the report generator can be made to optionally ignore them?

It's all a bit cludgy - so I'm throwing this open for ideas/suggestions.

And unfortunately, I don't think it's practical to get organisations like the one in India to tell their engineers to use our timesheet system (create their own users, enter their own hours, etc). That would be too easy (for us).

Per user multi-theme or theme variant support

On some specific Linux platforms some browsers perform badly when scaling content. This is inconsistent between the same browsers on different Linux variants, or vice versa. Specific complaints have been identified against Firefox with both font metric problems and excess padding in table editors which isn't reduced by "zooming out".

Since this is essentially a browser/platform combination bug, it isn't something easily patched in CSS without damaging the appearance on other browsers. However, if a user wants to zoom out or in to either fit more on screen or make things more legible, perhaps offering appropriate themes or variants of the core theme might work around the problem.

Unable to generate report

Hi,
I'm new to Trackrecord and I've just installed the latest version from github master.

Any report generation is aborted with the following error/trace :
undefined method `user_total!' for nil:NilClass

lib/track_record_report.rb:1619:in block in run_sums_for_range' lib/track_record_report.rb:1569:ineach'
lib/track_record_report.rb:1569:in run_sums_for_range' lib/track_record_report.rb:1429:incalculate'
lib/track_record_report.rb:878:in compile' app/controllers/reports_controller.rb:90:inshow'

Regards,
Arpel.

100% internationalisation support

TrackRecord still only has as-new-features-are-added support for i18n in "en.yml" and the like, since historically it predates this Rails mechanism. In view of the branding request in Issue #29 and general sanity, look into 100% - or as close as makes reasonable sense! - support for i18n, finally getting rid of all hard-coded strings and string construction.

No milestone assigned at the time of writing because this isn't a direct user-facing change so it's hard to consider it as a priority that would prevent a milestone being reached.

Copy saved report

Quite a few of my reports end up being very similar, maybe with just the user changed. It'd be nice if I could copy a saved report with some other name and be dumped into the report setup page where I can make tweaks.

Bug: edit-in-place project title corruption

When editing a project name in place in the list of projects, all spaces get replaced with + signs. This does not happen if you go to the 'edit project' page.

For example: edit "Foo Monitor: Phase 1" to "Foo Monitor: Phase 2" results in the project being called "Foo+Monitor:+Phase+2".

No-script timesheet row addition doesn't work

In v2.3.0, no-script timesheet row editing produces either a "something went wrong" general 500 error, or an in-editor-transaction-block exception (see also Issue #36).

The JavaScript-enabled version works OK. This highlights:

  • The continued lack of script and no-script real browser integration tests.
  • The continued unsolved occasional failure of the JavaScript detector at sign-in.

Why can't timesheets be copied across year boundaries?

In TrackRecord v1, there was a good reason for the timesheet "duplicate for next week" functionality to be deliberately blocked across year boundaries. I can't remember why this the case, but it's quite annoying in practice. Maybe the idea was to get people to "clean up" their timesheets annually by forcing them to rebuild from clean! Revisit this and see if there are any fundamental technical limitations here; if not, consider removing the restriction.

Omitted timesheets report

If there's general timesheet overview capability built into the system (e.g. from a redesigned 'edit timesheet' year planner style view or similar), then it should be relatively easy to produce a report that lists any users who have not submitted timesheets for any weeks within a given selection range, or have uncommitted items.

Have an option to send "please commit" or "please submit" e-mail messages out?

Action "home" should be in its own controller

Internal - UsersController handles this right now. It isn't obvious at all without reading routes.rb because there's not even any supporting code - it just runs off Rails default rendering behaviour. The only reason it's an issue is that before_filter-style stuff in UsersController needs to be aware that there's an implicit, but invisible home action. It's nasty and not RESTful, so needs cleaning up.

Formal test coverage is insufficient

TrackRecord development, as a spare time activity, has focused on getting something working to the specification of Endurance which can be used for real timesheet entry. As such, there hasn't been time for anything beyond user and developer testing. This means that formal framework tests are absent and hideously overdue.

When returning from timesheet edit/show to list, maintain year

If you're looking at historical timesheets or editing over an annual split, the likes of the "Timesheet entry overview" link (in the Show view) return to the generic index list for the current year, not the year of the timesheet being viewed. That's unexpected behaviour, to the extent of being considered a bug.

Integrate PO cover concept into TrackRecord

For the next iteration of the TrackRecord system, I would like to see the addition of a concept of "Purchase Orders". These will be registered in the system and managed in a similar way to projects, tasks and users at present. This is how I'd want it to work...

A manager creates a PO, which has an unique ID and an associated customer. It also has some descriptive textual string (e.g. "FooCorp Porting Project - May 2009"). Finally, a PO has a number of hours associated with it.

When creating a task, it can optionally be associated with one or more POs (actually, with zero, one or two POs, to be precise).

In the reporting code, there would be a new report type which allows a PO to be selected. This report would give the following headline figures:

Total PO cover: [PO hours]
Total work: [Number of committed + uncommitted hours in
tasks associated with the PO]
PO remaining: [first number minus second number]

It could also break down the PO in a table below the headline figures, showing which users have logged hours against the PO, along with the number of hours they have logged on those tasks.

The reason why you'd want to have a task associated with two POs is because one would be the PO cover for a project (phase) from the client and the other would be the PO cover we have with a contractor to do their part of the project (phase).

Thus, you can see either how a contractor is doing against their individual PO cover, or you can see how the project as a whole is doing against its PO cover.

Doing this via exporting reports from TrackRecord is the current state of play, but it's fiddly and error-prone plus quite a lot of negative work. To put some up-front work into TrackRecord to do the above would provide significant savings of effort over time.

Report include hours broken-down by resource

When generating a report like the following, it'd help to see a breakdown of the individual hours per person. E.g.

Report from week 40 to week 43 for Project Foo, showing users John, Jack and Jane.

Right now, this will generate two tables, the first showing hours for each task, divided into columns by the week. The second table shows total hours per user.

It'd be nice to break-down the first table by user - e.g. in a similar way to the committed vs not committed hours. Thus, you might assign a colour code to each user and show in each table cell the hours in that week for that task that the given user generated towards the total in that cell.

I'm not sure if colours is the way to go (because there aren't that many to select from and colour blind users would struggle with it). Other ideas welcome.

Oh, and I understand that I can generate a report individually for each week or each user to get the same raw data out of the system, but that would be n times the work for me (where n is number of users I'm reporting on).

Better logging of Timesheet transaction block exceptions

Timesheet operations are done in a transaction block that captures all exceptions. If a 'real' coding error has happened, there's no logged backtrace because the exception never gets as far as Rails.

Comprehensive logging needs to be added; perhaps the exception capture should be limited to a range of "expected" potential exceptions too.

Provide alternatives to OpenID

Since myopenid.com shut down, I started searching around for Open ID provider alternatives and found very few. The StackOverflow family is a good choice, but in practice that collection of sites make it very confusing to sign up for an ID and in general it seems the technology has just lost out to things like Facebook sign-in.

Thus I need to move away from OpenID and provide alternative methods for signing in. This in itself is not technically hard in general - just very tedious and hard to test - but the big problem is how an administrator would indicate what method(s) are acceptable for a user to sign in with and what token(s) they must provide in order to be authenticated and authorised for access. It's not as a simple as a list of permitted Open IDs anymore.

No milestone set at the time of writing, as this is a tricky issue that might run for some time.

Auto-commit or auto-commit-request for timesheets

Some users never commit timesheets, not realising that this is important for project managers (and means those users could go back and edit numbers which have already been included in reports/invoices to clients - ouch).

To work around this, some sort of forced/automatic commit, or commit request reminder, needs adding.

Reports for "this month"

Most of my reports are "Project foo: March 2013" or that sort of thing. This means that when I save them to use them next month, I have to change them all to be for the next month. It'd be great if I could have a "this month" option for the month start & end date.

I appreciate I could save a report showing all months with "hide zero columns" but that doesn't work on a few counts:

  1. doesn't work for a "daily" type report
  2. results in a lot of fluff in a "weekly" type report (or similar)

Actually, having thought about it, I mostly do reports for last month, because it's just after the month end that I'm needing to get stuff sorted for invoice cycles, etc.

So, how about some feature creep on my feature request? Have "last month" as an option, too. Or "this month" minus "some number from zero up". Or something.

Allow time calculations in the timesheet grid

From issue #28: Allow time calculations in the editor grid. JavaScript assumed unless I feel like writing support in both the JS layer and the Ruby layer for non-JS on-submission processing.

For example - someone knows they arrived at 9:05am, had lunch from 12:10-12:45, then left at 18:20. It'd be handy for such a case to be able to just enter "12:10-9:05+18:20-12:45" into the grid (say).

Obvious issues with 12h/24h ambiguity. Alternative suggestion received suggested the idea of a popup with, say, rows of start/end time pairs, that would hover above/below a timesheet editor cell when invoked in some way - e.g. a magic key combo, automatically as you move from cell to cell (configurable visibility, e.g. via a radio button somewhere on the editor page), etc.

Project titles should only need to be unique within their customer's projects

2.24's tests highlighted the way that project titles need to be globally unique. Since some people use projects for things like "Bidding Process", with tasks within that project related to facets of the bid (for example), it's easy to see how multiple projects might end up deliberately or accidentally with the same title. Provided the customer is different, there shouldn't be any confusion.

Refresh report

A minor feature request is for a "Refresh" button/link on a report page. This would be handy if you've left the report open for a few days in a browser tab and you want an update. At the moment, you have to scroll to the bottom of the page, click "Change report paramters" and submit the report again, which is a bit more clunky.

Time calculator and formats (maybe two tickets here)

Something which would be nifty as a new feature (even if this is massive feature creep) would be a time calculator for when you need to put something in for a task but figuring it out is fiddly.

E.g. 18:37 - 09:28

One thing (which may or may not be related) that I've noticed in another timesheet system is that you can enter either "6.25" or "6:15" forms - dot vs colon separator. It happens to force the answer to colon notation once you hit enter or move focus out of the cell - I expect TR would use dot notation as its default (as usual).

Maybe the latter feature could be a per-user option, because I know many folks will tend to think in HH:MM rather than our hours . fractions.

Optional (plugin?) postprocessing mechanism for reports

Although an organisation might adopt TrackRecord and find it suits their time recording and reporting needs reasonably well, they might at times do work for clients who require different styles of reporting. For example, a client may want worked hours each day rounded up/down to just a half-or-whole-day, with some client-specific strategy for dealing with under-accounted or over-accounted hours arising from the rounding.

Rather than try to build a whole bunch of such things directly into TrackRecord - though this would be possible - it is clearly preferable to have some kind of basic plugin mechanism to support different post-processors. The input would be a report's raw data, the output would be processed data in some other form. It ought to be possible, for example, to reimplement the CSV export feature in terms of such a plugin.

This enhancement is written with a particular requirement in mind from a real world deployment of TrackRecord so it's tempting to assign a milestone and rush it through, but given the potential scope of work, I'm reluctant to hold back v2.1 bugs or simpler enhancements for this particular feature. As a result it is at the time of writing not assigned to a milestone.

Something broken about sorting

When using the current timesheet as a template for next week, the old behaviour was to have the rows sorted in the same order as the timesheet being copied. Now, the rows are in some "random" order.

In addition, using the sort facility to reorder them often results in only partially sorted rows the first time around - you have to do it twice to get the desired results. This is clearly a bug.

As a final note, it'd be nice if the "Choose order..." menu defaulted to some pre-defined sorting order (as in, your favourite) because I often forget to set that and just hit "Sort ascending" only to have nothing useful happen before I remember I have to select something from the menu first. Long story short, I want timesheets sorted by customer/project and I'm having to do ever more clicks for each new timesheet (and each time I add a new task to a timesheet) just to achieve that.

See the images below for an example session of creating a new timesheet using the old one as a template and then trying to sort by customer/project...

Initial order - no idea what this is...

sort1

After sorting by customer/project - it's got some of the way there...

sort2

After sorting by customer/project again - success - until I add a new task :(

sort3

Invoice report generator

We could do with a simplified report generation process for invoicing and checking progress of a project against its PO cover. This process could be distilled down to this:

  • Select a project
  • Select a month (invoice up to end of that month) - no start month required
  • Check box - mark hours as billed

This process would look at all tasks which are flagged as 'billable' and sum the hours against all resources, ignoring any booked hours which are flagged as 'billed'.

The report would look something like (maybe with a weekly break-down):

Steve Revill        58.75
Andrew Hodgkinson  128.50
Richard Nicoll       7.25
TOTAL              194.50

If the checkbox is ticked, then all hours that went into the report calculation have their 'billed' flag set. This checkbox is important because the state of the project against PO cover could be viewed (leaving the checkbox is unticked) without it affecting the results of any future invoice calculation.

Note: this assumes that tasks can be marked billable vs not billable. It also assumes the introduction of a 'billed' flag to all work packets against all tasks.

Maybe a simple implementation would be for non-billable tasks to automatically set the 'billed' flag against any newly-entered hours so that they never get included in the invoice report.

Ideally, if we could register (and later edit) a level of PO cover against a given project, the report generator could include total PO cover hours and hours remaining figures in the report above.

Report page options

At the moment, significant options for reports are rather lost at the bottom of the page. It'd be better (IMHO) if "Change report parameters", "Create new report", etc. were displayed as buttons at (near) the top of the page.

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.