Chapter 2 Sales

Your love gives me such a thrill,
but your love don’t pay my bills
I need money
That’s what I want

2.1 Customers

All sales involve several key ingredients, but the single most important component is the customer! Customers reach out to Good Tree for delivery services through one of several pathways: they call us, they text us, they order through a 3rd party like Weedmaps or Leafly, but primarily they order on our eCommerce website.

2.2 Processing New Customers

A “Person Account” must be created in Salesforce before a customer can place an order. However, to ensure that we properly verify all customers, we must first create an “Unverified Customer” and convert them into a “Person Account”.

When a new customer signs up online or reaches out to us via phone call or text, Salesforce will automatically create an “Unverified Customer” with only basic information like the customer’s phone number.

Unverified Customer

If the new customer comes via Weedmaps, or Leafly you will need to manually create the “Unverified Customer” account by going to the “Unverified Customer” tab and selecting the “New” button on the top right. (NOTE: Weedmaps will be automated in near future, and Leafly has fairly limited activity, but will be automated)

Enter Unverified Customer Manually

Here is a table with the meaning of the “Unverified Customer” fields:

Fields Description Required
Lead Status Two states: Check ID, or Qualified, but should always be Check ID when you start process Yes
First Name Yes
Last Name Yes
Mobile Phone Number of customer Yes to convert
Birthdate Customer’s birthdate Yes to convert
Email Email of Customer No
Medical ID # If customer has valid medical card, include ID # here No unless customer is less than 21 years old
OnfidoWebhookRan Checkbox indicating whether unverified customer has submitted their ID on Onfido No

Once you have populated all the required fields, you can convert the “Unverified Customer” to a “Person Account” by clicking on the “Qualified” button on the top right of the page.

Qualified button to convert unverified customers to person accounts

If you forget to populate any of the required fields you should receive an informative error message:

Error message after pressing Qualified without entering birthdate

2.2.1 Onfido

When customers sign up online they are sent to a service named Onfido where they submit an image of their ID or passport. If Onfido can verify that the customer is at least 21 years old the system will automatically convert the “Unverified Customer” to a “Person Account”. However a few problems can potentially arise:

  • The customer might not actually submit their ID online for whatever reason so sometimes customers simply stop at this point in the signup process
  • Customer may submit ID, but they aren’t actually 21
  • Customer may submit ID, but Onfido can’t parse the necessary information because the image is blurry or some other reason

For the 2nd and 3rd cases customers will receive an automated text saying that they should text their ID to us for manual verification. For the 1st case customers will receive a text the following morning reminding them to complete the verification process.

It might be useful for dispatchers to be able to review Onfido results. You can view the Onfido dashboard here

PLEASE KEEP IN MIND THE CHECKBOZ AT TOP RIGHT NEEDS TO BE CHECKED!!!

Onfido page You review Onfido submissions by clicking the “Checks” tab on the left. You can then search by either phone number or by email address (but you will need to enclose the email address in quotes ie “”). You can click on the log to review the information including the image they customer submitted)

Onfido Document

By clicking on the “Documents” tab on the Onfido log page, you can see the image the customer submitted of their ID.

2.2.1.1 SCENARIO

2.3 Processing Orders

There are two concepts that are important to understand:

  • Quotes

  • Sales Orders

2.3.1 Quotes

When customers contact Good Tree over the phone or via text, they do not always end up submitting an order. The initial process where customers communicate with dispatchers, asking questions about available products, and prices is known as the “quoting” process. The terminology is slightly better suited for other industries; if you imagine for a moment that Good Tree sold wallpaper, and customers called in saying what wallpaper they wanted for their kitchen, the quoting process would involve asking how many square feet is the customer’s kitchen and then providing a price for the appropriate amount of wallpaper for that many square feet, at which point the customer would either decide to proceed with a Sales Order or potentially seek a quote elsewhere.

This means for dispatchers, quotes are the primary object you will work with. Ultimately, the goal of every quote is to be converted into a Sales Order.

