diff --git a/app/Http/Controllers/ChamadoController.php b/app/Http/Controllers/ChamadoController.php index 968dffe..7d3e254 100644 --- a/app/Http/Controllers/ChamadoController.php +++ b/app/Http/Controllers/ChamadoController.php @@ -40,8 +40,11 @@ public function index() if (Gate::allows('admin')) { $chamados = Chamado::all(); } else { - $user = \Auth::user(); - $chamados = Chamado::where('user_id', '=', $user->id)->orderBy('created_at', 'desc')->get(); + /* precisa melhorar isto */ + $chamados = Chamado::whereHas('users', function ($pivot) { + $user = \Auth::user(); + $pivot->where('user_id', $user->id); + })->orderBy('created_at', 'desc')->get(); } return view('chamados/index', compact('chamados')); @@ -170,10 +173,10 @@ public function show(Chamado $chamado) if (empty($template)) { $template = []; } - #dd($template); + $autor = $chamado->users()->wherePivot('funcao', 'Autor')->first(); $complexidades = $this->complexidades; - return view('chamados/show', compact('chamado', 'extras', 'template', 'complexidades')); + return view('chamados/show', compact('autor', 'chamado', 'extras', 'template', 'complexidades')); } /** @@ -189,8 +192,9 @@ public function edit(Chamado $chamado) $predios = $this->predios; $atendentes = $this->atendentes; $complexidades = $this->complexidades; + $autor = $chamado->users()->wherePivot('funcao', 'Autor')->first(); $form = JSONForms::generateForm($fila, $chamado); - return view('chamados/edit', compact('fila', 'chamado', 'predios', 'atendentes', 'complexidades', 'form')); + return view('chamados/edit', compact('autor', 'fila', 'chamado', 'predios', 'atendentes', 'complexidades', 'form')); } /** @@ -240,7 +244,6 @@ private function grava(Chamado $chamado, Request $request) $chamado->atribuido_em = null; $chamado->complexidade = null; $user = \Auth::user(); - $chamado->user_id = $user->id; } else { $request->validate([ 'telefone' => ['required'], @@ -294,10 +297,9 @@ private function grava(Chamado $chamado, Request $request) /* Atualiza telefone da pessoa */ $user->telefone = $request->telefone; $user->save(); - - $chamado->user_id = $user->id; } $chamado->save(); + $chamado->users()->attach($user->id, ['funcao' => 'Autor']); return $chamado; } diff --git a/app/Models/Chamado.php b/app/Models/Chamado.php index f347188..a6dd212 100644 --- a/app/Models/Chamado.php +++ b/app/Models/Chamado.php @@ -12,8 +12,10 @@ class Chamado extends Model { use HasFactory; - public function user(){ - return $this->belongsTo(User::class); + public function users() + { + return $this->belongsToMany('App\Models\User', 'user_chamado') + ->withPivot('funcao')->withTimestamps(); } public function comentarios() diff --git a/app/Models/User.php b/app/Models/User.php index 1d19edd..4b50eec 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -100,9 +100,9 @@ public static function getByCodpes($codpes) { return User::where('codpes',$codpes)->first(); } - /** * Relacionamento n:n com fila, atributo funcao: Gerente, Atendente + * TODO: não deveria ser filas? */ public function fila() { @@ -110,4 +110,15 @@ public function fila() ->withPivot('funcao') ->withTimestamps(); } + + /** + * Relacionamento n:n com chamado, atributo funcao: + - Atendente, Atribuidor, Autor, Observador + */ + public function chamados() + { + return $this->belongsToMany('App\Models\Chamado') + ->withPivot('funcao') + ->withTimestamps(); + } } diff --git a/app/Policies/ChamadoPolicy.php b/app/Policies/ChamadoPolicy.php index 723a6c1..df59b6c 100644 --- a/app/Policies/ChamadoPolicy.php +++ b/app/Policies/ChamadoPolicy.php @@ -32,8 +32,10 @@ public function viewAny(User $user) public function view(User $user, Chamado $chamado) { // Quem pode ver: o autor, atendentes ou admin - if($user->codpes == $chamado->user->codpes){ - return true; + foreach ($chamado->users as $u) { + if ($user->codpes == $u->codpes) { + return true; + } } if(Gate::allows('admin')){ return true; @@ -67,8 +69,10 @@ public function create(User $user) public function update(User $user, Chamado $chamado) { // Quem pode ver: o autor, atendentes ou admin - if($user->codpes == $chamado->user->codpes){ - return true; + foreach ($chamado->users as $u) { + if ($user->codpes == $u->codpes) { + return true; + } } if(Gate::allows('admin')){ return true; diff --git a/database/factories/ChamadoFactory.php b/database/factories/ChamadoFactory.php index 9d06d28..bc3d832 100644 --- a/database/factories/ChamadoFactory.php +++ b/database/factories/ChamadoFactory.php @@ -45,7 +45,6 @@ public function definition() 'patrimonio' => $this->faker->unique()->numberBetween(10000, 999999), 'status' => $status, 'complexidade' => $complexidades[array_rand($complexidades)], - 'user_id' => User::inRandomOrder()->first()->id, 'fila_id' => Fila::inRandomOrder()->first()->id, 'fechado_em' => $fechado_em, 'atribuido_em' => $atribuido_em, diff --git a/database/migrations/2020_10_06_135511_create_chamados_table.php b/database/migrations/2020_10_06_135511_create_chamados_table.php index 907331f..908a007 100644 --- a/database/migrations/2020_10_06_135511_create_chamados_table.php +++ b/database/migrations/2020_10_06_135511_create_chamados_table.php @@ -41,7 +41,6 @@ public function up() $table->json('extras')->nullable(); /* Relacionamentos */ - $table->foreignId('user_id')->nullable()->constrained('users')->onDelete('set null'); $table->foreignId('fila_id')->constrained('filas'); $table->timestamps(); diff --git a/database/migrations/2020_10_14_165152_create_user_chamado_table.php b/database/migrations/2020_10_14_165152_create_user_chamado_table.php new file mode 100644 index 0000000..996682b --- /dev/null +++ b/database/migrations/2020_10_14_165152_create_user_chamado_table.php @@ -0,0 +1,37 @@ +id(); + $table->foreignId('user_id')->nullable()->constrained('users'); + $table->foreignId('chamado_id')->constrained('chamados')->onDelete('cascade'); + + $funcoes = ['Atendente', 'Atribuidor', 'Autor', 'Observador']; + $table->enum('funcao', $funcoes) +; + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_chamado'); + } +} diff --git a/database/seeders/ChamadoSeeder.php b/database/seeders/ChamadoSeeder.php index f78145d..7e20118 100644 --- a/database/seeders/ChamadoSeeder.php +++ b/database/seeders/ChamadoSeeder.php @@ -28,12 +28,13 @@ public function run() "dia" : "1951-07-22", "obs" : "Fonte queimada. Precisa trocar." }', - 'user_id' => 1, 'fila_id' => 1 ]; - Chamado::create($chamado); - Chamado::factory(10)->create(); - + $cht = Chamado::create($chamado); + $cht->users()->attach(User::first()->id, ['funcao' => 'Autor']); + Chamado::factory(10)->create()->each(function ($chamado) { + $chamado->users()->attach(User::inRandomOrder()->first()->id, ['funcao' => 'Autor']); + }); } } diff --git a/resources/views/chamados/form.blade.php b/resources/views/chamados/form.blade.php index a79ecdc..6b7e214 100644 --- a/resources/views/chamados/form.blade.php +++ b/resources/views/chamados/form.blade.php @@ -40,7 +40,7 @@