Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created September 7, 2022 04:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/0c12a41cf4860835c61bc61606a6e31c to your computer and use it in GitHub Desktop.
Save parzibyte/0c12a41cf4860835c61bc61606a6e31c to your computer and use it in GitHub Desktop.
<?php
$tipoReporte = $request->input("tipoReporte");
$columnas = ["cancion_solicitadas.id_cancion", "cancions.nombre", "cancions.interprete"];
$estacionesLocales = [];
$estacionesCompetencia = [];
$idsEstacionesLocales = [];
$idsEstacionesCompetencia = [];
$canales = [];
$conGenero = $request->has("incluirGenero");
$fechaInicio = $request->input("fechaInicio");
$fechaFin = $request->input("fechaFin");
$conBusqueda = $request->has("busqueda");
if ($request->has("estacionesLocalesSeleccionadas")) {
$idsEstacionesLocales = $request->input("estacionesLocalesSeleccionadas");
$estacionesLocales = Estacion::whereIn("id", $request->input("estacionesLocalesSeleccionadas"))->get();
}
if ($request->has("estacionesCompetenciaSeleccionadas")) {
$idsEstacionesCompetencia = $request->input("estacionesCompetenciaSeleccionadas");
$estacionesCompetencia = Estacion::whereIn("id", $request->input("estacionesCompetenciaSeleccionadas"))->get();
}
$idsEstacionesSeleccionadas = array_merge($idsEstacionesLocales, $idsEstacionesCompetencia);
if ($request->has("tipoPeticion")) {
$canales = $request->input("tipoPeticion");
}
$builder = CancionSolicitada::join("cancions", "cancions.id", "=", "cancion_solicitadas.id_cancion")
->where("cancion_solicitadas.fecha", ">=", $fechaInicio)
->where("cancion_solicitadas.fecha", "<=", $fechaFin)
->groupBy("cancions.nombre")
->groupBy("cancions.interprete")
->groupBy("cancion_solicitadas.id_cancion");
if ($conGenero) {
$builder->join("generos", "generos.id", "=", "cancions.id_genero");
array_push($columnas, "generos.nombre as genero");
$builder->groupBy("generos.nombre");
}
if ($conBusqueda) {
$busqueda = $request->input("busqueda");
$builder->where(function ($query) use ($busqueda) {
$query->where("cancions.nombre", "LIKE", "%$busqueda%")
->orWhere("cancions.interprete", "LIKE", "%$busqueda%");
});
}
$builder->select($columnas);
$canciones = $builder->get();
$documento = new Spreadsheet();
$documento
->getProperties()
->setCreator("Aquí va el creador, como cadena")
->setLastModifiedBy('Parzibyte') // última vez modificado por
->setTitle('Mi primer documento creado con PhpSpreadSheet')
->setSubject('El asunto')
->setDescription('Este documento fue generado para parzibyte.me')
->setKeywords('etiquetas o palabras clave separadas por espacios')
->setCategory('La categoría');
$hoja = $documento->getActiveSheet();
$hoja->setTitle("Productos");
$encabezado = ["Canción", "Intérprete"];
if ($conGenero) {
array_push($encabezado, "Género");
}
foreach ($canales as $canal) {
array_push($encabezado, "Total " . $canal);
}
foreach ($estacionesLocales as $estacion) {
array_push($encabezado, $estacion->nombre);
}
foreach ($estacionesCompetencia as $estacion) {
array_push($encabezado, $estacion->nombre);
}
array_push($encabezado, "Total peticiones");
$hoja->fromArray($encabezado, null, 'A1');
$fila = 2;
foreach ($canciones as $cancion) {
$columna = 1;
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->nombre);
$columna++;
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->interprete);
$columna++;
if ($conGenero) {
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->genero);
$columna++;
}
foreach ($canales as $canal) {
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->totalPorCanal($fechaInicio, $fechaFin, $canal, $idsEstacionesSeleccionadas));
$columna++;
}
foreach ($estacionesLocales as $estacion) {
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->totalPorEstacion($fechaInicio, $fechaFin, $estacion->id));
$columna++;
}
foreach ($estacionesCompetencia as $estacion) {
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->totalPorEstacion($fechaInicio, $fechaFin, $estacion->id));
$columna++;
}
$hoja->setCellValueByColumnAndRow($columna, $fila, $cancion->totalPeticiones($fechaInicio, $fechaFin, $idsEstacionesSeleccionadas));
$fila++;
}
$nombreDelDocumento = "Reporte.xlsx";
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $nombreDelDocumento . '"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($documento, 'Xlsx');
$writer->save('php://output');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment