Bookkeeper and User Management

Hurdlr's Bookkeeper Dashboard makes it easy for bookkeepers to manage users and other bookkeepers, with useful user row actions and bookkeeper management flows immediately available upon rendering the Accountant Dashboard.

1. User Row Actions

There are already several useful actions for managing users available to bookkeepers on each user row within the Accountant Dashboard:

ActionDescription
ReconcileBrings the bookkeeper to the Reconciliation Dashboard for the user. Only present if the user is active.
Log InLogs the bookkeeper into the user's account. Only present if the user is active.
View ReportsOpens a popup with a list of reports that the bookkeeper can view for the user. Only present if the user is active.
Email ReportsOpens a popup with a list of reports that the bookkeeper can email on behalf of the user. Only present if the user is active.
Import RulesBrings the bookkeeper to the Import Rules screen for the user. Only present if the user is active.
Import from QBOBrings the accountant to Hurdlr's Quickbooks Online Import UX. Only present if the user is active.
Import from XeroBrings the bookkeeper to Hurdlr's Xero Import UX . Only present if the user is active.
Import from BenchBrings the bookkeeper to Hurdlr's Bench Import UX. Only present if the user is active.
Change EmailOpens a form to change the user's email address. Only present if the user is active and the bookkeeper has READ_WRITE access for the user.
Remove UserOpens a popup asking for confirmation of the removal of the user. Only present if the user is active and the bookkeeper has READ_WRITE access for the user.
Restore UserOpens a popup asking for confirmation of the restoration of the user. Only present if the user is removed and the bookkeeper has READ_WRITE access for the user.

If you'd like to add your own custom actions on each user row in addition to those already available within the Accountant Dashboard, you can populate a userActions array within the options object. Each object within that array should contain a displayName string and value string.

You will also want to take advantage of the Hurdlr Embedded experience's registerAccountantUserActionListener, which will invoke the callback function you provide whenever one of your bookkeepers presses on one of your custom user actions. To register the listener, simply add the following line of JS to be ran once after Hurdlr.init({...}):

Hurdlr.registerAccountantUserActionListener(myAccountantUserActionCallback);

Whenever an accountant presses a custom user action, myAccountantUserActionCallback will be invoked, with a JSON object as the single argument, containing the userId as well as the value of the action that you provided when defining the userActions array.

2. Updating, Removing, and Restoring Bookkeepers

The ability to update, remove, and restore bookkeepers is already included within the Accountant Dashboard, as shown below:

Modifying Bookkeepers Demo

3. Adding Bookkeepers and Users

If you want to include the ability to add users and bookkeepers from within the Accountant Dashboard, then you will want to take advantage of the Hurdlr Embedded experience's registerAccountantDashListener functionality. Without this listener registered, the ability to add users and bookkeepers will be hidden within the Accountant Dashboard, and they will need to be added via Hurdlr's Save a teammate endpoint. Editing, removing, and restoring will still be available within the Embedded experience regardless of whether the listener is registered or not.

To register this listener, simply add the following line of JS to be ran once after Hurdlr.init({...}):

Hurdlr.registerAccountantDashListener(myAccountantDashCallback);

Whenever an accountant clicks on a CTA within the Accountant Dashboard to add, update, remove, or restore an accountant or user(s), myAccountantDashCallback will be invoked with a JSON object as the single argument, containing the following attributes:

FieldDescriptionFormat
typeType of CTA that was pressed by your bookkeeper. You must handle Hurdlr.ADD_USERS and Hurdlr.ADD_BOOKKEEPER , that way you can save new bookkeeper(s) or user(s) in your system prior to saving them in the Hurdlr API via the Save a teammate and Save users endpoints. Handling Hurdlr.UPDATE_USERS, Hurdlr.REMOVE_USERS, Hurdlr.RESTORE_USERS, Hurdlr.UPDATE_BOOKKEEPER, Hurdlr.REMOVE_BOOKKEEPER, and Hurdlr.RESTORE_BOOKKEEPER is optional. The edits triggered by these events will automatically be made to the Hurdlr API, so these are mainly to ensure you can make edits to the bookkeeper or user(s) in your system if need be.Must be one of the following enumerations: Hurdlr.ADD_USERS, Hurdlr.ADD_BOOKKEPER, Hurdlr.UPDATE_USERS, Hurdlr.REMOVE_USERS, Hurdlr.RESTORE_USERS, Hurdlr.UPDATE_BOOKKEEPER, Hurdlr.REMOVE_BOOKKEEPER, Hurdlr.RESTORE_BOOKKEEPER
idId of the user in Hurdlr's API. Only present if type is Hurdlr.REMOVE_BOOKKEEPER or Hurdlr.RESTORE_BOOKKEEPER.Any integer
userIdId of the user in your DB. Only present if type is Hurdlr.REMOVE_BOOKKEEPER or Hurdlr.RESTORE_BOOKKEEPER.Any string
bookkeeperBookkeeper that was added or updated. Only present if type is Hurdlr.ADD_BOOKKEEPER or Hurdlr.UPDATE_BOOKKEEPER.Any Bookkeeper object
usersUsers that were added, updated, removed, or restored. Only present if type is Hurdlr.ADD_USERS, Hurdlr.UPDATE_USERS, Hurdlr.REMOVE_USERS, or Hurdlr.RESTORE_USERS.Array of User objects

A Bookkeeper object has the following attributes:

FieldDescriptionFormat
idId of the bookkeeper in Hurdlr's API. Only populated if type is Hurdlr.UPDATE_BOOKKEEPER.Any integer
userIdId of the bookkeeper in your DB. Only populated if type is Hurdlr.UPDATE_BOOKKEEPER.Any string
emailEmail address for the bookkeeper.Any email string
firstNameFirst name for the bookkeeper.Any string
lastNameLast name for the bookkeeper.Any string
statusStatus of this bookkeeper.Must be one of the following enumerations: ACTIVE, INACTIVE
canManageAdminsWhether this bookkeeper can add other bookkeepers.Any boolean
canManageUsersWhether this bookkeeper can add users.Any boolean
usersClients this bookkeeper has access to.Array of User objects

A User object has the following attributes:

FieldDescriptionFormat
idId of the user in Hurdlr's API. Only populated if type is Hurdlr.UPDATE_BOOKKEEPER, Hurdlr.ADD_BOOKKEEPER, Hurdlr.UPDATE_USERS, Hurdlr.REMOVE_USERS, or Hurdlr.RESTORE_USERS.Any integer
userIdId of the user in your DB.Any string
emailEmail address for the user. Only present if type is Hurdlr.ADD_USERS or Hurdlr.UPDATE_USERS.Any email string
firstNameFirst name for the user. Only present if type is Hurdlr.ADD_USERS.Any string
lastNameLast name for the user. Only present if type is Hurdlr.ADD_USERS.Any string
statusStatus of the relationship between the bookkeeper and the user. Only present if type is Hurdlr.UPDATE_BOOKKEEPER, Hurdlr.ADD_BOOKKEEPER, or Hurdlr.ADD_USERS.Must be one of the following enumerations: ACTIVE, INACTIVE
accessLevelLevel of access for the relationship between the bookkeeper and the user. Only present if type is Hurdlr.UPDATE_BOOKKEEPER, Hurdlr.ADD_BOOKKEEPER, or Hurdlr.ADD_USERS.Must be one of the following enumerations: READ_WRITE, READ_ONLY
bizTypeType of the user's business. Only present if type is Hurdlr.ADD_USERS.Must be one of the following enumerations: CONSULTANT, REAL_ESTATE_AGENT, DRIVER, INSURANCE_AGENT, RETAIL, HOST, FREELANCER, E_COMMERCE, SALES, OTHER
bizNameName for the user's business. Only present if type is Hurdlr.ADD_USERS.Any string

An example of the arguments passed to myAccountantDashCallback for the Hurdlr.UPDATE_BOOKKEEPER event type is shown below:

{
  type: "Hurdlr.ADD_BOOKKEEPER",
  bookkeeper: {
    id: 12345,
    userId: "bookkeeper's id in your DB",
    email: "[email protected]",
    firstName: "bookkeeper's first name",
    lastName: "bookkeeper's last name",
    status: "ACTIVE",
    canManageAdmins: false,
    canManageUsers: true,
    users: [
      {
        id: 6789,
        userId: "user's id in your DB",
        status: "ACTIVE",
        accessLevel: "READ_ONLY",
      }
    ]
  }
}