← Alle Projekte

Produktiv im Einsatz

Einkauf GFK

Windows-Desktop-Tool für den Materialeinkauf der GFK-Abteilung: Artikellisten durchsuchen, Bestellschein füllen, per Klick über Outlook bestellen.

  • Python
  • Tkinter
  • ttkbootstrap
  • SQLite
  • openpyxl
  • pandas
  • Pillow
  • pywin32 (win32com / Outlook)
  • OpenWeatherMap API
  • PyInstaller / auto-py-to-exe
  • Windows

Die Herausforderung

Der Materialeinkauf in der GFK-Abteilung stützte sich auf mehrere Excel-Artikellisten (Formbau, Holz, Holzspiralbohrer, Würthregal, Schleifmittel, Sonstiges), aus denen Bestellungen manuell zusammengestellt und per E-Mail verschickt werden mussten. Das Suchen quer über die Listen sowie das fehlerfreie Übertragen von Artikelnummer, Menge und Liefertermin in die Bestell-Mail war umständlich und fehleranfällig. Gesucht war ein einfaches Werkzeug, das die vorhandenen Listen weiternutzt und den Bestellweg bis zum Versand bündelt.

Das Ziel

Eine schlanke Desktop-Anwendung schaffen, die die bestehenden Excel-Artikellisten automatisch einliest, das Durchsuchen aller Kategorien an einem Ort ermöglicht und Bestellungen mit Menge und Liefertermin per Klick als formatierte E-Mail über Outlook versendet – inklusive nachvollziehbarer Bestellhistorie.

Die Lösung

  • Sechs durchsuchbare Artikelkategorien als Reiter (Formbau, Holz, Holzspiralbohrer, Würthregal, Schleifmittel, Sonstiges) mit Spalten Artikel-Nr., Bezeichnung und Information (einkauf.py, KATEGORIE_TABELLEN in database.py)
  • Bestellschein per Doppelklick: Popup zur Eingabe von Menge und Liefertermin (Kalender-Auswahl), Artikel landet im Bestellschein; erneuter Doppelklick entfernt genau die ausgewählte Zeile (einkauf.py einkauf_ware/save_einkauf/bestell_delete)
  • Bestellung per Knopfdruck: erzeugt eine HTML-Tabelle und versendet sie über Microsoft Outlook an den konfigurierten Empfänger (einkauf.py _baue_bestell_html, mail.py order_now via win32com)
  • Bestellhistorie: jede abgeschickte Bestellung wird mit Zeitstempel protokolliert und in einem eigenen Reiter angezeigt (einkauf.py bestell_historie, Tabelle e_historie)
  • Automatische Excel-Synchronisierung beim Start: nur geänderte Listen (Vergleich Änderungsdatum gegen letztes Sync-Datum) werden neu in die Datenbank eingelesen; Artikelnummern unter 5 Stellen werden mit führenden Nullen ergänzt (main.py synchronisiere_excel_dateien)
  • Statusleiste mit Uhr/Datum sowie Wetteranzeige für den Standort Vreden über OpenWeatherMap (Symbol, Temperatur, gefühlte Temperatur, Beschreibung, Luftfeuchtigkeit, Wind); Wetterabruf läuft im Hintergrund-Thread (main.py get_weather_data/_weather_update_loop)
  • Konfigurierbare Oberfläche über ttkbootstrap-Themes (z. B. superhero, darkly), maximiertes Fenster beim Start, größere Schrift und Zebra-Streifen in den Tabellen
  • Auslieferung als eigenständige Windows-.exe über PyInstaller/auto-py-to-exe; eigener Build-Skript-Pfad mit schlanker virtueller Umgebung (build_exe.ps1, config.json)

Technik & Architektur

  • Python-Desktop-Anwendung mit Tkinter und ttkbootstrap (themebare Oberfläche, Tableview-Komponente)
  • Lokale SQLite-Datenbank vg_db.db als Datenhaltung; Tabellen je Kategorie (e_formbau, e_holz, e_holzspiralbohrer, e_wuerthregal, e_schleifmittel, e_sonstiges) sowie e_bestellschein und e_historie
  • Modularer Aufbau: main.py (Start, Excel-Sync, Hauptfenster, Uhr/Wetter), einkauf.py (Oberfläche und Bestelllogik), mail.py (Outlook-Versand), config.py (INI-Konfiguration, UTF-8), database.py (Verbindungs-Kontextmanager, Tabellen-Whitelist)
  • Excel-Import der Artikellisten über openpyxl (in der aktuellen Fassung; frühere Fassung nutzte pandas); Konfiguration in datenbank.ini (Theme, Pfade, Sync-Datum, API-Key, Mail-Empfänger/Betreff)
  • Outlook-Anbindung über COM (pywin32 / win32com) zum direkten Versand der Bestell-E-Mail
  • Wetterdaten über die OpenWeatherMap-API; Anzeige des Wettersymbols über Pillow (PIL/ImageTk)
  • Robustheits-/Sicherheitsdetails: SQLite-Verbindungs-Kontextmanager mit Commit/Rollback, Tabellennamen-Whitelist gegen SQL-Injektion bei dynamischen Tabellennamen, rotierendes Logfile (RotatingFileHandler), konsequente UTF-8-Kodierung wegen Umlauten (z. B. Würthregal)
  • Build zur .exe mit PyInstaller über auto-py-to-exe-Konfiguration (config.json) bzw. ein dediziertes PowerShell-Build-Skript mit eigener schlanker venv

Nutzen in der Praxis

  • Bestellungen werden zentral in einer Oberfläche zusammengestellt statt manuell aus mehreren Excel-Dateien – weniger Übertragungsfehler bei Artikelnummer, Menge und Liefertermin
  • Die vorhandenen Excel-Artikellisten bleiben die Pflegequelle und werden beim Start automatisch übernommen, sodass kein doppelter Pflegeaufwand entsteht
  • Bestellung mit einem Klick als fertig formatierte E-Mail über das gewohnte Outlook – kein Abtippen in die Mail nötig
  • Lückenlose, zeitgestempelte Bestellhistorie macht frühere Bestellungen nachvollziehbar
  • Läuft als eigenständige .exe ohne Python-Installation auf dem Arbeitsplatz
  • Wartbarer, modularer Code mit Schutzmaßnahmen (Tabellen-Whitelist, Transaktions-Kontextmanager, rotierendes Log)

Meine Rolle

Konzept, Entwicklung und Umsetzung eigenständig durch Ricardo Rehfeldt