$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 tickets') ->setSubject($tenant->nombre); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Reservas'); $sheet->fromArray([ 'Ítem', 'Variante', 'ID', 'Fecha', 'Importe', 'Pago', ], null, 'A1'); foreach ($rows as $index => $reservation) { $row = $index + 2; foreach (['A' => 'item', 'B' => 'variant'] as $column => $key) { $sheet->setCellValueExplicit("{$column}{$row}", $reservation[$key], DataType::TYPE_STRING); } $sheet->setCellValueExplicit( "C{$row}", $reservation['ticket_id'] === null ? '-' : (string) $reservation['ticket_id'], DataType::TYPE_STRING, ); $sheet->setCellValue( "D{$row}", Date::dateTimeToExcel($reservation['fecha_reserva']->copy()->timezone($timeZone)), ); if ($reservation['importe'] !== null) { $sheet->setCellValue("E{$row}", (float) $reservation['importe']); } $sheet->setCellValueExplicit("F{$row}", $reservation['pago'], DataType::TYPE_STRING); } $lastRow = max(2, $rows->count() + 1); $sheet->getStyle("D2:D{$lastRow}")->getNumberFormat()->setFormatCode('dd/mm/yyyy hh:mm'); $sheet->getStyle("E2:E{$lastRow}")->getNumberFormat()->setFormatCode('$ #,##0.00'); $sheet->getStyle('A1:F1')->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:F{$lastRow}"); foreach (['A' => 30, 'B' => 60, 'C' => 16, 'D' => 20, 'E' => 16, 'F' => 18] as $column => $width) { $sheet->getColumnDimension($column)->setWidth($width); } $filename = 'reservas_tickets_'.$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', ]); } }