The Venue Ops Document Template system replaces the Custom Forms that were used in EB Classic. This system starts with template models that were designed around several key document types that are fairly standard in the convention center.
Standard Document Types
In VenueOps, a separate template model exists for each of the primary document types.
Sales - Proposal
The proposal is sent to prospective customers to advertise the venue and destination. It usually highlights key selling points and presents a proposed use of space, along with estimated pricing for rental and possibly F&B or other event services.
Sales - Contract
The contract the binding agreement between the venue and the customer that secures the space for the event. The contract typically confirms the lessee and lessor information, lists the contracted spaces, rental rates, and a payment schedule for the facility rental. Other estimates may be included as well. The contract contains lengthy legalese detailing the lease agreement. It has signature lines on the last page and may have additional exhibits attached as well.
Sales - Addendum
The addendum updates any changes made that differ from the original contract or lease agreement. Typical changes include change in dates/time or rooms being leased.
Events - Event Order
Event orders encompass both an event wide report (often called the “Event Report” or “Event Document” or “Event Resume”) that usually includes primary information (event date, spaces, contact info), a timeline or schedule, and notes specific to each department.
Event orders are also used to generate function specific documents (usually known as BEOs or Banquet Event Orders). These typically include the primary information along with a function specific schedule, and department specific notes along with pricing for goods and services needed for each function. In some venues, BEOs only include food and beverage items (with the operational details displayed on the Event Resume); these are typically venues coming from EBMS. In other venues, the BEOs are used by all departments including operations, and there is no single event document but rather a collection of BEOs; these are typically venues coming from Delphi or the hotel world.
Events - Cost Estimate
The cost estimate displays the list of all costs/charges for the event, typically broken out by departments and itemized. The cost estimate does not have any operational details. It is sent by the event manager to the client so they have an up to date estimate on the final cost of the event.
Events - Invoice
The invoice is used to bill the client for all of the charges associated with the event. An event may have only one or multiple invoices. Invoices need to show each itemized charge along with any taxes, discounts, service charges, or payments made against the event.
Definitions
- Froala - this is the WYSIWYG editor that is used to create and edit the layout and formatting of the documents.
- Handlebars.js - this is the system and syntax used to populate data from the system into the documents. Named due to use of the curly braces {{ }} to denote syntax.
- Helper - an object used to format data such as properties or collections for proper display
- Model - a model represents an entity with various properties (e.g. Opportunities, Accounts, and Rooms are all models).
- Property - the attributes of a model (e.g. for an Opportunity: Name, Start Date, End Date, ID number).
- Collection - a collection of models within another model. For example, an Event may have a collection of Functions.
Models and Properties
Data fields in VOPS are known as properties of certain models. Models represent real life entities such as a Sales Agreement, an Opportunity, or an Account.
The fundamental model will be the document template type, which in turn grants access to available models for that specific document. The Sales app utilizes a general Sales Agreement template model (used for Proposals, Contracts, and Addendums) while the Events app has separate document template models for Event Orders, Cost Estimates, and Invoices. The fundamental template model does not need to be expressed as this is automatically set when you select the type of document you are building in the support app.
Models have properties which are the characteristics or attributes of that model. In handlebars syntax, this is expressed as
{{Model.Property}}
For example, the Name is a property of the Opportunity. This is expressed as
{{Opportunity.Name}}
The Street Address is a property of the Account and would be expressed as (using separate components):
{{Account.AddressStreet}} {{Account.AddressUnit}}
{{Account.AddressLocality}}, {{Account.AddressRegion}} {{Account.AddressPostalCode}}
{{Account.AddressCountry}}
{{Account.AddressLocality}}, {{Account.AddressRegion}} {{Account.AddressPostalCode}}
{{Account.AddressCountry}}
Models can contain one or more related models, and as such are “nested” within each other, extending multiple levels deep. For example, the EventOrder model contains the Event, which contains the Account model (which has its own properties such as address):
{{Event.Account.AddressStreet}}
Models can also contain a collection of other models. A collection represents multiple items of the same model, contained within another. For example, the sales Opportunity Pricing model includes a collection of Rooms (each being its own model with its own properties) as well as a collection of PaymentScheduleItems (each having its own properties).
{{Charges.RentalCharges...}}
Collections are expressed using helpers such as {{#each}} or {{#tablerow}} which will be explained in greater detail. Typical expression of a collection:
{{#each Pricing.Rooms}}{{RoomName}}{{/each}}
Properties can exist in different types: string, Int32 (integer), Decimal, Boolean (true/false), etc. Properties can also exist as general model, such as the TemplateMoneyModel. This means that all properties stored in currency amounts (such as a Rental Rate) can be expressed through the properties available to the Template Money Model (which includes the Amount and the Currency). Similarly, within the Pricing.Rooms model (which is a collection of all Rooms booked for an opportunity), the Date of each booked room is modeled using the OptionalDateTimeModel which includes properties of Date, IsAllDay (true or false, useful for conditionals), StartTime, and EndTime.
Helpers
Helpers are special syntax used to aid in proper formatting or display of models and their properties. Helpers exist as either inline (where they prefix a property/model) or as a block helper enclosed in an “opening” tag, prefixed with pound sign (“#”) and a “closing” tag prefiexed with back slash (“/”). For example:
Inline helper:
{{helper model}}
Block helper:
{{#helper}}
{{model.property}}
{{/helper}}
{{model.property}}
{{/helper}}
With
This prefixes all contained fields under a certain model. For example:
{{#with Account}}
{{AddressUnit}} {{AddressStreet}}
{{AddressLocality}}, {{AddressRegion}} {{AddressPostalCode}}
{{AddressCountry}}
{{/with}}
{{AddressUnit}} {{AddressStreet}}
{{AddressLocality}}, {{AddressRegion}} {{AddressPostalCode}}
{{AddressCountry}}
{{/with}}
Is equivalent to:
{{Account.AddressUnit}} {{Account.AddressStreet}}
{{Account.AddressLocality}}, {{Account.AddressRegion}} {{Account.AddressPostalCode}}
{{Account.AddressCountry}}
{{Account.AddressLocality}}, {{Account.AddressRegion}} {{Account.AddressPostalCode}}
{{Account.AddressCountry}}
Each
Each is a repeater that repeats the enclosed block for all items within a collection. For example:
{{#each Pricing.Rooms}}{{RoomName}}{{/each}}
This will repeat {{RoomName}} for each Room in the Pricing model.
You can add line breaks or other text, for example:
{{#each Functions}}
Room: {{RoomName}}
Date: {{date Date.Date}}
Time: {{time Date.StartTime}} - {{time Date.EndTime}}
{{/each}}
Room: {{RoomName}}
Date: {{date Date.Date}}
Time: {{time Date.StartTime}} - {{time Date.EndTime}}
{{/each}}
This will create a block of text for each Function that lists the Function Room, Date, and Time as bulleted list.
Each is also used with a list of strings. In this case, use {{this}} to output the string. You can insert a delimiter as well (use {{#unless @last}} to create a separated list):
{{#each RoomNames}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
Tablerow
Tablerow is a special helper that repeats over a collection, similar to each, but creates a new table row for each item. This is commonly seen in invoices or schedules that display a collection on information in a table. Tablerow has to be used within a table row. For example:
| Date | Start Time | End Time | Function Name |
|
{{#tablerow Charges.RentalCharges}}{{date Date}} |
{{time StartTime}} |
{{time EndTime}} | {{FunctionName}}{{/tablerow}} |
Unless
Unless is a conditional that will only display the enclosed text if a condition is met. Use with Else to handle the output if the condition is NOT met. For example:
{{#unless Date.IsAllDay}}{{time Date.StartTime}} - {{time Date.EndTime}}{{else}}All Day Event{{/else}}{{/unless}}
This will show the start and end time, unless it is an all day event, in which it will show “All Day Event”
Unless can also be used in conjunction with `@last` to insert a delimiter for a collection. The `@last` checks to see if the item is the last in the collection and will not insert the delimiter if it is:
{{#each RoomNames}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
This will produce a comma separated list of rooms without inserting a comma after the last room on the list.
If
If is a conditional that is essentially the opposite of the Unless conditional. For example, to show “All Day” for an event that is booked for all day:
{{#if IsAllDay}}All Day{{else}}{{jjoin-distinct (time Start) (time End) ‘ - ‘}}{{/if}}
This example combines {{#if}} with an {{else}} clause, that specifies what to display if the conditional is not met. This also uses the join-distinct helper to display the start and end times separated by a hyphen, but will not join the end time if the start and end are the same.
Money
This is an inline helper that displays any property that is a “TemplateMoneyModel”. It will format the appropriate currency symbol and amount. For example:
{{#each EventWide.LaborRequirements.Items}}{{money Price}}{{/each}}
Number
This will cause the output to display whole numbers unless it has a decimal value. Simply add the number helper in front of the numeric property in the syntax:
{{number Quantity}}
If Quantity = 2, then output = 2. If Quantity = 2.5, then output = 2.5. If you do not use the {{number _}} helper, then 2 is output as 2.0.
Date
Date is an inline helper that displays any property that is using the “OptionalDateTimeModel”. For example:
{{date Function.Date}}
Date helpers can use any of the custom formatting available in NodaTime:
http://nodatime.org/1.3.x/userguide/localdate-patterns.html
For example:
{{date Datenow "MMMM"}} {{date Datenow "YYYY gg"}}
Will generate:
February 2017 A.D.
The most common formats are shown below:
| Format | Data | Example Syntax | Example Output |
| “Short format” | 2017-01-01 |
{{date Date}} |
1/1/2017 |
|
“Long format” |
2017-01-01 |
{{date Date “D”}} |
Monday, January 01, 2017 |
| Era | A.D. or B.C. |
{{date Date “g”}} |
A.D. or B.C. |
| Year |
2017-01-01 |
{{date Date “yy”}} {{date Date “yyyy”}} |
17 2017 |
| Month |
2017-01-01 |
{{date Date “M”}} {{date Date “MM”}} {{date Date “MMM”}} {{date Date “MMMM”}} |
1 01 Jan January |
| Day |
2017-01-01 |
{{date Date “d”}} {{date Date “dd”}} |
1 01 |
| Day of Week |
2017-01-01 |
{{date Date “ddd”}} {{date Date “dddd”}} |
Mon Monday |
You can combine syntax in the parentheses. Ex: {{date DateNow "dd MMMM yyyy"}}
Can do slashes or hyphens: Ex: {{date DateNow "dd/MM/yyyy"}}
Time
Similar to the Date helper, but used to displayer time for any property using the “OptionalDateTimeModel”. For example:
{{#with Functions}}{{time Date.StartTime}} - {{time Date.EndTime}}{{/with}}
Time helper can use any of the custom formatting available in NodaTime (http://nodatime.org/1.3.x/userguide/localtime-patterns.html). Common examples:
| Format | Example Syntax | Example Output |
|
“short format” |
{{time Date.StartTime “f”}} |
6:30 pm |
|
Hour only - 24h time |
{{time Date.StartTime “HH”}} |
18:30 |
|
Hour only - 12h time |
{{time Date.StartTime “hh”}} |
6:30 |
|
Am / pm - full |
{{time Date.StartTime “tt”}} |
pm |
|
Am / pm - one letter |
{{time Date.StartTime “t”}} |
p |
Join-distinct
Join-distinct compares a series of values and only concatenates distinct values with the specified delimiter. This helper is useful for conditional ate ranges, which will output only one date for a single day event while showing both start and end dates if they are different.
Event on Jan 1, 2017 > {{join-distinct (date Start “D”) (Date end “D”) ' - '}} > January 1, 2017
Event from Jan 1-3, 2017 > {{join-distinct (date Start “d”) (Date end “d”) ' - '}} > 01/01/2017 - 01/03/2017
Event from Jan 1-3, 2017 > {{join-distinct (date Start “D”) (Date end “D”) ' through '}} > January 1, 2017 through January 3, 2017
Creating a document in VenueOps
Creating a new Template
- Log in to root.
- Find the account.
- Click Manage Templates.
- Decide the template model (agreement, event order, cost estimate, or invoice).
- Click to add a new template.
- Create the document in Froala editor.
Tables
Images
Images are added and stored in Base64 encoding directly in the source code of the document. Because of this there is no need to upload images or assets to a media library. To add an image, simply drag and drop onto the editor, or use the insert image tool on the top toolbar. Once the image is added, you can click on the image itself to show an additional set of tools and options for re-sizing, alignment, or setting in-line with text.
Comments
0 comments
Article is closed for comments.