Bom dia pessoal, estou com o seguinte problema: Na minha aplicação antes da tela de paginação dos resultados tem uma tela de filtros, campos que o usuário pode preencher para trazer apenas o que for do seu interesse na página de listagem.
Utilizando como exemplo a entidade Colaboradores, segue o seguinte fluxo. 1º Usuário informa os dados na View de Filtro (Nome, CPF, Data Nascimento, etc.. ); 2º Com base nesses dados informados a View Listar retorna todos os registros com base nos campos preenchidos.
Minha questão é: Na View de Listagem dos resultados tem um botão para exportar a consulta em Excel, até aí tudo certo. O problema é quando o usuário quer filtrar e exportar em Excel apenas o resultado que está sendo exibido na tela, ou seja, manter na memória os filtros da View de Filtros nos relatório em Excel.
Routes.php
Route::post('colaborador/listar', 'Cadastro\ColaboradorController@listar');
Route::get('colaborador/exportar', 'Cadastro\ColaboradorController@exportar');
ColaboradorController.php
public function listar() {
if (view()->exists($this->listarView)) {
Session::flash('titulo-panel', 'Resultado Colaborador');
$nome = addslashes(Request::input('nome'));
$cargo = addslashes(Request::input('cargo'));
$unidade = addslashes(Request::input('unidade-negocio'));
$parametros = array();
if (intval($cargo) > 0) {
$parametros = array_merge($parametros, array('idCargo' => $cargo));
}
if (intval($unidade) > 0) {
$parametros = array_merge($parametros, array('idUnidadeNegocio' => $unidade));
}
$colaborador = new Colaborador;
// $colaboradores = $colaborador->where($parametros)->get();
$colaboradores = $colaborador->where($parametros)->whereHas("pessoaFisica", function($q) use ($nome) {
$q->where("nome", "like", "%{$nome}%");
})->get();
$breadcrumb = array_merge($this->breadcrumb, array('Lista' => '#'));
return view($this->listarView)->with('breadcrumb', $breadcrumb)->with('colaboradores', $colaboradores); /* na pasta usuario vai abrir a view listar e enviar a variavel usuarios da view os usuários do banco */
} else {
return "";
}
}
public function exportar() {
$nome = addslashes(Request::input('nome'));
$cargo = addslashes(Request::input('cargo'));
$unidade = addslashes(Request::input('unidade-negocio'));
$parametros = array();
if (intval($cargo) > 0) {
$parametros = array_merge($parametros, array('idCargo' => $cargo));
}
if (intval($unidade) > 0) {
$parametros = array_merge($parametros, array('idUnidadeNegocio' => $unidade));
}
$colaborador = new Colaborador;
// $colaboradores = $colaborador->where($parametros)->get();
$colaboradores = $colaborador->where($parametros)->whereHas("pessoaFisica", function($q) use ($nome) {
$q->where("nome", "like", "%{$nome}%");
})->get();
$row[] = array('ID', 'Nome', 'Cargo', 'Unidade Negocio');
foreach ($colaboradores as $colaborador) {
$row[] = array($colaborador->id, $colaborador->pessoaFisica->nome, $colaborador->cargo->descricao, $colaborador->unidadeNegocio->pessoaJuridica->nomeFantasia);
}
Excel::create('Colaboradores', function($excel) use ($row) {
// Set the title
$excel->setTitle('Colaboradores');
// Chain the setters
$excel->setCreator('DataCode')->setCompany('DataCode');
$excel->sheet('Colaboradores', function($sheet) use ($row) {
$sheet->fromArray($row, null, 'A1', false, false);
$sheet->setAutoFilter();
});
})->download('xlsx');
}
Estou utilizando a biblioteca Laravel Excel, e está funcionando 100% : https://laravel-excel.maatwebsite.nl/2.1/getting-started/
Único problema é que eu gostaria de exportar apenas os resultados filtrados pelo usuário.
Desde já agradeço qualquer apoio.