excel nutzfläche ok

This commit is contained in:
salam committed 2025-11-17 12:16:09 +01:00
1 parent b3e720983a
commit ebb51923a6
9 files changed
+572 -4588

No files matched your search

+121 -181
View File
@@ -2,9 +2,13 @@
namespace App\Actions\Generate;
use App\Actions\Generate\Tabellen\LadeProjekt;
use App\Models\Auftraggeber;
use App\Models\Gutachter;
use App\Models\Projekt;
use Illuminate\Support\Facades\DB;
use App\Models\Projekte;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Border;
@@ -12,42 +16,53 @@ use PhpOffice\PhpSpreadsheet\Style\Fill;
class Excel
{
public static function make($projekte_id, $type)
public static $projekt;
public static $gutachter;
public static $auftraggeber;
public static function make($projekte_id, $part)
{
$projekt = Projekt::where('id', $projekts_id)->get()->first();
$gutachter = Gutachter::where('id', $projekt->gutachters_id)->get()->first();
$auftraggeber = Auftraggeber::where('id', $projekt->auftraggebers_id)->get()->first();
self::$projekt = Projekte::where('id', $projekte_id)->first();
$projektname = str_replace(',', '', $projekt->name);
$projektname = preg_replace("'\W, '", '', $projektname);
$_headers = self::header();
self::$gutachter = Gutachter::where('id', self::$projekt->gutachter_id)->first();
self::$auftraggeber = Auftraggeber::where('id', self::$projekt->auftraggeber_id)->first();
$filepath = Storage::disk('public')->path("/download/$projekte_id/");
$filename = \ucfirst($part).' '.preg_replace("'[^0-9a-zA-Z]'", '', self::$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('Hermann Telser Nutzwertberechnung')
->setLastModifiedBy('Hermann Telser Nutzwertberechnung')
->setTitle('Nutzwertberechnung')
->setDescription('Nutzwertberechnung v5.0.1, © Hermann Telser 2007 - '.date('Y'));
$spreadsheet->getProperties()->setCreator(self::$gutachter->company)
->setLastModifiedBy(self::$gutachter->name)
->setTitle(self::$projekt->offizieller_name)
->setDescription(self::$projekt->interner_name.' - '.date('d-m-Y H:i:s'));
$_rot = [2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 91, 92, 93, 94];
$_gelb = [8, 19, 29];
$_farbe_1 = [2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 91, 92, 93, 94];
$_farbe_2 = [8, 19, 29];
$row = '1';
$coll = 'A';
$_headers = self::title_reihe();
$spreadsheet->setActiveSheetIndex(0);
foreach ($_headers as $key => $value) {
$cell = $coll.$row;
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue($cell, $value);
if (\in_array($key, $_rot)) {
$spreadsheet->getActiveSheet()->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FDE8E8');
} elseif (\in_array($key, $_gelb)) {
$spreadsheet->getActiveSheet()->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FDF6B2');
if (\in_array($key, $_farbe_1)) {
$spreadsheet->getActiveSheet()->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('dbeafe');
} elseif (\in_array($key, $_farbe_2)) {
$spreadsheet->getActiveSheet()->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('fef9c2');
}
$sheet->getStyle($cell)
->getBorders()
@@ -62,90 +77,95 @@ class Excel
$sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
}
$_raumorientierung = DB::table('raumorientierung')
->join('orientierungs', 'raumorientierung.orientierungs_id', '=', 'orientierungs.id')
->select(
'raumorientierung.id',
'raumorientierung.top_nr',
'raumorientierung.qm_m1',
'raumorientierung.qm_m1',
'raumorientierung.factor',
'raumorientierung.nicht_in_orientierung',
'raumorientierung.nutzwert_summe',
'orientierungs.name as orientierung',
)
->where('raumorientierung.projekts_id', $projekts_id)
->groupBy('raumorientierung.id')
->orderBy('raumorientierung.top_nr', 'ASC')
->get();
$spalten = [];
$letter = 'A';
while ($letter !== 'HU') {
$key = $letter++;
$spalten[$key] = '';
}
$_projekt = LadeProjekt::project($projekte_id, false);
$row = 2;
$_data = [];
foreach ($_raumorientierung as $key => $raumorientierung) {
$activeWorksheet = $spreadsheet->getActiveSheet();
foreach ($_projekt as $objekt) {
$_data[$key] = $spalten;
$_data[$key]['B'] = $raumorientierung->top_nr;
$activeWorksheet->setCellValue("B$row", $objekt[1][0]['top_nummer']);
/**
* Normale Wohnnutzflächen
*/
$flaeche = array_sum(array_column($objekt[1], 'flaeche'));
$beschreibung = array_column($objekt[1], 'raumart');
$faktor = (100 + $objekt[1][0]['objekt_nutzwert']) / 100;
$summe_nutzwert = $flaeche * $faktor;
if ($raumorientierung->nicht_in_orientierung == 0) {
$_data[$key]['C'] = $raumorientierung->nutzwert_summe;
$_data[$key]['D'] = $raumorientierung->qm_m1;
$zunutzwert = self::zunutzwert($raumorientierung->id);
if ($zunutzwert > 0) {
$_data[$key]['E'] = $zunutzwert;
/**
* Wintergarten, Loggien, unter Stiegen
*/
$loggien_flaeche = 0;
$loggien_sum = [];
if (isset($objekt[2])) {
foreach ($objekt[2] as $value) {
$loggien_sum[] = $value['raumart'].' '.$value['flaeche'].'m²';
$loggien_flaeche += $value['flaeche'];
$nutzwert = $value['flaeche'] * $value['faktor'];
$summe_nutzwert += $nutzwert;
}
}
$summe_nutzwert = round($summe_nutzwert);
$_data[$key]['F'] = $raumorientierung->qm_m1 + $zunutzwert;
} else {
$_data[$key]['I'] = $raumorientierung->nutzwert_summe;
$res = self::raumalles($raumorientierung->id, [5]);
$qm = 0;
$raum = '';
foreach ($res as $value) {
$qm += (float) $value->qm;
$raum = $value->raum;
/**
* Terasse, Balkon
*/
$balkon_sum = [];
if (isset($objekt[3])) {
foreach ($objekt[3] as $value) {
$balkon_sum[] = $value['raumart'].' '.$value['flaeche'].'m²';
$nutzwert = $value['flaeche'] * $value['faktor'];
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$summe_nutzwert += $nutzwert;
}
$_data[$key]['L'] = number_format($qm, 2, ',', '');
$_data[$key]['AT'] = $raum;
}
// Parifizierer
$_data[$key]['R'] = $gutachter->kennung;
// Lage
$_data[$key]['AQ'] = self::geschoss($raumorientierung->id);
// Orientierung
$raumorientierung->orientierung = $raumorientierung->orientierung == 'Ohne Zuordnung' ? '' : $raumorientierung->orientierung;
$_data[$key]['AR'] = $raumorientierung->orientierung;
/**
* Keller, Garten
*/
$keller_sum = [];
if (isset($objekt[4])) {
foreach ($objekt[4] as $value) {
$keller_sum[] = $value['raumart'].' '.$value['flaeche'].'m²';
$nutzwert = $value['flaeche'] * $value['faktor'];
$nutzwert = round($nutzwert) < 1 ? 1 : round($nutzwert);
$summe_nutzwert += $nutzwert;
}
}
// WOHNUNG
if ($raumorientierung->nicht_in_orientierung == 0) {
$_data[$key]['AT'] = self::beschreibung($raumorientierung->id, [1, 2, 8]);
// M2
$_data[$key]['AU'] = self::loggien_qm($raumorientierung->id, [2, 8]);
// M3
$_data[$key]['AV'] = self::beschreibung_qm($raumorientierung->id, [3, 7]);
// M4
$_data[$key]['AW'] = self::beschreibung_qm($raumorientierung->id, [3, 4]);
} else {
$_data[$key]['AT'] = self::beschreibung($raumorientierung->id, [6, 9]);
$_data[$key]['AV'] = self::beschreibung_qm($raumorientierung->id, [6, 9]);
$activeWorksheet->setCellValue("C$row", $summe_nutzwert);
$activeWorksheet->setCellValue("D$row", $flaeche);
$activeWorksheet->setCellValue("E$row", $loggien_flaeche);
$activeWorksheet->setCellValue("F$row", $loggien_flaeche + $flaeche);
$activeWorksheet->setCellValue("AQ$row", $objekt[1][0]['geschoss']);
$activeWorksheet->setCellValue("AR$row", $objekt[1][0]['orientierung']);
$activeWorksheet->setCellValue("AT$row", \implode(', ', $beschreibung));
if (count($loggien_sum)) {
$activeWorksheet->setCellValue("AU$row", \implode(', ', $loggien_sum));
}
if (count($balkon_sum)) {
$activeWorksheet->setCellValue("AV$row", \implode(', ', $balkon_sum));
}
if (count($keller_sum)) {
$activeWorksheet->setCellValue("AW$row", \implode(', ', $keller_sum));
}
$row++;
}
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($_data, null, 'A2');
/**
* Stelleplätze
*/
$_projekt = LadeProjekt::project($projekte_id, true);
foreach ($_projekt as $objekt) {
$objekt = $objekt[5][0];
$activeWorksheet->setCellValue("B$row", $objekt['top_nummer']);
$activeWorksheet->setCellValue("I$row", $objekt['nutzwert']);
$activeWorksheet->setCellValue("I$row", $objekt['nutzwert']);
$activeWorksheet->setCellValue("L$row", $objekt['flaeche']);
$activeWorksheet->setCellValue("AT$row", $objekt['raumart']);
$row++;
}
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$spreadsheet->setActiveSheetIndex(0);
@@ -154,99 +174,19 @@ class Excel
// output
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
// $writer->save('php://output');
$writer->save($filepath);
$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);
}
private static function raumalles($raumorientierung_id, $methoden)
{
return DB::table('raumalles')
->select('*')
->where('raumorientierung_id', $raumorientierung_id)
->whereIn('methodes_id', $methoden)
->get();
}
private static function zunutzwert($raumorientierung_id)
{
$zunutzwert = 0;
$res = DB::table('raumalles')
->select('methodes_id', 'raum', 'factor', 'qm')
->where('raumorientierung_id', $raumorientierung_id)
->whereIn('methodes_id', [2, 8])
->get();
foreach ($res as $value) {
$zunutzwert += $value->qm;
}
return $zunutzwert;
}
private static function beschreibung_qm($raumorientierung_id, $methoden)
{
$res = DB::table('raumalles')
->select('*')
->where('raumorientierung_id', $raumorientierung_id)
->whereIn('methodes_id', $methoden)
->get();
$_tmp = [];
foreach ($res as $value) {
if (! in_array($value->raum, ['Loggia', 'Loggia 1', 'Loggia 2'])) {
$_tmp[] = $value->raum.': '.number_format($value->qm, 2, ',', '').' m²';
}
}
return implode(', ', $_tmp);
}
private static function loggien_qm($raumorientierung_id, $methoden)
{
$res = DB::table('raumalles')
->select('*')
->where('raumorientierung_id', $raumorientierung_id)
->whereIn('methodes_id', $methoden)
->get();
$_tmp = [];
foreach ($res as $value) {
if (in_array($value->raum, ['Loggia', 'Loggia 1', 'Loggia 2'])) {
$_tmp[] = $value->raum.': '.number_format($value->qm, 2, ',', '').' m²';
}
}
return implode(', ', $_tmp);
}
private static function beschreibung($raumorientierung_id, $methoden)
{
$res = DB::table('raumalles')
->select('*')
->where('raumorientierung_id', $raumorientierung_id)
->whereIn('methodes_id', $methoden)
->get();
$_tmp = [];
foreach ($res as $value) {
if (! in_array($value->raum, ['Loggia', 'Loggia 1', 'Loggia 2'])) {
$_tmp[] = $value->raum;
}
}
return implode(', ', $_tmp);
}
private static function geschoss($raumorientierung_id)
{
$res = DB::table('raumalles')
->select('geschoss')
->where('raumorientierung_id', $raumorientierung_id)
->where('methodes_id', '=', 1)
->get();
foreach ($res as $key => $value) {
return $value->geschoss;
}
return '';
}
private static function header()
private static function title_reihe()
{
return [
'Bautengruppe',