LaborPOS

Aus LaborWiki
Version vom 10. November 2023, 20:29 Uhr von Endres (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{ProjektInfoBox |name=LaborPOS |status=stable |image=LaborPOS_Screenshot.png |description=Das Kassensystem, welches seit 2017 bei größeren Veranstaltungen, z.B. den Labortagen genutzt wird. |author=Endres |version=1.0 |tags=Kassensystem, Getränke, Veranstaltungen |download=https://github.com/das-labor/laborpos }} == Einleitung == Seit Jahren probieren wir im Labor ein System aufzusetzen, welches unseren Anforderungen für die Doku…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
       
LaborPOS

Release status: stable [box doku]

LaborPOS Screenshot.png
Description Das Kassensystem, welches seit 2017 bei größeren Veranstaltungen, z.B. den Labortagen genutzt wird.
Author(s)  Endres
Last Version  1.0 ()
Download  https://github.com/das-labor/laborpos



Einleitung

Seit Jahren probieren wir im Labor ein System aufzusetzen, welches unseren Anforderungen für die Dokumentation von Buchungen während Veranstaltungen wie den Labortagen dienen kann. 2017 hat Endres am ersten Tag der Labortage daher ein quick'n'dirty PHP-Skript geschrieben, welches auf einem Raspberry Pi via Webserver laufen konnte. Das Skript wurde seither stets weiterentwickelt und zu den Labortagen 2019 auf Python übersetzt. Es stellt ein Touch-freundliches HTML5- und Javascript-basiertes Frontend zur Verfügung welches somit in einem Webbrowser auf einem an den genannten Raspberry Pi angeschlossenen Touch-Monitor dargestellt und genutzt werden kann. Da das gesamte System möglichst simpel gehalten werden sollte, wird es als CGI-Skript angeboten und benötigt intern kein bestimmtes Datenbankinterface, sondern läuft komplett auf No-SQL.

Installation

Zur Installation selbst wird nur ein beliebiger Webserver mit CGI Funktionalität sowie Python 3 (mit installiertem pycgi) benötigt.

  1. Das Git (https://github.com/das-labor/laborpos) sollte als Webroot konfiguriert sein.
  2. Zumindest db/boughts muss Zugriffsrechte-mäßig durch den Webserver beschreibbar sein.
  3. Als Dokumentenindex kann app.py genutzt werden, ansonsten muss später spezifisch die app.py addressiert werden.
  4. Python-Dateien in dem Webverzeichnis sollen durch bspw. FastCGI ausgeführt werden, dies wird bei nginx durch untenstehende Konfiguration erreicht.
  5. In einem Webbrowser muss nur der konfigurierte Webserver addressiert werden um das Kassensystem zu öffnen.
  6. Idealerweise wird das Kassensystem dann im Vollbildmodus angezeigt.

Nginx FastCGI Konfiguration

    location ~ \.py$ {
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        gzip off;
        fastcgi_pass unix:/var/run/fcgiwrap.sock;
        fastcgi_index app.py;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

Nutzung des Systems

Genau so simplistisch wie das System selbst programmiert wurde ist es eigentlich auch in seiner Benutzung. Wird das Kassensystem aufgerufen, so ist links im Feld die Bestellung des aktuellen Kunden sichtbar. Im rechten Feld können Produkte aus der Produkt-Datenbank hinzugefügt werden. Durch einen Druck auf Cash, Scratch oder Card (EMV) unten rechts in der Leiste wird der Kauf abgeschlossen und ein Registrierkassengeräusch ertönt. Wurde ein Fehler gemacht, können zu viel gekaufte Produkte wieder abgezogen werden, indem statt auf die grünen "Kauf"-Schaltflächen stattdessen auf einen der gelben Storno-Schaltflächen gedrückt wird. Die rote Clear Schaltfläche löscht den aktuellen Kunden bevor der Kauf abgeschlossen wurde ("Doch kein Interesse") und die blaue Add Schaltfläche fügt Produkte hinzu, welche nicht in der Liste der Produkte stehen.

Produkt-Datenbank

Im Datenbankverzeichnis des Kassensystems db befindet sich eine Datei products, welche eine Auflistung sämtlicher angebotenen Produkte zusammen mit Metadaten wie Produktkategorie (nur zur farblichen Unterscheidung der einzelnen Produkte), Preis und EAN-Code (optional) hinterlegt. Zeilen, die mit einem Hash (#) anfangen, werden ignoriert. Die einzelnen aktiven Produkte werden einfach der Reihe nach im Frontend angezeigt und können somit im System gekauft werden. Falls in der Produktdatenbank einzelne Produkte fehlen, ist dies nicht weiter schlimm, durch ein Freitextfeld im System können auch beliebige andere Produkte angeboten werden.

Das Format der Produktdatenbank ist durch Tabulatoren getrennt wie folgt:

Kategorie Preis Produkt EAN-Code (optional)

Die Kategorie ist mit einer Ganzzahl zwischen 0 und 7 anzugeben. Der Preis ist eine Fließkommazahl die durch einen Dezimalpunkt angegeben wird und den Preis in Euro angibt. Das Produkt sollte alle nötigen Informationen, bei Getränken also zum Beispiel auch die Flaschengröße, beinhalten. Wird ein EAN-Code angegeben, kann das Produkt im Kassensystem durch einen angeschlossenen Barcode-Scanner eingescannt werden. Dieser Scanner muss nur als Tastatur agieren und die EAN, gefolgt von einem Zeilenumbruch (Enter) ausgeben, sobald gescannt wurde.

Registrierkassenfunktion

Wird ein Produkt gekauft, so wird die Datenbankdatei db/boughts um Zeile(n) mit den gekauften Produkten erweitert. Die einzelnen Spalten dieser ebenfalls durch Tabulatoren getrennten Spalten schlüsselt sich wie folgt auf:

Datum, Uhrzeit IP-Adresse Preis Bezahlweise Produkt

Datum, Uhrzeit ist im date %c Format angegeben. Für die Bezahlweisen stehen B für Bargeld, C für Kartenzahlung und S für Scratchcard (Verzehrkarte) zur Verfügung. Preis und Produkt entsprechen den Elementen aus der Produktdatenbank (siehe oben).

Durch dieses Backlog, welches unter Umständen auch auf einen Papierbon ausgedruckt werden könnte, sind weitere Auswertungen und Statistiken denkbar. Beispiele dazu finden sich in dem Ordner tools.