'Площадки', self::TYPE_RECLAMATION => 'Рекламации', self::TYPE_SCHEDULE => 'График монтажей', ]; public const TYPE_COLORS = [ self::TYPE_PLATFORM => 'primary', self::TYPE_RECLAMATION => 'success', self::TYPE_SCHEDULE => 'warning', ]; public const EVENT_CREATED = 'created'; public const EVENT_STATUS_CHANGED = 'status_changed'; public const EVENT_SCHEDULE_ADDED = 'schedule_added'; public const EVENT_NAMES = [ self::EVENT_CREATED => 'Создание', self::EVENT_STATUS_CHANGED => 'Смена статуса', self::EVENT_SCHEDULE_ADDED => 'Добавлено в график', ]; public const DEFAULT_SORT_BY = 'created_at'; public const DEFAULT_ORDER_BY = 'desc'; protected $fillable = [ 'user_id', 'type', 'event', 'title', 'message', 'message_html', 'data', 'read_at', ]; protected function casts(): array { return [ 'data' => 'array', 'read_at' => 'datetime', ]; } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function isRead(): bool { return $this->read_at !== null; } public function getTypeNameAttribute(): string { return self::TYPE_NAMES[$this->type] ?? $this->type; } public function getEventNameAttribute(): string { return self::EVENT_NAMES[$this->event] ?? $this->event; } }