diff --git a/gui.py b/gui.py index cb42f24..b537f56 100644 --- a/gui.py +++ b/gui.py @@ -11,7 +11,18 @@ class CustomerThinkerApp(ctk.CTk): super().__init__() self.title("CustomerThinker PDF Export Tool") - self.geometry("500x500") + window_width = 400 + window_height = 400 + + # Bildschirmgröße ermitteln + screen_width = self.winfo_screenwidth() + screen_height = self.winfo_screenheight() + + # Position zum Zentrieren berechnen + x = int((screen_width / 2) - (window_width / 2)) + y = int((screen_height / 2) - (window_height / 2)) + + self.geometry(f"{window_width}x{window_height}+{x}+{y}") self.resizable(False, False) ctk.set_appearance_mode("System") # "Dark", "Light", "System" ctk.set_default_color_theme("blue") # Andere Themes: "green", "dark-blue" @@ -63,8 +74,24 @@ class CustomerThinkerApp(ctk.CTk): self.logo_label.bind("", self.on_logo_leave) # Wenn die Maus das Logo verlässt self.logo_label.place(x=0, y=0, anchor="se") # Vorläufige Position setzen - # Configure-Event um das Logo nach dem Rendern richtig zu platzieren - self.bind("", self.update_logo_position) + # Konfigurations-Button unten links + self.config_button = ctk.CTkButton(self, text="Konfiguration", width=100, command=self.run_reg_check) + self.config_button.place(x=10, y=self.winfo_height() - 10, anchor="sw") + + # Einmaliges Binden: Position von Logo UND Button aktualisieren + self.bind("", self.update_positions) + + + def run_reg_check(self): + script_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "reg_check.py") + subprocess.Popen([sys.executable, script_path]) + + def update_positions(self, event=None): + # Logo rechts unten + self.logo_label.place(x=self.winfo_width() - 10, y=self.winfo_height() - 10, anchor="se") + # Konfig-Button links unten + self.config_button.place(x=10, y=self.winfo_height() - 10, anchor="sw") + def open_link(self, event=None): webbrowser.open("https://www.itdata-gera.de") # Ändere dies auf die gewünschte URL diff --git a/pdf_export.py b/pdf_export.py index 3f3cccb..40b7576 100644 --- a/pdf_export.py +++ b/pdf_export.py @@ -2,20 +2,36 @@ import os import sys import time import requests -from dotenv import load_dotenv from datetime import datetime, timedelta import fitz # PyMuPDF import win32print import win32ui from PIL import Image, ImageWin +import winreg # ← Registry-Zugriff +os.system("chcp 65001") -# .env laden -load_dotenv() +# Registry-Pfad +REG_PATH = r"Software\PDFExporter" -# .ENV Import -url = os.getenv('API_URL') -label_printer = os.getenv('LABEL_DRUCKER') # Name des Labels-Druckers -order_printer = os.getenv('ORDER_DRUCKER') # Name des Order-Druckers +# Registry-Funktion zum Lesen +def read_registry_value(name): + try: + key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0, winreg.KEY_READ) + value, _ = winreg.QueryValueEx(key, name) + winreg.CloseKey(key) + return value + except FileNotFoundError: + return None + +# Werte aus Registry lesen +url = read_registry_value("Server") +api_key = read_registry_value("APIKey") +label_printer = read_registry_value("LabelPrinter") +order_printer = read_registry_value("OrderPrinter") + +if not all([url, label_printer, order_printer]): + print("Fehlende Konfiguration in der Registry! Bitte zuerst Konfiguration über die GUI durchführen.") + sys.exit(1) # Log-Dateipfad log_dir = "logs" @@ -117,7 +133,7 @@ if len(sys.argv) > 1: else: printer = order_printer - log_message(f"Einzeldatei-Modus: {file_to_print} → {printer}") + log_message(f"Einzeldatei-Modus: {file_to_print} - {printer}") print_pdf(file_to_print, printer) sys.exit(0) diff --git a/reg_check.py b/reg_check.py new file mode 100644 index 0000000..c3e363f --- /dev/null +++ b/reg_check.py @@ -0,0 +1,101 @@ +import customtkinter as ctk +import winreg +import subprocess +import sys +import os + +# Registry-Pfad definieren +REG_PATH = r"Software\PDFExporter" + +def read_registry_value(name): + try: + key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0, winreg.KEY_READ) + value, _ = winreg.QueryValueEx(key, name) + winreg.CloseKey(key) + return value + except FileNotFoundError: + return None + +def write_registry_value(name, value): + try: + key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, REG_PATH) + winreg.SetValueEx(key, name, 0, winreg.REG_SZ, value) + winreg.CloseKey(key) + except Exception as e: + print(f"Fehler beim Schreiben in Registry: {e}") + +# def config_exists(): +# return read_registry_value("APIKey") is not None + +def save_config_and_close(api_entry, server_entry, label_entry, order_entry, app): + write_registry_value("APIKey", api_entry.get()) + write_registry_value("Server", server_entry.get()) + write_registry_value("LabelPrinter", label_entry.get()) + write_registry_value("OrderPrinter", order_entry.get()) + app.destroy() + +def show_config_gui(): + ctk.set_appearance_mode("System") + ctk.set_default_color_theme("blue") + + app = ctk.CTk() + app.title("Erstkonfiguration") + window_width = 400 + window_height = 400 + + # Bildschirmgröße ermitteln + screen_width = app.winfo_screenwidth() + screen_height = app.winfo_screenheight() + + # Position zum Zentrieren berechnen + x = int((screen_width / 2) - (window_width / 2)) + y = int((screen_height / 2) - (window_height / 2)) + + app.geometry(f"{window_width}x{window_height}+{x}+{y}") + + frame = ctk.CTkFrame(master=app) + frame.pack(pady=20, padx=20, fill="both", expand=True) + + # Vorhandene Werte aus der Registry lesen + existing_api = read_registry_value("APIKey") or "" + existing_server = read_registry_value("Server") or "" + existing_label = read_registry_value("LabelPrinter") or "" + existing_order = read_registry_value("OrderPrinter") or "" + + api_label = ctk.CTkLabel(master=frame, text="API Key:") + api_label.pack(pady=5) + api_entry = ctk.CTkEntry(master=frame, width=300) + api_entry.insert(0, existing_api) + api_entry.pack() + + server_label = ctk.CTkLabel(master=frame, text="Server:") + server_label.pack(pady=5) + server_entry = ctk.CTkEntry(master=frame, width=300) + server_entry.insert(0, existing_server) + server_entry.pack() + + label_label = ctk.CTkLabel(master=frame, text="Label-Drucker:") + label_label.pack(pady=5) + label_entry = ctk.CTkEntry(master=frame, width=300) + label_entry.insert(0, existing_label) + label_entry.pack() + + order_label = ctk.CTkLabel(master=frame, text="Order-Drucker:") + order_label.pack(pady=5) + order_entry = ctk.CTkEntry(master=frame, width=300) + order_entry.insert(0, existing_order) + order_entry.pack() + + save_button = ctk.CTkButton(master=frame, text="Speichern", command=lambda: save_config_and_close( + api_entry, server_entry, label_entry, order_entry, app)) + save_button.pack(pady=15) + + app.mainloop() + +def start_gui_app(): + # gui.py im gleichen Verzeichnis starten + script_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "gui.py") + subprocess.Popen([sys.executable, script_path]) + + +show_config_gui()