Best Practice: Down-Payment Invoicing
Certain business models require companies to make advance contributions for a deal – like project-specific purchases of supplies, upfront deliveries, etc. In such cases, companies may demand down payments from their customers to ensure that the customers will follow through with the orders they place. The advance payment is then to be offset with a final invoice.
A typical process may be:
(1) customer places order
(2) company issues advance invoice
(3) customer executes advance payment, company registers payment entry
(4) company delivers order and tracks actual consumption
(5) company issues final invoice, offsetting the advance payment
(6) customer executes final payment, company registers payment entry
Now assume that a company controls their deals, involved products etc. using opportunities and opportunity products in Salesforce, and wants to create the down-payment invoices and the final invoices out of them. Enter JustOn: To cover this use case, you combine JustOn's (legacy) opportunity billing and deposit invoicing.
Doing so, the typical process as outlined above breaks down to the following main steps:
Stage | Operation in Salesforce | Operation in JustOn |
---|---|---|
Customer requests delivery | Create opportunity | |
Company makes proposal | Update opportunity, create opportunity products | |
Customer and company negotiate scope and conditions | Create/update opportunity products | |
Customer accepts proposal/places order | Update opportunity to stage won (or similar) |
Create deposit invoice from opportunity, triggered by opportunity update to won |
Customer executes advance payment | Register payment entry Create (deposit) payment balance |
|
Company delivers negotiated goods | Update opportunity to stage delivered (or similar) |
Close deposit invoice, triggered by opportunity update to delivered Unregister (deposit) payment balance from deposit invoice |
Company registers actual consumption | Update opportunity products | |
Company signals completion | Update opportunity to stage complete (or similar) |
Create final invoice from (updated) opportunity, triggered by opportunity update to complete Register (deposit) payment balance with final invoice, reducing the grand total |
Customer executes final payment | Register payment entry Create (final) payment balance Move final invoice to status Paid |
Combining opportunity billing with deposit invoices
Modeling this business use case with JustOn comprises at least these configuration tasks:
- Adding invoicing fields to opportunity
- Creating opportunity filters
- Adding deposit invoice fields to opportunity
- Configuring deposit invoice display
- Creating flow for closing deposit invoices
Info
Once set up as outlined in the example, JustOn automatically
- creates the deposit invoice when you set your opportunity to
won
- closes the deposit invoice when you set your opportunity to
delivered
- creates the final invoice when you set your opportunity to
complete
Adding Invoicing Fields to Opportunity
In order to hold the required invoicing data, you must add new fields to the Opportunity object.
- Navigate to the fields list of the Opportunity object.
-
Create the following new fields as required.
Mandatory fields
Field Label API Name Data Type Description Invoice Run ON_LastInvoiceRun Lookup (Invoice Run) Shows the last invoice run that has processed this opportunity Last Error ON_LastError Text (255) Shows possible errors occurred during the last invoice run Optional fields
Field Label API Name Data Type Description Email Contact ON_EmailContact Lookup (Contact)
or
Formula (Text)Shows a related contact Gross Invoice ON_GrossInvoice Boolean True if a gross invoice is to be generated Email Invoice ON_EmailInvoice Boolean True if the invoice is to be be sent via email Print Invoice ON_PrintInvoice Boolean True if the invoice is to be be printed For help about creating fields, see Managing Object Fields.
Info
You can add more fields using the ON field mechanism.
Creating Opportunity Filters
To define which opportunities to include in the invoice run, you create custom filters.
Info
At least one filter is required.
-
Click to enter Setup, then open Custom Settings.
In Salesforce Lightning, navigate to Custom Code > Custom Settings.
In Salesforce Classic, navigate to Develop > Custom Settings.
-
Click Manage in the row of Filters.
-
Create opportunity filter(s) as required, following the examples below.
For opportunity filters, a condition is mandatory.
For help about creating filters, see Filters.
Following the example, create these filters:
Name | Target | Condition | Notes |
---|---|---|---|
Won | Opportunity | StageName = 'won' |
Used when creating the deposit invoice |
Complete | Opportunity | StageName = 'complete' |
Used when creating the final invoice |
Adding Deposit Invoice Fields to Opportunity
In order to hold the required deposit invoice data, you must add new fields to the source object, that is, the Opportunity object.
- Navigate to the fields list of the source object.
-
Create the following new fields.
API Name Data Type Description ON_Type Text (255) Must be set to Deposit
in order to create deposit invoices. Is cleared automatically when the deposit invoice is closed.ON_ProformaInvoice Lookup (Invoice) Shows the related pro forma or deposit invoice. To have JustOn create a deposit line item, create one of the optional fields:
API Name Data Type Description ON_DepositRate Percent (3,2) If set, JustOn creates a deposit line item with an amount of Deposit Rate * Total
on the deposit invoice.
If both a deposit rate and a deposit amount is defined, the amount takes precedence.ON_DepositAmount Currency (16,2) If set, JustOn creates a deposit line item with the specified amount on the deposit invoice.
If both a deposit rate and a deposit amount is defined, the amount takes precedence.For help about creating fields, see Managing Object Fields.
Configuring Deposit Invoice Display
Adjusting Invoice Texts
Usually, a deposit invoice needs other texts on the printed document than the final invoice. You can therefore define a template detail – named Deposit
– to provide appropriate texts.
For further information about template details and invoice PDF contents, see Configuring Template Details and PDF Contents.
The following fields are relevant on the template and the template detail:
Field | Description | Example | Target |
---|---|---|---|
Display Type | Specifies the type of the invoice to be printed to the PDF. It should reflect the nature of the pro forma or deposit invoice. | Advance Invoice |
Template Detail |
Text 2 | Text to be rendered below the invoice line item table. Use it, for example, to describe how the deposit can be made (bank account etc.) and to specify the payment terms. | Template Detail | |
Deposit Title | Short description of the nature of the deposit This field is mandatory if you have set a deposit rate or a deposit amount. |
Advance Payment (50%) |
Template |
Deposit Description | Long description of the nature of the deposit | Template |
- Open the template or template detail to be edited.
-
Click next to the intended field and specify the corresponding text as required.
Alternatively, you can click Edit in the detail view to edit all fields at once.
-
Click Save.
Adjusting Spacing Between Deposit Invoice Line Item Table Parts
As explained in Deposit Invoice Structure, the deposit invoice first lists the invoice line items as Information
type invoice line items, then shows an invoice line item of the type Deposit
, which represents the advance payment. In order to visually separate the two table parts, add the following custom CSS rule to the invoice template:
- Open the template to be edited.
-
In the Layout & Design section, click next to the
Custom CSS
field and specify the CSS code as required.tr.Deposit.firstRowAfterSubtotal td { padding-top: 2.5em; }
-
Click Save.
Enabling Deposit Gross Display
As explained in Deposit Invoice Structure, the deposit invoice lists the invoice line items as Information
type invoice line items, followed by a subtotal section with tax breakdown. Optionally, you can display a line that shows the gross value for the Information
type invoice line items.
To do so, add the following custom CSS rule to the invoice template:
- Open the template to be edited.
-
In the Layout & Design section, click next to the
Custom CSS
field and specify the CSS code as required..invoice-table .subtotal-calculated.criteria-forced.gross { display: table-row; }
-
Click Save.
Creating Flow for Closing Deposit Invoices
Closing deposit invoices requires a flow that calls the appropriate Apex class provided by JustOn. It closes the deposit invoice and prepares the source object for creating the final invoice (for details, see Deposit Invoice Closure).
Note
Depending on your use cases, the flow setup and the objects to involve will vary.
Following the example, you want the flow to be triggered when the opportunity is moved to the stage delivered
.
- Click to enter Setup, then navigate to Process Automation > Flows.
- Click New Flow.
- Select
Record-Triggered Flow
and click Create. -
Configure the Start element.
Option Value Object Opportunity
Trigger A record is updated
Conditions All Conditions Are Met (AND)
1:StageName
Equals
delivered
2:StageName
Is changed
{!$GlobalConstant.True}
3:ON_ProformaInvoice__c
Is null
{!$GlobalConstant.False}
Optimize for Actions and Related Records
-
Click and add the following Action element.
Option Value Action Close Proforma Invoice
Input Values Object Id: {!$Record.Id}
Specify a label and an API name as required.
-
Click Save.
Specify a label and an API name as required.
-
Click Activate.
This triggers JustOn to execute the flow when the opportunity is moved to the stage
delivered
: It closes the deposit invoice and prepares the opportunity for creating the final invoice.For help about creating flows, see Flows in the Salesforce Help.
Related information: