Benutzer-Werkzeuge

Webseiten-Werkzeuge


bon_routing_regeln

Dies ist eine alte Version des Dokuments!


Bon-Routing-Regeln

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:

  • Eigene Station für einzelne Produkte — z. B. Bier auf den Bierwagen, Waffeln auf den Waffelstand.
  • Je Bereich eine eigene Schank — Halle und Zelt auf Schank 1, Garten auf Schank 2.
  • Last verteilen — Getränke abwechselnd auf zwei Schanken drucken.
  • Eigener Bon auf demselben Drucker — z. B. Nachspeisen getrennt von den Hauptspeisen.
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

💡 Gut zu wissen

  • Eine Regel ist ein kleines Python-Programm. Du musst nicht programmieren können — kopiere einfach eine der Vorlagen und ändere die Namen.
  • Für Belege (Rechnungen) gibt es eigene Regeln: Beleg-Routing-Regeln.
  • Soll ein Produkt nur einen eigenen Bon bekommen, aber auf demselben Drucker bleiben, reicht oft das Häkchen Separater Bestell-Bon beim Produkt.


So entscheidet BonDroid

Für jede Position einer Bestellung (z. B. „2× Bier“) geht BonDroid so vor:

  1. Standard: Der Drucker kommt aus der Produktgruppe — Hauptdrucker und Ersatzdrucker (Stammdaten → Produkt-Administration → Produktgruppen).
  2. Regeln prüfen: Alle Bon-Routingregeln mit Häkchen Aktiv werden von oben nach unten durchlaufen.
  3. Die erste Regel gewinnt: Sobald eine Regel einen gültigen Drucker setzt, wird dieser verwendet. Die Regeln darunter werden für diese Position nicht mehr geprüft.
  4. Keine Regel passt: Es bleibt beim Hauptdrucker der Produktgruppe.

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.


Regel anlegen

  1. In der BonDroid Verwaltung Stammdaten → Drucker-Administration → Bon-Routingregeln öffnen.
  2. Rechts oben Bon-Routingregel hinzufügen anklicken.
  3. Formular ausfüllen und Sichern.
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.

Reihenfolge und Übersicht

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.


Aufbau einer Regel

Fast jede Regel sieht so aus:

if BEDINGUNG:
    printer_name = 'Druckername'
    backup_printer_name = 'Ersatzdruckername'
  • Bedingung — wann die Regel greifen soll, z. B. pos.product_name == 'Cola'. Welche Angaben du verwenden kannst, steht unter Verfügbare Angaben.
  • printer_name — auf welchem Drucker die Position gedruckt wird.
  • backup_printer_name — welcher Drucker einspringt, wenn dieser nicht druckt. Optional: Fehlt die Zeile, bleibt der Ersatzdrucker der Produktgruppe.
  • Die Zeilen unter dem if müssen eingerückt sein (4 Leerzeichen) und das if endet mit einem Doppelpunkt.

Druckernamen

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).

Kleine Bedingungs-Kunde

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

⚠ Umlaute: ein u vor den Text

  • Enthält ein Text in deiner Regel ä, ö, ü oder ß, schreibe ein kleines u davor: u'Getränke', u'Käsekrainer'.
  • Ohne u passt der Vergleich nie (==) bzw. die Regel bricht ab (in) — und wird still übersprungen.
  • Bei Druckernamen ohne Umlaut ('Kueche') ist das nicht nötig. Das u schadet aber auch nie.


Verfügbare Angaben

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.

Die Position: pos

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

Die Bestellung: pos.order

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'

Der Standarddrucker: printer

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.


Beispiele

Alle Druckernamen in den Beispielen (Bier, Schank 1 …) musst du durch die Namen deiner Drucker ersetzen.

Bestimmte Produkte auf einen eigenen Drucker

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'

Produkte nach Namen

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'

Schank je Bereich

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'

Last auf zwei Drucker verteilen

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.

Eigener Bon auf demselben Drucker

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.

Bestellungen eines Kellners umleiten

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 einer bestimmten Uhrzeit umleiten

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'

Produkte gar nicht drucken

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'

Testen und Fehlersuche

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.

bon_routing_regeln.1790924774.txt.gz · Zuletzt geändert: von bondroid