Cookies

We use analytics to see how the site is used so we can improve it.

Skip to content
Renada

The runbook that quietly wipes any existing HaloPSA to-do list

A walkthrough for MSPs on building and automating to-do lists in HaloPSA, from manual entry through to a runbook that pulls quote lines onto a ticket

27 November 2024 14 min watch Connor Fagan

The short version

This tutorial covers every way to build a to-do list on a HaloPSA ticket, from typing items manually to configuring reusable to-do list groups and templates. It also walks through a custom runbook that pulls approved quote lines onto a ticket automatically, closing the gap between sales and technical delivery, and flags a real limitation you need to know before you build one yourself.

What you'll take away

  • Three ways to add a to-do item

    Type manually, apply a to-do list group, or apply a to-do list template from a template ticket, all from the dots menu on a HaloPSA ticket.

  • To-do list groups live in an odd spot

    Configuration, Tickets, General Settings, right at the bottom, is where you build reusable to-do list groups. It is not where you would expect it.

  • Ask each time beats always or must complete

    The closing behaviour setting for to-do items and appointments has three modes, and ask each time gives you an error check without forcing every appointment to be ticked off manually.

  • Templates can auto apply by ticket type

    Turning on automatically apply the following template on a ticket type means every new ticket of that type inherits its to-do list without anyone touching it.

  • The onboarding disconnect this runbook was built to fix

    One partner had technicians buying licences and hardware without sales knowing, so an approved quote now pushes its line items straight onto the ticket as a checklist.

  • A hard stop, not a nice to have

    Because the quote items land as unchecked to-do items, the ticket cannot close until someone confirms every quoted product has actually been set up.

Key insights from the episode

  1. Add manual to-do items from the dots menu in the top right corner of a HaloPSA ticket.

  2. Build reusable to-do list groups under Configuration, Tickets, General Settings, scrolled to the very bottom.

  3. Set the ticket close behaviour for to-do items and appointments to ask each time to get an error check without forcing every appointment closed manually.

  4. Ticket types can automatically apply a default template, and that template's to-do list comes along with it.

  5. Rules can also apply a template, including one containing only a to-do list, when a ticket matches set criteria.

  6. A custom runbook can pull an approved quote's line items and post them to the ticket as a to-do list using the SQL report engine.

  7. Posting a to-do list this way replaces any existing to-do list on the ticket rather than appending to it, so check before you run it.

  8. Iterating quote lines one at a time into the to-do list currently errors in HaloPSA, which is why the workaround builds the whole list in a table first.

Questions people actually ask

How do I add a to-do list to a ticket in HaloPSA?

Open the ticket, click the dots menu in the top right corner and select add to-do item. You can type an item manually, apply a to-do list group you have built, or apply a to-do list template from a template ticket.

Where do I find to-do list groups in HaloPSA?

Go to Configuration, Tickets, General Settings and scroll all the way to the bottom of the page. To-do list groups are set up there as reusable checklists you can apply to any ticket.

Can HaloPSA automatically add a to-do list when a ticket is created?

Yes. Set a ticket type to automatically apply a default template, or use a rule that applies a template when a ticket matches certain criteria, and the to-do list items on that template come with it.

What does the ask each time setting do for HaloPSA to-do items?

It stops a ticket closing without a prompt if to-do items or appointments have not been completed, without forcing every single appointment to be manually ticked off. It sits between always allowing close and requiring every item checked.

Can HaloPSA generate a to-do list from an approved quote?

Not natively, but it can be built with a custom runbook. The runbook grabs the quote ID from the ticket, finds the approved quote among any iterations, pulls its line items, and posts them to the ticket as to-do items once the client has accepted.

Does adding a runbook generated to-do list keep existing items on the HaloPSA ticket?

No. The runbook posts the whole list at once rather than appending line by line, so it replaces any to-do list already on the ticket. Check for existing items before running it if that matters to your workflow.

