## WARNUNG: UGLY SOFTWARE. Das ist ein "works for me" Projekt
## Konzept
- ein eigenständiger Scan-Service läuft permanent und speichert alle gescannten Barcodes, die von einem Eyoyo Barcode Scanner per USB-Anschluss kommen, in eine SQLite DB ab.
- der Scan-Service (usb-scanner.py) basiert auf https://github.com/vpatron/barcode_scanner_python/tree/master
- läuft nur, wenn der Scanner angeschlossen und aktiv ist. Anderfalls gibt es Fehlermeldungen
- wird als systemd Service installiert
- ein separat gestartetes Frontend (GUI) greift auf diese Datenbank zu und prüft die Eingaben bzw. reichert sie an
- Frontend (sqlite.py) basiert auf https://github.com/tonypdavis/Raspberry-Pi-Barcode-Scanner-/blob/master/ipad_bs_v1.2.py
- ruft die gleiche Datenbank auf und liest/schreibt Änderungen
**Achtung: Frontend und Scan-Service müssen auf die gleiche Datenbankdatei konfiguriert werden!**
## Installation
Siehe auch https://pypi.org/project/cysystemd/
Fedora:
```
dnf install -y systemd-devel python3-venv
sudo usermod -G dialout -a $USER #den aktuellen User zu dialout hinzufügen
Folgende Codes scannen wir ein, um den Scanner korrekt zu konfigurieren:

**Der Scanner kann zurückgesetzt werden, indem wir ihn per QR Code ausschalten und vom USB-Port trennen.**
## Datenbankoperationen
**SQLite installieren:**
Fedora:
```
sudo dnf install sqlite3
```
Ubuntu:
```
sudo apt install sqlite3
```
**Datenbank per Shell leeren:**
```
sqlite3 kugelstossmeeting-prod.db "DELETE FROM tickets;"
sqlite3 kugelstossmeeting-prod.db "DELETE FROM scans;"
sqlite3 kugelstossmeeting-prod.db "VACUUM;"
```
**Datenbank per DB Browser for SQLite bearbeiten/ansehen:**
Fedora:
```
sudo dnf install sqlitebrowser
```
Ubuntu:
```
sudo apt install sqlitebrowser
```



**Datenbankstruktur erzeugen:**
```
CREATE TABLE "tickets" (
"BarcodeContent" TEXT,
"Nr" INTEGER,
"VIP" TEXT,
"Ticketbeschriftung" INTEGER,
"BarcodeFile" TEXT,
"Medium" TEXT,
"Aushändigung" TEXT,
"Bestellnummer/Verwendungszweck" TEXT,
"Bezahlt am" TEXT,
"Hinweise" TEXT,
"Besteller" TEXT,
"Typ" TEXT
);
```
```
CREATE TABLE "scans" (
"unixtimestamp_created" INTEGER NOT NULL,
"barcode" TEXT NOT NULL,
"validated" INTEGER,
"hint" TEXT,
"unixtimestamp_checked" INTEGER,
"skipped" INTEGER
);
```
**Datenbankstruktur ändern (Spalten):**
Die Reihenfolge der Spalten in der Tabelle ist entscheidend, da diese statisch im Quellcode referenziert wird. Anpassungen (Löschen) zum Beispiel wie folgt:
```
ALTER TABLE tickets DROP COLUMN 'BarcodeFile';
ALTER TABLE tickets DROP COLUMN 'Ticketbeschriftung';
```
**Test-Scan mit Pseudo-Barcode und Zeitstempel erzeugen:**
```
INSERT
INTO scans(unixtimestamp_created,barcode,validated,hint,unixtimestamp_checked,skipped)
VALUES(CAST(unixepoch('now') AS FLOAT)*1e9,'12345',0,'None',CAST(unixepoch('now') AS FLOAT)*1e9,0)