'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime' ]; /** * Tipi movimento disponibili */ public const TIPI_MOVIMENTO = [ 'assegnazione' => 'Assegnazione', 'riconsegna' => 'Riconsegna', 'smarrimento' => 'Smarrimento', 'sostituzione' => 'Sostituzione' ]; /** * Relazione con ChiaveStabile */ public function chiave() { return $this->belongsTo(ChiaveStabile::class, 'chiave_id'); } /** * Accessor per tipo movimento descrizione */ public function getTipoMovimentoDescrizioneAttribute() { return self::TIPI_MOVIMENTO[$this->tipo_movimento] ?? $this->tipo_movimento; } /** * Accessor per badge class tipo movimento */ public function getTipoMovimentoBadgeClassAttribute() { return match($this->tipo_movimento) { 'assegnazione' => 'bg-success', 'riconsegna' => 'bg-info', 'smarrimento' => 'bg-danger', 'sostituzione' => 'bg-warning', default => 'bg-secondary' }; } /** * Scope per tipo movimento */ public function scopePerTipo($query, $tipo) { return $query->where('tipo_movimento', $tipo); } /** * Scope per periodo */ public function scopePerPeriodo($query, $dataInizio, $dataFine) { return $query->whereBetween('data_movimento', [$dataInizio, $dataFine]); } }