$tickets */ public function download(Tenant $tenant, Collection $tickets, string $timeZone): StreamedResponse { $generatedAt = now(); $rows = $this->reportService->rows($tickets); $spreadsheet = new Spreadsheet; $spreadsheet->getProperties() ->setCreator('Shopit') ->setTitle('Listado de tickets') ->setSubject($tenant->nombre); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Tickets'); $sheet->fromArray([ 'N° de orden', 'Categoría', 'Producto', 'Tipo', 'Importe', 'Cliente', 'ID', 'Fecha', 'Estado', 'Escaneado por', ], null, 'A1'); foreach ($rows as $index => $ticket) { $row = $index + 2; $sheet->setCellValueExplicit( "A{$row}", $ticket['order_number'] === null ? '-' : '#'.$ticket['order_number'], DataType::TYPE_STRING, ); $sheet->setCellValueExplicit("B{$row}", $ticket['category'], DataType::TYPE_STRING); $sheet->setCellValueExplicit("C{$row}", $ticket['product'], DataType::TYPE_STRING); $sheet->setCellValueExplicit("D{$row}", $ticket['type'], DataType::TYPE_STRING); if ($ticket['amount'] !== null) { $sheet->setCellValue("E{$row}", $ticket['amount']); } $sheet->setCellValueExplicit("F{$row}", $ticket['client'], DataType::TYPE_STRING); $sheet->setCellValueExplicit("G{$row}", $ticket['ticket'], DataType::TYPE_STRING); if ($ticket['date'] instanceof CarbonInterface) { $sheet->setCellValue( "H{$row}", Date::dateTimeToExcel($ticket['date']->copy()->timezone($timeZone)), ); } $sheet->setCellValueExplicit("I{$row}", $ticket['status'], DataType::TYPE_STRING); $sheet->setCellValueExplicit("J{$row}", $ticket['scanned_by'], DataType::TYPE_STRING); } $lastRow = max(2, $rows->count() + 1); $sheet->getStyle("E2:E{$lastRow}")->getNumberFormat()->setFormatCode('$ #,##0.00'); $sheet->getStyle("H2:H{$lastRow}")->getNumberFormat()->setFormatCode('dd/mm/yyyy hh:mm'); $sheet->getStyle('A1:J1')->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:J{$lastRow}"); foreach ([ 'A' => 14, 'B' => 18, 'C' => 22, 'D' => 18, 'E' => 15, 'F' => 30, 'G' => 39, 'H' => 20, 'I' => 13, 'J' => 28, ] as $column => $width) { $sheet->getColumnDimension($column)->setWidth($width); } $filename = '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', ]); } }