Odoo POS Bar Upsell & Modifier
Odoo POS Bar Upsell & Modifier
Bottle service sells a bottle with a number of mixers included — six with a 750ml, sixteen with a three litre. Odoo will offer the mixers but counts nothing, so the allowance lives in the waiter's head and the bar finds out when the ticket arrives. This puts the number on the bottle and makes the till keep it.
5 min
Setting a bottle up
Three things on the product form, then nothing else to maintain. A product with no limit set is left entirely alone, so installing it changes nothing elsewhere in the catalogue.
Pick the mixers
Point of Sale ▸ Optional Products on the bottle, exactly as standard.
Set the Upsell Limit
The field this module adds, beside them. Zero means no limit.
Route the mixer category to the bar printer
The same printer as the bottle's, so both land on one ticket.
A typical bottle-service list
Bottle
Included
750ml
6
1 litre
8
2 litre
12
3 litre
16
Taking the order
The allowance is counted across all the mixers together, not one by one, and it scales with the bottle's quantity — two bottles come with two allowances.
What the waiter sees
2 of 6included4 left
4 of 6included2 left
6already reached for this bottle
The strip above the options. Green while there is room, amber as it runs down, red on the last one.
A grid, not a scroll
Seventeen mixers as tiles — name, picture, Add — read at a glance instead of scrolled through. Anything chargeable shows its extra price.
Blocked, not quietly charged
The one that would go over is refused from the grid, from the quantity box, and typed onto the order line.
Add stays live
With nothing chosen it closes without adding, so a bottle can go on the order before the guest has decided.
Mixers fold under their bottle
A badge on the bottle counts the drinks taken with it — drinks, not lines. Open while the order is being built, folded once it has gone.
Once the bar has it
Everything here hangs on one question — has the bar been given this drink? — and it is answered from the preparation records, which Odoo writes as the ticket prints.
Upsell limit: 6
You are trying to select 7 for Aperol Bottle 750ml.
Odoo's own dialog, not an invented one. A till is a loud room, and a message that looks like every other message gets read.
A sent bottle cannot be reopened
Holding it gives Odoo's standard refusal instead of the mixer list.
A poured drink takes no press
No selection, no numpad, no delete — the row simply does not answer.
Cancelling is still possible, deliberately
Hold the bottle and set the number: the bar gets a proper cancellation ticket.
Wherever the order goes
A bottle and its mixers are one thing. Six features exist only to keep them that way through everything a busy room does to an order.
Quantity
Mixers scale with the bottle in whole drinks — never below what the bar poured, never over the allowance the bottle now has.
Deletion
Removing a bottle removes its mixers, so none are left billing invisibly.
The note split
Odoo's seat-note flow splits a line in two. The first keeps exactly what it had; the new one is asked what goes with it.
Bill splitting
Mixers are not drawn — they are not something to hand to one guest or the other — but they cross with their bottle in proportion.
Table transfer
Every line is copied with a new identity, so the bottle link is rebuilt on the destination before Odoo saves.
Courses
A mixer follows its bottle into whatever course it is moved to, and a course counts as fired when the bar has everything in it.
At the bar printer
A bottle and six mixers is seven items on a standard ticket, all the same size, in the same column. Folded, the bottle is the item and the mixers are what goes with it.
NEW
Drinks
1 Aperol Bottle 750ml
- 1 Apple Lacnor
- 3 Pepsi Btl (Chilled)
- 2 Ginger Ale Can
Receipt and label printers alike
Both templates print the same layout in the same order.
A mixer without its bottle names it
2 Coke (Bacardi 1L) — a bar with four tables on bottle service cannot place a bare line.
Cancellations keep their sign
Unsigned mixers under a bottle reading −1 would read as six to pour.
One ticket per bottle
On a split-per-product printer the mixers are shared out as whole drinks that add up to what was ordered.
What it deliberately does not do
Four things were looked at and left. Each is written down rather than discovered later.
It is not a comboA combo is a second product selling alongside the real bottle, so every bottle is counted twice in reporting — and a combo cannot be reopened once the order has reached the bar, nor have a mixer added later.
Mixers are not reordered inside a courseA mixer sits in its bottle's course, but the restaurant module draws that block itself, so it is not always immediately beside it.
Deleting a sent mixer prints without the bottle's nameOdoo builds a cancellation line from the preparation record, which carries no link back. Reducing one is fine; only deletion loses the name.
Restaurant features are requiredTables, courses and bill splitting are part of what it keeps together, so pos_restaurant is a dependency rather than an option.
Why Rizztech?
We only take on important projects where we can deliver real value. Instead of managing hundreds of clients, we focus on a smaller number of businesses and build solutions with full attention and ownership.
When your business grows, it becomes part of our portfolio and helps us reach more clients through real success stories.
That means:
Better support
Better customization
Better business understanding
Long-term commitment to your growth
We only take on important projects where we can deliver real value. Instead of managing hundreds of clients, we focus on a smaller number of businesses and build solutions with full attention and ownership.
When your business grows, it becomes part of our portfolio and helps us reach more clients through real success stories.
That means:
Better support
Better customization
Better business understanding
Long-term commitment to your growth
Setting a bottle up
Three things on the product form, then nothing else to maintain. A product with no limit set is left entirely alone, so installing it changes nothing elsewhere in the catalogue.
Pick the mixers
Point of Sale ▸ Optional Products on the bottle, exactly as standard.
Set the Upsell Limit
The field this module adds, beside them. Zero means no limit.
Route the mixer category to the bar printer
The same printer as the bottle's, so both land on one ticket.
A typical bottle-service list
Bottle
Included
750ml
6
1 litre
8
2 litre
12
3 litre
16
Taking the order
The allowance is counted across all the mixers together, not one by one, and it scales with the bottle's quantity — two bottles come with two allowances.
What the waiter sees
2 of 6included4 left
4 of 6included2 left
6already reached for this bottle
The strip above the options. Green while there is room, amber as it runs down, red on the last one.
A grid, not a scroll
Seventeen mixers as tiles — name, picture, Add — read at a glance instead of scrolled through. Anything chargeable shows its extra price.
Blocked, not quietly charged
The one that would go over is refused from the grid, from the quantity box, and typed onto the order line.
Add stays live
With nothing chosen it closes without adding, so a bottle can go on the order before the guest has decided.
Mixers fold under their bottle
A badge on the bottle counts the drinks taken with it — drinks, not lines. Open while the order is being built, folded once it has gone.
Once the bar has it
Everything here hangs on one question — has the bar been given this drink? — and it is answered from the preparation records, which Odoo writes as the ticket prints.
Upsell limit: 6
You are trying to select 7 for Aperol Bottle 750ml.
Odoo's own dialog, not an invented one. A till is a loud room, and a message that looks like every other message gets read.
A sent bottle cannot be reopened
Holding it gives Odoo's standard refusal instead of the mixer list.
A poured drink takes no press
No selection, no numpad, no delete — the row simply does not answer.
Cancelling is still possible, deliberately
Hold the bottle and set the number: the bar gets a proper cancellation ticket.
Wherever the order goes
A bottle and its mixers are one thing. Six features exist only to keep them that way through everything a busy room does to an order.
Quantity
Mixers scale with the bottle in whole drinks — never below what the bar poured, never over the allowance the bottle now has.
Deletion
Removing a bottle removes its mixers, so none are left billing invisibly.
The note split
Odoo's seat-note flow splits a line in two. The first keeps exactly what it had; the new one is asked what goes with it.
Bill splitting
Mixers are not drawn — they are not something to hand to one guest or the other — but they cross with their bottle in proportion.
Table transfer
Every line is copied with a new identity, so the bottle link is rebuilt on the destination before Odoo saves.
Courses
A mixer follows its bottle into whatever course it is moved to, and a course counts as fired when the bar has everything in it.
At the bar printer
A bottle and six mixers is seven items on a standard ticket, all the same size, in the same column. Folded, the bottle is the item and the mixers are what goes with it.
NEW
Drinks
1 Aperol Bottle 750ml
- 1 Apple Lacnor
- 3 Pepsi Btl (Chilled)
- 2 Ginger Ale Can
Receipt and label printers alike
Both templates print the same layout in the same order.
A mixer without its bottle names it
2 Coke (Bacardi 1L) — a bar with four tables on bottle service cannot place a bare line.
Cancellations keep their sign
Unsigned mixers under a bottle reading −1 would read as six to pour.
One ticket per bottle
On a split-per-product printer the mixers are shared out as whole drinks that add up to what was ordered.
What it deliberately does not do
Four things were looked at and left. Each is written down rather than discovered later.
It is not a comboA combo is a second product selling alongside the real bottle, so every bottle is counted twice in reporting — and a combo cannot be reopened once the order has reached the bar, nor have a mixer added later.
Mixers are not reordered inside a courseA mixer sits in its bottle's course, but the restaurant module draws that block itself, so it is not always immediately beside it.
Deleting a sent mixer prints without the bottle's nameOdoo builds a cancellation line from the preparation record, which carries no link back. Reducing one is fine; only deletion loses the name.
Restaurant features are requiredTables, courses and bill splitting are part of what it keeps together, so pos_restaurant is a dependency rather than an option.
Why Rizztech?
We only take on important projects where we can deliver real value. Instead of managing hundreds of clients, we focus on a smaller number of businesses and build solutions with full attention and ownership.
When your business grows, it becomes part of our portfolio and helps us reach more clients through real success stories.
That means:
Better support
Better customization
Better business understanding
Long-term commitment to your growth
