mivita/dev/payment-dashboard/app/Models/PaymentIncident.php
2026-04-14 18:07:45 +02:00

74 lines
1.9 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class PaymentIncident extends Model
{
protected $fillable = [
'title', 'description', 'provider', 'type', 'status',
'severity', 'affected_orders', 'affected_revenue',
'detected_at', 'resolved_at', 'ticket_number',
];
protected $casts = [
'detected_at' => 'datetime',
'resolved_at' => 'datetime',
'affected_revenue' => 'decimal:2',
];
public function activities(): HasMany
{
return $this->hasMany(IncidentActivity::class, 'incident_id');
}
public function getDurationAttribute(): string
{
$end = $this->resolved_at ?? now();
$diff = $this->detected_at->diff($end);
if ($diff->days > 0) {
return $diff->days.'d '.$diff->h.'h';
}
if ($diff->h > 0) {
return $diff->h.'h '.$diff->i.'min';
}
return $diff->i.' min';
}
public function getSeverityColorAttribute(): string
{
return match ($this->severity) {
'critical' => '#ef4444',
'high' => '#f97316',
'medium' => '#eab308',
'low' => '#22c55e',
default => '#6b7280',
};
}
public function getStatusLabelAttribute(): string
{
return match ($this->status) {
'open' => 'Offen',
'in_progress' => 'In Bearbeitung',
'waiting_provider' => 'Wartet auf Anbieter',
'resolved' => 'Gelöst',
'closed' => 'Geschlossen',
default => $this->status,
};
}
public function getProviderLabelAttribute(): string
{
return match ($this->provider) {
'payone' => 'PAYONE',
'stripe' => 'Stripe',
'paypal' => 'PayPal',
'mollie' => 'Mollie',
default => 'Sonstige',
};
}
}