$reservations */ public function download(Tenant $tenant, Collection $reservations, string $timeZone): StreamedResponse { $generatedAt = now(); $rows = $this->report->rows($reservations); $spreadsheet = new Spreadsheet; $spreadsheet->getProperties() ->setCreator('Shopit') ->setTitle('Reservas de entradas') ->setSubject($tenant->nombre); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Reservas'); $sheet->fromArray([ 'Tipo', 'Sector', 'Fila', 'Asiento', 'ID', 'Fecha', 'Importe', 'Pago', ], null, 'A1'); foreach ($rows as $index => $reservation) { $row = $index + 2; foreach (['A' => 'tipo', 'B' => 'sector', 'C' => 'fila', 'D' => 'asiento'] as $column => $key) { $sheet->setCellValueExplicit("{$column}{$row}", $reservation[$key], DataType::TYPE_STRING); } $sheet->setCellValueExplicit( "E{$row}", $reservation['ticket_id'] === null ? '-' : (string) $reservation['ticket_id'], DataType::TYPE_STRING, ); $sheet->setCellValue( "F{$row}", Date::dateTimeToExcel($reservation['fecha_reserva']->copy()->timezone($timeZone)), ); if ($reservation['importe'] !== null) { $sheet->setCellValue("G{$row}", (float) $reservation['importe']); } $sheet->setCellValueExplicit("H{$row}", $reservation['pago'], DataType::TYPE_STRING); } $lastRow = max(2, $rows->count() + 1); $sheet->getStyle("F2:F{$lastRow}")->getNumberFormat()->setFormatCode('dd/mm/yyyy hh:mm'); $sheet->getStyle("G2:G{$lastRow}")->getNumberFormat()->setFormatCode('$ #,##0.00'); $sheet->getStyle('A1:H1')->applyFromArray([ 'font' => ['bold' => true, 'color' => ['rgb' => 'FFFFFF']], 'fill' => [ 'fillType' => Fill::FILL_SOLID, 'startColor' => ['rgb' => '26382E'], ], 'alignment' => ['vertical' => Alignment::VERTICAL_CENTER], ]); $sheet->getRowDimension(1)->setRowHeight(24); $sheet->freezePane('A2'); $sheet->setAutoFilter("A1:H{$lastRow}"); foreach (['A' => 20, 'B' => 22, 'C' => 12, 'D' => 12, 'E' => 16, 'F' => 20, 'G' => 16, 'H' => 18] as $column => $width) { $sheet->getColumnDimension($column)->setWidth($width); } $filename = 'reservas_entradas_'.$tenant->codigo.'_' .$generatedAt->copy()->timezone($timeZone)->format('Ymd_His').'.xlsx'; return response()->streamDownload(function () use ($spreadsheet): void { (new Xlsx($spreadsheet))->save('php://output'); $spreadsheet->disconnectWorksheets(); }, $filename, [ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', ]); } }