Why would an MSP connect quotes to to-do lists in HaloPSA?

To close the gap between sales and technical delivery. One partner had technicians ordering licences and hardware without sales visibility, so pushing approved quote lines onto the ticket as unchecked to-do items forces confirmation before the ticket can close.

Full transcript

2,858 words

Read full transcript

Connor: To-do or not to-do, that is the question. Today in HaloPSA we're jumping into to-do lists, how to use them, how to best leverage them. We're going to show you the simple way, the slightly complicated way, and then as always the elegant Solutions way, which is using runbooks with something that solved a problem for one of our partners. Let's leave it there for now, but let's jump into the video and see what we're going to be doing today.

So let's start with the foundations, shall we? Let's start and chat a little bit about to-do lists and what they are. So if you're familiar with HaloPSA you'll notice that this is a ticket. If you're not that far yet into your Halo journey, don't panic. This is a ticket. And when you have a ticket you can add a to-do list to a ticket. So if you click the dots in the top right-hand corner you can click add to-do item.

And what you can do is you can manually type in here, so manually type in here, and that will add a to-do list item called "manually type in here". If you've configured some to-do list groups, then you can also select a to-do list group. We'll run through them in a minute, and again you can apply that group of things manually to a ticket. And then there you go, we have a group of things: order the stuff, install it, test it, ship it, and then ensure it has been delivered. Again, nice little to-do lists.

Alternatively, if you have built out templates, and we'll go through that in a minute, in the past you can select a to-do list template from one of your template tickets and then apply that to-do list here. This bit is not so intuitive, not going to lie. So that's the kind of built-in functionality. However, something that we've recently done is if I just raise a quote on this ticket here, we'll call this "test", and I'll add these three items to the ticket and save it.

What we've done is we've created a runbook. I need to try and find the ticket I was just working on here. We go, um, there's a quote. What we've done, if I just delete all of this, let me clear up the to-do lists, is we have a button up here which could also be an automation to generate a to-do list from something. So the use case that we kind of solved here was we have a partner that has new starter checklists.

And as a part of the new starter process they have to sometimes order licences, hardware, and other bits and pieces to ensure that that user gets created correctly. And the problem they were trying to solve was the technicians know what they're doing. As then they will buy a NinjaOne licence or a Halo licence and they'll set them up and carry on. But there's a disconnect between that and sales.

So we said, well, if we make a quote and we have to go through an approval process, then once you approve it the technicians can begin. However, they didn't want to have to go and go to a sales order manually and then click add all the items to the ticket. There's other problems with that that I'm not going to dive into today. So what we came up with was once the quote is accepted, so it goes through approval internally, then it goes out to the client. Once the client accepts it, it then updates the ticket using this runbook here, which is an automation in their environment.

Updates the ticket to be updated and adds all of the items from the quote onto the ticket. Now this is quite a specific use case because, you know, they're only going to be quoting for things they need to do something with. So it'll typically be their group of products for onboarding. So it could be their onboarding software stack, or it could be hardware, or it could be both.

Now we've kept it quite simple. We're currently just returning the quote lines as in the descriptions or the short descriptions. You could add stuff to this, or you could have the word "install" at the beginning if you desire. But the idea being is that once they're added here from the quote, sales order, invoice, you know, whatever you want to decide, they can't then close this ticket before they check these boxes. And it just means that there's no disconnect between what we're quoting and what we're setting up.

There's that hard stop in place that goes, oh yeah, we have quoted these. They have been approved. Wait, why haven't we configured backups for this particular onboarding?

So let's go through some fundamentals, shall we, before we dive into this fun stuff over here. So first things first, as I mentioned, click the dots in the top right, add a to-do item, and then manually type it in. I don't need to jump any more into that. I'm sure you all at home will be intelligent enough to type stuff manually in this box.

