first(); $gutachter = Gutachter::where('id', $projekt->gutachter_id)->first(); $filepath = Storage::disk('public')->path("/download/$projekte_id/"); $filename = 'Aufstellung '.preg_replace("'[^0-9a-zA-Z]'", '', $projekt->interner_name).'.xlsx'; if (! File::isDirectory($filepath)) { File::makeDirectory($filepath, 0777, true, true); } $file = $filepath.$filename; // SPREADSHEET start $spreadsheet = new Spreadsheet; $spreadsheet->getProperties()->setCreator($gutachter->company) ->setLastModifiedBy($gutachter->name) ->setTitle($projekt->offizieller_name) ->setDescription($projekt->interner_name.' - '.date('d-m-Y H:i:s')); $activeWorksheet = $spreadsheet->getActiveSheet(); $activeWorksheet->getStyle('A1:Z1')->getAlignment()->setTextRotation(90); $activeWorksheet->getRowDimension('1')->setRowHeight(180); $activeWorksheet->getStyle('A1:Z3')->getFont()->getColor()->setARGB(Color::COLOR_WHITE); $activeWorksheet->getStyle('A1:Z3')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $activeWorksheet->getStyle('A1:D3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($black); $key = 'A'; $titels = ['Top Nummer', 'Geschoß', 'Orientierung', 'Type']; foreach ($titels as $titel) { $activeWorksheet->setCellValue($key.'1', ' '.$titel); $activeWorksheet->setCellValue($key.'2', ' '); $activeWorksheet->setCellValue($key.'3', ' '); $activeWorksheet->getStyle($key.'1:'.$key.'3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->getStyle($key.'3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->getColumnDimension($key)->setAutoSize(true); $key++; } $raumarten = ProjektMethode::where('projekte_id', $projekte_id)->where('methode_id', 1)->orderBy('raumart')->pluck('raumart'); $raumarten_map = []; foreach ($raumarten as $raumart) { $activeWorksheet->getStyle($key.'1:'.$key.'3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($blue); $activeWorksheet->setCellValue($key.'1', ' '.$raumart); $raumarten_map[$raumart] = $key; $activeWorksheet->getStyle($key.'3')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $activeWorksheet->getStyle($key.'1:'.$key.'3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->getStyle($key.'3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->setCellValue($key.'3', 'm²'); $activeWorksheet->getColumnDimension($key)->setAutoSize(true); $key++; } $raumarten_map['next'] = $key; $activeWorksheet->getStyle($key.'1:'.$key.'3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($black); $activeWorksheet->getStyle($key.'1:'.$key.'3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->setCellValue($key.'1', ' Summe Nutzflächen'); $activeWorksheet->setCellValue($key.'3', 'm²'); $activeWorksheet->getStyle($key.'3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->getColumnDimension($key)->setAutoSize(true); $key++; $titels = Aufstellung::pluck('name', 'id'); foreach ($titels as $k => $titel) { $activeWorksheet->getStyle($key.'1:'.$key.'3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($green); $activeWorksheet->setCellValue($key.'1', ' '.$titel); $activeWorksheet->getStyle($key.'3')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $activeWorksheet->getStyle($key.'1:'.$key.'3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->getStyle($key.'3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $activeWorksheet->setCellValue($key.'3', 'm²'); $activeWorksheet->getColumnDimension($key)->setAutoSize(true); $raumarten_map[$k] = $key; $key++; } $_projekt = LadeProjekt::project($projekte_id, false); $row = 4; foreach ($_projekt as $top_number => $value) { $key = 'A'; $activeWorksheet->setCellValue($key.$row, $top_number); $activeWorksheet->getStyle($key.$row)->getFont()->getColor()->setARGB(Color::COLOR_WHITE); $activeWorksheet->getStyle($key.$row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($black); $activeWorksheet->getStyle($key.$row)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $activeWorksheet->getStyle($key.$row)->getBorders()->getBottom()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $key++; $activeWorksheet->setCellValue($key.$row, $value[1][0]['geschoss']); $key++; $activeWorksheet->setCellValue($key.$row, $value[1][0]['orientierung']); $key++; $activeWorksheet->setCellValue($key.$row, $value[1][0]['type']); $key++; $summe_flaechen = 0; foreach ($value[1] as $raeume) { $raumart_key = $raumarten_map[$raeume['raumart']]; $activeWorksheet->setCellValue($raumart_key.$row, $raeume['flaeche']); $activeWorksheet->getStyle($raumart_key.$row)->getNumberFormat()->setFormatCode('0.00'); $summe_flaechen += $raeume['flaeche']; } $key = $raumarten_map['next']; $activeWorksheet->setCellValue($key.$row, $summe_flaechen); $activeWorksheet->getStyle($key.$row)->getNumberFormat()->setFormatCode('0.00'); $activeWorksheet->getStyle($key.$row)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB($black); $activeWorksheet->getStyle($key.$row)->getFont()->getColor()->setARGB(Color::COLOR_WHITE); $activeWorksheet->getStyle($key.$row)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $activeWorksheet->getStyle($key.$row)->getBorders()->getBottom()->setBorderStyle(Border::BORDER_HAIR)->setColor(new Color($border)); $key++; $summen = self::filter_flaechen($value); foreach ($summen as $k => $value) { $key = $raumarten_map[$k]; $activeWorksheet->setCellValue($key.$row, $value); $activeWorksheet->getStyle($key.$row)->getNumberFormat()->setFormatCode('0.00'); } $row++; } // Set active sheet index to the first sheet, so Excel opens this as the first sheet $spreadsheet->setActiveSheetIndex(0); $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); // $writer->save('php://output'); $writer->save($file); $headers = [ 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'Cache-Control: max-age=0', 'Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT', 'Cache-Control: cache, must-revalidate', ]; return Response::download($file, $filename, $headers); } public static function filter_flaechen($arr) { $sum = []; foreach ($arr as $key => $methode) { if ($key > 1) { foreach ($methode as $k => $v) { if (! isset($sum[$v['aufstellung_id']])) { $sum[$v['aufstellung_id']] = $v['flaeche']; } else { $sum[$v['aufstellung_id']] += $v['flaeche']; } } } } return $sum; } }