How to Create Quotation Templates for CRM Quotes
Introduction
This guide shows you how to create quotation templates for CRM quotes in Easy8. A quotation template is a Word (.docx) file with tokens. When you generate a quotation, Easy8 replaces the tokens with data from the opportunity, the quote and its items, lists the quote items in tables with their totals, and attaches the finished document to the opportunity.
Target Audience
Administrator
Prerequisites
Before you start, make sure you have:
- A price book assigned to the project where your opportunities are.
- Use CRM items enabled in the CRM settings of the project. Without it, quote items and prices do not work and quotations cannot be generated.
- Products with a Product category. Item tables select items by product category.
- The Manage price book quotes permission.
How to Create a Quotation Template
Step 1: Learn the token syntax
A token is a prefix and a column name inside double curly brackets, for example {{easy_price_book_quote_name}}. When the quotation is generated, the token is replaced with the value.
- The prefix names the record the value comes from: easy_crm_case_ for the opportunity, easy_price_book_quote_ for the quote and easy_crm_case_item_ for a quote item.
- Values of a related record use the plural name of the relation and a dot, for example easy_crm_case_main_easy_contacts.city for the customer's city.
- Custom fields use cf_ and the custom field ID, for example easy_crm_case_cf_12. You find the ID at the end of the URL when you edit the custom field in Administration » Custom fields.
- Tokens are case-sensitive. One space is allowed right after the opening brackets and before the closing ones.
- The older form with percent signs, for example %easy_price_book_quote_name%, still works. Use curly brackets in new templates.
All available tokens are listed in Token Reference below.
Step 2: Add opportunity, customer and quote details
- Open your template in Word.
- Type the tokens where the values belong, for example the customer name and address, the account manager's contact details, the quote identifier and the quote dates.
- Add the currency token after every money value. Prices are printed as numbers without a currency.
Warning: Tokens in headers and footers are not replaced. Put them in the document body.
Step 3: Add a table of quote items
Item tokens work only inside a table marked for items. The table must have at least three rows: a header row, an item row and a total row.
- Insert a table with three rows. Put the column titles in the first row.
- Right-click the table and select Table Properties » Alt Text. In Title, enter PBPC- followed by the name of a product category, for example PBPC-Services. Use the Title field, not Description.
- To list several categories in one table, separate their names with a vertical bar and no spaces, for example PBPC-Implementation Services|Support Services. Items are listed category by category in this order.
- In the second row, put one item token in each cell, for example easy_crm_case_item_name, easy_crm_case_item_amount, easy_crm_case_item_unit, easy_crm_case_item_price_per_unit, easy_crm_case_item_discount and easy_crm_case_item_total_price, each in curly brackets.
- In the third row, put a label such as Services total in an earlier cell, and only a placeholder such as 0 EUR in the last cell.
- For another group of items, add another table with its own PBPC- title.
When the quotation is generated, the second row is repeated for every matching item. The number in the last cell is replaced with the sum of the listed items, and the letters with the currency code.
Warning: The category names in the title must match the product categories exactly, including capital letters and spaces. You find them in Administration » Enumerations » Product category.
Step 4: Add the final price and subtotals
- Quote total – easy_price_book_quote_price followed by easy_price_book_quote_currency. With Use CRM items enabled, the quote price is the sum of all its items.
- Total of one item table – the placeholder in the last cell of the table, filled automatically.
- Subtotal of one product category anywhere in the document – easy_price_book_quote_price_book_product_category_ followed by the category ID. You find the ID at the end of the URL when you edit the category in Administration » Enumerations » Product category.
There is no token for VAT or a total including tax. Write VAT terms as text, or use a custom field of the opportunity.
Step 5: Upload the template
- Go to Administration » Price books and open the price book used by the project.
- Attach the .docx template as a file attachment.
- Click Save.
Every file attached to a price book of the project is offered as a template, so attach only .docx files there.
Step 6: Generate a quotation
- Open the opportunity.
- Right-click the quote and select Generate quotation.
- Choose the template and click Generate quotation.
The generated document is named after the quote and attached to the opportunity. For the active quote, Easy8 uses the items of the opportunity. For an optional quote, it uses the items of that quote.
Quotation Template Properties
- A misspelled or unknown token is not an error. It stays in the document as typed.
- Dates use the date format, and numbers the decimal and thousands separators, of the user who generates the quotation.
- When a paragraph is processed, all its text takes the formatting of its first part. A bold word or a link inside a sentence is lost.
- An item belongs to the category of its price book product. For a bundle, the category of the first product in the bundle is used.
- Items added manually, without a price book product, have no category and never appear in an item table.
- An item whose category is not named in any table is not printed, but it still counts in the quote price.
- Only the second row of an item table is repeated. The header and the item row must each be a single row.
- The last cell of an item table is always overwritten. Numbers become the total and words become the currency code. If the cell is empty, no total is printed.
Token Reference
Tokens are listed without curly brackets. Add the brackets in the template.
Quote
Quote tokens are filled when you generate the quotation from a quote. Quotes have no custom field tokens.
| Token | Value |
|---|---|
| easy_price_book_quote_name | Quote name |
| easy_price_book_quote_price | Total price of the quote |
| easy_price_book_quote_currency | Currency code, for example EUR |
| easy_price_book_quote_price_book_product_category_ + ID | Sum of the quote items in the product category |
| easy_price_book_quote_start_date, easy_price_book_quote_due_date | Start date, due date |
| easy_price_book_quote_usermonths, easy_price_book_quote_userlimit | Number of months, user limit |
| easy_price_book_quote_guid | Unique quote identifier |
| easy_price_book_quote_author, easy_price_book_quote_created_at | Author, creation date and time |
| easy_price_book_quote_brand, easy_price_book_quote_easy_product_solution, easy_price_book_quote_easy_price_book_product_version | Brand, solution, product version |
| easy_price_book_quote_invoice_to_partner | Invoice to partner (Yes or No) |
Opportunity
| Token | Value |
|---|---|
| easy_crm_case_id, easy_crm_case_name, easy_crm_case_description | ID, name, description |
| easy_crm_case_price, easy_crm_case_currency | Price, currency |
| easy_crm_case_price_book_product_category_ + ID | Sum of the opportunity items in the product category |
| easy_crm_case_weighted_forecast, easy_crm_case_case_probability | Weighted forecast, probability |
| easy_crm_case_easy_crm_case_status, easy_crm_case_sale_type | Status, sale type |
| easy_crm_case_contract_date, easy_crm_case_next_action, easy_crm_case_paid_on, easy_crm_case_sold_on, easy_crm_case_closed_on, easy_crm_case_locked_at | Dates |
| easy_crm_case_created_at, easy_crm_case_updated_at | Creation and update date and time |
| easy_crm_case_project | Project name |
| easy_crm_case_email, easy_crm_case_email_cc, easy_crm_case_telephone | Contact fields of the opportunity |
| easy_crm_case_author, easy_crm_case_assigned_to, easy_crm_case_external_assigned_to | Author, account manager, external account manager |
| easy_crm_case_easy_last_updated_by, easy_crm_case_easy_closed_by | Users who last updated and closed the opportunity |
| easy_crm_case_main_easy_contact, easy_crm_case_accounted_by | Customer name, partner name |
| easy_crm_case_easy_crm_case_payment_method, easy_crm_case_need_reaction | Payment method, need reaction (Yes or No) |
| easy_crm_case_tags, easy_crm_case_easy_external_id, easy_crm_case_affiliate_uuid, easy_crm_case_easy_entity_activities | Tags, external ID, affiliate ID, sales activities |
| easy_crm_case_cf_ + ID | Opportunity custom field |
Customer
Customer tokens start with easy_crm_case_main_easy_contacts. (with a dot). With easy_crm_case_easy_contacts. instead, the same tokens print all related contacts, separated by commas.
| Token | Value |
|---|---|
| easy_crm_case_main_easy_contacts.contact_name, .firstname, .lastname | Full name, first name, last name |
| easy_crm_case_main_easy_contacts.organization, .street, .city, .postal_code, .country | Address. The country is printed as an ISO code, for example CZ. |
| easy_crm_case_main_easy_contacts.email, .telephone, .website | Contact details |
| easy_crm_case_main_easy_contacts.registration_no, .vat_no, .vat_rate | Company ID, VAT ID, VAT rate |
| easy_crm_case_main_easy_contacts.bank_account, .iban, .swift, .bic, .variable_symbol | Bank details |
| easy_crm_case_main_easy_contacts.billing_ + any address, contact, company or bank name above, for example .billing_street | Billing information instead of contact information |
| easy_crm_case_main_easy_contacts.id, .guid, .parent, .contact_groups, .easy_contact_type, .is_global | Record data |
| easy_crm_case_main_easy_contacts.assigned_to, .customer_success_manager, .external_assigned_to, .author | Users |
| easy_crm_case_main_easy_contacts.easy_contact_status, .easy_contact_level, .easy_contact_industry, .easy_contact_customer_left_reason | Classifications |
| easy_crm_case_main_easy_contacts.account_opened, .account_closed, .account_duration | Account dates, duration in days |
| easy_crm_case_main_easy_contacts.expected_revenues_this_year, .last_year_revenues, .lifetime_revenues | Revenues |
| easy_crm_case_main_easy_contacts.accounted_by, .tags, .easy_external_id, .time_zone, .referencable, .created_on, .updated_on | Other data |
| easy_crm_case_main_easy_contacts.cf_ + ID | Account custom field |
Account Manager
For the external account manager, use easy_crm_case_external_assigned_tos. instead of easy_crm_case_assigned_tos.
| Token | Value |
|---|---|
| easy_crm_case_assigned_tos.firstname, .lastname, .login | Name, login |
| easy_crm_case_assigned_tos.mail, .phone | Email, phone |
| easy_crm_case_assigned_tos.easy_user_type, .roles, .groups_names | User type, roles, groups |
| easy_crm_case_assigned_tos.id, .status, .admin, .last_login_on, .created_on, .updated_on | Account data |
| easy_crm_case_assigned_tos.cf_ + ID | User custom field, for example a direct phone number |
Partner
Partner tokens start with easy_crm_case_accounted_bies. (with a dot). The spelling accounted_bies is correct.
| Token | Value |
|---|---|
| easy_crm_case_accounted_bies.id, .name, .website, .region, .description, .valid_until | Partner data |
| easy_crm_case_accounted_bies.channel_manager, .external_channel_manager, .author, .easy_partner_level | Users, partner level |
| easy_crm_case_accounted_bies. + any address, contact, company, bank or billing name listed for the customer | Partner address and billing details |
| easy_crm_case_accounted_bies.cf_ + ID | Partner custom field |
Quote Item
Item tokens work only in the second row of a PBPC- table. The item description has no token.
| Token | Value |
|---|---|
| easy_crm_case_item_name, easy_crm_case_item_amount, easy_crm_case_item_unit | Item name, quantity, unit |
| easy_crm_case_item_price_per_unit, easy_crm_case_item_total_price | Unit price, line total after discount |
| easy_crm_case_item_discount | Discount in percent, without the percent sign |
| easy_crm_case_item_product_code, easy_crm_case_item_easy_external_id | Product code, external ID |
| easy_crm_case_item_easy_crm_cases. + an opportunity column, for example easy_crm_case_item_easy_crm_cases.name | Opportunity values. Customer and user values are not available here. |
| easy_crm_case_item_easy_price_book_quotes. + a quote column, for example easy_crm_case_item_easy_price_book_quotes.currency | Quote values |
General Tokens
| Token | Value |
|---|---|
| today_date, today, date | Today's date |
| now | Current date and time |
| year, this_month_number, this_month_name, last_month_number, last_month_name | Calendar values |
| user_name, user_first_name, user_last_name, user_signature | The user who generates the quotation |
Our Recommendations
- Start from a working template and change it step by step. Generate a test quotation after each change.
- Copy the product category names from Administration » Enumerations » Product category into the PBPC- titles, so they match exactly.
- Keep each token, and any text that needs its own formatting, in a separate paragraph or table cell.
- Add items to quotes from the price book, not manually, so they appear in the item tables.
- Attach only .docx templates to price books.
Troubleshooting
| Problem | Solution |
|---|---|
| A token appears unchanged in the generated document | Check the spelling against Token Reference. Move tokens from the header or footer into the body. For quote tokens, generate the quotation from the quote. |
| Item tokens appear unchanged | Move them to the second row of a table whose alt text Title starts with PBPC-. |
| An item table is empty or items are missing | Check that PBPC- is in the Title field, that the category names match exactly, and that the items were added from a price book. |
| Items appear above the table header | Add a total row. The table needs at least three rows. |
| The total shows only the currency, or the label is replaced by the currency | Put the label in an earlier cell and only a placeholder such as 0 EUR in the last cell. |
| Prices appear without a currency | Add easy_price_book_quote_currency after each price. |
| The template is not offered | Attach it to a price book assigned to the project. |
Conclusion
You have created a quotation template in Easy8. With tokens and item tables, your quotations are generated with current customer data, quote items and totals, ready to send to the client.
