# Redmine Ticket-Portal (Prototyp) Vorgeschaltete Webseite für die Ticket-Anlage mit verpflichtendem Kundenbezug (Lösung #1 aus [redmine.unicon-gmbh.de](https://redmine.unicon-gmbh.de/redmine/issues/6)). Die Kundenauswahl läuft über ein Autocomplete gegen die Kundenstammdaten aus dem WAWIS-SQL-Server (nur lesender Zugriff). Die Kunden müssen also nicht als Auswahlliste in Redmine gepflegt werden. Die Kundennummer wird in ein Text-Custom-Field des Tickets geschrieben. ## Ablauf 1. Mitarbeiter sucht den Kunden per Nummer oder Firmenname (Autocomplete) 2. Betreff und Beschreibung erfassen 3. Der Server validiert die Kundennummer gegen die Stammdaten und legt das Ticket per POST /issues.json in Redmine an (API-Key nur serverseitig). ## Setup npm install cp .env.example .env # Werte anpassen (API-Key, Projekt, Feld-ID) npm start
Ohne gesetzten REDMINE_API_KEY läuft der Server im Trockenlauf: die Oberfläche funktioniert komplett, Tickets werden aber nur simuliert. Zum schnellen Ausprobieren reicht daher: npm install && npm run start:dry Danach http://localhost:3000 öffnen.
## Konfiguration (.env) | Variable | Bedeutung | |---------------------|----------------------------------------------------| | REDMINE_URL | Basis-URL der Redmine-Installation | | REDMINE_API_KEY | API-Key eines technischen Users (Recht: Tickets anlegen) | | REDMINE_PROJECT_ID | Ziel-Projekt für neue Tickets | | REDMINE_TRACKER_ID | Tracker (z. B. Support) | | CUSTOMER_FIELD_ID | ID des Custom Fields für die Kundennummer | | CUSTOMERS_REFRESH_MS | Aktualisierungsintervall der Kundenliste in ms (Standard 300000 = 5 min) | | DB_SERVER | Host des WAWIS-SQL-Servers | | DB_PORT | Port des SQL-Servers (Standard 1433) | | DB_DATABASE | Datenbankname (wawis) | | DB_USER | SQL-User (report) | | DB_PASSWORD | Passwort des SQL-Users | Die Feld-ID lässt sich per GET /custom_fields.json ermitteln. ## SQL-Server-Anbindung (WAWIS) Die Kundenstammdaten (Nummer + Name) werden beim Start und danach alle `CUSTOMERS_REFRESH_MS` im Hintergrund aus dem WAWIS-SQL-Server geladen (`db.js`, Standard-Abfrage auf `kunde`/`kunzu`). Es wird ausschließlich gelesen (SELECT) – es gibt keinen Schreibzugriff auf die Datenbank. Gesperrte oder inaktive Kunden (`bsper`/`baktiv`) werden für die Auswahl ausgeblendet. Schlägt eine Aktualisierung fehl, bleibt die zuletzt geladene Liste aktiv. Zugangsdaten stehen in `.env` (`DB_SERVER`, `DB_PORT`, `DB_DATABASE`, `DB_USER`, `DB_PASSWORD`). ## Nächste Schritte Richtung Produktion - Authentifizierung für die Mitarbeiter (z. B. LDAP/SSO im Reverse Proxy) - WS-Nummer als zweites Custom Field automatisch mitschreiben - HTTPS und Betrieb hinter dem vorhandenen Reverse Proxy