Unverified Commit 6ac4a6d1 authored by Antônio Durval's avatar Antônio Durval Committed by GitHub
Browse files

Merge pull request #719 from yuriresendematias/master

Selecionando várias áreas temáticas durante o convite para o avaliador
parents a3165e85 df50a554
This diff is collapsed.
<?php <?php
namespace App; namespace App;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
class Trabalho extends Model class Trabalho extends Model
{ {
use SoftDeletes; use SoftDeletes;
// 'rascunho','submetido', 'avaliado', 'corrigido','aprovado','reprovado', 'arquivado' // 'rascunho','submetido', 'avaliado', 'corrigido','aprovado','reprovado', 'arquivado'
protected $fillable = [ protected $fillable = [
'titulo', 'titulo',
'data', 'data',
'aprovado', 'aprovado',
'status', 'status',
'decisaoCONSU', 'decisaoCONSU',
'pontuacaoPlanilha', 'pontuacaoPlanilha',
'linkGrupoPesquisa', 'linkGrupoPesquisa',
'linkLattesEstudante', 'linkLattesEstudante',
'comentario', 'comentario',
'modalidade', 'modalidade',
'conflitosInteresse', 'conflitosInteresse',
'anexoDecisaoCONSU', 'anexoDecisaoCONSU',
'anexoAutorizacaoComiteEtica', 'anexoAutorizacaoComiteEtica',
'JustificativaAutorizacaoEtica', 'JustificativaAutorizacaoEtica',
'anexoLattesCoordenador', 'anexoLattesCoordenador',
'anexoGrupoPesquisa', 'anexoGrupoPesquisa',
'anexoPlanilhaPontuacao', 'anexoPlanilhaPontuacao',
'anexoProjeto', 'anexoProjeto',
'grande_area_id', 'grande_area_id',
'area_id', 'area_id',
'sub_area_id', 'sub_area_id',
'evento_id', 'evento_id',
'proponente_id', 'proponente_id',
'coordenador_id', 'coordenador_id',
'proponente_id', 'proponente_id',
'pivot', 'pivot',
'area_tematica_id', 'area_tematica_id',
]; ];
public function recurso(){ public function recurso(){
return $this->hasMany('App\Recurso', 'trabalhoId'); return $this->hasMany('App\Recurso', 'trabalhoId');
} }
public function arquivo(){ public function arquivo(){
return $this->hasMany('App\Arquivo', 'trabalhoId'); return $this->hasMany('App\Arquivo', 'trabalhoId');
} }
public function modalidade(){ public function modalidade(){
return $this->belongsTo('App\Modalidade', 'modalidadeId'); return $this->belongsTo('App\Modalidade', 'modalidadeId');
} }
public function area(){ public function area(){
return $this->belongsTo('App\Area'); return $this->belongsTo('App\Area');
} }
public function grandeArea(){ public function grandeArea(){
return $this->belongsTo('App\GrandeArea'); return $this->belongsTo('App\GrandeArea');
} }
public function subArea(){ public function subArea(){
return $this->belongsTo('App\SubArea'); return $this->belongsTo('App\SubArea');
} }
public function areaTematica(){ public function areaTematica(){
return $this->belongsTo('App\AreaTematica'); return $this->belongsTo('App\AreaTematica');
} }
public function autor(){ public function autor(){
return $this->belongsTo('App\User', 'autorId'); return $this->belongsTo('App\User', 'autorId');
} }
public function coautor(){ public function coautor(){
return $this->hasMany('App\Coautor', 'trabalhoId'); return $this->hasMany('App\Coautor', 'trabalhoId');
} }
public function parecer(){ public function parecer(){
return $this->hasMany('App\Parecer', 'trabalhoId'); return $this->hasMany('App\Parecer', 'trabalhoId');
} }
public function atribuicao(){ public function atribuicao(){
return $this->hasMany('App\Atribuicao', 'trabalhoId'); return $this->hasMany('App\Atribuicao', 'trabalhoId');
} }
public function evento(){ public function evento(){
return $this->belongsTo('App\Evento'); return $this->belongsTo('App\Evento');
} }
public function planoTrabalho(){ public function planoTrabalho(){
return $this->hasMany('App\PlanoTrabalho'); return $this->hasMany('App\PlanoTrabalho');
} }
public function participantes(){ public function participantes(){
// return $this->belongsToMany('App\Trabalho', 'trabalho_participante'); // return $this->belongsToMany('App\Trabalho', 'trabalho_participante');
return $this->hasMany('App\Participante', 'trabalho_id'); return $this->hasMany('App\Participante', 'trabalho_id');
} }
public function proponente(){ public function proponente(){
return $this->belongsTo('App\Proponente'); return $this->belongsTo('App\Proponente');
} }
public function coordenador(){ public function coordenador(){
return $this->belongsTo('App\CoordenadorComissao'); return $this->belongsTo('App\CoordenadorComissao');
} }
public function avaliadors(){ public function avaliadors(){
return $this->belongsToMany('App\Avaliador')->withPivot('status', 'AnexoParecer', 'parecer', 'recomendacao', 'created_at','pontuacao','acesso'); return $this->belongsToMany('App\Avaliador')->withPivot('status', 'AnexoParecer', 'parecer', 'recomendacao', 'created_at','pontuacao','acesso');
} }
public function substituicaos(){ public function substituicaos(){
return $this->hasMany('App\Substituicao'); return $this->hasMany('App\Substituicao');
} }
public function parecer_internos(){ public function parecer_internos(){
return $this->hasMany(ParecerInterno::class, 'trab_id', 'id'); return $this->hasMany(ParecerInterno::class, 'trab_id', 'id');
} }
public function notificacoes(){ public function notificacoes(){
return $this->hasMany(Notificacao::class, 'trabalho_id', 'id'); return $this->hasMany(Notificacao::class, 'trabalho_id', 'id');
} }
public function desligamentos(){ public function desligamentos(){
return $this->hasMany(Desligamento::class, 'trabalho_id', 'id')->orderBy('created_at', 'DESC'); return $this->hasMany(Desligamento::class, 'trabalho_id', 'id')->orderBy('created_at', 'DESC');
} }
public function solicitacoesCertificados() public function solicitacoesCertificados()
{ {
return $this->hasMany(Certificado::class, 'trabalho_id'); return $this->hasMany(Certificado::class, 'trabalho_id');
} }
public function ods(){ public function ods(){
return $this->belongsToMany('App\ObjetivoDeDesenvolvimentoSustentavel', 'objetivo_de_desenvolvimento_sustentavel_trabalhos', 'trabalho_id'); return $this->belongsToMany('App\ObjetivoDeDesenvolvimentoSustentavel', 'objetivo_de_desenvolvimento_sustentavel_trabalhos', 'trabalho_id');
} }
public function integrantes() { public function integrantes() {
return $this->belongsToMany('App\User', 'trabalho_users', 'trabalho_id'); return $this->belongsToMany('App\User', 'trabalho_users', 'trabalho_id');
} }
} }
<?php <?php
namespace App; namespace App;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class TrabalhoUser extends Model class TrabalhoUser extends Model
{ {
public function user(){ public function user(){
return $this->belongsTo('App\User'); return $this->belongsTo('App\User');
} }
public function funcao(){ public function funcao(){
return $this->belongsTo('App\FuncaoParticipantes', 'funcao_participante_id'); return $this->belongsTo('App\FuncaoParticipantes', 'funcao_participante_id');
} }
} }
<?php <?php
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
class CreateTrabalhoUsersTable extends Migration class CreateTrabalhoUsersTable extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
* *
* @return void * @return void
*/ */
public function up() public function up()
{ {
Schema::create('trabalho_users', function (Blueprint $table) { Schema::create('trabalho_users', function (Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
$table->timestamps(); $table->timestamps();
$table->integer('user_id'); $table->integer('user_id');
$table->foreign('user_id')->references('id')->on('users'); $table->foreign('user_id')->references('id')->on('users');
$table->integer('trabalho_id'); $table->integer('trabalho_id');
$table->foreign('trabalho_id')->references('id')->on('trabalhos'); $table->foreign('trabalho_id')->references('id')->on('trabalhos');
$table->integer('funcao_participante_id'); $table->integer('funcao_participante_id');
$table->foreign('funcao_participante_id')->references('id')->on('funcao_participantes'); $table->foreign('funcao_participante_id')->references('id')->on('funcao_participantes');
}); });
} }
/** /**
* Reverse the migrations. * Reverse the migrations.
* *
* @return void * @return void
*/ */
public function down() public function down()
{ {
Schema::dropIfExists('trabalho_users'); Schema::dropIfExists('trabalho_users');
} }
} }
<div class="col-md-12" style="margin-top: 20px"> <div class="col-md-12" style="margin-top: 20px">
<div class="card" style="border-radius: 5px"> <div class="card" style="border-radius: 5px">
<div class="card-body" style="padding-top: 0.2rem;"> <div class="card-body" style="padding-top: 0.2rem;">
<div class="container"> <div class="container">
<div class="form-row mt-3"> <div class="form-row mt-3">
<div class="col-md-11"> <div class="col-md-11">
<h5 style="color: #234B8B; font-weight: bold">Adicionar Integrante(s)</h5> <h5 style="color: #234B8B; font-weight: bold">Adicionar Integrante(s)</h5>
</div> </div>
<div class="col-md-1 text-sm-right"> <div class="col-md-1 text-sm-right">
<a type="button" value="{{ $edital->id }}" id="atribuir1" data-toggle="modal" data-target="#modalIntegrante"> <a type="button" value="{{ $edital->id }}" id="atribuir1" data-toggle="modal" data-target="#modalIntegrante">
<img class="" src="{{asset('img/icons/add.ico')}}" style="width:30px" alt=""> <img class="" src="{{asset('img/icons/add.ico')}}" style="width:30px" alt="">
</a> </a>
</div> </div>
</div> </div>
<hr style="border-top: 1px solid#1492E6"> <hr style="border-top: 1px solid#1492E6">
<div class="row" id="integrante"> <div class="row" id="integrante">
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- MODAL --> <!-- MODAL -->
<div class="modal fade" id="modalIntegrante" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal fade" id="modalIntegrante" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-xl"> <div class="modal-dialog modal-dialog-centered modal-xl">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Adicionar Integrante</h5> <h5 class="modal-title" id="exampleModalLabel">Adicionar Integrante</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<div class="form-row" style="padding: 30px;"> <div class="form-row" style="padding: 30px;">
<div class="col-md-8"> <div class="col-md-8">
<label for="cpf_consulta">CPF:</label> <label for="cpf_consulta">CPF:</label>
<input type="text" id="cpf_consulta" name="cpf_consulta" class="form-control" onkeyup="mask_cpf();"> <input type="text" id="cpf_consulta" name="cpf_consulta" class="form-control" onkeyup="mask_cpf();">
</div> </div>
<div class="col-md-4 mt-4"> <div class="col-md-4 mt-4">
<button type="button" class="btn btn-primary" onclick="preencherUsuarioExistente()">Adicionar</button> <button type="button" class="btn btn-primary" onclick="preencherUsuarioExistente()">Adicionar</button>
</div> </div>
</div> </div>
<div class="form-row" style="padding: 0px 30px 30px 30px;"> <div class="form-row" style="padding: 0px 30px 30px 30px;">
<label for="funcao_participante">Função do Participante:</label> <label for="funcao_participante">Função do Participante:</label>
<select name="" id="funcao_participante" class="form-control"> <select name="" id="funcao_participante" class="form-control">
@foreach($funcaoParticipantes as $funcao) @foreach($funcaoParticipantes as $funcao)
<option value="{{$funcao->id}}">{{ $funcao->nome }}</option> <option value="{{$funcao->id}}">{{ $funcao->nome }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- MODAL DE ERRO --> <!-- MODAL DE ERRO -->
<div class="modal fade" id="aviso-modal-usuario-nao-existe" data-backdrop="static" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal fade" id="aviso-modal-usuario-nao-existe" data-backdrop="static" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header" style="background-color: #dc3545;"> <div class="modal-header" style="background-color: #dc3545;">
<h5 class="modal-title" id="exampleModalLabel" style="color: white;">Aviso</h5> <h5 class="modal-title" id="exampleModalLabel" style="color: white;">Aviso</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
CPF não consta no sistema! CPF não consta no sistema!
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary btn-color-dafault" data-dismiss="modal">Ok</button> <button type="button" class="btn btn-secondary btn-color-dafault" data-dismiss="modal">Ok</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" id="aviso-modal-usuario-adicionado" data-backdrop="static" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal fade" id="aviso-modal-usuario-adicionado" data-backdrop="static" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header" style="background-color: #32CD32;"> <div class="modal-header" style="background-color: #32CD32;">
<h5 class="modal-title" id="exampleModalLabel" style="color: white;">Sucesso!</h5> <h5 class="modal-title" id="exampleModalLabel" style="color: white;">Sucesso!</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
Integrante adicionado com sucesso Integrante adicionado com sucesso
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-primary btn-color-dafault" data-dismiss="modal">Ok</button> <button type="button" class="btn btn-primary btn-color-dafault" data-dismiss="modal">Ok</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script> <script>
function mask_cpf() { function mask_cpf() {
$("#cpf_consulta").keydown(function(){ $("#cpf_consulta").keydown(function(){
try { try {
$("#cpf_consulta").unmask(); $("#cpf_consulta").unmask();
} catch (e) {} } catch (e) {}
$("#cpf_consulta").mask("999.999.999-99"); $("#cpf_consulta").mask("999.999.999-99");
// ajustando foco // ajustando foco
var elem = this; var elem = this;
setTimeout(function(){ setTimeout(function(){
// mudo a posição do seletor // mudo a posição do seletor
elem.selectionStart = elem.selectionEnd = 10000; elem.selectionStart = elem.selectionEnd = 10000;
}, 0); }, 0);
// reaplico o valor para mudar o foco // reaplico o valor para mudar o foco
var currentValue = $(this).val(); var currentValue = $(this).val();
$(this).val(''); $(this).val('');
$(this).val(currentValue); $(this).val(currentValue);
}); });
} }
function removerIntegrante(id) { function removerIntegrante(id) {
$(`#integrante${id}`).remove() $(`#integrante${id}`).remove()
} }
function preencherUsuarioExistente() { function preencherUsuarioExistente() {
$.ajaxSetup({ $.ajaxSetup({
headers: { headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
} }
}); });
$.ajax({ $.ajax({
url: '{{ route('trabalho.buscarUsuario') }}', url: '{{ route('trabalho.buscarUsuario') }}',
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
data: { data: {
'cpf_consulta': $('#cpf_consulta').val(), 'cpf_consulta': $('#cpf_consulta').val(),
'funcao': $('#funcao_participante').val() 'funcao': $('#funcao_participante').val()
}, },
success: function (data) { success: function (data) {
if(data == 'inexistente' || $('#cpf_consulta').val() == ""){ if(data == 'inexistente' || $('#cpf_consulta').val() == ""){
exibirModalUsuarioInexistente(); exibirModalUsuarioInexistente();
}else { }else {
exibirUsuarioAdicionado(); exibirUsuarioAdicionado();
$('#integrante').append(` $('#integrante').append(`
<div id="integrante${data[0]['id']}" class="col-md-6"> <div id="integrante${data[0]['id']}" class="col-md-6">
<div class="row"> <div class="row">
<input name="integrantes[]" type="text" value="${data[0]['id']},${$('#funcao_participante').val()}" hidden> <input name="integrantes[]" type="text" value="${data[0]['id']},${$('#funcao_participante').val()}" hidden>
<div class="col-md-2" style="display: flex; align-items: center;"> <div class="col-md-2" style="display: flex; align-items: center;">
<img src="{{asset('img/icons/usuario.svg')}}" style="width:60px" alt=""> <img src="{{asset('img/icons/usuario.svg')}}" style="width:60px" alt="">
</div> </div>
<div class="col-md-4 mb-1"> <div class="col-md-4 mb-1">
<strong>Nome:</strong> ${data[0]['name']} <strong>Nome:</strong> ${data[0]['name']}
<strong>CPF:</strong> ${data[0]['cpf']} <strong>CPF:</strong> ${data[0]['cpf']}
<strong>Função:</strong> ${data[1]['nome']} <strong>Função:</strong> ${data[1]['nome']}
<button type="button" class="btn btn-danger" onclick="removerIntegrante(${data[0]['id']})">Remover</button> <button type="button" class="btn btn-danger" onclick="removerIntegrante(${data[0]['id']})">Remover</button>
</div> </div>
</div> </div>
</div> </div>
`) `)
} }
} }
}); });
} }
function exibirModalUsuarioInexistente() { function exibirModalUsuarioInexistente() {
$('#aviso-modal-usuario-nao-existe').modal('show'); $('#aviso-modal-usuario-nao-existe').modal('show');
} }
function exibirUsuarioAdicionado() { function exibirUsuarioAdicionado() {
$('#aviso-modal-usuario-adicionado').modal('show');; $('#aviso-modal-usuario-adicionado').modal('show');;
} }
</script> </script>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<!-- Participantes --> <!-- Participantes -->
<div class="col-md-12" style="margin-top: 20px"> <div class="col-md-12" style="margin-top: 20px">
<div class="card" style="border-radius: 5px"> <div class="card" style="border-radius: 5px">
<div class="card-body" style="padding-top: 0.2rem;"> <div class="card-body" style="padding-top: 0.2rem;">
<div class="container"> <div class="container">
<div class="form-row mt-3"> <div class="form-row mt-3">
<div class="col-sm-8"><h5 style="color: #234B8B; font-weight: bold">Integrantes</h5></div> <div class="col-sm-8"><h5 style="color: #234B8B; font-weight: bold">Integrantes</h5></div>
</div> </div>
<hr style="border-top: 1px solid#1492E6"> <hr style="border-top: 1px solid#1492E6">
<div class="row justify-content-start" style="alignment: center"> <div class="row justify-content-start" style="alignment: center">
@foreach($trabalhos_user as $trabalho_user) @foreach($trabalhos_user as $trabalho_user)
<div class="col-sm-1 mt-4"> <div class="col-sm-1 mt-4">
<img src="{{asset('img/icons/usuario.svg')}}" style="width:60px" alt=""> <img src="{{asset('img/icons/usuario.svg')}}" style="width:60px" alt="">
</div> </div>
<div class="col-sm-5 mt-4"> <div class="col-sm-5 mt-4">
<h5 class="mb-0">Nome: {{ $trabalho_user->user->name }}</h5> <h5 class="mb-0">Nome: {{ $trabalho_user->user->name }}</h5>
<h5 class="mb-0">Função: {{ $trabalho_user->funcao->nome }}</h5> <h5 class="mb-0">Função: {{ $trabalho_user->funcao->nome }}</h5>
</div> </div>
@endforeach @endforeach
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!--X Participantes X--> <!--X Participantes X-->
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment