0
Contextualization
When the user presses the button Authorize Documentation the modal will be displayed Authorization that will ask to select the user and enter the password, as shown in the following image.
Business rule
For default the status of the documentation is Pending or P. When the user fills in the authorization "modal", it will be validated if the user and the password informed is equal to that of the database. If so, the documentation status is set to "Authorized or A" and this data is saved in the database. And the data from the tabs are enabled.
Doubt:
Although the user and password informed are the same as the database error is displayed: "Error in Authorizing Documentation". Concerning the file project-authorization. The method is always executed fail instead of done. How to solve this problem?
Method authorization class Projectocontroller.php
<?php
namespace App\Http\Controllers\Admin;
use App\User;
use App\Helpers\helpers;
use App\Models\Projeto;
use App\Models\Setor;
use App\Models\Proponente;
use App\Models\TipoProjeto;
use App\Models\Localidade;
use App\Models\ModalidadeApoio;
use App\Models\LocalidadeProjeto;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class ProjetoController extends Controller
{
private $projeto;
private $novoProjeto;
public $autorizaDoc;//revisar a funcionalidade desta variável
//Construtor do projeto
public function __construct(Projeto $projeto)
{
$this->projeto = $projeto;
$this->autorizaDoc = false;
}
//Redireciona os dados do projeto para a página principal
public function index(Request $request)
{
$permissao = verificarPermissao('Projetos');
$projetos = Projeto::all();
return view('admin.projeto.index',['projetos' => $projetos, 'permissoesPerfil' => $permissao]);
}
//Este método apresenta o formulário para cadastrar um novo projeto
public function novo()
{
$this->autorizaDoc = false;
$setores = Setor::all();
$proponentes = Proponente::all();
$tipoProjetos = TipoProjeto::all();
$modalidadeApoios = ModalidadeApoio::all();
$localidades = Localidade::all();
$permissoesAprovacao = verificarPermissao('Aprovação');
$permissoesJuridico = verificarPermissao('Juridico');
$permissoesGestaoContrato = verificarPermissao('Gestão Contratos e Convênios');
$permissoesFinanceiro = verificarPermissao('Financeiro');
$permissoesOcorrencia = verificarPermissao('Ocorrência');
$permissoesAbas= verificarPermissao('Abas do Projeto');
$permissoesDadosGeraisProj= verificarPermissao('Dados Gerais do Projeto');
return view('admin.projeto.novo',
['permissoesAprovacao' => $permissoesAprovacao, 'permissoesJuridico' => $permissoesJuridico,
'permissoesGestaoContrato' => $permissoesGestaoContrato , 'permissoesFinanceiro' => $permissoesFinanceiro,
'permissoesOcorrencia'=> $permissoesOcorrencia, 'permissoesDadosGeraisProj' => $permissoesDadosGeraisProj,
'permissoesAbas' => $permissoesAbas, 'setores' => $setores, 'proponentes' => $proponentes, 'tipoProjetos' => $tipoProjetos,
'localidades' => $localidades,'modalidadeApoios' => $modalidadeApoios, 'autorizaDoc' => $this->autorizaDoc
]);
}
//Método para a consulta dos projetos
public function consulta(Request $request){
$condicoes = [];
if($request->nome != null){
$condicoes[] = [DB::raw('upper(nome_projeto)'), 'like', DB::raw('upper("%'.$request->get('nomeProjeto').'%")')];
}
if($request->processo != null){
$condicoes[] = [DB::raw('upper(tipo_processo)'), 'like', DB::raw('upper("%'.$request->get('processo').'%")')];
}
if($request->data_inicio != null){
$condicoes[] = ['dt_inicio', '=', $request->input('dtInicio')];
if($request->data_final != null){
$condicoes[] = ['dt_fim', '=', $request->input('dtFim')];
}
$request->flash(['nome_projeto', 'tipo_processo', 'dt_inicio', 'dt_fim']);
$projetos = Projeto::where($condicoes)->orderBy('nome_projeto')->get();
$permissao = verificarPermissao('Projetos');
return view('admin.projeto.index',['projetos' => $projetos, 'permissoesPerfil' => $permissao]);
}
}
//Método para cadastrar os dados gerais do projeto
public function cadastro(Request $request, Projeto $projeto)
{
$novoProjeto = $projeto->salvar($request->all());
return redirect()->route('projeto.edita', $novoProjeto->id)->with('success','Sucesso ao cadastrar');;
}
//Método que redireciona para a página de editar o Projeto
public function edita($id, Request $request)
{
$this->autorizaDoc = false;
$usuarios = User::where('autoriza', '=', 'S')->get();
$setores = Setor::all();
$proponentes = Proponente::all();
$tipoProjetos = TipoProjeto::all();
$modalidadeApoios = ModalidadeApoio::all();
$localidades = Localidade::all();
$localidadesAtivas = Localidade::where('ativo', '=', 'S')->orderBy('localidade', 'asc')->get();
$permissoesAprovacao = verificarPermissao('Aprovação');
$permissoesJuridico = verificarPermissao('Juridico');
$permissoesGestaoContrato = verificarPermissao('Gestão Contratos e Convênios');
$permissoesFinanceiro = verificarPermissao('Financeiro');
$permissoesOcorrencia = verificarPermissao('Ocorrência');
$permissoesAbas= verificarPermissao('Abas do Projeto');
$permissoesDadosGeraisProj= verificarPermissao('Dados Gerais do Projeto');
$usuarioResponsavel = Auth::user()->name;
return view('admin.projeto.edita', ['projeto' => Projeto::find($id), 'permissoesAprovacao' => $permissoesAprovacao, 'permissoesJuridico' => $permissoesJuridico,
'permissoesGestaoContrato' => $permissoesGestaoContrato , 'permissoesFinanceiro' => $permissoesFinanceiro,
'permissoesOcorrencia'=> $permissoesOcorrencia, 'permissoesDadosGeraisProj' => $permissoesDadosGeraisProj,
'permissoesAbas' => $permissoesAbas, 'setores' => $setores, 'proponentes' => $proponentes, 'tipoProjetos' => $tipoProjetos, 'usuarios' => $usuarios,
'localidades' => $localidades,'modalidadeApoios' => $modalidadeApoios, 'usuarioResponsavel'=>$usuarioResponsavel, 'localidadesAtivas'=> $localidadesAtivas,
'autorizaDoc' =>$this->autorizaDoc]);
}
//Método para atualizar o Projeto
public function atualiza(Request $request)
{
$projeto = Projeto::findOrFail($request->get('id'));
$projeto->tipo_processo = $request->get('tipoProcesso');
$projeto->processo = $request->get('numProcesso');
$projeto->dt_protocolo = $request->get('dtProtocolo');
$projeto->setor_origem_id = $request->get('setor');
$projeto->proponente_id = $request->get('proponente');
$projeto->nome_projeto = $request->get('nomeProjeto');
$projeto->dt_inicio = $request->get('dtInicio');
$projeto->dt_fim = $request->get('dtFim');
$projeto->dias_intercalados = $request->get('diasIntercalados');
$projeto->tipo_projeto_id = $request->get('tipoProjeto');
$projeto->modalidade_apoio_id = $request->get('modalidadeApoio');
$projeto->localidade_id = $request->get('localidade');
$projeto->valor_solicitado = $request->get('vlSolicitado');
$projeto->arquivo_fisico = $request->get('arquivo');
$projeto->dt_lancamento = \Carbon\Carbon::now();
$projeto->dt_alteracao = null;
$projeto->usu_lancamento_id = auth()->user()->id; //recebe o id do usuário logado
$projeto->usu_responsavel_id = auth()->user()->id; //recebe o id do usuário logado
$response = $projeto->alterar($projeto);
if($response['success'])
{
return redirect()
->route('projeto.edita',$projeto->id)
->with('success',$response['message']);
}else
{
return redirect()
->back()
->with('error',$response['message']);
}
}
//Método para autorizar a documentação do Projeto
public function autorizaDocumentacao(Request $request)
{
$usuario = User::findOrFail($request->get('idUsuario'));
$projeto = Projeto::findOrFail($request->get('numProjeto'));
$statusDoc = $request->get('statusDoc');
// $statusDoc = 'A';
$statusDoc == 'P' ? 'A' :'A'; //Validação: se o status for pendente configura para autorizado (A)
//Se a senha informada for igual ao do banco de dados o documento é autorizado
if($usuario->password == $request->get('senha')){
$this->autorizaDoc = true;
$projeto->status_documentacao = $statusDoc;
$response = $projeto->save();
if($response)
{
return response()
->json(['success' => 'Sucesso ao Autorizar Documentação '], 200);
}
else{
return redirect()
->json(['error' => 'Erro ao Autorizar Documentação'], 500);
}
}
else{
return redirect()
->json(['error' => 'Senha Incorreta'], 500);
}
}
//Finalizar o método
public function cadastroLocalidadesAtivas(Request $request)
{
$novosLocalidades = $projeto->salvar($request->get('numProjeto'),$request>get('localidadesAtivasSelect')) ;
}
}
Code in Ajax: project-authorDocs.js
$(document).on('click', '#btnAutorizar', function () {
$('#numProjeto').val($(this).data('numProjeto'));
$('#statusDoc').val($(this).data('statusDoc'));
$('#idUsuario').val($(this).data('idUsuario'));
$('#senha').val($(this).data('senha'));
});
//Ajax para autorizar documentação , e atualizar a página após a ação
$('.autorizaDocumentacao').click(function () {
var numProjeto = $('#numProjeto').val();
var statusDoc = $('#statusDoc').val();
var idUsuario = $('#idUsuario').val();
var senha = $('#senha').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: "/projetos/autorizaDocumentacao",
// url: "http://localhost:8000/projetos/autorizaDocumentacao",
type: "POST",
data: {numProjeto:numProjeto,statusDoc:statusDoc,idUsuario:idUsuario, senha:senha},
//data: "numProjeto=numProjeto&statusDoc=statusDoc&idUsuario=idUsuario&senha=senha",
dataType: "html"
}).done(function (response) {
console.log(response);
if (response.success) {
$("#statusDoc").val( $('option:contains("Autorizado")').val() );// muda o status da documentação
setTimeout(() => {
alert ('Eu entrei aqui');
window.location.reload();
}, 4000);
}
else {
alert(response.error);
}
}).fail(function () {
alert ("Erro ao autorizar documentação");
});
return false;
});
Authorization Modal: edita.blade.php
<!--Inicio do modal de Autorizar Documentação-->
<div class="modal fade modal-default" id="modalAutorizarDocs" aria-hidden="true" aria-labelledby="examplePositionCenter"
role="dialog" tabindex="-1">
<div class="modal-dialog modal-center">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title">Autorização</h4>
</div>
<div class="modal-body">
<div class="form-group col-md-18" style="text-align:center">
<select class="form-control" name="idUsuario" required>
<option value="">Usuário Autorização</option>
@foreach($usuarios as $usuario)
<option value="{{$usuario->id}}" {{old('usuario') == $usuario->id ? 'selected' : ''}}>{{$usuario->name}}</option>
@endforeach
</select>
<br/>
<input type="password" class="form-control" name="senha" placeholder="Senha"/>
</div>
</div>
<div class="modal-footer">
<center>
<a type="button" class="btn btn-primary autorizaDocumento" data-dismiss="modal" align="center" style="width: 300px; height: 40px">Autorizar</a>
</center>
</div>
</div>
</div>
</div>
<!--Fim do modal de Autorizar Documentação-->
Conditional responsible for enabling and disabling tab data: edita.blade.php
The flag authorizing must be true for the data to be enabled (edita.blade.php page), how the following image shows.
Aba Response
Aba Headers
Include this method in the question :
$projeto->save();
or better the whole classProjeto
– Atila Silva
Good morning, @Atila Silva. The class was included in the body of the question, I await your answer. :)
– Ruama
Why don’t you play the responsibility of storing the object for the model ?
– Atila Silva
Good afternoon, the other methods the responsibility of storing the object is in the model, with the exception of the method "authorizedDocumentation", because it will only update in the database the "documentation status", the other data "$authorizedoc" will be updated on the screen.
– Ruama