However, a new thing that was added—and I say new, I don't even know when this video is going to go out—but new as in not recently—was these to-do list groups. Sorry, that's awful English there, Connor. To-do list groups. Now these are basically to-do list templates you can build out yourself.

Now, um, it's a little bit convoluted where to find these, but if you go to Configuration in the bottom left-hand side, go to Tickets, go to General Settings, scroll all the way down to the bottom, and then down here you will find—keep going, Connor—to-do list groups. I know, put it somewhere further out of the way, why don't you, Halo? Click on that. Then you can click New and we'll call this "YouTube example".

And then we can press Save. Just going to edit that again. And then what you can do is you can add in the things you want in here. So number one, number two, and number three. If you edit it, you just edit in the task name. And we'll for good measure add in number five to send you all slightly insane at home or in the office, of course. But then once you've made that to-do list group you can go back over to the ticket, add a to-do item, and select it from a to-do list group.

And if I select "YouTube examples" you will get counting like my 2-year-old does: 1, 2, 3, 5, five as checklist items on the ticket.

Now the functionality around these, if we go back to Configuration, Tickets, and General Settings, if we find the word "to-do"—oh, there it is. I'm on it. There we go. "Complete appointment, task, and to-do items when the ticket is closed". So what this is basically saying is: Always, so yes, if you click close the ticket, just check them all. Don't advise that. Ask each time. That is what I think is the preferred one you want to be using. Or: You must always complete every single checkbox, as in check every single checkbox, or complete every appointment manually.

Now that can be a pain if you've had like 10 appointments on a ticket and then you've got to go through and complete them all. So I think "ask each time" is good enough. It has the error check in place that goes, oh wait, I haven't checked these items. Then you go and look and go, oh hang on a minute, I forgot to do a thing. But it's not limiting enough that you have to go and tick every single time if you don't need to, in cases like appointments.

So that's the control behind it, basically. In terms of automatically adding them to a ticket, what you can do is you can apply templates. So if you have a ticket type here, you can apply a default template. It is called "automatically apply the following template". There we go. So what you can have is when you create a ticket of a certain type it can automatically apply a template to it, and that template is what contains to-do list items.

So if we go over to Templates over here, and I'm just going to pick "on boarding", well on the root of onboarding, the to-do list is probably empty, that's what I would expect. However, in all of the child tickets, or the tasks, if you will, when we start doing our onboardings, they will have to-do list things that we have to make sure we do, right?

And again, this is the templates that you're applying. So if you do have templates for tasks or projects or whatever you like, you can apply to-do list items to that ticket type or to that template, which can then be applied. Now you can apply them in many ways. You can apply them as I just showed you at the ticket type level. You could do it by having a ticket, new ticket, and applying a template up here, so you could apply one of those templates to the ticket.

Or you could do it with a rule, I believe. Let me have a look. I never do it this way. But um, there we go. With a rule. So again, if a ticket matches a certain criteria, run this rule to apply this template, and that template could be very basic. It might just contain a list of to-do items.

So that's kind of the baked-in Halo functionality. Now I'm not going to get in the weeds. We are 9 minutes in already. I don't want to completely bore you all to sleep. But what we've basically done is we've created a custom runbook. So if we go to Custom Integrations and Integration Runbooks, we have this to-do list runbook.

Now the mechanism of getting it from the quote may not be desired for everyone. I completely respect that. This was by design. Why we did this, it has its downfalls but also has its strengths. So don't get too caught up on where we're getting the to-do list items from. Just note that you can get things from somewhere and make them as to-do list items.

So I will talk you through this at a high level. We will, as always, fully document this in the video description down below. But basically, um, we are authenticating to our Halo, and what we are doing is we are quite simply getting the ticket ID. And what we're then doing is we're getting the quote ID from the ticket. That's what we're doing in an array. And then what we're basically saying is—I have slightly messed it up for this demonstration—but once we've got the quote ID we're basically saying, if the quote has been met, then—or the quote has been approved, sorry—go and get the quote details.

