'boolean', ]; public static function boot() { parent::boot(); static::creating(function ($model) { if (auth()->check()) { $model->created_lotacao_id = auth()->payload()->get('lotacao_id'); $model->created_centro_custo_id = auth()->payload()->get('centro_custo_id'); $model->updated_lotacao_id = auth()->payload()->get('lotacao_id'); $model->updated_centro_custo_id = auth()->payload()->get('centro_custo_id'); } }); self::created(function($model){ UsuarioHistoricoSenha::create([ 'usuario_id' => $model->id, 'senha' => $model->senha, ]); }); static::updating(function ($model) { if (auth()->check()) { $model->updated_lotacao_id = auth()->payload()->get('lotacao_id'); $model->updated_centro_custo_id = auth()->payload()->get('centro_custo_id'); } }); self::updated(function($model){ if ($model->senha !== $model->getOriginal('senha')) { UsuarioHistoricoSenha::create([ 'usuario_id' => $model->id, 'senha' => $model->senha, ]); } }); static::deleting(function ($model) { if (!$model->isAllowedToDelete) { throw new DeletingModelException; } }); static::deleted(function ($model) { if ($model->trashed() && auth()->check()) { $model->deleted_lotacao_id = auth()->payload()->get('lotacao_id'); $model->deleted_centro_custo_id = auth()->payload()->get('centro_custo_id'); $model->save(); } }); static::restored(function ($model) { $model->deleted_lotacao_id = null; $model->deleted_centro_custo_id = null; $model->save(); }); } public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } public function cidadao() { return $this->belongsTo(Cidadao::class); } public function registroTipo() { return $this->belongsTo(UsuarioRegistroTipo::class); } public function registroEstado() { return $this->belongsTo(Estado::class); } public function unidades() { return $this->hasMany(Unidade::class, 'gestor_id'); } public function lotacoes() { return $this->hasMany(Lotacao::class); } public function lotacoesAtivas() { return $this->hasMany(Lotacao::class)->where('ativo', true); } public function almoxarifadoSaidaRequisicoes() { return $this->hasMany(SaidaRequisicao::class); } public function almoxarifadoSaidaTransferencias() { return $this->hasMany(SaidaTransferencia::class); } public function almoxarifadoSaidaBaixas() { return $this->hasMany(SaidaBaixa::class, 'usuario_solicitante_id'); } public function farmaciaReceitas() { return $this->hasMany(Receita::class); } public function getNomeAttribute() { return $this->cidadao->nome; } public function setSenhaAttribute($value) { $this->attributes['senha'] = Hash::make($value); } public function agendamentosExameImagem() { return $this->hasMany(Agendamento::class); } public function getIsAllowedToDeleteAttribute() { return $this->hasNoOne([ 'unidades', 'lotacoes', 'almoxarifadoSaidaRequisicoes', 'almoxarifadoSaidaTransferencias', 'almoxarifadoSaidaBaixas', 'farmaciaReceitas', ]); } private function hasNoOne(array $relations) : bool { foreach ($relations as $relation) { if (!is_null($this->{$relation}) && $this->{$relation}()->get()->isNotEmpty()) { return false; } } return true; } public function atencaoBasicaEquipes() { return $this->belongsToMany(Equipe::class, 'atencao_basica_parametrizacao_equipe_usuario') ->using(EquipeUsuario::class) ->as('equipeUsuario') ->withPivot('ativo') ->withTimestamps(); } }