Octibiz
Demo

Durchsucht Website und Dokumentation gemeinsam. Enter zeigt alle Treffer, Esc schließt.

Price lists

Overview

A price list bundles rates: prices and discounts that apply instead of the standard price on the article. Price resolution picks the most specific matching list — a list for exactly this customer beats the global one.

Four scopes are available:

  • Global — applies without further condition.
  • Customer — applies to a named customer.
  • Project and role — the same binding to a customer, meant for project- or role-specific

rates (an hourly rate per role, for example).

The page lives in the settings because it maintains master data: what stands here affects every future document. Documents already written are untouched — their amounts are frozen there.

Core tasks

Search and narrow down. Four filters sit above the list: scope, customer, brand and status (active only or inactive only). They filter on the server, not just the page on screen. The brand filter shows the lists of the selected brand plus the brandless ones.

Create and edit. The dialog carries the header data on top and the rate table below. Pick a scope other than "global" and the customer becomes mandatory — without it a customer, project or role list is never picked up. On creation the brand is pre-filled from the brand switcher; if that stands on "all brands", it stays empty.

Maintain rates. "Add rate" appends a row. Per row: article, role key, amount, discount, valid from and valid to. A rate without article and without role acts as the general rate of the list. Rows without an amount are dropped on save.

Identity of the rates. Existing rates keep their identity on save — they are reconciled, not replaced. That matters because licences and contracts refer to exactly those rows. A row you delete in the dialog disappears there as well.

Delete. Deleting a price list removes its rates with it. A confirmation precedes it; there is no recycle bin for this.

Fields in detail

The What it does column says what changes in the system — not what the field is called. The name behind the label is the API field.

FieldRequiredValues / formatWhat it does
Name nameyestext, max. 255 charactersThe name of the list in selection, filter and price resolution.
Scope scopenoglobal, customer, project, role (default global)When the list is eligible at all. The narrower the scope, the sooner it beats the global list.
Customer customerIdwith scope ≠ globalan existing customerWhom the list is bound to. With "global" the field is cleared on save.
Active activenoyes/noOff means: the list is no longer consulted during price resolution. The rates are kept.
Brand brandIdnoone of your brandsWhich brand the list applies to. Empty means: all brands — the state of every legacy list. The cut acts on the selection, not on the calculation.
Rates ratesnolist of rate rowsThe actual prices and discounts, see below.

A rate row

Rate fieldValues / formatWhat it does
Articlean article from the catalogue, or emptyWhich article the rate applies to. Empty means: all articles.
Role keytext, or emptyWhich role the rate applies to — the hourly rate per role. Empty means: all roles.
RateamountThe price that applies instead of the standard price. Without an amount the row is dropped on save.
Discount0 to 100 percentReduction on the price found.
Valid from / valid todate, both optionalThe period in which the rate applies. Empty means: unlimited in that direction.

Settings & permissions

  • Module module.products must be active.
  • products.pricing.manage opens the page and is the permission to create, edit and delete.

Without it the page cannot be reached.

  • The list itself may additionally be read by anyone holding products.catalog.view — the same

permission the article catalogue is read with. Fetching a single price list depends on that read permission.

  • Brands act through the brand cut: the list shows the price lists of your brands plus the brandless

ones.

FAQ & troubleshooting

The price list does not take effect. Three common causes: the list is not active, the customer is missing on a scope other than "global", or the rate is outside its validity period.

The wrong list takes effect. Price resolution takes the most specific match. A customer, project or role list therefore always beats the global one.

A rate disappeared after saving. Rows without an amount are not saved. Enter an amount — zero is an amount too.

A colleague does not see the list. Then it carries a brand in which they hold neither products.catalog.view nor products.pricing.manage — what counts is the permission in that brand, not mere membership. Leave the brand empty if the list should apply to all brands.

A deleted price list is missing in a contract. Deleting removes list and rates for good. If you only want to stop further use, switch the list to inactive instead of deleting it.

products.price-lists · Available from version 0.6.23