If it's not what it was doing, if there's multiple quotes—sorry, I'll try to reput it here—if there's multiple quotes on a ticket but only one of them has been approved, it will iterate through each quote, find the one that's being approved, and then progress into the workflow. We identified you can, some have, you know, multiple iterations of a quote. So we've made sure that we have this loop here to find the one that has been approved.

Um, once we find the quote that's been approved, what we then do is we then basically get all the response lines from that quote, okay? So we take the quote ID from the ticket that's been approved—job one—and then we make an array and we get all of the quote lines from that quote.

What we then do, which is a little bit gross, I'm not going to lie, but isn't necessarily evil at the minute, is we then basically use the SQL report engine and we basically generate using the quote description. So the description of the quote line, we basically generate a new ID for each line and then basically make a, you know, small report of all the quote line items on there. And then we add them to the ticket.

So we say the to-do list, which is because over here we shove all this in an output variable called "to-do_list" over here. So use this SQL, put it in the table, throw that back out to Halo as a to-do list, and then what we do in the to-do list over here is basically post that to the ticket.

Now the reason we've had to do this is because we were doing it line by line, doing an iteration, an iteration, however it kept erroring. This is currently with Halo. So what we've had to do is basically grab it all, pull it in a table, and post it to the ticket. Now the thing you have to remember if you do follow this guide is that if you already have a to-do list it's going to replace it. Because we're not adding anymore, we're literally saying take this to-do list and just add it to the ticket. But that's going to flush any to-do list on there already.

So just be careful if you do follow this guide that this will clear any existing to-do lists. Again, this was built for one of our partners for a very specific use case. If this does get fixed—it currently is with Halo—if it does get fixed, we will update the video below. We'll update the guide with how to do it with iteration. That's how we originally built it. But unfortunately we can only do what we can do.

Um, if it fails, it doesn't really matter. This can probably be removed now, to be fair. Um, but once it's finished doing that, it moves it to "be updated ticket". And in the updated ticket we write a little bit of a note back to the ticket, basically saying you've now added all the products from the quote, Mr technician, go and do those things.

So if we go back to that ticket, this one here, you'll see here we have this note on the ticket: "Renada sandbox things. All items approved on the quotation have been added to the ticket. Please ensure you mark the product when they have been set up or configured."

So again, you know, if we generate that to-do list, you'll see that it's going to replace that 1, 2, 3, 5 in a second. If I refresh it and there we go, these have been added to the ticket.

And that is basically that. That is kind of to-do lists as quickly as I can, touching on all the little pain points and how you can use them all. But hopefully you find some value out of this. As always, I've been Connor Fagan. We are Renada Solutions, and if you have any questions please put them below and we will try and get to them as soon as we can. Have a beautiful day and hopefully we'll catch you soon. Take care. Bye-bye.

Fantastic consulting firm, really helpful and very knowledgeable on the product. Would happily recommend them to anyone.
Advocates Google Logo

Our Core Services

Offering support to enable sustainable success for your organisation.

Consultation Harness the transformative potential of an agnostic advice tailored to your unique business needs. From PSA implementation to ongoing support, our exceptional consultation services pave the way for extraordinary success. Find out more
Virtual Admin Let us handle the technical heavy lifting. Our expert team builds solutions, creates powerful reports and dashboards, and develops automated integrations - giving you more time to focus on what matters most: your clients. Find out more
Product Onboarding We understand that the first steps in adopting a new product can be daunting, we are here to guide you through every stage of the process with precision and clarity. From initial setup to advanced features, maximise the value of your product from day one. Find out more
Virtual Chief Technology Officer (vCTO) Benefit from a remote and adaptable technology expert to seamlessly combine strategic guidance and effective leadership to propel your business to new heights and empower your organisation’s technology ability. Find out more
Where to next? Get the cutting-edge tools to support your MSP business. Contact us today to receive a bespoke quote tailored to your specific needs.