$placeholder Formulary placeholders. * @property array> $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 BelongsToTenant; use HasFactory; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'type', 'name', 'slug', 'placeholder', 'details', 'is_visible', 'required', 'status', ]; /** * The attributes that should be cast. * * @var array */ 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; } }