From 062d992b63bdbc9494948c4ff3585692bbd628ef Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 27 Sep 2026 15:46:03 +0000 Subject: [PATCH] Tickets auf WEBklar zugeschnitten (Paket B) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Status: 6 statt 10, auf Deutsch (Offen, In Arbeit, Wartet auf Kunde, Prüfung, Erledigt, Storniert). Gespeichert werden die Werte, die das Kundenportal für die Fortschrittsleiste kennt; alte Werte wie Assigned werden weiter angezeigt ("Eingeplant"), sind aber nicht mehr wählbar. - Zuweisen ändert den Status nicht mehr; neue Tickets starten "Offen". - Priorität: Schalter "Dringend" statt fünf Stufen (dringend = 4, normal = 2; alte Stufen Hoch/Kritisch gelten als dringend), rotes Abzeichen. - Ticketliste: Standardansicht "Aufträge" ohne Akquise-Tickets; Filter Typ (Aufträge/Webpage/Migration/Projekt/Akquise/Alle), 6 Status-Gruppen, "Nur dringende". Die toten Felder Kunde, Benutzer/Thema und Datum sind durch eine echte Suche ersetzt (Kunde, Betreff, Angefragt von, WOID). Deep-Link ?woid= zeigt das Ticket weiter unabhängig von Art und Status. - Formulare "Neues Ticket" und "Arbeitsblatt" auf Deutsch; raus sind Workload Estimate, Requested for und die Service-Art am Ticket (gespeichert wird weiter Fernwartung). - Ticketkarte: Projekt/Preview im Details-Reiter (4 statt 5 Reiter), eine Zusammenfassungszeile statt der großen Statistik, doppelter Projekte-Stift weg, Service-Abzeichen weg. Co-Authored-By: Claude Opus 5.5 --- src/components/CreateTicketModal.jsx | 106 +++----- src/components/CreateWorksheetModal.jsx | 48 ++-- src/components/PriorityDropdown.jsx | 36 --- src/components/StatusDropdown.jsx | 25 +- src/components/TicketCard.jsx | 47 ++-- src/components/UrgentToggle.jsx | 17 ++ src/components/WorksheetList.jsx | 9 +- src/components/WorksheetStats.jsx | 313 ------------------------ src/components/WorksheetSummary.jsx | 24 ++ src/components/ui/StatusPill.jsx | 27 +- src/components/ui/index.js | 2 +- src/hooks/useWorkorders.js | 54 ++-- src/lib/ticketStatus.js | 105 ++++++++ src/pages/CustomerDetailPage.jsx | 4 +- src/pages/DashboardPage.jsx | 4 +- src/pages/TicketsPage.jsx | 145 +++++------ src/styles/global.css | 19 ++ 17 files changed, 359 insertions(+), 626 deletions(-) delete mode 100644 src/components/PriorityDropdown.jsx create mode 100644 src/components/UrgentToggle.jsx delete mode 100644 src/components/WorksheetStats.jsx create mode 100644 src/components/WorksheetSummary.jsx create mode 100644 src/lib/ticketStatus.js diff --git a/src/components/CreateTicketModal.jsx b/src/components/CreateTicketModal.jsx index eac2466..4839200 100644 --- a/src/components/CreateTicketModal.jsx +++ b/src/components/CreateTicketModal.jsx @@ -1,6 +1,5 @@ import { useState, useEffect, useMemo } from 'react' import { FaTimes } from 'react-icons/fa' -import { useAdminConfig } from '../hooks/useAdminConfig' import { useEmployees } from '../hooks/useEmployees' import { databases, DATABASE_ID, COLLECTIONS, Query } from '../lib/appwrite' import { @@ -11,6 +10,7 @@ import { buildRequesterSuggestions, rankSuggestions, } from '../lib/ticketForm' +import { priorityFor } from '../lib/ticketStatus' import { AutocompleteInput, DateTimeInput } from './ui' // Neue Tickets gibt es aktuell nur fuer diese Arten; alte Tickets behalten ihre Art. @@ -20,36 +20,25 @@ const TICKET_TYPES = [ { value: 'Migration', label: 'Migration (Übernahme von anderem Anbieter)' }, ] -const DEFAULT_PRIORITIES = [ - { value: 0, label: 'None' }, - { value: 1, label: 'Low' }, - { value: 2, label: 'Medium' }, - { value: 3, label: 'High' }, - { value: 4, label: 'Critical' } -] - -// Datum als "yyyy-mm-dd", Uhrzeit als "hh:mm" (Werte der Kalender-Felder) +// Datum als "yyyy-mm-dd", Uhrzeit als "hh:mm" (Werte der Kalender-Felder). +// Die Service-Art fragt das Formular nicht mehr ab: gespeichert wird Fernwartung. const emptyForm = () => ({ customerId: '', type: TICKET_TYPES[0].value, serviceType: SERVICE_TYPES[0].value, - priority: 1, + urgent: false, topic: '', requestedBy: '', - requestedFor: '', startDate: todayIso(), startTime: '', deadline: todayIso(), endTime: '', - estimate: '30', details: '' }) export default function CreateTicketModal({ isOpen, onClose, onCreate, customers = [] }) { - const { config } = useAdminConfig() const { employees } = useEmployees() - const PRIORITIES = config?.priorities || DEFAULT_PRIORITIES const [formData, setFormData] = useState(emptyForm) const [recentTickets, setRecentTickets] = useState([]) @@ -104,9 +93,11 @@ export default function CreateTicketModal({ isOpen, onClose, onCreate, customers setError('') const customer = customers.find(c => c.$id === formData.customerId) + const { urgent, ...fields } = formData try { const result = await onCreate({ - ...formData, + ...fields, + priority: priorityFor(urgent), customerName: customer?.name || '', customerLocation: customer?.location || '', startDate: isoToGermanDate(formData.startDate), @@ -136,7 +127,7 @@ export default function CreateTicketModal({ isOpen, onClose, onCreate, customers
-

Create New Ticket

+

Neues Ticket

{error && (
@@ -148,14 +139,14 @@ export default function CreateTicketModal({ isOpen, onClose, onCreate, customers
- +
- - -
- -
- - +
@@ -215,11 +189,11 @@ export default function CreateTicketModal({ isOpen, onClose, onCreate, customers
- + handleChange('topic', e.target.value)} required @@ -227,7 +201,7 @@ export default function CreateTicketModal({ isOpen, onClose, onCreate, customers
- +
- - handleChange('requestedFor', value)} - getSuggestions={getSuggestions} - /> -
- -
- +
- + handleChange('endTime', value)} />
- -
- - handleChange('estimate', e.target.value)} - /> -
- +