From d6becf0151a36c79a357271cc0d5c7407432e6b8 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 19:39:13 +0000 Subject: [PATCH] Ticketkarte und Admin an das neue Formular angepasst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ticketkarte: Response-Level-Auswahl entfernt; Service Type als "Fernwartung" / "Vor Ort" (altes "Off Site" zählt als Fernwartung) - Admin > Konfiguration: Ticketarten, Systeme, Reaktions- und Leistungsarten ausgeblendet, da das Formular sie fest vorgibt; editierbar bleiben die Prioritäten, die Listen bleiben beim Speichern im Config-Dokument erhalten - Kaputtes Trennzeichen "�" wieder "·" (Ticketkarte, Kundenliste, Kundendetails) Co-Authored-By: Claude Opus 5.5 --- src/components/CreateTicketModal.jsx | 7 +--- src/components/TicketCard.jsx | 7 ++-- src/lib/ticketForm.js | 15 ++++++- src/pages/AdminPage.jsx | 58 ++-------------------------- src/pages/CustomerDetailPage.jsx | 4 +- src/pages/CustomersPage.jsx | 4 +- 6 files changed, 25 insertions(+), 70 deletions(-) diff --git a/src/components/CreateTicketModal.jsx b/src/components/CreateTicketModal.jsx index 573e268..82ab1d9 100644 --- a/src/components/CreateTicketModal.jsx +++ b/src/components/CreateTicketModal.jsx @@ -4,6 +4,7 @@ import { useAdminConfig } from '../hooks/useAdminConfig' import { useEmployees } from '../hooks/useEmployees' import { databases, DATABASE_ID, COLLECTIONS, Query, isDemoMode } from '../lib/appwrite' import { + SERVICE_TYPES, todayIso, isoToGermanDate, timeToWoms, @@ -19,12 +20,6 @@ const TICKET_TYPES = [ { value: 'Migration', label: 'Migration (Übernahme von anderem Anbieter)' }, ] -// Gespeichert werden die bisherigen Werte, angezeigt wird Deutsch -const SERVICE_TYPES = [ - { value: 'Remote', label: 'Fernwartung (remote)' }, - { value: 'On Site', label: 'Vor Ort beim Kunden' }, -] - const DEFAULT_PRIORITIES = [ { value: 0, label: 'None' }, { value: 1, label: 'Low' }, diff --git a/src/components/TicketCard.jsx b/src/components/TicketCard.jsx index 70fcf65..d687adc 100644 --- a/src/components/TicketCard.jsx +++ b/src/components/TicketCard.jsx @@ -5,7 +5,6 @@ import { de } from 'date-fns/locale' import StatusDropdown from './StatusDropdown' import PriorityDropdown from './PriorityDropdown' import EditorDropdown from './EditorDropdown' -import ResponseDropdown from './ResponseDropdown' import CreateWorksheetModal from './CreateWorksheetModal' import StatusHistoryModal from './StatusHistoryModal' import WorksheetList from './WorksheetList' @@ -21,6 +20,7 @@ import Badge from './ui/Badge' import { StatusPill, PriorityPill } from './ui/StatusPill' import { useWorksheets } from '../hooks/useWorksheets' import { databases, DATABASE_ID, COLLECTIONS } from '../lib/appwrite' +import { serviceTypeLabel } from '../lib/ticketForm' const TABS = [ { id: 'details', label: 'Details' }, @@ -82,7 +82,7 @@ export default function TicketCard({ ticket, onUpdate }) {
{ticket.customerName || 'Unbekannt'} - {ticket.customerLocation && � {ticket.customerLocation}} + {ticket.customerLocation && · {ticket.customerLocation}}
{ticket.topic || ticket.title || 'Kein Betreff'}
@@ -90,7 +90,7 @@ export default function TicketCard({ ticket, onUpdate }) { {ticket.type && {ticket.type}} {ticket.systemType && ticket.systemType !== 'n/a' && {ticket.systemType}} - {ticket.serviceType && {ticket.serviceType}} + {ticket.serviceType && {serviceTypeLabel(ticket.serviceType)}}
@@ -113,7 +113,6 @@ export default function TicketCard({ ticket, onUpdate }) { {ticket.requestedBy && Angefragt von: {ticket.requestedBy}}
onUpdate(ticket.$id, { assignedTo: v })} />
-
onUpdate(ticket.$id, { responseLevel: v })} />
diff --git a/src/lib/ticketForm.js b/src/lib/ticketForm.js index 2f216c6..5dae260 100644 --- a/src/lib/ticketForm.js +++ b/src/lib/ticketForm.js @@ -1,8 +1,21 @@ -/* Hilfen fuer "Neues Ticket". +/* Hilfen fuer "Neues Ticket" und die Anzeige der Tickets. WOMS speichert Datum als Text "dd.mm.yyyy" und Uhrzeit als "hhmm" (siehe planboard.js). Die Kalender-Felder des Browsers liefern dagegen "yyyy-mm-dd" bzw. "hh:mm" - umgerechnet wird erst beim Speichern. */ +// Service Type: gespeichert werden die bisherigen Werte, angezeigt wird Deutsch +export const SERVICE_TYPES = [ + { value: 'Remote', label: 'Fernwartung (remote)' }, + { value: 'On Site', label: 'Vor Ort beim Kunden' }, +] + +// Kurzform fuer Badges. Das alte "Off Site" meinte ebenfalls Arbeit aus der Ferne. +const SERVICE_TYPE_SHORT = { remote: 'Fernwartung', 'off site': 'Fernwartung', 'on site': 'Vor Ort' } + +export function serviceTypeLabel(value) { + return SERVICE_TYPE_SHORT[String(value || '').trim().toLowerCase()] || value +} + const pad = (n) => String(n).padStart(2, '0') // Heutiges Datum in Ortszeit als "yyyy-mm-dd" (Wert fuer ) diff --git a/src/pages/AdminPage.jsx b/src/pages/AdminPage.jsx index 15c6d14..95d1481 100644 --- a/src/pages/AdminPage.jsx +++ b/src/pages/AdminPage.jsx @@ -16,6 +16,9 @@ import { useCustomers } from '../hooks/useCustomers' import { useEmployees } from '../hooks/useEmployees' import './AdminPage.css' +// Ticketarten, Systeme, Reaktions- und Leistungsarten gibt das Ticketformular +// fest vor; sie sind hier nicht mehr editierbar, bleiben beim Speichern aber +// im Config-Dokument erhalten. Editierbar sind nur noch die Prioritaeten. const EMPTY_CONFIG = { ticketTypes: [], systems: [], @@ -41,56 +44,11 @@ const EMPTY_EMPLOYEE = { isAdmin: false, } -const CONFIG_GROUPS = [ - { field: 'ticketTypes', title: 'Ticketarten', placeholder: 'Neue Ticketart' }, - { field: 'systems', title: 'Betroffene Systeme', placeholder: 'Neues System' }, - { field: 'responseLevels', title: 'Reaktionsstufen', placeholder: 'Neue Stufe' }, - { field: 'serviceTypes', title: 'Leistungsarten', placeholder: 'Neue Leistungsart' }, -] - function Notice({ notice }) { if (!notice?.text) return null return
{notice.text}
} -function ConfigList({ title, field, values, placeholder, onAdd, onRemove, onChange }) { - return ( -
-
-
-

{title}

- {values.length} Einträge -
- -
-
- {values.length === 0 &&

Noch keine Einträge.

} - {values.map((value, index) => ( -
- onChange(field, index, event.target.value)} - /> - -
- ))} -
-
- ) -} - export default function AdminPage() { const { user, isAdmin } = useAuth() const { config, loading, error, updateConfig } = useAdminConfig() @@ -338,16 +296,6 @@ export default function AdminPage() { ) : ( <>
- {CONFIG_GROUPS.map((group) => ( - - ))}

Prioritäten

{localConfig.priorities?.length || 0} Einträge
diff --git a/src/pages/CustomerDetailPage.jsx b/src/pages/CustomerDetailPage.jsx index 743172e..4baf8ac 100644 --- a/src/pages/CustomerDetailPage.jsx +++ b/src/pages/CustomerDetailPage.jsx @@ -68,7 +68,7 @@ export default function CustomerDetailPage() { {archived && Archiviert} } - subtitle={[customer.location, customer.email, customer.phone].filter(Boolean).join(' � ')} + subtitle={[customer.location, customer.email, customer.phone].filter(Boolean).join(' · ')} actions={ <>
{isArchived(c) && Archiviert}