Dies ist eine alte Version des Dokuments!
Normalerweise druckt BonDroid jedes Produkt auf dem Hauptdrucker seiner Produktgruppe — alle Getränke auf die Schank, alle Speisen in die Küche. Mit Bon-Routing-Regeln legst du fest, dass bestimmte Bestellungen woanders gedruckt werden.
Typische Einsätze:
| Schritt | Was? |
|---|---|
| 1. Verstehen | wie BonDroid den Drucker für eine Position auswählt |
| 2. Anlegen | Menü Stammdaten → Drucker-Administration → Bon-Routingregeln |
| 3. Vorlage wählen | passendes Beispiel kopieren und Namen anpassen |
| 4. Testen | eine Testbestellung machen und den Bon prüfen |
Für jede Position einer Bestellung (z. B. „2× Bier“) geht BonDroid so vor:
Der Ersatzdrucker springt nur ein, wenn der Drucker nicht erreichbar ist (z. B. ausgeschaltet oder kein Netzwerk): Nach ca. 11 Sekunden wechselt BonDroid auf den Ersatzdrucker. Er dient nicht zum Verteilen der Last.
Kein Papier? Dann wechselt BonDroid nicht auf den Ersatzdrucker. Der Drucker sammelt die Bons und druckt sie, sobald wieder Papier drinnen ist.
Änderungen an den Regeln wirken sofort bei der nächsten Bestellung — ein Neustart ist nicht nötig.
| Nr. | Feld | Bedeutung |
|---|---|---|
| 1 | Name | Frei wählbar, damit du die Regel wiederfindest (max. 25 Zeichen, jeder Name nur einmal). |
| 2 | Aktiv | Nur aktive Regeln werden ausgeführt. Häkchen entfernen = Regel vorübergehend ausschalten, ohne sie zu löschen. |
| 3 | Rule | Der Regel-Code (siehe Aufbau einer Regel und Beispiele). |
| 4 | Sichern | Speichert die Regel. Sie gilt ab der nächsten Bestellung. |
In der Liste der Bon-Routingregeln siehst du alle Regeln in der Reihenfolge, in der BonDroid sie prüft — die oberste zuerst.
| Nr. | Was? | Bedeutung |
|---|---|---|
| 1 | Bon-Routingregel hinzufügen | neue Regel anlegen — sie wird unten angehängt |
| 2 | Anordnen | mit den kleinen Pfeilen eine Regel nach oben bzw. nach unten schieben |
| 3 | Aktiv | Regel ein- oder ausschalten |
| 4 | Rule | den Code direkt in der Liste ändern |
| 5 | Sichern | Änderungen in der Liste (Name, Aktiv, Rule) speichern |
Tipp: Spezielle Regeln (ein einzelnes Produkt) gehören nach oben, allgemeine Regeln (eine ganze Produktgruppe) nach unten. Sonst „schluckt“ die allgemeine Regel die spezielle. Im Beispiel oben steht „Bier“ vor „Schank je Bereich“: Bier geht immer auf den Bierdrucker, alle anderen Getränke je nach Bereich auf Schank 1 oder Schank 2.
Fast jede Regel sieht so aus:
if BEDINGUNG: printer_name = 'Druckername' backup_printer_name = 'Ersatzdruckername'
pos.product_name == 'Cola'. Welche Angaben du verwenden kannst, steht unter Verfügbare Angaben.if müssen eingerückt sein (4 Leerzeichen) und das if endet mit einem Doppelpunkt.
Als Druckername trägst du den Namen aus Stammdaten → Drucker-Administration → Drucker ein (Spalte 1) — nicht den CUPS-Druckernamen (Spalte 2). Groß-/Kleinschreibung und Leerzeichen müssen genau stimmen: 'Schank 1' ist nicht dasselbe wie 'Schank1' oder 'schank 1'.
Spalte 3 Virtuell: Ein virtueller Drucker druckt nichts aus. Den zuletzt „gedruckten“ Bon siehst du in der Verwaltung unter Drucker → Virtuelle Drucker. So kannst du Produkte bewusst gar nicht drucken lassen (siehe Beispiel).
| Schreibweise | Bedeutung | Beispiel |
|---|---|---|
== | ist gleich | pos.order.site_name == 'Garten' |
!= | ist ungleich | pos.order.user_name != 'Kassa' |
<, <=, >, >= | kleiner, größer (Zahlen, Uhrzeit) | pos.order.order_time.hour >= 22 |
in [...] | ist einer von mehreren Werten | pos.product_id in [22, 23, 36] |
'Text' in ... | Text kommt im Namen vor | 'Waffel' in pos.product_name |
and, or, not | Bedingungen verknüpfen | pos.product_group_id == 1 and pos.order.site_name == 'Zelt' |
else: | „sonst“ — wenn die Bedingung nicht zutrifft | siehe Schank je Bereich |
# | Kommentar — alles danach ignoriert BonDroid | # Bier immer zum Bierwagen |
Die Regel wird für eine Position der Bestellung ausgeführt. Über pos und pos.order kommst du an alles, was du über diese Position und ihre Bestellung wissen musst.
| Angabe | Bedeutung | Beispielwert |
|---|---|---|
pos.product_id | ID des Produkts (Zahl) | 22 |
pos.product_name | Name des Produkts | 'Bier 0,5l' |
pos.size_name | Größe bzw. Variante | 'groß' |
pos.count | Anzahl dieser Position in der Bestellung | 2 |
pos.product_group_id | ID der Produktgruppe (Zahl) | 1 |
pos.product_group_name | Name der Produktgruppe | u'Getränke' |
pos.pos_price | Einzelpreis in Euro | 4.20 |
| Angabe | Bedeutung | Beispielwert |
|---|---|---|
pos.order.order_time | Zeitpunkt der Bestellung — .hour = Stunde, .minute = Minute, .second = Sekunde | pos.order.order_time.hour → 21 |
pos.order.user_id | ID des Kellners (Zahl) | 21 |
pos.order.user_name | Benutzername des Kellners | 'Anna' |
pos.order.site_id | ID des Bereichs (Zahl) | 3 |
pos.order.site_name | Name des Bereichs | 'Garten' |
pos.order.table_id | ID des Tisches (Zahl) | 57 |
pos.order.table_name | Name bzw. Nummer des Tisches | '05' |
| Angabe | Bedeutung | Beispielwert |
|---|---|---|
printer.name | Hauptdrucker der Produktgruppe — also der Drucker, auf dem ohne Regel gedruckt würde | 'Schank' |
IDs finden: Öffne das Produkt (bzw. die Produktgruppe, den Bereich, den Benutzer) in der Verwaltung. Die ID ist die Zahl am Ende der Adresse im Browser, z. B. .../22/. IDs sind sicherer als Namen: Ein umbenanntes Produkt behält seine ID.
Alle Druckernamen in den Beispielen (Bier, Schank 1 …) musst du durch die Namen deiner Drucker ersetzen.
Bier (Produkt-IDs 22, 23 und 36) wird am Bierwagen gedruckt. Druckt der nicht, springt Schank 1 ein.
if pos.product_id in [22, 23, 36]: printer_name = 'Bier' backup_printer_name = 'Schank 1'
Alles, in dessen Namen „Waffel“ vorkommt („Waffel“, „Waffel mit Eis“, „Schokowaffel“ …), geht an den Waffelstand. Achtung: Groß-/Kleinschreibung zählt — 'Waffel' findet „Schokowaffel“ nicht. Mit 'waffel' in pos.product_name.lower() ist die Schreibweise egal.
if 'waffel' in pos.product_name.lower(): printer_name = 'Waffeln' backup_printer_name = 'Kueche'
Getränke aus Halle und Zelt werden an Schank 1 gedruckt, Getränke aus allen anderen Bereichen an Schank 2. Die beiden Schanken sind gegenseitig Ersatzdrucker.
if pos.product_group_name == u'Getränke': if pos.order.site_name in ['Halle', 'Zelt']: printer_name = 'Schank 1' backup_printer_name = 'Schank 2' else: printer_name = 'Schank 2' backup_printer_name = 'Schank 1'
Alles, was normalerweise auf dem Drucker „Schank“ landen würde, wird abwechselnd auf Schank 1 und Schank 2 gedruckt — je nachdem, ob die Bestellung in einer geraden oder ungeraden Sekunde abgeschickt wurde. Das verteilt die Bons im Schnitt gleichmäßig.
if printer.name == 'Schank': if pos.order.order_time.second % 2 == 0: printer_name = 'Schank 1' backup_printer_name = 'Schank 2' else: printer_name = 'Schank 2' backup_printer_name = 'Schank 1'
Alle Positionen einer Bestellung haben dieselbe Bestellzeit — eine Bestellung wird also nie auf beide Schanken aufgeteilt.
Hängst du an den Druckernamen ein % und einen beliebigen Zusatz an, druckt BonDroid diese Positionen auf demselben Drucker, aber auf einem eigenen Bon. Hier bekommen die Nachspeisen einen eigenen Bon in der Küche, damit sie erst später zubereitet werden.
if pos.product_group_name == 'Nachspeisen': printer_name = 'Kueche%Nachspeise'
Der Teil vor dem % muss ein Druckername sein, der Teil danach ist frei wählbar. Positionen mit demselben Zusatz landen gemeinsam auf einem Bon.
Alles, was der Benutzer „Kassa“ bestellt, wird am Drucker „Kassa“ gedruckt — z. B. für einen Abhol-Verkauf an der Kassa.
if pos.order.user_name == 'Kassa': printer_name = 'Kassa'
Statt des Namens geht auch die ID: if pos.order.user_id == 21:
Ab 22 Uhr ist der Bierwagen geschlossen — Bier geht dann an Schank 1.
if pos.product_id in [22, 23, 36]: if pos.order.order_time.hour >= 22: printer_name = 'Schank 1' else: printer_name = 'Bier' backup_printer_name = 'Schank 1'
Für Produkte, die keinen Bon brauchen (z. B. Pfand oder Eintritt), legst du einen Drucker mit Häkchen Virtuell an (hier „Nirvana“) und leitest die Produkte dorthin.
if pos.product_name in ['Pfand', 'Eintritt']: printer_name = 'Nirvana'
Es gibt keinen Testknopf und keine Fehlermeldung beim Speichern. Eine Regel mit Tippfehler wird bei der Bestellung einfach übersprungen — die Bons kommen dann weiter aus dem alten Drucker. Mach deshalb nach jeder Änderung eine Testbestellung mit einem betroffenen Produkt und prüfe, wo der Bon herauskommt.
| Problem | Mögliche Ursache |
|---|---|
| Regel wirkt gar nicht | Häkchen Aktiv fehlt · Druckername falsch geschrieben (Groß-/Kleinschreibung, Leerzeichen) · Einrückung oder Doppelpunkt fehlt · Umlaut ohne u davor |
| Regel wirkt nur manchmal | Eine weiter oben stehende Regel greift zuerst — Reihenfolge prüfen |
| Ein Produkt wird plötzlich woanders gedruckt | Eine allgemeine Regel (z. B. für die ganze Produktgruppe) erfasst es mit — spezielle Regel darüber anlegen |
| Getränke kommen auf zwei Bons aus demselben Drucker | Positionen, die über eine Regel kommen, bekommen einen eigenen Bon — getrennt von denen, die ohne Regel auf diesem Drucker landen. Abhilfe: alle Produkte dieses Druckers über dieselbe Regel schicken |
| Separater Bestell-Bon wirkt nicht mehr | Greift eine Regel, hat sie Vorrang vor dem Häkchen beim Produkt. Abhilfe: in der Regel je Produkt einen eigenen Zusatz verwenden, z. B. 'Kueche%Schnitzel' (siehe Eigener Bon) |
| Bon kommt aus dem Ersatzdrucker | Der Drucker aus der Regel ist nicht erreichbar (Strom, Netzwerk) — BonDroid ist nach ca. 11 Sekunden ausgewichen |
Kommst du nicht weiter, schick uns den Regel-Code — wir schauen ihn uns gerne an.