ldc-com-app-bo/app/Models/Formulary.php
2025-05-20 11:45:42 +02:00

128 lines
3.5 KiB
PHP

<?php
namespace App\Models;
use App\Enums\Formularies\InputStatusEnum;
use App\Enums\Formularies\InputTypeEnum;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
/**
* @property integer $id Formulary id.
* @property \App\Enums\Formularies\InputTypeEnum $type Formulary type.
* @property string $name Formulary name.
* @property string $slug Formulary slug.
* @property array<string,string> $placeholder Formulary placeholders.
* @property array<string,array<string,string>> $details Formuary details.
* @property boolean $is_visible Formulary visibility.
* @property boolean $required Formulary required status.
* @property \App\Enums\Formularies\InputStatusEnum $status Formulary status.
* @property integer $order Formulary order.
* @property-read \Carbon\Carbon $created_at Created date.
* @property-read \Carbon\Carbon $updated_at Updated date.
*/
class Formulary extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'type',
'name',
'slug',
'placeholder',
'details',
'is_visible',
'required',
'status',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'required' => 'bool',
'is_visible' => 'bool',
'placeholder' => 'json',
'details' => 'json',
'type' => InputTypeEnum::class,
'status' => InputStatusEnum::class,
];
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted(): void
{
static::creating(function (self $model) {
self::setSlug($model);
self::setStatusField($model);
self::setOrder($model);
self::makeRequiredSense($model);
});
static::updating(function (self $model) {
self::setSlug($model);
self::makeRequiredSense($model);
});
}
// * METHODS
/**
* Set the slug.
*
* @param self $model
* @return void
*/
private static function setSlug(self $model): void
{
$model->slug = Str::slug($model->name);
}
/**
* Set required logical.
*
* @param self $model
* @return void
*/
private static function makeRequiredSense(self $model): void
{
if ($model->is_visible == false) {
$model->required = false;
\session()->flash(trans('Le champ ne peut être obligatoire si il n\'est pas visible'));
}
}
/**
* Set the status field.
*
* @param self $model
* @return void
*/
private static function setStatusField(self $model): void
{
if (!isset($model->status)) {
$model->status = InputStatusEnum::default;
}
}
/**
* Set order after the last element of the list.
*
* @param self $model
* @return void
*/
private static function setOrder(self $model): void
{
$model->order = \intval(self::query()->max('order')) + 1;
}
}