Call to a Member Function alterar() on null

Asked

Viewed 1,925 times

1

Context:

I am trying to update project data in edit mode, but this error is occurring. How to troubleshoot this problem?

inserir a descrição da imagem aqui

Mistakes:

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui



Class Projectocontroller.php: method updates

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
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;


class ProjetoController extends Controller
{
    private $projeto;
    private $novoProjeto; 
    public  $flagStatusDoc;  //$autorizaDoc é uma flag que por default é false, se torna verdadeira quando a documentação é aprovada
    public  $flagAprovacao; //$flagAprovacao é uma flag que por default é false, se torna verdadeira quando o projeto é aprovado

    //Construtor do projeto
    public function __construct(Projeto $projeto)
     {
         $this->projeto = $projeto;  
         $this->flagStatusDoc = false;  
         $this->flagAprovacao = 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->flagStatusDoc = false;
        $this->flagAprovacao = 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'); 

        $usuarioResponsavel = 'Indefinido';
        $statusDocumentacao = 'Pendente';
        $usuarioAutorizaDoc = 'Indefinido';

        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, 
        'flagStatusDoc' => $this->flagStatusDoc , 'flagAprovacao' =>  $this->flagAprovacao, 'usuarioResponsavel' => $usuarioResponsavel,
        'statusDocumentacao' => $statusDocumentacao, 'usuarioAutorizaDoc' => $usuarioAutorizaDoc
        ]);
    }

     //Método para a consulta dos projetos
     public function consulta(Request $request){

        $condicoes = [];

        if($request->id != null){
            $condicoes[] = [DB::raw('upper(id)'), 'like', DB::raw('upper("%'.$request->get('id').'%")')];
        }

        if($request->nomeProjeto != null){
            $condicoes[] = [DB::raw('upper(nome_projeto)'), 'like', DB::raw('upper("%'.$request->get('nomeProjeto').'%")')];
        }

        if($request->tipoProcesso != null){
            $condicoes[] = [DB::raw('upper(tipo_processo)'), 'like', DB::raw('upper("%'.$request->get('tipoProcesso').'%")')];
        }

        if($request->dtInicio != null){
            $condicoes[] = ['dt_inicio', '=', $request->input('dtInicio')];
        }

        if($request->dtFim != null){
            $condicoes[] = ['dt_fim', '=', $request->input('dtFim')];
        }

        $request->flash(['ID','nomeProjeto', 'tipoProcesso', 'dtInicio', 'dtFim']);

        $projetos = Projeto::where($condicoes)->orderBy('nome_projeto')->get();
        //$rotas = Route::where($condicoes)->orderBy('rota')->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)
     {  
        $projetoCriado = Projeto::findOrFail($id);
        $this->flagStatusDoc =   $projetoCriado->status_documentacao == 'A' ? true : false;
        $this->flagAprovacao =   $projetoCriado->situacao_projeto == 'AP' ? true : 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;
        $statusDocumentacao =  $projetoCriado->status_documentacao == 'P' ? 'Pendente' : 'Autorizado';
        $statusProjeto =  $projetoCriado->situacao_projeto;

        switch ($statusProjeto){
            case 'AA':
                $statusProjeto = 'Aguardando Autorização';
            break;
            case 'AP':
                $statusProjeto = 'Aprovado';
            break;
            case 'CS':
                $statusProjeto = 'Cancelado Suspenso';
            break;
            case 'RP':
                $statusProjeto = 'Reprovado';
            break;
            default:
                $statusProjeto = 'Aguardando Autorização';
            break;
            }

        $userAutorizaDoc = User::find($projetoCriado->usu_autoriza_doc_id); 
        $usuarioAutorizaDoc =  $userAutorizaDoc == null ?  'Indefinido' : $userAutorizaDoc->name ;

        $userAutorizaProjeto = User::find($projetoCriado->usu_situacao_id); 
        $usuarioAutorizaProjeto =   $userAutorizaProjeto == null ?  'Indefinido' : $userAutorizaProjeto->name ;

        $countLocalidadesProjeto = count(LocalidadeProjeto::where('projeto_id','=',$id)->distinct()->get());
        $localidadesProjeto = Localidade::join('localidades_projeto', function ($join) use ($id) {
                            $join->on('localidade.id','=','localidades_projeto.localidade_id')
                            ->where('localidades_projeto.projeto_id','=',  $id ); })->distinct()->get();  

        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,'statusDocumentacao'=>$statusDocumentacao,
                'usuarioAutorizaDoc' => $usuarioAutorizaDoc,'localidadesAtivas'=> $localidadesAtivas, 'flagStatusDoc' =>$this->flagStatusDoc, 'flagAprovacao' =>  $this->flagAprovacao,
                'countLocalidadesProjeto' =>  $countLocalidadesProjeto, 'localidadesProjeto' => $localidadesProjeto, 'statusProjeto' => $statusProjeto, 'usuarioAutorizaProjeto' =>  $usuarioAutorizaProjeto]);
     }



     //Corrigir o erro: ao atualizar ocorre o erro "Sorry, the page you are looking for could not be found"
     public function atualiza(Request $request, Projeto $projeto)
     {
       $projeto = Projeto::find($request->get('numProjeto'));
       $novoProjeto =  $projeto->alterar($request->all());
     //  return redirect()->route('projeto.edita',  $novoProjeto->id)->with('success','Sucesso ao Atualizar o Projeto');
     return redirect()->route('projeto.edita',  $projeto->id)->with('success','Sucesso ao Atualizar o Projeto');
     }

        //Método para atualizar o Projeto
     /*  public function atualiza(Request $request)
      {
        $projeto = Projeto::findOrFail($request->get('numProjeto'));
        $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)
        {
            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;

            //se a senha do informada for igual ao do banco de dados entra na condicional
            if (Hash::check($request->get('senha'), $usuario->password)){

                $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();

                //A variável $statusDoc consulta se o status da documentação está autorizado para o usuário logado
                $statusDoc =  Projeto::where('status_documentacao','=','A','and','usu_responsavel_id','=', Auth::user()->id )->get();
                //A variável $flagStatusDoc é verdadeira se a $statusDoc não for nula caso ao contrário ela é verdadeira
                $this->flagStatusDoc =   $statusDoc !=  null ? true : false;


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

 //Método para autorizar o Projeto
 public function autorizaProjeto(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);

       $situacaoProjeto = $request->situacaoProjeto;

     //se a senha informada for igual ao do banco de dados entra na condicional
     if (Hash::check($request->get('senha'), $usuario->password)){

         $projeto->situacao_projeto = $situacaoProjeto; //muda a situação do projeto

         $projeto->usu_situacao_id = $usuario->id;//id do usuário que  modificou  situação do projeto

          // $usuarioAutorizaDocs = $usuario->name; // nome do usuário que autorizou a documentação
         $projeto->save();

         //A variável  $situacaoProjeto consulta se a situação do projeto está aprovado para o usuário logado

         $situacaoProjeto  =  Projeto::where('situacao_projeto','=','AP','and','usu_situacao_id','=', $usuario->id )->get();

         //$situacaoProjeto  =  Projeto::where('situacao_projeto','=','AP','and','usu_situacao_id','=', Auth::user()->id )->get();
         //A variável $flagAprovacao é verdadeira se a $situacaoProjeto não for nula caso ao contrário ela é verdadeira
         $this->flagAprovacao =  $situacaoProjeto !=  null ? true : false;


         return response()
                 ->json(['success' => 'Sucesso ao Alterar a Situação do Projeto'], 200); 
     } else {
         return response()
                     ->json(['error' => 'Senha Incorreta'], 422);
     } 
 }


        public function localidadesAtivas(Request $request, Projeto $projeto)
        {
            $arrayInicial = [];
            $arrayFinal = [];

            $projeto = $projeto->find($request->numProjeto);

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


            $arrayFinal = $request->localidadesAtivasSelects;// funcionou
            $arrayInicial = DB::table('localidades_projeto')->select('localidade_id')->where('projeto_id', '=',  $projeto->id)->distinct()->get();  //o objeto está vazio
            $arraysIguais = in_array($arrayInicial,$arrayFinal);


            //pendências: salvar nulo
             if ( sizeof($arrayInicial) == 0 && sizeof($arrayFinal) == 0 )
             {

             }
            elseif( sizeof($arrayFinal) == 0 || $arrayFinal == null)
             {
                DB::table('localidades_projeto')->where('projeto_id', '=',  $projeto->id)->delete();
             }
            elseif ( sizeof($arrayInicial) != sizeof($arrayFinal))
            {
                DB::table('localidades_projeto')->where('projeto_id', '=',  $projeto->id)->delete();
                //$projeto->localidades_projeto()->attach($request->localidadesAtivasSelects);
                $projeto->localidades_projeto()->sync($request->localidadesAtivasSelects);
            }
            elseif( !empty($arraysIguais) )
            {
                DB::table('localidades_projeto')->where('projeto_id', '=',  $projeto->id)->delete();
               // $projeto->localidades_projeto()->attach($request->localidadesAtivasSelects);
               $projeto->localidades_projeto()->sync($request->localidadesAtivasSelects);
            }


                return response()
                ->json([
                    'success' => 'Sucesso ao cadastrar novas localidades'
                    ]);
        }


    //Este método remove o projeto
   public function remove(Request $request)
   {
       $projeto = Projeto::find($request->id);

      if (!$projeto)
       return response()
                ->json(['error' => 'not_found'], 404);

      $response =  $projeto->deletar($projeto);  

      if($response['success'])
      {
       return response()
               ->json(['success' => $response['message']], 200);  

      }else
      {
         // Caso não delete, informa um erro inesperado
       return redirect()
                ->json(['error' => $response['message']], 500);        
      } 
   }
}



Project class.php: change method

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use DB;
use SoftDeletes;
use Carbon\Carbon;

class Projeto extends Model
{
    protected $table = "projetos";
    protected $primaryKey = 'id';
    //public $incrementing = false;
    public $timestamps = false;
    protected  $fillable  = ['tipo_processo','processo','dt_protocolo', 'demo','setor_origem_id','proponente_id','nome_projeto',
                               'dt_inicio','dt_fim','dias_intercalados','tipo_projeto_id','modalidade_apoio_id','localidade_id',
                               'valor_solicitado','arquivo_fisico','dt_lancamento','dt_alteracao','dt_alteracao','usu_lancamento_id', 
                               'usu_responsavel_id'];


    public function salvar(array $data)
    {
        $dataInsert['tipo_processo'] = $data['tipoProcesso'];
        $dataInsert['processo'] = $data['numProcesso'];
        $dataInsert['dt_protocolo'] = $data['dtProtocolo'];
        $dataInsert['setor_origem_id'] = $data['setor'];
        $dataInsert['proponente_id'] = $data['proponente'];
        $dataInsert['nome_projeto'] = $data['nomeProjeto'];
        $dataInsert['dt_inicio'] = $data['dtInicio'];
        $dataInsert['dt_fim'] = $data['dtFim'];
        $dataInsert['dias_intercalados'] = $data['diasIntercalados'];
        $dataInsert['tipo_projeto_id'] = $data['tipoProjeto'];
        $dataInsert['modalidade_apoio_id'] = $data['modalidadeApoio'];
        $dataInsert['localidade_id'] = $data['localidade'];
        $dataInsert['valor_solicitado'] = $data['vlSolicitado'];
        $dataInsert['arquivo_fisico'] = $data['arquivo'];
        $dataInsert['dt_lancamento'] = \Carbon\Carbon::now();
        $dataInsert['dt_alteracao'] = null;
        $dataInsert['usu_lancamento_id'] = auth()->user()->id; //recebe o id do usuário logado
        $dataInsert['usu_responsavel_id'] = auth()->user()->id; //recebe o id do usuário logado

        return $this->create($dataInsert);   
    }


    //14-05-2018: testar o método alterar
    public function alterar(array $data)
    {

        $dataInsert['id']  = $data['numProjeto'];
        $dataInsert['tipo_processo'] = $data['tipoProcesso'];
        $dataInsert['processo'] = $data['numProcesso'];
        $dataInsert['dt_protocolo'] = $data['dtProtocolo'];
        $dataInsert['setor_origem_id'] = $data['setor'];
        $dataInsert['proponente_id'] = $data['proponente'];
        $dataInsert['nome_projeto'] = $data['nomeProjeto'];
        $dataInsert['dt_inicio'] = $data['dtInicio'];
        $dataInsert['dt_fim'] = $data['dtFim'];
        $dataInsert['dias_intercalados'] = $data['diasIntercalados'];
        $dataInsert['tipo_projeto_id'] = $data['tipoProjeto'];
        $dataInsert['modalidade_apoio_id'] = $data['modalidadeApoio'];
        $dataInsert['localidade_id'] = $data['localidade'];
        $dataInsert['valor_solicitado'] = $data['vlSolicitado'];
        $dataInsert['arquivo_fisico'] = $data['arquivo'];
        $dataInsert['dt_lancamento'] = \Carbon\Carbon::now();
        $dataInsert['dt_alteracao'] = null;
        $dataInsert['usu_lancamento_id'] = $data['userResponsavel']; //recebe o id do usuário logado
        $dataInsert['usu_responsavel_id'] = auth()->user()->id; //recebe o id do usuário logado

        return $this->create($dataInsert);   
    }

   //Este método atualiza os dados do Projeto
   /* public function alterar(Projeto $projeto) : Array
   {
   DB::beginTransaction();

       $projeto = $this->save();
       if($projeto){
           DB::commit();
           return[
               'success' => true,
               'message' => 'Sucesso ao atualizar'
           ];   
       }
       else{
           DB::rollback();
           return[
               'success' => false,
               'message' => 'Falha ao atualizar'
           ]; 
       }
   }
 */

   //Este método remove os dados da Projeto
 public function deletar(Projeto $projeto) : Array
 {
     $projeto = $this->delete();
     if($projeto){
         return[
             'success' => true,
             'message' => 'Sucesso ao excluir'
         ];   
     }
     else{
         return[
             'success' => false,
             'message' => 'Falha ao excluir'
         ]; 
     }
 }

   //Relacionamentos entre a tabela Projeto e localidades_projeto
    public function localidades_projeto()
    {
       return  $this->belongsToMany(Localidade::class, 'localidades_projeto', 'projeto_id',  'localidade_id');
    }

}
  • 2

    The problem is in the file Projectocontroller.php +191, the return of the Project::find() ta returning null, from forna that in the next line(192) you try to call the change function in a null variable. You should make sure before that is actually coming something of the call in find function().

  • @fajuchem, thank you. I will do the tests then return the reply.

1 answer

1

The return of Project::find($request->get('numProjeto')) era null soon I modified for the code $project = Project::find($request->get('id')).

Follows the class update method Projectocontroller.php redone:

public function atualiza(Request $request)
     {
       $dataForm = $request->all();
       $projeto = Projeto::find($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']); 

       }   
     }



Follow the change class method Project.php redone:

  //Este método atualiza os dados do Projeto
   public function alterar(Projeto $projeto) : Array
   {
   DB::beginTransaction();

       $projeto = $this->save();
       if($projeto){
           DB::commit();
           return[
               'success' => true,
               'message' => 'Sucesso ao atualizar o Projeto'
           ];   
       }
       else{
           DB::rollback();
           return[
               'success' => false,
               'message' => 'Falha ao atualizar o Projeto'
           ]; 
       }
   }

Browser other questions tagged

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