In AJAX only "Fail" is executed, how to solve this problem?

Asked

Viewed 217 times

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.

inserir a descrição da imagem aqui



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.

Data Disabled inserir a descrição da imagem aqui

Enabled Data (after pressing the button) inserir a descrição da imagem aqui



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.

inserir a descrição da imagem aqui



Aba Response



inserir a descrição da imagem aqui



Aba Headers

inserir a descrição da imagem aqui

  • Include this method in the question : $projeto->save(); or better the whole class Projeto

  • Good morning, @Atila Silva. The class was included in the body of the question, I await your answer. :)

  • Why don’t you play the responsibility of storing the object for the model ?

  • 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.

2 answers

0

The password comparison should be done with the encryption function. It follows the method authorization class Projectocontroller.php updated. That’s why I was running the function fail ajax, because the passwords were different (the bank password was encrypted and the form had no encryption).

//Método para autorizar a documentação do Projeto
        public function autorizaDocumentacao(Request $request)
        {
            if (!$usuario = User::findOrFail($request->get('idUsuario')))
            return response()->json(['error' => 'Usuário não encontrado'], 404);

            if (!$projeto = Projeto::findOrFail($request->get('numProjeto')))
                return response()->json(['error' => 'Projeto não encontrado'], 404);

              $statusDoc =  $request->statusDoc;

            if (Hash::check($request->get('senha'), $usuario->password)){
                $this->autorizaDoc = true;
                $projeto->status_documentacao = $statusDoc; //muda o status da documentação para "A"
                $projeto->usu_autoriza_doc_id = $usuario->id;//id do usuário que autorizou a documentação
            // $usuarioAutorizaDocs = $usuario->name; // nome do usuário que autorizou a documentação
                $projeto->save();

                return response()
                        ->json(['success' => 'Sucesso ao Autorizar Documentação',
                                'autorizaDoc' =>  $this->autorizaDoc], 200); 
            } else {
                return response()
                            ->json(['error' => 'Senha Incorreta'], 422);
            } 
        }

0

Try to see and treat the error returned from fail, something like:

  ...
  }).fail(function (e) {
     console.error(e);
     alert ("Erro ao autorizar documentação");
  });

Browser other questions tagged

You are not signed in. Login or sign up in order to post.