atualizacao
This commit is contained in:
62
app/Models/Aluno.php
Normal file
62
app/Models/Aluno.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Models\Traits\BelongsToEscola;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Aluno extends Model
|
||||
{
|
||||
use BelongsToEscola;
|
||||
|
||||
protected $fillable = [
|
||||
'id_escola',
|
||||
'id_turma',
|
||||
'nome',
|
||||
'cpf',
|
||||
'data_nascimento',
|
||||
'data_inscricao',
|
||||
'user_id', // usuário do aluno (portal), opcional
|
||||
// 'responsavel_user_id' // ❌ removido (agora é pivot)
|
||||
];
|
||||
|
||||
public function turma()
|
||||
{
|
||||
return $this->belongsTo(
|
||||
Turma::class,
|
||||
'id_turma'
|
||||
);
|
||||
}
|
||||
|
||||
public function escola()
|
||||
{
|
||||
return $this->belongsTo(
|
||||
Escola::class,
|
||||
'id_escola'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Usuário do aluno (se o aluno tiver login no portal)
|
||||
*/
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(
|
||||
User::class,
|
||||
'user_id'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Responsáveis do aluno (N:N via pivot aluno_responsaveis)
|
||||
*/
|
||||
public function responsaveis()
|
||||
{
|
||||
return $this->belongsToMany(
|
||||
User::class,
|
||||
'aluno_responsaveis',
|
||||
'aluno_id',
|
||||
'user_id'
|
||||
)->withTimestamps();
|
||||
}
|
||||
}
|
||||
66
app/Models/Escola.php
Normal file
66
app/Models/Escola.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class Escola extends Model
|
||||
{
|
||||
protected $casts = [
|
||||
'endereco' => 'array',
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'cnpj',
|
||||
'endereco',
|
||||
'nome',
|
||||
];
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| GLOBAL SCOPE MULTI-TENANT
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected static function booted()
|
||||
{
|
||||
static::addGlobalScope('user_escolas', function (Builder $builder) {
|
||||
|
||||
if (Auth::check() && !Auth::user()->is_super_admin) {
|
||||
|
||||
$builder->whereIn('id', function ($query) {
|
||||
|
||||
$query->select('escola_id')
|
||||
->from('user_escolas')
|
||||
->where('user_id', Auth::id());
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELACIONAMENTOS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function turmas()
|
||||
{
|
||||
return $this->hasMany(Turma::class, 'id_escola');
|
||||
}
|
||||
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany(
|
||||
User::class,
|
||||
'user_escolas',
|
||||
'escola_id',
|
||||
'user_id'
|
||||
);
|
||||
}
|
||||
}
|
||||
50
app/Models/Traits/BelongsToEscola.php
Normal file
50
app/Models/Traits/BelongsToEscola.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Traits;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
trait BelongsToEscola
|
||||
{
|
||||
protected static function bootBelongsToEscola()
|
||||
{
|
||||
static::addGlobalScope('escola', function (Builder $builder) {
|
||||
|
||||
$user = auth()->user();
|
||||
|
||||
// Sem usuário logado: não filtra
|
||||
if (!$user) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Super admin: vê tudo (não filtra por escola)
|
||||
if ($user->is_super_admin) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Usuário comum: filtra pela escola atual
|
||||
if ($user->current_escola_id) {
|
||||
$builder->where('id_escola', $user->current_escola_id);
|
||||
}
|
||||
});
|
||||
|
||||
static::creating(function ($model) {
|
||||
|
||||
$user = auth()->user();
|
||||
|
||||
if (!$user) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Super admin: não força id_escola automaticamente
|
||||
if ($user->is_super_admin) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Se não veio id_escola, seta pela escola atual do usuário
|
||||
if (!$model->id_escola) {
|
||||
$model->id_escola = $user->current_escola_id;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
24
app/Models/Turma.php
Normal file
24
app/Models/Turma.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
use App\Models\Traits\BelongsToEscola;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Turma extends Model
|
||||
{
|
||||
use BelongsToEscola;
|
||||
|
||||
protected $fillable = [
|
||||
'id_escola',
|
||||
'nome'
|
||||
];
|
||||
|
||||
public function escola()
|
||||
{
|
||||
return $this->belongsTo(
|
||||
Escola::class,
|
||||
'id_escola'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,47 +2,131 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Spatie\Permission\Traits\HasRoles;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
/** @use HasFactory<\Database\Factories\UserFactory> */
|
||||
use HasFactory, Notifiable;
|
||||
use HasRoles;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
'password',
|
||||
'is_super_admin',
|
||||
'current_escola_id',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var list<string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the attributes that should be cast.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function casts(): array
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| RELACIONAMENTOS
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function escolas()
|
||||
{
|
||||
return [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
return $this->belongsToMany(
|
||||
Escola::class,
|
||||
'user_escolas',
|
||||
'user_id',
|
||||
'escola_id'
|
||||
);
|
||||
}
|
||||
|
||||
public function escolaAtual()
|
||||
{
|
||||
return $this->belongsTo(
|
||||
Escola::class,
|
||||
'current_escola_id'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alunos pelos quais este usuário é responsável (N:N via pivot)
|
||||
*/
|
||||
public function alunosComoResponsavel()
|
||||
{
|
||||
return $this->belongsToMany(
|
||||
Aluno::class,
|
||||
'aluno_responsaveis',
|
||||
'user_id',
|
||||
'aluno_id'
|
||||
)->withTimestamps();
|
||||
}
|
||||
|
||||
/**
|
||||
* Se você quiser acessar o "aluno" do próprio usuário (portal do aluno),
|
||||
* dá pra ter 1:1 (um usuário pode ser o aluno).
|
||||
*/
|
||||
public function aluno()
|
||||
{
|
||||
return $this->hasOne(Aluno::class, 'user_id');
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SUPER ADMIN
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function isSuperAdmin(): bool
|
||||
{
|
||||
return (bool) $this->is_super_admin;
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| FUNÇÃO / CARGO DO USUÁRIO (ROLE)
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public function funcao(): ?string
|
||||
{
|
||||
if ($this->isSuperAdmin()) {
|
||||
return 'Super Admin';
|
||||
}
|
||||
|
||||
if (!$this->current_escola_id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
setPermissionsTeamId($this->current_escola_id);
|
||||
|
||||
$role = $this->roles()->value('name');
|
||||
|
||||
if (!$role) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$map = [
|
||||
'coordenacao' => 'Coordenação',
|
||||
'secretaria' => 'Secretaria',
|
||||
'responsavel' => 'Responsável',
|
||||
'aluno' => 'Aluno',
|
||||
'representante_de_turma' => 'Representante de Turma',
|
||||
'super_admin' => 'Super Admin',
|
||||
];
|
||||
|
||||
return $map[$role] ?? ucfirst(str_replace('_', ' ', $role));
|
||||
}
|
||||
|
||||
public function hasFuncao(string $funcao): bool
|
||||
{
|
||||
if ($funcao === 'super_admin') {
|
||||
return $this->isSuperAdmin();
|
||||
}
|
||||
|
||||
if (!$this->current_escola_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setPermissionsTeamId($this->current_escola_id);
|
||||
|
||||
return $this->hasRole($funcao);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class alunos extends Model
|
||||
{
|
||||
public function turma()
|
||||
{
|
||||
return $this->belongsTo(turmas::class, 'id_turma', 'id');
|
||||
}
|
||||
|
||||
public function responsaveis() {
|
||||
return $this->hasMany(User::class, 'id', 'id_responsavel');
|
||||
}
|
||||
}
|
||||
10
app/Models/configs.php
Normal file
10
app/Models/configs.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class configs extends Model
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class escolas extends Model
|
||||
{
|
||||
protected $casts = [
|
||||
'endereco' => 'array',
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'cnpj',
|
||||
'endereco',
|
||||
'nome',
|
||||
];
|
||||
|
||||
public function turmas()
|
||||
{
|
||||
return $this->hasMany(turmas::class, 'id_escola', 'id');
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class turmas extends Model
|
||||
{
|
||||
protected $fillable = [
|
||||
'nome',
|
||||
'descricao',
|
||||
];
|
||||
public function escola()
|
||||
{
|
||||
return $this->hasOne(escolas::class, 'id', 'id_escola');
|
||||
}
|
||||
|
||||
public function alunos()
|
||||
{
|
||||
return $this->hasMany(alunos::class, 'id', 'id_turma');
|
||||
}
|
||||
|
||||
public function enviosWpp() {
|
||||
return $this->hasMany(envios_wpp::class, 'id_turma', 'id');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user