$placeholder * @property array> $details * @property boolean $is_visible * @property boolean $required * @property \App\Enums\Formularies\InputStatusEnum $status * @property integer $order */ class Formulary extends Model { use HasFactory; use CastsEnums; /** * fillable * @var string[] */ protected $fillable = [ 'type', 'name', 'slug', 'placeholder', 'details', 'is_visible', 'required', 'status', ]; /** * @var string[] */ protected $casts = [ 'required' => 'bool', 'is_visible' => 'bool', 'placeholder' => 'json', 'details' => 'json', ]; /** * The attributes that should be cast. * * @var array */ protected $enumCasts = [ 'type' => InputTypeEnum::class, 'status' => InputStatusEnum::class, ]; /** * The "booted" method of the model. * * @return void */ protected static function booted(): void { static::creating(function (self $model) { static::setSlug($model); static::setStatusField($model); static::setOrder($model); static::makeRequiredSense($model); }); static::updating(function (self $model) { static::setSlug($model); static::makeRequiredSense($model); }); } // * METHODS /** * Set the slug. * * @param self $model * * @return void */ private static function setSlug(self $model) { $model->slug = Str::slug($model->name); } /** * Set required logical * * @param self $model * * @return void */ private static function makeRequiredSense(self $model) { 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) { 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; } }