Open core: don’t reinvent the wheel — build your fenestration software on ours.

Skip to main content

A cost group and a price group are named sets of rounding rules. A part or a glass
(sealed unit) type points at one of each, through the Cost Group and
Price Group (or $ Group) combos; an option choice has a Price Group only (its
Cost UOM field is a unit of measure, not a cost group). The group decides how the measured size is rounded
before it is multiplied by the cost or the price: length rounding, area rounding,
minimum area, and for prices also price rounding. Use this page to answer questions
such as “what does length rounding 2 do?”, “why was this glass costed as 7 sq ft?” or “why is
the cost of my profile rounded to the next foot?”.

Where the values are kept. Cost groups are the table group_costing; price groups
are group_pricing. Edit them in OJ Setup → Product Setup →
Cost Groups and Price Groups. Typical
tenants have cost groups such as 1 Parts, 2 Glass and price groups 1 Base, 2 Options,
3 Glass, 4 Grids, 5 Labor, 6 Shipping, 7 Services, 100 Other
.

Units. Imperial and metric lengths have separate values: inches for imperial items,
millimetres for metric items (so a metric step is written as 100, 200, 300 or 1000, not 1 or 2).
Areas are in square feet on imperial items and square metres on metric items.

1. Cost group settings

Setting (column) What it does Values
Length rounding (in) (lengthrounding, whole number) Imperial items: rounds a length up to the next multiple of this many inches before costing.
An exact multiple stays as it is.
0 (or negative) = no rounding. 1 = up to the next whole inch.
2 = up to the next multiple of 2 (24.5″ → 26″). 3 = next multiple of 3,
and so on. Fractions (0.5, 1/16) cannot be stored: whole numbers only.
Length rounding (mm) (lengthrounding_m, whole number) Metric items: rounds a length up to the next multiple of this many millimetres. 0 = no rounding. 100 = up to the next 100 mm (1,234 → 1,300; 1,300 stays).
1000 = up to the next metre.
Area rounding (arearounding, whole number) Rounds the area after the sides were rounded. The codes mean different things for glass
and for other parts
(see 2 and 3).
Glass: 1 = up to a whole sq ft / m²; -1 = down to a whole one;
2 = to the nearest even whole number (can go down); anything else = none.
Other parts: any value above 0 = up to the next multiple of it (1 = whole, 2 = next multiple
of 2); 0 or negative = none.
Min area (minarea) Smallest area charged for parts costed by area, in m² on a metric series and sq ft on
an imperial series. 0 = no minimum. Not used for glass, by design: a glass always uses the
minimum cost area of its own glass (SU) type, so set glass minimums there.
Any number ≥ 0.
UI rounding, Price rounding, Decimal part Present on the table but not used by any cost calculation. —

There is no waste setting on a group. Waste % comes from the glass type or the part.

2. How a glass cost is worked out

Glass uses the cost group of its glass (SU) type, and only when that type is costed by
Area. Steps, in this order:

  1. Cut size. Imperial glass is first snapped down to the series rounding step (the
    size the glass is ordered at, e.g. to 1/16″). Metric glass uses its size as is.
  2. Length rounding of each side (inches or mm), as in the table above.
  3. Area = width × height ÷ 144 (sq ft), or ÷ 1,000,000 (m²).
  4. Area rounding: 1 up, -1 down, 2 nearest even.
  5. Minimum: if the area is below the glass type’s min cost area, that minimum is used.
  6. Cost = cost per area × area × (1 + waste % ÷ 100), then any part-family and
    branch cost markup.

Worked example (imperial): glass 24 1/2″ × 36 1/2″, $5.00 per sq ft, waste 10%.

Length rounding Sides costed Area
0 24.5 × 36.5 6.210 sq ft
1 25 × 37 6.424 sq ft
2 26 × 38 6.861 sq ft

With length rounding 2 (6.861 sq ft): area rounding 0 → 6.861 sq ft = $37.74;
1 → 7 sq ft = $38.50; -1 → 6 sq ft = $33.00; 2 → nearest
even = 6 sq ft = $33.00. A minimum cost area of 8 would charge 8 sq ft whatever the rounding.

Worked example (metric): 610.4 × 927.1 mm with length rounding (mm) 100 → 700 ×
1000 mm = 0.7 m². Area rounding 1 → 1 m². Area rounding 2 → nearest even = 0, so
only the glass type’s minimum cost area keeps the cost from being 0 — avoid code 2 on small
metric glass.

Why the cut size matters: a glass 24.03″ wide is ordered at 24″. With length rounding 2 it
is costed at 24″, not 26″.

3. How a part (profile, panel, labour) cost is worked out

A part uses its own Cost Group. What happens depends on how the part is costed:

  • By length: the cut length is rounded up by length rounding (in) on imperial items or
    length rounding (mm) on metric items, and costed in feet or metres. Example: a 47.3″ profile
    with length rounding 6 in is costed as 48″ = 4 ft; a 1201.5 mm profile with 100 mm is costed as
    1300 mm = 1.3 m. United-inch parts are costed on their size without rounding.
  • By face in / face out / perimeter / weight: the part’s factor × the same rounded length.
  • By area: area rounding goes up to the next multiple of the value (1 = whole sq ft or
    m², 2 = next multiple of 2: 6.09 → 8). Then the group’s min area applies. Length
    rounding here works on the internal size units (1/64″ or 0.01 mm), so in practice it has no
    visible effect.
  • By each / volume: no rounding.

Grids and option choices use no cost-group rounding.

4. Price group settings

Setting (column) What it does
Length rounding (lengthrounding) Parts priced by length, metric: cut length rounded up to the next multiple of this many mm.
Parts priced by area (metric and imperial): used as a code on each side —
1 = up to the next whole mm / inch, 2 = up to the next even whole mm / inch,
anything else = none.
Length rounding imperial (lengthroundingi) Parts priced by length, imperial: rounded up to the next multiple of this many inches. Also
rounds each side for united-inch matrix prices. Use whole numbers only (see Known issues).
UI rounding (uirounding) Imperial united-inch matrix prices: width + height (each already rounded by length rounding
imperial) is rounded up to the next multiple of this many inches. Metric is not rounded.
Area rounding (arearounding) Parts priced by area: area rounded up to the next multiple of the value, for both m² and
sq ft (0.5 = next half). 0 = none. Area rounding imperial (arearoundingi) is not used.
Min area (minarea) Parts priced by area: smallest area charged. The same number is used as m² and as sq ft.
Price rounding (pricerounding) and Decimal part (decimalpart) Rounds the cents of a price to a step of decimal part (e.g. 0.05):
0 or 1 = none; 2 = up ($12.37 → $12.40); 3 = down ($12.37 → $12.35);
4 = closest: half a step or more rounds up, less rounds down ($12.37 → $12.35, $12.375 → $12.40). A decimal part of 0 means whole currency units. It only
runs where the company preferences roundprice (line price),
rounddiscountedprice (after discount) or roundtotal (line total) are on.
Price markup / Cost markup (price_markup, cost_markup) Option choices: the group’s markup is used; when it is 0 the choice’s own markup is used.
Written as a fraction (0.25 = 25%). Parts take markups from their part family instead.
Price category (pricecategory) Selects which customer line discounts apply to items in this group.
Discountable (discountable) Whether shipping and service charges in this group take the customer discount.
Taxable, Price from cost Stored with the group but not read by pricing:
whether a line is taxable comes from the part itself.

Face in / face out / perimeter / weight prices use the part’s cost group length
rounding, not the price group’s.

Glass prices by area use no price-group rounding: the area is the glass size, with the glass
type’s min pricing area as the only minimum. A glass type priced or costed through a matrix whose
row is the area is different: a price matrix looks up the area after the price group’s length rounding
and area rounding and the glass type’s min pricing area; a cost matrix looks up the glass area
floored at the glass type’s min cost area, with no group rounding.

Order of a line price: size × price → price rounding (if roundprice)
→ minimum price → price rounding (if rounddiscountedprice) → × quantity
→ price rounding (if roundtotal) → discount.

5. Known issues (do not use these values)

  • Fractional length steps below 1 (0.5, 0.25, 0.125) in length rounding imperial or
    UI rounding can make the item calculation never finish. Use whole inches.
  • Price rounding above 4 sets the price to 0.
  • Glass area rounding 2 is “nearest even”, so 0.58 m² becomes 0 and 6.9 sq ft becomes 6.
  • Metric parts costed by area come out 100 times too large when their cost group has a
    Length rounding (in). Keep it at 0 on cost groups used for area-costed metric parts.