Affected System und Response Level aus der Oberfläche entfernt
- Arbeitsblatt: Feld "New Response Level" entfernt; ein Statuswechsel schreibt am Ticket nur noch den Status - Arbeitsblatt-Verlauf: Zeile "Response Level: alt -> neu" entfernt - Ticketkarte: System-Badge alter Tickets entfernt - Schnellübersicht: Spalte "System" entfernt - Ticketfilter: Auswahl "System" entfernt (wurde ohnehin nie abgefragt) - Kundendetails: Ticketzeile zeigt nur noch die Art statt "Art · System" Die Werte bleiben in der Datenbank erhalten. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d6becf0151
commit
8cb0bb8146
6 files changed
+3
-56
No files matched your search
@@ -17,19 +17,6 @@ const STATUS_OPTIONS = [
|
|||||||
'In Test'
|
'In Test'
|
||||||
]
|
]
|
||||||
|
|
||||||
const RESPONSE_LEVELS = [
|
|
||||||
'KEY USER',
|
|
||||||
'1st Level',
|
|
||||||
'2nd Level',
|
|
||||||
'3rd Level',
|
|
||||||
'FS/FE',
|
|
||||||
'24/7',
|
|
||||||
'TECH MGMT',
|
|
||||||
'Backoffice',
|
|
||||||
'BUSI MGMT',
|
|
||||||
'n/a'
|
|
||||||
]
|
|
||||||
|
|
||||||
// Akquise-Tickets: Ergebnis des Kundenkontakts (statt technischer Status)
|
// Akquise-Tickets: Ergebnis des Kundenkontakts (statt technischer Status)
|
||||||
const ACQUISITION_STATUS = ['In Kontakt', 'Zugesagt', 'Abgesagt']
|
const ACQUISITION_STATUS = ['In Kontakt', 'Zugesagt', 'Abgesagt']
|
||||||
|
|
||||||
@@ -44,7 +31,6 @@ export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCre
|
|||||||
const [formData, setFormData] = useState({
|
const [formData, setFormData] = useState({
|
||||||
serviceType: 'Remote',
|
serviceType: 'Remote',
|
||||||
newStatus: workorder?.status || 'Open',
|
newStatus: workorder?.status || 'Open',
|
||||||
newResponseLevel: workorder?.responseLevel || '',
|
|
||||||
totalTime: 0,
|
totalTime: 0,
|
||||||
startDate: today,
|
startDate: today,
|
||||||
startTime: '',
|
startTime: '',
|
||||||
@@ -71,7 +57,6 @@ export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCre
|
|||||||
setFormData({
|
setFormData({
|
||||||
serviceType: 'Remote',
|
serviceType: 'Remote',
|
||||||
newStatus: defaultStatus,
|
newStatus: defaultStatus,
|
||||||
newResponseLevel: workorder.responseLevel || '',
|
|
||||||
totalTime: 0,
|
totalTime: 0,
|
||||||
startDate: today,
|
startDate: today,
|
||||||
startTime: '',
|
startTime: '',
|
||||||
@@ -139,8 +124,6 @@ export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCre
|
|||||||
serviceType: formData.serviceType,
|
serviceType: formData.serviceType,
|
||||||
oldStatus: workorder.status,
|
oldStatus: workorder.status,
|
||||||
newStatus: formData.newStatus,
|
newStatus: formData.newStatus,
|
||||||
oldResponseLevel: workorder.responseLevel || '',
|
|
||||||
newResponseLevel: formData.newResponseLevel,
|
|
||||||
totalTime: formData.isComment ? 0 : parseInt(formData.totalTime) || 0,
|
totalTime: formData.isComment ? 0 : parseInt(formData.totalTime) || 0,
|
||||||
startDate: formData.startDate,
|
startDate: formData.startDate,
|
||||||
startTime: formData.startTime,
|
startTime: formData.startTime,
|
||||||
@@ -219,20 +202,6 @@ export default function CreateWorksheetModal({ isOpen, onClose, workorder, onCre
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="form-group">
|
|
||||||
<label className="form-label">New Response Level</label>
|
|
||||||
<select
|
|
||||||
className="form-control"
|
|
||||||
value={formData.newResponseLevel}
|
|
||||||
onChange={(e) => handleChange('newResponseLevel', e.target.value)}
|
|
||||||
>
|
|
||||||
<option value="">Select Response Level</option>
|
|
||||||
{RESPONSE_LEVELS.map(level => (
|
|
||||||
<option key={level} value={level}>{level}</option>
|
|
||||||
))}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
<label style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
|
||||||
<input
|
<input
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ export default function QuickOverviewModal({ isOpen, onClose, workorders = [] })
|
|||||||
<th>WOID</th>
|
<th>WOID</th>
|
||||||
<th>Created</th>
|
<th>Created</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>System</th>
|
|
||||||
<th>CID & CLO</th>
|
<th>CID & CLO</th>
|
||||||
<th>Requested by</th>
|
<th>Requested by</th>
|
||||||
<th>Topic</th>
|
<th>Topic</th>
|
||||||
@@ -61,7 +60,6 @@ export default function QuickOverviewModal({ isOpen, onClose, workorders = [] })
|
|||||||
{format(new Date(wo.$createdAt || wo.createdAt), 'dd.MM.yyyy, HH:mm')}h
|
{format(new Date(wo.$createdAt || wo.createdAt), 'dd.MM.yyyy, HH:mm')}h
|
||||||
</td>
|
</td>
|
||||||
<td className="bg-light-grey text-small">{wo.type}</td>
|
<td className="bg-light-grey text-small">{wo.type}</td>
|
||||||
<td className="bg-light-grey text-small">{wo.systemType || 'n/a'}</td>
|
|
||||||
<td className="text-small">{wo.customerCode} {wo.customerLocation}</td>
|
<td className="text-small">{wo.customerCode} {wo.customerLocation}</td>
|
||||||
<td className="text-small">{wo.requestedBy}</td>
|
<td className="text-small">{wo.requestedBy}</td>
|
||||||
<td className="text-small">{wo.topic}</td>
|
<td className="text-small">{wo.topic}</td>
|
||||||
|
|||||||
@@ -50,10 +50,7 @@ export default function TicketCard({ ticket, onUpdate }) {
|
|||||||
const handleCreateWorksheet = async (worksheetData, currentUser) => {
|
const handleCreateWorksheet = async (worksheetData, currentUser) => {
|
||||||
const result = await createWorksheet(worksheetData, currentUser)
|
const result = await createWorksheet(worksheetData, currentUser)
|
||||||
if (result.success && worksheetData.newStatus !== ticket.status) {
|
if (result.success && worksheetData.newStatus !== ticket.status) {
|
||||||
await onUpdate(ticket.$id, {
|
await onUpdate(ticket.$id, { status: worksheetData.newStatus })
|
||||||
status: worksheetData.newStatus,
|
|
||||||
responseLevel: worksheetData.newResponseLevel || ticket.responseLevel,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// Akquise-Automatik: Ergebnis im Worksheet steuert den Kundenstatus
|
// Akquise-Automatik: Ergebnis im Worksheet steuert den Kundenstatus
|
||||||
if (result.success && ticket.type === 'Akquise' && ticket.customerId) {
|
if (result.success && ticket.type === 'Akquise' && ticket.customerId) {
|
||||||
@@ -89,7 +86,6 @@ export default function TicketCard({ ticket, onUpdate }) {
|
|||||||
<StatusPill status={ticket.status} />
|
<StatusPill status={ticket.status} />
|
||||||
<PriorityPill priority={ticket.priority} />
|
<PriorityPill priority={ticket.priority} />
|
||||||
{ticket.type && <Badge tone="muted">{ticket.type}</Badge>}
|
{ticket.type && <Badge tone="muted">{ticket.type}</Badge>}
|
||||||
{ticket.systemType && ticket.systemType !== 'n/a' && <Badge tone="muted">{ticket.systemType}</Badge>}
|
|
||||||
{ticket.serviceType && <Badge tone="info">{serviceTypeLabel(ticket.serviceType)}</Badge>}
|
{ticket.serviceType && <Badge tone="info">{serviceTypeLabel(ticket.serviceType)}</Badge>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -253,16 +253,6 @@ export default function WorksheetList({ worksheets, totalTime, loading, onEditTi
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Response Level-Änderung */}
|
|
||||||
{ws.oldResponseLevel && ws.newResponseLevel && ws.oldResponseLevel !== ws.newResponseLevel && (
|
|
||||||
<div className="mb-3">
|
|
||||||
<span className="text-muted">Response Level:</span>{' '}
|
|
||||||
<span className="badge" style={{ background: '#6b7280', color: 'white' }}>{ws.oldResponseLevel}</span>
|
|
||||||
<span className="mx-2">→</span>
|
|
||||||
<span className="badge" style={{ background: '#10b981', color: 'white' }}>{ws.newResponseLevel}</span>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* Details */}
|
{/* Details */}
|
||||||
<div className="mt-3 p-3 rounded-3" style={{
|
<div className="mt-3 p-3 rounded-3" style={{
|
||||||
background: 'rgba(16, 185, 129, 0.05)',
|
background: 'rgba(16, 185, 129, 0.05)',
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ function CustomerTickets({ customerId }) {
|
|||||||
<span className="mono" style={{ color: 'var(--accent)', minWidth: 60 }}>{t.woid || t.$id.slice(-5)}</span>
|
<span className="mono" style={{ color: 'var(--accent)', minWidth: 60 }}>{t.woid || t.$id.slice(-5)}</span>
|
||||||
<div className="grow">
|
<div className="grow">
|
||||||
<div style={{ fontWeight: 600 }}>{t.topic || t.title || '-'}</div>
|
<div style={{ fontWeight: 600 }}>{t.topic || t.title || '-'}</div>
|
||||||
<div className="muted">{t.type} · {t.systemType || 'n/a'}</div>
|
<div className="muted">{t.type}</div>
|
||||||
</div>
|
</div>
|
||||||
<PriorityPill priority={t.priority} />
|
<PriorityPill priority={t.priority} />
|
||||||
<StatusPill status={t.status} />
|
<StatusPill status={t.status} />
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export default function TicketsPage() {
|
|||||||
const [filters, setFilters] = useState({ status: DEFAULT_STATUSES, type: [], priority: [], limit: 10 })
|
const [filters, setFilters] = useState({ status: DEFAULT_STATUSES, type: [], priority: [], limit: 10 })
|
||||||
const [statusSel, setStatusSel] = useState(DEFAULT_STATUSES)
|
const [statusSel, setStatusSel] = useState(DEFAULT_STATUSES)
|
||||||
const [localFilters, setLocalFilters] = useState({
|
const [localFilters, setLocalFilters] = useState({
|
||||||
woid: '', customer: '', userTopic: '', createdDate: '', type: '', system: '', priority: '',
|
woid: '', customer: '', userTopic: '', createdDate: '', type: '', priority: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
const toggleStatus = (status) => {
|
const toggleStatus = (status) => {
|
||||||
@@ -58,7 +58,6 @@ export default function TicketsPage() {
|
|||||||
userTopic: localFilters.userTopic || undefined,
|
userTopic: localFilters.userTopic || undefined,
|
||||||
createdDate: localFilters.createdDate || undefined,
|
createdDate: localFilters.createdDate || undefined,
|
||||||
type: localFilters.type ? [localFilters.type] : [],
|
type: localFilters.type ? [localFilters.type] : [],
|
||||||
system: localFilters.system ? [localFilters.system] : [],
|
|
||||||
priority: localFilters.priority ? [parseInt(localFilters.priority)] : [],
|
priority: localFilters.priority ? [parseInt(localFilters.priority)] : [],
|
||||||
limit,
|
limit,
|
||||||
}))
|
}))
|
||||||
@@ -109,11 +108,6 @@ export default function TicketsPage() {
|
|||||||
<option>Project</option><option>Procurement</option><option>Emergency Call</option>
|
<option>Project</option><option>Procurement</option><option>Emergency Call</option>
|
||||||
<option>Home Office</option><option>Holidays</option><option>Trip</option>
|
<option>Home Office</option><option>Holidays</option><option>Trip</option>
|
||||||
</select>
|
</select>
|
||||||
<select className="form-control" value={localFilters.system} onChange={(e) => setLocalFilters({ ...localFilters, system: e.target.value })}>
|
|
||||||
<option value="">System</option>
|
|
||||||
<option>Client</option><option>Server</option><option>Network</option>
|
|
||||||
<option>EDI</option><option>TOS</option><option>Reports</option><option>n/a</option>
|
|
||||||
</select>
|
|
||||||
<select className="form-control" value={localFilters.priority} onChange={(e) => setLocalFilters({ ...localFilters, priority: e.target.value })}>
|
<select className="form-control" value={localFilters.priority} onChange={(e) => setLocalFilters({ ...localFilters, priority: e.target.value })}>
|
||||||
<option value="">Prioritaet</option>
|
<option value="">Prioritaet</option>
|
||||||
<option value="0">Keine</option><option value="1">Niedrig</option><option value="2">Mittel</option>
|
<option value="0">Keine</option><option value="1">Niedrig</option><option value="2">Mittel</option>
|
||||||
|
|||||||
Reference in new issue
Block a user