1
Context:
I am trying to update project data in edit mode, but this error is occurring. How to troubleshoot this problem?
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');
}
}
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
@fajuchem, thank you. I will do the tests then return the reply.
– Ruama