Commit bfdee197 authored by Jose Fernando Mendes da Costa's avatar Jose Fernando Mendes da Costa
Browse files

Controller e views da solicitacao de certificado

parent fd820c2c
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Certificado;
use App\Notificacao; use App\Notificacao;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
...@@ -125,6 +126,9 @@ class NotificacaoController extends Controller ...@@ -125,6 +126,9 @@ class NotificacaoController extends Controller
} else { } else {
return redirect()->route('avaliador.editais'); return redirect()->route('avaliador.editais');
} }
} elseif ($notificacao->tipo == 6) {
$trabalho = $notificacao->trabalho;
return view('administrador.visualizarSolicitacaoCertificado', compact('notificacao', 'trabalho'));
} }
} }
......
...@@ -4,6 +4,7 @@ namespace App\Http\Controllers; ...@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use PDF; use PDF;
use App; use App;
use App\Administrador;
use Auth; use Auth;
use App\Area; use App\Area;
use App\User; use App\User;
...@@ -23,6 +24,7 @@ use App\Modalidade; ...@@ -23,6 +24,7 @@ use App\Modalidade;
use App\Proponente; use App\Proponente;
use App\Participante; use App\Participante;
use App\AreaModalidade; use App\AreaModalidade;
use App\Certificado;
use Illuminate\Http\File; use Illuminate\Http\File;
use App\Mail\EventoCriado; use App\Mail\EventoCriado;
use Illuminate\Support\Str; use Illuminate\Support\Str;
...@@ -41,8 +43,12 @@ use Illuminate\Support\Facades\Storage; ...@@ -41,8 +43,12 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use App\Mail\EmailParaUsuarioNaoCadastrado; use App\Mail\EmailParaUsuarioNaoCadastrado;
use App\Mail\SolicitacaoSubstituicao; use App\Mail\SolicitacaoSubstituicao;
use App\Notificacao;
use App\Notifications\SolicitacaoCertificadoNotification;
use App\Notifications\SubmissaoNotification; use App\Notifications\SubmissaoNotification;
use App\Notifications\SubmissaoRecebidaNotification; use App\Notifications\SubmissaoRecebidaNotification;
use App\SolicitacaoCertificado;
use App\SolicitacaoParticipante;
use App\Substituicao; use App\Substituicao;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
...@@ -447,6 +453,42 @@ class TrabalhoController extends Controller ...@@ -447,6 +453,42 @@ class TrabalhoController extends Controller
return redirect()->back(); return redirect()->back();
} }
public function solicitarCertificado(Trabalho $trabalho, Request $request)
{
$users = User::find($request->users);
$coord = $trabalho->coordenador;
$SolicitacaoCertificado = SolicitacaoCertificado::create();
Notificacao::create([
'remetente_id' => auth()->user()->id,
'destinatario_id' => $coord->user_id,
'solicitacao_certificado_id' => $SolicitacaoCertificado->id,
'trabalho_id' => $trabalho->id,
'lido' => false,
'tipo' => 6
]);
foreach ($users as $user) {
SolicitacaoParticipante::create([
'user_id' => $user->id,
'solicitacao_certificado_id' => $SolicitacaoCertificado->id,
]);
}
$admins = Administrador::all();
foreach ($admins as $admin) {
$userTemp = User::find($admin->user_id);
Notificacao::create([
'remetente_id' => auth()->user()->id,
'destinatario_id' => $admin->user_id,
'solicitacao_certificado_id' => $SolicitacaoCertificado->id,
'trabalho_id' => $trabalho->id,
'lido' => false,
'tipo' => 6,
]);
}
$destinatarios = $admins->map(function($admin) {return $admin->user;})->push($coord->user);
Notification::send($destinatarios, new SolicitacaoCertificadoNotification($trabalho->proponente, $trabalho, $userTemp, $users));
return redirect()->route('trabalho.show', ['id' => $trabalho->id])->with('sucesso', 'Solicitação de certificado/declaração efetuada com sucesso!');
}
public function novaVersao(Request $request) public function novaVersao(Request $request)
{ {
......
<?php
namespace App\Notifications;
use App\Proponente;
use App\Trabalho;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Str;
class SolicitacaoCertificadoNotification extends Notification
{
use Queueable;
public $proponente;
public $trabalho;
public $destinatario;
public $users;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(Proponente $proponente, Trabalho $trabalho, User $destinatario, $users)
{
$this->proponente = $proponente;
$this->trabalho = $trabalho;
$this->destinatario = $destinatario;
$this->users = $users;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$nomes = $this->users
->reject(function ($value, $key) {
return $value->name == $this->proponente->user->name;
})->map(function($user) {
return $user->name;
})->implode(', ');
$qtd = $this->users->count();
return (new MailMessage)
->subject('Recebimento de solicitação de certificado/declaração')
->greeting("Olá, {$notifiable->name}!")
->line("O proponente ". $this->proponente->user->name . " registrou uma solicitação de certificado/declaração para ". Str::plural('o', $qtd) . ' ' . Str::plural('seguinte', $qtd) . ' ' . Str::plural('discente', $qtd) . ': ' . $nomes)
->line('Obrigado por usar o nosso sistema.')
->markdown('vendor.notifications.email');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
@extends('layouts.app')
@section('content')
<div class="row justify-content-center"
style="margin-top: 100px;">
<div class="col-md-11">
<div class="row">
<div class="col-sm-12">
<div class="card-body"
style="padding-top: 0.2rem;">
<div class="container">
<div class="form-row mt-3">
<div class="col-md-12">
<h5 style="color: #1492E6; font-size: 20px;">Trabalho - {{ $trabalho->titulo }}</h5>
</div>
<div class="col-md-12">
<h6 style="color: #234B8B; margin-bottom:-0.4rem; font-weight: bold; font-size: 14px;">
Solicitação de certificado/declaração</h6>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@foreach ($notificacao->solicitacaoCertificado->solicitacoesParticipantes as $solicitacao)
<!--Informações Proponente-->
<div class="row justify-content-center"
style="margin-top: 20px;">
<br>
<div class="col-md-11">
<div class="card"
style="border-radius: 5px;">
<div class="card-body"
style="padding-top: 0.2rem;">
<div class="container">
<div class="form-row mt-3">
<div class="col-md-10">
<h5 style="color: #234B8B; font-weight: bold">Solicitante: {{ $solicitacao->user->name }}</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endforeach
@endsection
...@@ -304,6 +304,11 @@ ...@@ -304,6 +304,11 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-mask-plugin@1.14.16/dist/jquery.mask.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/jquery-mask-plugin@1.14.16/dist/jquery.mask.min.js"></script>
<script> <script>
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(document).ready(function() { $(document).ready(function() {
$("#dropdown-login").on('click', function(event){ $("#dropdown-login").on('click', function(event){
event.stopPropagation(); event.stopPropagation();
......
...@@ -110,6 +110,20 @@ ...@@ -110,6 +110,20 @@
@endif @endif
@endif @endif
</div> </div>
{{-- Certificado --}}
@elseif ($notificacao->tipo == 6)
<div class="row">
@if($notificacao->destinatario_id == Auth::user()->id)
<div class="col-sm-11">
<h6 style="font-size: 18px">Solicitação de certificado/declaração</h6>
</div>
@if(!$notificacao->lido)
<div class="col-sm-1">
<p class="circulo"></p>
</div>
@endif
@endif
</div>
@endif @endif
<p style="font-size: 14px; margin-bottom: 0;"> <p style="font-size: 14px; margin-bottom: 0;">
Projeto: {{$notificacao->trabalho->titulo}}</p> Projeto: {{$notificacao->trabalho->titulo}}</p>
......
...@@ -4,8 +4,11 @@ ...@@ -4,8 +4,11 @@
<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-9"><h5 style="color: #234B8B; font-weight: bold">Discentes</h5></div> <div class="col-sm-6"><h5 style="color: #234B8B; font-weight: bold">Discentes</h5></div>
<div class="col-sm-3 text-sm-right" > <div class="col-sm-4 text-sm-right" >
<a href="" data-toggle="modal" data-target="#modalSelecionarDiscentes" class="button">Solicitar certificado/declaração</a>
</div>
<div class="col-sm-2 text-sm-right" >
<a href="{{route('trabalho.trocaParticipante', ['evento_id' => $projeto->evento->id, 'projeto_id' => $projeto->id])}}" <a href="{{route('trabalho.trocaParticipante', ['evento_id' => $projeto->evento->id, 'projeto_id' => $projeto->id])}}"
class="button">Solicitar Substituições</a> class="button">Solicitar Substituições</a>
</div> </div>
......
...@@ -43,6 +43,43 @@ ...@@ -43,6 +43,43 @@
</div> </div>
</div> </div>
</form> </form>
<div class="modal fade" id="modalSelecionarDiscentes" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header" style="overflow-x:auto; padding-left: 31px">
<h5 class="modal-title" id="exampleModalLabel" style= "color:#1492E6">Selecione os discentes que dejesa solicitar certificado/declaração</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close" style="padding-top: 8px; color:#1492E6">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" style="padding-right: 32px;padding-left: 32px;padding-top: 20px;padding-bottom: 32px;">
<form id="certificadoForm" action="{{route('trabalho.solicitarCertificado', $projeto)}}" method="POST">
@csrf
<div class="form-check">
<input name="users[]" class="form-check-input" type="checkbox" value="{{$projeto->proponente->user->id}}" id="pa-{{$projeto->proponente->user->id}}">
<label class="form-check-label" for="pa-{{$projeto->proponente->user->id}}">
{{$projeto->proponente->user->name}}
</label>
</div>
@foreach ($projeto->participantes as $participante)
<div class="form-check">
<input name="users[]" class="form-check-input" type="checkbox" value="{{$participante->user->id}}" id="pa-{{$participante->user->id}}">
<label class="form-check-label" for="pa-{{$participante->user->id}}">
{{$participante->user->name}}
</label>
</div>
@endforeach
</form>
</div>
<div class="modal-footer d-flex justify-content-between px-3">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
<button type="submit" form="certificadoForm" class="btn btn-primary">Confirmar</button>
</div>
</div>
</div>
</div>
<div id="participanteFirst" > <div id="participanteFirst" >
@component('componentes.participante', ['enum_turno' => $enum_turno,'estados' => $estados, ]) @component('componentes.participante', ['enum_turno' => $enum_turno,'estados' => $estados, ])
......
<?php <?php
use App\Http\Middleware\checkCoordenador; use App\Http\Middleware\checkCoordenador;
use App\Trabalho; use App\Trabalho;
...@@ -135,6 +135,7 @@ Route::group(['middleware' => ['isTemp', 'auth', 'verified']], function(){ ...@@ -135,6 +135,7 @@ Route::group(['middleware' => ['isTemp', 'auth', 'verified']], function(){
Route::post( '/projeto/{id}/atualizar', 'TrabalhoController@update' )->name('trabalho.update'); Route::post( '/projeto/{id}/atualizar', 'TrabalhoController@update' )->name('trabalho.update');
Route::get( '/projeto/{id}/excluir', 'TrabalhoController@destroy' )->name('trabalho.destroy'); Route::get( '/projeto/{id}/excluir', 'TrabalhoController@destroy' )->name('trabalho.destroy');
Route::get( '/projeto/{id}/excluirParticipante','TrabalhoController@excluirParticipante')->name('trabalho.excluirParticipante'); Route::get( '/projeto/{id}/excluirParticipante','TrabalhoController@excluirParticipante')->name('trabalho.excluirParticipante');
Route::post( '/projeto/{trabalho}/solicitarCertificado','TrabalhoController@solicitarCertificado')->name('trabalho.solicitarCertificado');
Route::get( '/projeto/exportar/{id}','TrabalhoController@exportProjeto' )->name('exportar.projeto'); Route::get( '/projeto/exportar/{id}','TrabalhoController@exportProjeto' )->name('exportar.projeto');
Route::get( '/projeto/substituirParticipante', 'TrabalhoController@telaTrocaPart' )->name('trabalho.trocaParticipante'); Route::get( '/projeto/substituirParticipante', 'TrabalhoController@telaTrocaPart' )->name('trabalho.trocaParticipante');
Route::post( '/projeto/substituirParticipante', 'TrabalhoController@trocaParticipante' )->name('trabalho.infoTrocaParticipante'); Route::post( '/projeto/substituirParticipante', 'TrabalhoController@trocaParticipante' )->name('trabalho.infoTrocaParticipante');
...@@ -142,6 +143,8 @@ Route::group(['middleware' => ['isTemp', 'auth', 'verified']], function(){ ...@@ -142,6 +143,8 @@ Route::group(['middleware' => ['isTemp', 'auth', 'verified']], function(){
Route::post( '/aprovarSubstituicao', 'TrabalhoController@aprovarSubstituicao' )->name('trabalho.aprovarSubstituicao'); Route::post( '/aprovarSubstituicao', 'TrabalhoController@aprovarSubstituicao' )->name('trabalho.aprovarSubstituicao');
Route::post( '/aprovarProposta/{id}', 'TrabalhoController@aprovarProposta' )->name('trabalho.aprovarProposta'); Route::post( '/aprovarProposta/{id}', 'TrabalhoController@aprovarProposta' )->name('trabalho.aprovarProposta');
Route::post( '/certificado/{certificado}', 'CertificadoController@update' )->name('certificado.update');
//########## Bolsas //########## Bolsas
Route::get( '/bolsas', 'ParticipanteController@listarParticipanteEdital' )->name('bolsas.listar'); Route::get( '/bolsas', 'ParticipanteController@listarParticipanteEdital' )->name('bolsas.listar');
Route::get( '/bolsas/alteracao/{id}/{tipo}', 'ParticipanteController@alterarBolsa' )->name('bolsa.alterar'); Route::get( '/bolsas/alteracao/{id}/{tipo}', 'ParticipanteController@alterarBolsa' )->name('bolsa.alterar');
......
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