165 lines
7.9 KiB
PHP
165 lines
7.9 KiB
PHP
@extends('layouts.layout-2')
|
|
|
|
@section('content')
|
|
|
|
@if(session('success'))
|
|
<div class="alert alert-success alert-dismissible fade show">
|
|
{{ session('success') }}
|
|
<button type="button" class="close" data-dismiss="alert">×</button>
|
|
</div>
|
|
@endif
|
|
|
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
<div>
|
|
<a href="{{ route('admin.payment-dashboard.index') }}" class="btn btn-sm btn-outline-secondary mr-2">
|
|
<i class="ion ion-md-arrow-back"></i> Zurück
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<span class="badge badge-{{ $incident->severity_color }} badge-pill px-3 py-2" style="font-size:0.9rem">
|
|
{{ $incident->severity_label }}
|
|
</span>
|
|
<span class="badge badge-{{ $incident->status_color }} badge-pill px-3 py-2 ml-1" style="font-size:0.9rem">
|
|
{{ $incident->status_label }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
{{-- Linke Spalte: Details + Timeline --}}
|
|
<div class="col-lg-8">
|
|
<div class="card mb-4">
|
|
<div class="card-header d-flex align-items-center">
|
|
<i class="ion {{ $incident->type_icon }} mr-2 text-secondary"></i>
|
|
<h5 class="mb-0">{{ $incident->title }}</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row mb-3">
|
|
<div class="col-sm-4">
|
|
<small class="text-muted d-block">Anbieter</small>
|
|
<span class="badge badge-secondary">{{ $incident->provider_label }}</span>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<small class="text-muted d-block">Typ</small>
|
|
{{ $incident->type_label }}
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<small class="text-muted d-block">Erkannt am</small>
|
|
{{ $incident->detected_at->format('d.m.Y H:i') }}
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<div class="col-sm-4">
|
|
<small class="text-muted d-block">Dauer</small>
|
|
{{ $incident->duration }}
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<small class="text-muted d-block">Betroffene Bestellungen</small>
|
|
{{ $incident->affected_orders }}
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<small class="text-muted d-block">Betroffener Umsatz</small>
|
|
{{ number_format($incident->affected_revenue, 2, ',', '.') }} €
|
|
</div>
|
|
</div>
|
|
@if($incident->ticket_number)
|
|
<div class="mb-3">
|
|
<small class="text-muted d-block">Ticket-Nummer</small>
|
|
<code>{{ $incident->ticket_number }}</code>
|
|
</div>
|
|
@endif
|
|
@if($incident->description)
|
|
<div class="mb-3">
|
|
<small class="text-muted d-block">Beschreibung</small>
|
|
<p class="mb-0">{{ $incident->description }}</p>
|
|
</div>
|
|
@endif
|
|
@if($incident->notes)
|
|
<div>
|
|
<small class="text-muted d-block">Interne Notizen</small>
|
|
<p class="mb-0 text-muted">{{ $incident->notes }}</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Aktivitäten-Timeline --}}
|
|
<div class="card">
|
|
<h6 class="card-header">Kommunikationsverlauf ({{ $incident->activities->count() }})</h6>
|
|
<div class="card-body">
|
|
@include('admin.payment-dashboard._partials.activity-timeline')
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Rechte Spalte: Aktionen --}}
|
|
<div class="col-lg-4">
|
|
{{-- Status ändern --}}
|
|
<div class="card mb-4">
|
|
<h6 class="card-header">Status ändern</h6>
|
|
<div class="card-body">
|
|
<form method="POST" action="{{ route('admin.payment-dashboard.status.update', $incident) }}">
|
|
@csrf
|
|
@method('PATCH')
|
|
<div class="form-group">
|
|
<select name="status" class="custom-select">
|
|
@foreach(['open' => 'Offen', 'in_progress' => 'In Bearbeitung', 'waiting_provider' => 'Wartet auf Anbieter', 'resolved' => 'Gelöst', 'closed' => 'Geschlossen'] as $value => $label)
|
|
<option value="{{ $value }}" {{ $incident->status === $value ? 'selected' : '' }}>{{ $label }}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary btn-block">Status speichern</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Aktivität hinzufügen --}}
|
|
<div class="card">
|
|
<h6 class="card-header">Aktivität hinzufügen</h6>
|
|
<div class="card-body">
|
|
@if($errors->has('type') || $errors->has('title'))
|
|
<div class="alert alert-danger small">
|
|
@foreach($errors->all() as $error)
|
|
<div>{{ $error }}</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
<form method="POST" action="{{ route('admin.payment-dashboard.activity.store', $incident) }}">
|
|
@csrf
|
|
<div class="form-group">
|
|
<label class="small">Typ</label>
|
|
<select name="type" class="custom-select custom-select-sm">
|
|
<option value="note">Notiz</option>
|
|
<option value="email">E-Mail</option>
|
|
<option value="call">Telefonat</option>
|
|
<option value="ticket">Ticket</option>
|
|
<option value="provider_response">Anbieter-Antwort</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="small">Titel</label>
|
|
<input type="text" name="title" class="form-control form-control-sm"
|
|
placeholder="Kurze Beschreibung" value="{{ old('title') }}" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="small">Details</label>
|
|
<textarea name="content" class="form-control form-control-sm" rows="3"
|
|
placeholder="Inhalt der Aktivität...">{{ old('content') }}</textarea>
|
|
</div>
|
|
<button type="submit" class="btn btn-secondary btn-block btn-sm">
|
|
<i class="ion ion-md-add"></i> Aktivität speichern
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
@if($incident->resolved_at)
|
|
<div class="mt-3 text-center text-muted small">
|
|
<i class="ion ion-md-checkmark-circle text-success"></i>
|
|
Gelöst am {{ $incident->resolved_at->format('d.m.Y H:i') }}
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
@endsection
|