netgescon-master/_BACKUP_OLD_netgescon-laravel_INACTIVE/app/Models/MovimentoChiave.php

86 lines
1.9 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MovimentoChiave extends Model
{
use HasFactory;
protected $table = 'movimenti_chiavi';
protected $fillable = [
'chiave_id',
'tipo_movimento',
'data_movimento',
'assegnata_da',
'assegnata_a',
'motivo',
'note'
];
protected $casts = [
'data_movimento' => '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]);
}
}