<div class="btn-group" role="group">
<button type="button" class="btn btn-primary" onclick="hotsite.relatorio.exportar();">
<i class="fa fa-file-excel-o" aria-hidden="true"></i> Exportar Excel
</button>
</div>
Relatorio.prototype.exportar = function () {
mesID = $("#filtroMesID").val();
anoID = $("#filtroAnoID").val();
trimestreID = $("#filtroTrimestreID").val();
distribuidorID = $("#filtroDistribuidorID").val();
console.log(mesID);
console.log(anoID);
console.log(trimestreID);
console.log(distribuidorID);
var valores = {
mesID: mesID,
anoID: anoID,
trimestreID: trimestreID,
distribuidorID: distribuidorID
};
$.ajax({
url: "/admin/relatorios/analiticoParticipante/exportar",
method: "GET",
data: valores,
error: function (data) {
$("#dlgAvisoTexto").html(data.retorno);
hotsite.openModal("dlgAviso");
},
success: function (data) {
$("#filtros").html(data);
$(".selecttwo").select2();
}
});
};
use Excel;
...
public function exportarAnaliticoParticipante(Request $request){
$dados = [];
$item = array();
$mes = $request->input('mesID');
$ano = $request->input('anoID');
$trimestreID = $request->input('trimestreID');
$distribuidor_id = $request->input('distribuidorID');
$this->AnaliticoParticipante($mes, $ano, $trimestreID, $distribuidor_id, $request);
$fullData = session('relatorio_analiticoparticipante');
$dados[] = ['Razão Social','CNPJ','Status do Distribuidor','Nome GRV','CPF GRV', 'Email GRV' ,'Nome Assitente', 'CPF Assistente','Email Assistente', 'Trimestre','Ano','Mês da Compra','Meta (R$)','Grupo A (R$)','Grupo B (R$)', 'Grupo C (R$)' , 'Grupo D (R$)', 'Grupo E (R$)', 'Grupo F (R$)' , 'Grupo G (R$)', 'Total (R$)','% Atingimento Meta','Pontos Conquistados', 'Pontos Represados','Liberados?','Data da Distribuição','Status da Distribuição'];
foreach ($fullData as $data) {
$item = [];
foreach($data as $key=>$value){
array_push($item, $value);
}
array_push($dados, $item);
}
// Data is OK here to generate Excel !!!
// print_r(json_encode($dados));
// die;
//-------------------------------------------------
Excel::create('relatorio_analiticodoparticipante', function($excel) use ($dados) {
// Set the spreadsheet title, creator, and description
$excel->setTitle('Relatorio Analítico dos Participantes');
$excel->setCreator('IPremi')->setCompany('IPremi');
$excel->setDescription('Lista Analítica dos Participantes');
// Build the spreadsheet, passing in the users array
$excel->sheet('sheet1', function($sheet) use ($dados) {
$sheet->fromArray($dados, null, 'A1', false, false);
$sheet->setOrientation('landscape');
$sheet->setfitToPage(true);
});
})->download('xlsx');;
}
ASKER
[
[
"Razão Social",
"CNPJ",
"Status do Distribuidor",
"Nome GRV",
"CPF GRV",
"Email GRV",
"Nome Assitente",
"CPF Assistente",
"Email Assistente",
"Trimestre",
"Ano",
"Mês da Compra",
"Meta (R$)",
"Grupo A (R$)",
"Grupo B (R$)",
"Grupo C (R$)",
"Grupo D (R$)",
"Grupo E (R$)",
"Grupo F (R$)",
"Grupo G (R$)",
"Total (R$)",
"% Atingimento Meta",
"Pontos Conquistados",
"Pontos Represados",
"Liberados?",
"Data da Distribuição",
"Status da Distribuição"
],
....
[
"Razão Social",
"CNPJ",
"Status do Distribuidor",
"Nome GRV",
"CPF GRV",
"Email GRV",
"Nome Assitente",
"CPF Assistente",
"Email Assistente",
"Trimestre",
"Ano",
"Mês da Compra",
"Meta (R$)",
"Grupo A (R$)",
"Grupo B (R$)",
"Grupo C (R$)",
"Grupo D (R$)",
"Grupo E (R$)",
"Grupo F (R$)",
"Grupo G (R$)",
"Total (R$)",
"% Atingimento Meta",
"Pontos Conquistados",
"Pontos Represados",
"Liberados?",
"Data da Distribuição",
"Status da Distribuição"
],
...
ASKER
<form action="/admin/relatorios/analiticoParticipante/exportar" method="get">
</i><input type="submit" value="Submit">
</form>
public function exportarAnaliticoParticipante(Request $request){
$dados = [];
$item = array();
//-------------------------------------------------------------
$distribuidor_id = $_GET['filtroDistribuidorID'];
//--------------------------------------------------------------
ASKER
<div class="row">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="pull-right">
<a href="#" onclick="hotsite.formulario.filterToggle('filterAnalitico');" class="panelToggle"><i class="fa fa-dot-circle-o" aria-hidden="true"></i></a>
</div>
<h3 class="panel-title">Filtro</h3>
</div>
<div class="panel-body" id="filterCompras">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="filtroDistribuidorID">Distribuidor:</label>
<select id='filtroDistribuidorID' class="form-control inputCadastro selecttwo">
<option value=''>Todos os distribuidores</option>
@foreach($distribuidores as $distribuidor)
@if($distribuidorDefault == $distribuidor->id)
<option value='{{ $distribuidor->id }}' selected>{{ $distribuidor->razaosocial }} ({{ CustomFuncs::formatarCnpj($distribuidor->cnpj) }})</option>
@else
<option value='{{ $distribuidor->id }}'>{{ $distribuidor->razaosocial }} ({{ CustomFuncs::formatarCnpj($distribuidor->cnpj) }})</option>
@endif
@endforeach
</select>
</div>
</div>
<div class="col-md-6"></div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group">
<label for="filtroTrimestreID">Trimestre:</label>
<select id='filtroTrimestreID' class="form-control inputCadastro" onchange="hotsite.relatorio.buildFilters()">
<option value="all">Todos</option>
@foreach($trimestres as $trimestre)
@if($trimestreDefault == $trimestre->id)
<option value="{{ $trimestre->id}}" selected>{{ $trimestre->descricao }}</option>
@else
<option value="{{ $trimestre->id}}">{{ $trimestre->descricao }}</option>
@endif
@endforeach
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label for="filtroMesID">Mês:</label>
<select id='filtroMesID' class="form-control inputCadastro" onchange="hotsite.relatorio.buildFilters()">
<option value="all">Todos os meses</option>
@foreach($meses as $mes)
@if($mes->mes === 1)
@continue;
@endif
@if($mesDefault == $mes->mes)
<option selected value="{{ $mes->mes}}">{{ $mes->nomeMes}}</option>
@else
<option value="{{ $mes->mes}}">{{ $mes->nomeMes}}</option>
@endif
@endforeach
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label for="filtroAnoID">Ano:</label>
<select id='filtroAnoID' class="form-control inputCadastro" onchange="hotsite.relatorio.buildFilters()">
@foreach($anos as $ano)
@if($ano->ano == 2019)
@continue
@endif
@if($anoDefault == $ano->ano)
<option selected value="{{ $ano->ano}}">{{ $ano->ano}}</option>
@else
<option value="{{ $ano->ano}}">{{ $ano->ano}}</option>
@endif
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class='row'>
<div class='col-md-12'>
<div class='col-md-12' style="text-align:right">
<form action="/admin/relatorios/analiticoParticipante/exportar" method="post">
{{ csrf_field() }}
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 text-center">
<button type="submit" class='fa fa-file-excel-o'>Exportar Excel</button>
</div>
</form>
<!--div class="btn-group" role="group">
<a href='/admin/relatorios/analiticoParticipante/exportar' alt='' class="btn btn-primary">
<i class="fa fa-file-excel-o" aria-hidden="true"></i> Exportar Excel
</a>
</div-->
</div>
</div>
</div>
</div>
</div>
public function exportarAnaliticoParticipante(Request $request){
$dados = [];
$item = array();
// The values are NULL
var_dump(request('filtroMesID'));
var_dump(request('filtroAnoID'));
var_dump(request('filtroTrimestreID'));
var_dump(request('filtroDistribuidorID'));
<form action="/admin/relatorios/analiticoParticipante/exportar" method="post">
<div class="row">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="pull-right">
...
And then close off your form at the end of your code.
ASKER
//Generates an error
$distribuidor_id = $_POST['filtroDistribuidorID'];
// Returns NULL
var_dump(request('filtroMesID'));
var_dump(request('filtroAnoID'));
var_dump(request('filtroTrimestreID'));
var_dump(request('filtroDistribuidorID'));
public function exportarAnaliticoParticipante(Request $request){
$dados = [];
$item = [];
$filtroMesID = $request->filtroMesID;
This assumes that you've setup the route correctly, and mapped /admin/relatorios/analiticASKER
public function HandleForm(Request $request) {
$data = [
'var1' => $request->var1,
'var2' => $request->var2,
'var3' => $request->var3,
];
$this->Export($data);
}
public function Export($data) {
// now you've got the data
}
But ... if you're doing any of this through AJAX, then you're back to where you started - you'll struggle to force a download, which is why I suggest a form POST instead.
ASKER
var_dump(json_encode($request));
ASKER
-- At 1st line of the view
<form action="{{url('/admin/relatorios/analiticoParticipante/exportar')}}" method="GET">
-- At Controller
$mes = $request->input('filtroMesID');
-- And then the Excel is downloaded
$fullData = $this->AnaliticoParticipante($mes, $ano, $trimestreID, $distribuidor_id, $request);
// Stop using session, obtained the data directly - the way before was:
$this->AnaliticoParticipante($mes, $ano, $trimestreID, $distribuidor_id, $request); // This returned a session
$fullData = session('relatorio_analiticoparticipante');
ASKER
ASKER
JavaScript is a dynamic, object-based language commonly used for client-side scripting in web browsers. Recently, server side JavaScript frameworks have also emerged. JavaScript runs on nearly every operating system and in almost every mainstream web browser.
TRUSTED BY
The problem you have is because your AJAX success handler is inserting the excel data into the page:
Open in new window
Generally, trying to download files via an AJAX call is tricky, so you may want to rethink your approach. You're likely to be better of just submitting a form to your Controller action directly. Then the server will respond with the correct headers and the file will be downloaded.