Project Management: Time tracking

posted May 29, 2014, 6:06 AM by Eric Patrick   [ updated May 29, 2014, 11:16 AM ]


Quandis has a prospective client that wishes to replace their home-grown time tracking software, and eventually grow it into a CRM system. The basic requirements include:
  • Create and maintain a "Project", which is a consulting engagement with a client
  • Within a "Project", pick from a standard set of "Tasks" which tasks will be involved in the project
    • each task may be assigned to a consultant, and should track both budgeted and actual hours spent on the task
  • Within each task, allow consultants to enter the time they've spent working on the task, including a description of what they did
  • Show a rollup of all time spent on a project
  • Show dashboard pivot tables breaking down time by task, project, or consultant

Data Analysis

The first step in implementing these requirements were to translate the client's terminology into QBO terminology, and determine if we needed any new data structures. 
  • Client => Organization: since a client is a company, with contacts and and address, an obvious fit
  • Consultant => Person: consultants are the users in the system
  • Project => Process: since a project is a consulting engagement, it should have a start and end date, and may be assigned to a manager.  Process is a great fit.
    • "Client" => Organization: because a project is a consulting engagement for a client, we'll make the Process and child of the Organization table (Process.Object/ID = Organization)
    • "Manager" => Process.AssignedOrganizationID
    • "Budget" => Process.CostLedgerID, since the CostLedger is used to track financial data related to a Process
  • Task => ImportForm: because ImportForm are tasks that can have custom fields added to them
    • "Consultant" => ImportForm.AssignedPersonID
    • "Budgeted Hours" => ImportForm.ProjectedWork
    • "Actual Hours" => ImportForm.ActualWork
  • Task Template => ImportFormTemplate: the 'standard' set of tasks available are ImportFormTemplates
  • Time => LedgerItem: we're going to bill somebody for this time, so LedgerItem was a good fit
    • "Hours" => LedgerItem.UnitCount
    • "Amount" => LedgerItem.AmountMoney
    • "Consultant" => LedgerItem.PayorID
    • "Task" => LedgerItem.Object/ID
    • "Project" = > LedgerItem.LedgerID == Process.CostLedgerID

User Interface

Single page apps are a bit of a rage these day, and QBO configuration can be pretty daunting. This project was implement as a single page app to simplify configuration / training, and to help determine how difficult it is to build a one-page app in QBO3.

To that end, the following patterns were established:
  • The URL for the 'home page' would be /Process/Process.ashx/Projects
  • Clicking on a project from the home page opens a new tab for that project, rather than navigating away from the home page
  • The Project Summary page would include:
    • a Project panel
    • a Tasks and All Timesheet Entries panel
    • a standard Messages/Documents/Contacts panel
  • All power-user configuration would be handled in 1 page, appearing as a configuration ('gear') icon from the home page
The customization of QBO3 to completed this project entailed no new code, but several XSLTs and custom statements. Thus, a theme (Empty C# ASP.NET Web Project in Visual Studio) was created, with the following structure:
  • Config (folder)
    • Setup.ProjectManagement.xml: contains the seed data required for this project, including custom statements as ConfigurationEntry nodes
  • Templates
    • Accounting
      • Project.Timesheet.xslt: customized LedgerItem.Search.xslt that show timesheet entries in the Project Summary view
      • Project.Timesheet.Edit.xslt: customized LedgerItem.Edit.xslt to focus on entering time spent on a task
    • Decision
      • ImportForm.TaskList.xslt: customized ImportForm.Search.xslt that includes hours
      • ImportForm.TaskSetup.xslt: customized ImportForm.Search.xslt that enables quick data entry of standard tasks in a project
      • FormTemplates:
        • Timesheet.Edit.xslt: customized layout for ImportForms that includes custom fields on the left, and timesheet info on the right
    • Process
      • Project.Home.xslt: application home page
      • Project.Config.xslt: application configuration page
      • Project.Search.xslt: customized Process.Search.xslt to display budgeted hours and such
      • Project.Summary.xslt: customized Process.Summary.xslt to render in a tab instead of a full page, with the desired panels described above
      • Project.Select.xslt: customized Process.Select.xslt to render budgeted hours as well as basic Process fcolumns.