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.