Pricing Models
Each bundle picks one of three pricing models via the parent product’s
PricingModel__c field. The model decides how the parent total relates
to the child line totals.
A bundle must have at least one model: Product Manager won’t save a bundle with Pricing Model blank. If a bundle line is ever saved with no model (for example, a product authored outside Product Manager), Pinion prices it as Roll-Up. There is no org-wide default model in Configurator Settings.
Standard
The parent has its own list price. Children persist with UnitPrice = $0 and TotalPrice = $0 — they’re present for configuration tracking
but carry no dollars. No magic — the bundle is essentially a
convenience wrapper around the parent product’s price.
When to use: “fixed-price bundle, options are decorative.” The parent always costs the same; the option choice doesn’t affect the total.
Roll-Up
The parent’s price is the sum of the options’ contributions, then
divided by the parent quantity. The parent carries the dollars: its
UnitPrice and BundlePrice__c are that rolled-up per-unit price, so
Quantity × BundlePrice__c is the bundle total. The children persist
UnitPrice = $0 and TotalPrice = $0, and keep each option’s per-unit
price in ItemizedPrice__c. (A discount option is the exception: it
persists its negative price in every model.)
Worked example. A bundle has a Component at $400 (option quantity 1) and an Accessory at $600 (option quantity 1). At parent quantity 1 the contributions are $400 + $600 = $1,000, so the parent unit price is $1,000. At parent quantity 4 the Component scales (4 × $400 = $1,600) and the Accessory doesn’t ($600), so the contributions are $2,200 and the parent unit price is $2,200 / 4 = $550. The parent line totals 4 × $550 = $2,200; both option lines total $0.
When to use: “bundle price is determined by what’s in it.” A customer’s hardware-and-services bundle where the rep picks options and the parent total reflects what was picked.
Itemized
Each child carries its own line total independently, and the parent
line saves at $0: its UnitPrice is 0, and its BundlePrice__c holds the
bundle’s per-unit price derived from the children. The bundle’s total is the
sum of its child line totals. The difference from Roll-Up: the children are
the canonical lines, and the parent is a header. Itemized bundles show every option as its own row on the
quote PDF, each with its price, and the bundle row prints the bundle
subtotal (the sum of its option rows). Roll-Up and Standard bundles print
the price on the bundle row and mark their option rows Included.
When to use: “the customer cares about the line-by-line breakdown.” Multi-year subscription bundles, professional-services bundles where each line is invoiced separately, etc.
How the quote document prints a subscription bundle
The generated quote reads the persisted line items, never a private
recalculation, so what it prints is what the deal rolled up. A
subscription line’s persisted quantity spans the contract term (two
bundles over three years bill as six bundle-years), and the document
prints that as units × term, 2 × 3 yr, so quantity × term × unit price
ties to the line total on the page. Options follow the bundle’s term: a
Component prints 2 × 3 yr, a static Accessory 1 × 3 yr, and a Discount
option, which is never term-scaled, prints 1. A one-time product prints
its plain quantity. The template’s line-item table can add a dedicated
Term column; the Quantity column then prints the bare unit count. See
Quote Templates.
Related
- Bundle Math — Effective Quantity — how each child’s quantity is derived before the model runs.
- The Universal Invariant — the equation that holds across all three models.