2.3.2 Sales Orders

Sales Orders may seem redundant, and in some ways they are because they hold almost all of the same information that quotes hold, but Sales Orders represent an agreed upon arrangement between Good Tree and the customer. Dispatchers may need to interact with Sales Orders if customers contact us saying they want to edit or cancel their order, but ideally if the Onfleet task is fulfilled quickly there should not be any reason for dispatchers to directly interact with Sales Orders.

Sales Orders are created when quotes are converted, or when customers submit an order online. When the Sales Order is created so is the related Onfleet task for that delivery, and when the related Onfleet task is completed the Sales Order is shipped and completed. We will go into more detail about Onfleet later.

2.3.3 Person Account

The first step of processing any order is going to that customer’s “Person Account” page. If this is a new customer without a “Person Account” page you will need to follow the steps in the previous section to add the customer to the system first.

When customers contact us via phone or text, their account will be easily accessible via Twilio Flex (which we will describe in more detail later). You can also go to Person Account pages by entering the customer’s name or phone number or email in the search bar at the top of Salesforce.

Person Account info

Here is a table with the meaning of the “Person Account” fields:

Fields Description Required
First Name Yes
Last Name Yes
Mobile Phone Number of customer Yes
Birthdate Customer’s birthdate Yes
Email Email of Customer No
Medical ID Medical Card ID # No
Blocked This field indicates whether a customer has been blocked. Defaults to False Yes, but defaults to False
HasEcommerce Checkbox indicating whether customer is signed up on our website. No

Customer Notes The notes tab allows dispatchers to share info about a customer like credits or other issues from past orders.

Customer Addresses

On top right of Person Account page is a related list named Customer Addresses. These are delivery locations that linked to the customer’s account either by the customer via the website or manually by a dispatcher.

Adding Addresses

Adding a new address to a customer’s account requires going to the ‘Add Address’ tab. This provides an interactive Google Map where the address location can be validated and then saved with the button on the bottom left of the map.

2.3.4 Quote

Customer Quotations

So now that we have a verified customer ie a valid “Person Account”, and we have delivery addresses for that customer we can begin the quoting process. In the main block on the customer page, the first tab is named “Quotes”. This will display the related list of existing customer quotations along with the date they were created and their current status.

Value Description
Open This means a quote was created, but no items have been added to quote.
Priced This means a quote was created, and items were added, but the quote was NOT converted to a Sales Order.
Won This means a quote was converted to a Sales Order.

New Quote The three primary fields are the customer, the delivery address, and whether they will be paying with card. If the address is left blank it will use the customers default address, but you can override the default by entering the address name like below.

Override Delivery Address

Field Description Required
Customer Account This field is filled automatically and indicates which customer the quote is for. Yes, but has default value
Override Ship to Address If a customer has only one address, or has an address set to default, it will automatically use that address, but you can override by specifying the customer address by name here. No
IsCardPayment Check this box if customers will be paying with debit card, by default it is false and assumes customers will pay with cash. Yes, but defaults to false

New Quote

Once we have created the quote and entered the quote page we can begin adding items to the order.

Items Table

Search for the product you would like to add in the “Enter New Line” box.

Searching for WCC A…

Select the item you want to add and then wait a moment for a popup to appear that let’s you enter important info like the quantity.

New Item popup The Quantity is set to 1 by default, but can be manually updated. The “internal sell price” (it’s an accounting term), or as humans call it, the “price”, appears blank but upon saving it will automatically use the default price in the system.

The popup also indicates the current inventory for the selected item.

Inventory levels for selected product

Once the item is added taxes will automatically be calculated and the items table will display all relevant info.

Quote Line Items You can edit the fields in the table by scrolling up and clicking the “User Preferences” button.

User Preferences button

You can choose, which fields you would like to display. Below is an image of the recommended configuration.

Recommended Settings

Line items can be edited by clicking the “Edit” button above and below the items table.

Edit Button Edit Fields The Quantity and “Internal Sell Price” are the primary fields you would want to edit.

