Timesheet Tracking and Billing System

A Microsoft Partner in Oslo, Norway approached us when they felt that Dynamics MS CRM could be customized to behave like a Timesheet Tracking and Billing System. Principally, they wanted their team members to enter the time (and other details) they would have spent on various activities/tasks/projects. Once entered, these entries were to be approved by the supervisors, following which orders could be generated directly, ready to be billed to his company’s customers.

The process of employees entering details of the tasks done by them has been common across organizations and industries. The process of implementation varies depending upon factors like organization size, culture, revenue management etc. The purpose of this process might also differ amongst industries or companies. For example, some might execute it to evaluate employee performance, generate project profitability reports or for billing reports for clients. With time, like how metamorphosis of every other corporate process has happened, even this has been automated/semi-automated by some or left manual by others.

While implementing this requirement, the first thought amongst us was to use the Activity entity to cater to these requirements. However, because the base Activity entity wasn’t customizable, we created a custom entity called Timesheet. Primarily, the attributes which this entity was formed of were Subject, Description, Duration Hours, Completion Date, Owner, Case, Product, Customer, and Status.
For IOTAP’s CRM Consultants based in Mumbai, India, though creating Timesheet was not a wholesome solution to the requirements, it definitely was the beginning. Here is how.

It often happens that employees belonging to the same teamwork for the same client/projects/products over days together. Assume that person A has spent 3 hours on Project  P belonging to client C, whose details he entered into a timesheet – TS1. Again, being on the same team, person B has spent 5 hours on Project P belonging to client C, whose details he entered into another timesheet – TS2. Once these timesheets were approved by the supervisor of A and B, orders – O1 and O2 – could be created out of TS1 and TS2 respectively. But sending 2  separate invoices for the tasks performed for the same project and client could be confusing to the client and more so with an increase in the team size.
Therefore, at that point, if client C were to be billed, then ONE invoice which combined the entries of TS1 and TS2 (3+5=8 hours) was required to be created for him. The logic to combine or group TS1 and TS2 could not be left to be performed manually because team size could range from 2 employees to any number.

Now, a requirement of a criteria-set for grouping timesheets was identified so that the number of orders being invoiced against a client could be logically reduced. An obvious point to be noted was that criteria-sets would keep changing based on various factors related to the client, which required us to leave it customizable by the users. To achieve this, we created 2 supporting custom entities – Timesheet Grouping (TG) and Timesheet Grouping Details (TGD) which would define these conditions.

The relationship between these 3 custom entities was-

Timesheet: Timesheet Grouping: Timesheet Grouping Detail = 1:1: M

While associating a TG to a Timesheet would ensure the desired Timesheet grouping, which would be further used while creating orders, the TGD entity (or entities) attached to the TG  would define the details of the TG associated with the timesheet. Simply put, Timesheet  Grouping is just one name given to a bunch conditions whose definition are provided in one or more Timesheet Grouping Details associated with the Timesheet Grouping.
While the primary attributes of a TG were its Name and one or more associated TGD, those of TDG were mainly Group-by-Attribute-Name and Rank. Group-by-Attribute-Name is one using which the user would be able to select the field based on which grouping of timesheets would happen. An example here could be Project, Client etc. Rank is one which would define the priority which should be considered while evaluating the grouping condition. For example, the requirement might be that first the Clients (Rank =1) of 2 timesheets should be checked for equality, satisfying which the application would proceed to check the equality of the Projects (Rank =2). Here Client and Project are values of the field Group-by-Attribute-Name.
Whereas this application can be of utmost use in the lives of people generating multiple easy invoices and reports for their companies, it will surely help managers to generate reports on their team performance and project profitability.

Several Timesheet Tracking Applications like acti-Time, Time-Aid, Labor Time Tracker, Pacific Timesheet 6.74 are available which provide facilities like Overtime Tracking, Staff Output Reports, Profit/Loss Reports and many more.

However, the area where MS CRM could have an edge over these applications would be the fact that orders can be directly generated for customers from within the same application. Most of the external applications’ functionalities terminate at the generation of various reports in various formats. But the process of implicit grouping several timesheet records based on user-defined criteria set is a benefit that any manager would value.