86 lines
1.9 KiB
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]);
|
|
}
|
|
}
|