Once you have endered all the line items, and the customer agrees to proceed it is time to convert the quote to a Sales Order.

Converting the Quote At the top of quote page is all the essential information you need to validate:

  • The total price the customer will pay
  • The customer’s delivery address
  • the customer’s payment method

Once validated there is a “Create Sales Order” button that will convert the quote to a Sales Order. At this point the dispatcher should be finished, and the rest of the work should be handled on Onfleet, and Driver app (both of which we will discuss later).

2.3.5 Sales Order

For a variety of reasons dispatchers may need to interact directly with Sales Orders. Sales Orders are included on the Person Account page on the “SOs” tab.

Customer Sales Orders

Sales Order Page

Sales Order Page

The Sales Order includes many essential fields described below:

Field Description
SO Number The Name of the Sales Order ie SO-000123
Total Value The total price of the order including tax
Customer Site Sold To This is the account of the customer
IsCardPayment Indicates whether customer is paying with debit card
IsPaytender Indicates whether customer is paying online with Paytender
Paytender_Order Link to Paytender Order object that contains information about status of online payment
Override Ship To Address Override Ship To Address is the delivery address, despite the name it is always populated
IsPackaged Indicates whether driver has marked order as packaged in Driver app
IsCancelled Indicates whether Onfleet task was deleted or failed
Warehouse IMPORTANT! Warehouse indicates where the inventory for this order will be allocated from. When the related Onfleet task is assigned to a driver, this field is automatically populated with the Bundle that driver is using.
Task This is the Onfleet Task object that holds information like the driver, and delivery status

There are two extra important fields:

  • Status

  • Shipment Status

2.3.5.0.1 Status
Value Description
New Initial status
Approved Indicates order has been assigned to a driver, and is ready to be completed. Orders cannot be edited in Approved state
Revised Indicates order was approved, but has been ‘Reverse Allocated’ and can now be edited again
Cancelled Indicates the order was cancelled
2.3.5.0.2 Shipment Status
Value Description
Open Initial status
Allocated Indicates that the driver was assigned and the inventory for this order has been allocated from their bundle
Pending Pulling All Items Indicates order is allocated and approved and ready to be completed by driver
Partially Allocated Indicates there is problem with order because only some items were allocated
Back Orders Exist Backorders mean there is not enough inventory in system to allocate
All Items on Backorder Backorders mean there is not enough inventory in system to allocate
Fulfilled Once a driver completes the Onfleet task the status is Fulfilled

Ultimately none of this data should be changed manually. The Onfleet integration should handle the Sales Order workflow, but occasionally dispatchers need to edit Sales Orders.

When an order is in the ‘New’ or ‘Revised’ state new items can be added.

New Item Button New Item Form The Item and quantity are the most important fields. For commitment date simply put today, and for price you can leave $0 and then click “Price” button on top right of page to update based on default in system or you can manually set price in this form.

You can also edit or cancel existing items by scrolling to right of items table and clicking button dropdown.

If you need to edit an order that is already “Approved” you must first reverse allocate by pressing the button on the top right.

Reverse Allocate Buttons

Once you reverse allocate you will be able to freely edit the order, but once you finish editing you must return the order to the Approved state. This is done by pressing the “Allocate” button on top right, and then pressing the “Submit for Approval” button on top right. In general, if an order is already ‘Approved’ then it is already assigned to a driver, which means they can edit the order on the Driver app (discussed next chapter) without going through all these steps.

SO Buttons Sometimes customers will have to pay using a combination of cash and debit card. In this case we check the IsCardPayment box but we also populate the PartialCashPayment field with the amount of cash the customer is paying.

Partial Payment Partial Payment

Partial Payment

2.3.6 Onfleet

The next step is to assign the Onfleet task to a driver:

Onfleet

Simply drag the task to the driver who should fulfill the order. This will automatically update the information in the related task in Salesforce.

Onfleet Task in Salesforce Onfleet Key Values

