In PSA, often our customers set up resource cost rates as single hourly/daily rates that are often referred to as “blended”; this means that the overhead costs have been built into the resource’s cost rate. These rates are then often averaged out, which makes it easy and supports privacy because that cost rate doesn’t necessarily reflect what your resources are being paid.
But what if the rules are that you sometimes wanted to pass your overheads onto the client? Having a blended cost rate doesn’t help us meet that requirement. Cost rates for resources then have to be more accurate, so you start looking at hiding the rates from page layouts etc to preserve privacy. But we have something declarative (i.e. clicks not code!) that we can use to assist in passing those overheads specifically to the customer.
Step 1: Create a checkbox on the Project object
Firstly the project manager has to decide if the overhead costs for a specific project will be passed on to the customer. Great – let’s create a checkbox.
Step 2: Create a custom setting to store the overhead cost rates
Culturally, for us admins, custom settings are something you use to switch code on or off, or to adjust the behaviour of code, refer to field sets etc. It’s not something we typically dig around in on a daily basis; it’s psychologically associated with being something the developers play with. However, I am sure I am not the first one in the salesforce community to say that custom settings can be incredibly useful to support formula fields. I would definitely recommend using them if you’ve got a static value you want to refer to, because:
- It gives admins a single place to go and update the value should it ever change, rather than having to reverse-engineer a number of formula fields that work together to make up the solution
- Formulae work in real time, so if you have hard-coded your static value into a formula field, and make a change to that value, all your historical data that used the old rate will be updated to show the new rate. Not such a big deal if you have used workflow to set another field with the result of that formula and that’s what the roll-ups have processed, or that’s what you’ve billed…but 90% of the time you wouldn’t want that to happen.
- It makes your solution much more scalable
- It reduces admin overhead should rates change regularly
NOTE: You CANNOT refer to a custom setting in a formula field unless it is a Hierarchy custom setting. Don’t fall into the trap of making it a list because you’ll need code to do the rest and that’s not the point of this exercise.
So for this purpose, I’ll be storing my overhead cost rates in a custom setting. I’ll be keeping 6 rates here, because the business wants to operate in 6 different currencies, and trying to convert these rates will probably require Apex code to go and fetch the rates. Much easier to allow the organisation to define what they recognise as being the cost in each respective market/currency.
I know, I know, it’s not so scalable if you have to add 1 field per currency. But it keeps this solution simpler to manage that it would be for hard-coded values, and should the business choose to operate in more currencies, all the admin has to do is add another field for the cost rate in the new currency and update the formula fields…. a one-off job.
Step 3: Create formula on the Timecard Split
We’ve got to create a few formula fields to calculate the overhead costs. Luckily, this scenario is just passing on the cost to a customer with no uplift, so the formula is very simple.
The first field we have to create is the Overhead Cost Amount (a Number formula), to calculate how much the overhead costs will be, should the project for this timecard be specified as one the client will receive overhead charges for.
We are taking the overhead rates from the custom setting we defined in the previous step, depending on which currency the Timecard Split is in (usually the project currency).
You can get to the custom setting as you would if you were picking up a field for your formula field (using the Advanced Formula option when building it). Just scroll down the list on the left until you find the right one, then select the field you want from the pane on the right to include it in your formula.
In plain English:
If Bill Overhead Costs on the Project is true, and currency is GBP, calculate Total Hours * Hourly Rate GBP.
Rinse and repeat for the other currencies.
Ready for the formula? Go on then…
Other formula fields to create on the Timecard Split include:
- Services Billable Amount: This is the Assignment’s Bill Rate * Total Hours
- Services Costs: This is the Resource’s Default Cost Rate * Total Hours
- Total Billings: Services Billable Amount + Overhead Cost Amount (or Overhead Billable Amount if you are adding mark-up – see note below)
- Total Costs: Services Costs + Overhead Cost Amount (which, in this example, is the same as the overhead billable amount)
The reason I am effectively recalculating my services costs and billings, is because I am going to be overriding the natural behaviour of PSA, which is to calculate Hours * Cost rate and Hours * Bill Rate. I will be overriding the standard PSA fields with the results of my Total Billings and Total Costs fields.
What if I wanted to add a mark-up to my overhead costs when billing the client?
Note that in this example, no mark-up is applied to the overhead costs. If there was a requirement to do that, you could simply add a percent / currency field to the Project and ask the project manager to define what the mark-up will be. You’d then create a separate formula field called Overhead Billable Amount, take your total overhead costs figure and factor in your percentage / monetary mark-up. Then follow step 4, using your new Overhead Billable Amount to calculate the total billable amount for the timecard split.
Step 4: Workflow rule to update the Total Billable Amount and Total Cost Amounts on the Timecard Split
As long as you are overriding on the Timecard Split, you can get the system to calculate whatever you like in terms of costs and billable amounts. PSA is clever enough to roll them up too.
Create a workflow rule for the Timecard Split object:
Tip: if you just want the workflow rule to operate regardless of any criteria, run the rule based on a formula and enter the word “true”. This, in conjunction with the evaluation criteria you set, will tell salesforce to run the rule every time the record is created or edited (as set above).
Then create 2 field updates against the same rule:
Total Billable Amount:
When overriding costs and billings, please be careful. DO NOT HIDE ANY FIELDS YOU NEED TO DRIVE YOUR COSTS AND BILLINGS FORMULAE. It can lead to a great deal of work to rectify the calculations and re-process the actuals if these fields have missing or inaccurate data. It’s best to make any fields that drive cost or billable amount calculations required on page layouts and well-covered with validation rules, should accuracy be required.
Your total costs and total billable amount on the Timecards themselves will show different results to what you have overridden on the Timecard Split. This is because PSA continues with its usual calculations at Timecard level, but it’s at Timecard Split level that the figures to be rolled up are calculated. We know we should always report on Timecards at Timecard Split level, to ensure we have accurate monthly figures, rendering the financials on the Timecard itself redundant for reporting purposes.
For this reason it would always be advisable to hide your Total Costs and Total Billable Amount fields from page layouts at Timecard level; it will only cause more questions to be raised than are necessary. Busy admins can take quick steps like this to deflect queries that are too technical to explain to someone who just wants to get their timecard in.
What Will Happen Now?
In terms of the overall process:
- PM creates a project and specifies if the overhead costs will be recharged (optionally – specifies any mark-up to be applied)
- Resources are assigned
- Timecards are logged
- The total costs and billings (services + overhead) are calculated via formulae
- The standard PSA Total Cost and Total Billable Amount fields are overridden with the results of the formulae – if applicable. If not, the usual rules apply.
- Once the Timecard has been ticked as “Include in Financials” (usually via an approval process), PSA rolls the overridden costs and billings figures up into the project and region, practice and group hierarchies as usual
Have questions? Visit our customer community!