There are 3 values that are essential to the Onfleet integration:

Field Description
State State takes on the values 0, 1, 2, & 3, which represent unassigned, assigned, en route, and completed respectively
Success Success indicates that the task was succesfully completed, but this value can’t be true until the state takes on value 3 since obviously the order can’t be a success before the driver completes it
Worker Worker is the driver the task is assigned to

Assigning a driver in Onfleet is equivalent to updating Worker field in Task.

Updating Driving

When the Worker field for the related Task is populated, whether by Onfleet or manually in Salesforce, the Warehouse for the Sales Orders is automatically updated to be the driver’s bundle, and the order is automatically allocated and submitted for approval.

When the state is 3, the task has been completed, and based on the outcome, whether it was successful or not, the related Sales Order will automatically mark the Sales Order as shipped and completed (or canceled if task was failed).

Mark order succesfully completed

You will see the Sales Order is successfully completed when the status is Shipped

Succesful Order

If you don’t want to manually enter Onfleet data, you can mark an order as completely shipped by pressing PickPackButton

PickPackButton

If the order is cancelled you will see a checkbox marked named isCanceled.

Cancelled Checkbox

Cancelled Order In general the Onfleet task object should never be edited directly, but it is important to understand how the data structures relate to the Sales Order workflow.

Here is summary of workflow:

Sales Workflow

2.3.6.1 SCENARIOS

2.4 Twilio Flex

  • Describe customer communication flow (ie automated messages)

  • Logging in

  • Explain interface

  • Explain task based routing

  • Admin features

2.5 Weedmaps/Leafly

Will need some help documenting this

2.6 Get Good Tree eCommerce Website

  • Summarise customer workflow

  • Talk pain points dispatchers have to help aid

2.7 Common Problems

2.7.1 Didn’t drop on Onfleet

2.7.2 I get error preventing me from adding address to order. What do I do?

Sometimes when assigning a shipping address to an order, you will see an error message. The main reason this error occurs because the address being added is in a city that does not have an associated “Delivery Zone” in our system.

Steps to resolve:

  1. Speak with manager to confirm address is actually within our delivery range. If it is not, please kindly tell the customer we do not deliver to their area.
  2. If they are within the delivery range, you will need to add the zone.

2.7.2.1 How to add a Delivery Zone

Select Zones Tab Select the “Zones” tab, and then the “New” button on the top right.

New Zone

You will be prompted to enter the necessary information.

Here is a table with the meaning of the “Zone” fields:

Fields Description Required
City Name The name of the city/delivery zone Yes
Minimum The minimum order amount to deliver to that zone Yes
Fee The delivery fee Yes
ICP The Good Tree Hub that fulfills the orders so if Bay Area select Good Tree Oakland, and if in SoCal select Good Tree LB Yes
Tax Code The Sales Tax rate object, you can usually find this just by searching the city name Yes

Once the zone is added you will be able to add the shipping address to the order.

2.7.3 The product I want to quote is not listed. What do I do?

This usually means there is no inventory for the item so it was deactivated, but it is possible the item was manually deactivated for some reason. Please contact a manager in this scenario, who can verify the items status.

2.7.4 The order didn’t drop on Onfleet

If an order doesn’t drop onto Onfleet you must manually create the Onfleet task.

Go to the Onfleet Dashboard and select the “+” button on top right.

Onfleet Create Task Button

A popup will appear where you must enter the customer’s phone number, name, and delivery address.

Onfleet Modal

Once the task is created you will be able to view it on the right. You will need to copy the ID number so double click the task on the right to get the task’s info page.

Onfleet Task Info

In the URL you will see a dynamically generated ID string that you will need to copy.

Onfleet Info Page

Once you have copied the ID string, go to the Sales Order page in Salesforce and select the Onfleet Task

Onfleet Task in Salesforce

Towards the bottom of the Task page is a field named “ID”. Paste the value from Onfleet here and save. The Onfleet task and the Sales Order are now linked, and the Onfleet notes will automatically update.

Task Page